I think the problem is that you can't count ;)
Spot the difference:
0: [0x01] Frame start
1: [0xMeterValueByte0]
2: [0xMeterValueByte1]
3: [0xMeterValueByte2]
4: [0xMeterValueByte3]
5: [0x04] Frame end
and:
0: Serial.write(0x01); //start frame
1: Serial.write(0x00);
2: Serial.write(0x00);
3: Serial.write(0x02);
4: Serial.write(0x04); //end frame
Your receiver is looking for a pattern of 6 bytes, but your Arduino sketch is only sending a pattern of 5 bytes.
Your check for the start character is simple enough - you solved it fine a few lines above:
print "j= " + hex(ord(j))
But you forgot to do something similar for the check:
if (j == 0x1):
That should really be:
if (ord(j) == 0x1):