diff --git a/src/energenie/Devices.py b/src/energenie/Devices.py index a1570d1..6416e07 100644 --- a/src/energenie/Devices.py +++ b/src/energenie/Devices.py @@ -27,7 +27,7 @@ mfr = "UNKNOWN" product = "UNKNOWN" - return "Manufactuer:%s Product:%s" % (mfr, product) + return "Manufacturer:%s Product:%s" % (mfr, product) # END diff --git a/src/energenie/OpenHEMS.py b/src/energenie/OpenHEMS.py index 8826701..142d5d0 100644 --- a/src/energenie/OpenHEMS.py +++ b/src/energenie/OpenHEMS.py @@ -121,6 +121,9 @@ print("warning:" + str(msg)) +def trace(msg): + print("OpenHEMS:%s" % str(msg)) + #----- MESSAGE DECODER -------------------------------------------------------- #TODO if silly lengths or silly types seen in decode, this might imply @@ -158,7 +161,7 @@ # [0]len,mfrid,productid,pipH,pipL,[5] crypto.init(crypt_pid, encryptPIP) crypto.cryptPayload(payload, 5, len(payload)-5) # including CRC - printhex(payload) + #printhex(payload) # sensorId is in encrypted region sensorId = (payload[5]<<16) + (payload[6]<<8) + payload[7] header["sensorid"] = sensorId @@ -167,7 +170,7 @@ # CHECK CRC crc_actual = (payload[-2]<<8) + payload[-1] crc_expected = calcCRC(payload, 5, len(payload)-(5+2)) - #print("crc actual:%s, expected:%s" %(hex(crc_actual), hex(crc_expected))) + #trace("crc actual:%s, expected:%s" %(hex(crc_actual), hex(crc_expected))) if crc_actual != crc_expected: raise OpenHEMSException("bad CRC") @@ -351,13 +354,13 @@ mask = 1<<(maxbits-1) bitno = maxbits-1 while mask != 0: - #print("compare %s with %s" %(hex(value), hex(mask))) + #trace("compare %s with %s" %(hex(value), hex(mask))) if (value & mask) == 0: - #print("zero at bit %d" % bitno) + #trace("zero at bit %d" % bitno) return bitno mask >>= 1 bitno-=1 - #print("not found") + #trace("not found") return None # NOT FOUND @@ -369,25 +372,25 @@ if value == -1: # always 0xFF, so always needs exactly 2 bits to represent (sign and value) return 2 # bits required - #print("valuebits of:%d" % value) + #trace("valuebits of:%d" % value) # Turn into a 2's complement representation MAXBYTES=15 MAXBITS = 1<<(MAXBYTES*8) #TODO check for truncation? value = value & MAXBITS-1 - #print("hex:%s" % hex(value)) + #trace("hex:%s" % hex(value)) highz = Value.highestClearBit(value, MAXBYTES*8) - #print("highz at bit:%d" % highz) + #trace("highz at bit:%d" % highz) # allow for a sign bit, and bit numbering from zero neededbits = highz+2 - #print("needed bits:%d" % neededbits) + #trace("needed bits:%d" % neededbits) return neededbits @staticmethod def encode(value, typeid, length=None): - #print("encoding:" + str(value)) + #trace("encoding:" + str(value)) if typeid == Value.CHAR: if type(value) != str: value = str(value) @@ -453,13 +456,13 @@ bits = Value.valuebits(value) else: bits = Value.typebits(typeid) - #print("need bits:" + str(bits)) + #trace("need bits:" + str(bits)) # NORMALISE BITS TO BYTES ####HERE#### round up to nearest number of 8 bits # if already 8, leave 1,2,3,4,5,6,7,8 = 8 0,1,2,3,4,5,6,7 (((b-1)/8)+1)*8 # 9,10,11,12,13,14,15,16=16 bits = (((bits-1)/8)+1)*8 # snap to nearest byte boundary - #print("snap bits to 8:" + str(bits)) + #trace("snap bits to 8:" + str(bits)) value &= ((2**bits)-1) neg = True @@ -568,7 +571,7 @@ def showMessage(msg): """Show the message in a friendly format""" - pprint.pprint(msg) + #pprint.pprint(msg) # HEADER header = msg["header"] @@ -606,14 +609,15 @@ m = message for p in path[:-1]: try: + p = int(p) except: pass m = m[p] - #print("old value:%s" % m[path[-1]]) + #trace("old value:%s" % m[path[-1]]) m[path[-1]] = value - #print("modified:" + str(message)) + #trace("modified:" + str(message)) return message @@ -624,7 +628,7 @@ for b in payload: line += hex(b) + " " - print line + print(line) TEST_PAYLOAD = [ diff --git a/src/energenie/radio.py b/src/energenie/radio.py index 4f4df02..62444bb 100644 --- a/src/energenie/radio.py +++ b/src/energenie/radio.py @@ -14,7 +14,7 @@ print("warning:" + str(msg)) def trace(msg): - print(str(msg)) + pass #print(str(msg)) #----- REGISTER ACCESS -------------------------------------------------------- @@ -279,9 +279,9 @@ def init(): spi.init_defaults() - print("######## RESET") + trace("######## RESET") spi.reset() # send a hardware reset to ensure radio in clean state - print("######## END RESET") + trace("######## END RESET") trace("config FSK") HRF_config_FSK() diff --git a/src/monitor.py b/src/monitor.py index 952311b..dbf698f 100644 --- a/src/monitor.py +++ b/src/monitor.py @@ -11,8 +11,10 @@ LOG_FILENAME = "energenie.csv" +def warning(msg): + print("warning:%s" % str(msg)) def trace(msg): - print(str(msg)) + print("monitor:%s" % str(msg)) log_file = None @@ -72,7 +74,7 @@ csv = "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s" % (timestamp, mfrid, productid, sensorid, flags, switch, voltage, freq, reactive, real) log_file.write(csv + '\n') log_file.flush() - print(csv) # testing + trace(csv) # testing #----- TEST APPLICATION ------------------------------------------------------- @@ -99,7 +101,7 @@ desc = Devices.getDescription(header["mfrid"], header["productid"]) print("ADD device:%s %s" % (hex(sensorId), desc)) directory[sensorId] = {"header": message["header"]} - print(allkeys(directory)) + #trace(allkeys(directory)) directory[sensorId]["time"] = now #TODO would be good to keep recs, but need to iterate through all and key by paramid, @@ -148,7 +150,7 @@ """Send discovery and monitor messages, and capture any responses""" # Define the schedule of message polling - sendSwitchTimer = Timer(60, 1) # every n seconds offset by initial 1 + sendSwitchTimer = Timer(5, 1) # every n seconds offset by initial 1 switch_state = 0 # OFF radio.receiver() decoded = None @@ -156,12 +158,12 @@ while True: # See if there is a payload, and if there is, process it if radio.isReceiveWaiting(): - trace("receiving payload") + #trace("receiving payload") payload = radio.receive() try: decoded = OpenHEMS.decode(payload) except OpenHEMS.OpenHEMSException as e: - print("Can't decode payload:" + str(e)) + warning("Can't decode payload:" + str(e)) continue OpenHEMS.showMessage(decoded) @@ -197,7 +199,8 @@ if __name__ == "__main__": - + + trace("starting monitor") radio.init() OpenHEMS.init(Devices.CRYPT_PID)