diff --git a/example.py b/example.py index b36b2fd..b8cd2f5 100644 --- a/example.py +++ b/example.py @@ -18,7 +18,7 @@ while True: # -1: infinite retries # integer: seconds before exception is thrown - socket = SEMSocket('f0:c7:7f:0d:e7:17', auto_reconnect_timeout=None) + socket = SEMSocket('f0:c7:7f:0d:e7:17') print("Connected.") #socket.login("1337") @@ -28,8 +28,8 @@ while True: socket.getStatus() socket.setStatus(True) print("=== {} ({}) ===".format(socket.mac_address, "on" if socket.powered else "off")) - print("\t{}V {}A → {}W@{}Hz".format(socket.voltage, socket.current, socket.power, socket.frequency)) - except (SEMSocket.NotConnectedException, bluepy.btle.BTLEDisconnectError): + print("\t{}V {}A → {}W@{}Hz (PF: {})".format(socket.voltage, socket.current, socket.power, socket.frequency, socket.power_factor)) + except (SEMSocket.NotConnectedException, bluepy.btle.BTLEDisconnectError, BrokenPipeError): print("Restarting...") if socket != None: socket.disconnect() diff --git a/sem6000.py b/sem6000.py index 7622a78..0491ed8 100644 --- a/sem6000.py +++ b/sem6000.py @@ -8,6 +8,7 @@ class SEMSocket(): voltage = 0 current = 0 power = 0 + power_factor = 0 frequency = 0 mac_address = "" custom_service = None @@ -193,11 +194,18 @@ class SEMSocket(): print("Switch toggled") self.__btle_device.getStatus() elif message_type == 0x04: #status related data - self.__btle_device.voltage = data[8] - self.__btle_device.current = (data[9] << 8 | data[10]) / 1000 - self.__btle_device.power = (data[5] << 16 | data[6] << 8 | data[7]) / 1000 + voltage = data[8] + current = (data[9] << 8 | data[10]) / 1000 + power = (data[5] << 16 | data[6] << 8 | data[7]) / 1000 + + self.__btle_device.voltage = voltage + self.__btle_device.current = current + self.__btle_device.power = power self.__btle_device.frequency = data[11] self.__btle_device.powered = bool(data[4]) + + # calculated values + self.__btle_device.power_factor = power / (voltage * current) elif message_type == 0x17: if data[5] == 0x00 or data[5] == 0x01: if data[4]: