# OpenThings_test.py 21/05/2016 D.J.Whale # # Test harness for OpenThings protocol encoder and decoder #TODO: Turn this into unittest.TestCase from OpenThings import * import pprint def printhex(payload): line = "" for b in payload: line += hex(b) + " " print(line) TEST_PAYLOAD = [ 0x1C, #len 16 + 10 + 2 = 0001 1100 0x04, #mfrid 0x02, #prodid 0x01, #pipmsb 0x00, #piplsb 0x00, 0x06, 0x8B, #sensorid 0x70, 0x82, 0x00, 0x07, #SINT(2) power 0x71, 0x82, 0xFF, 0xFD, #SINT(2) reactive_power 0x76, 0x01, 0xF0, #UINT(1) voltage 0x66, 0x22, 0x31, 0xDA, #UINT_BP8(2) freq 0x73, 0x01, 0x01, #UINT(1) switch_state 0x00, #NUL 0x97, 0x64 #CRC ] def test_payload_unencrypted(): init(242) printhex(TEST_PAYLOAD) spec = decode(TEST_PAYLOAD, decrypt=False) pprint.pprint(spec) payload = encode(spec, encrypt=False) printhex(payload) spec2 = decode(payload, decrypt=False) pprint.pprint(spec2) payload2 = encode(spec2, encrypt=False) printhex(TEST_PAYLOAD) printhex(payload2) if TEST_PAYLOAD != payload: print("FAILED") else: print("PASSED") def test_payload_encrypted(): init(242) printhex(TEST_PAYLOAD) spec = decode(TEST_PAYLOAD, decrypt=False) pprint.pprint(spec) payload = encode(spec, encrypt=True) printhex(payload) spec2 = decode(payload, decrypt=True) pprint.pprint(spec2) payload2 = encode(spec2, encrypt=False) printhex(TEST_PAYLOAD) printhex(payload2) if TEST_PAYLOAD != payload: print("FAILED") else: print("PASSED") def test_value_encoder(): pass # test cases (auto, forced, overflow, -min, -min-1, 0, 1, +max, +max+1 # UINT # UINT_BP4 # UINT_BP8 # UINT_BP12 # UINT_BP16 # UINT_BP20 # UINT_BP24 # SINT # SINT(2) vin = [1,255,256,32767,32768,0,-1,-2,-3,-127,-128,-129,-32767,-32768] for v in vin: vout = Value.encode(v, Value.SINT) print("encode " + str(v) + " " + str(vout)) # SINT_BP8 # SINT_BP16 # SINT_BP24 # CHAR # FLOAT def test_value_decoder(): pass # test cases (auto, forced, overflow, -min, -min-1, 0, 1, +max, +max+1 # UINT # UINT_BP4 # UINT_BP8 # UINT_BP12 # UINT_BP16 # UINT_BP20 # UINT_BP24 # SINT vin = [255, 253] print("input value:" + str(vin)) vout = Value.decode(vin, Value.SINT, 2) print("encoded as:" + str(vout)) # SINT_BP8 # SINT_BP16 # SINT_BP24 # CHAR # FLOAT if __name__ == "__main__": #test_value_encoder() #test_value_decoder() test_payload_unencrypted() #test_payload_encrypted() # END