diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 36e90e3..0000000 --- a/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -__pycache__/ -*.pyc - -.*.sw? diff --git a/example.py b/example.py index b8cd2f5..b36b2fd 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') + socket = SEMSocket('f0:c7:7f:0d:e7:17', auto_reconnect_timeout=None) 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 (PF: {})".format(socket.voltage, socket.current, socket.power, socket.frequency, socket.power_factor)) - except (SEMSocket.NotConnectedException, bluepy.btle.BTLEDisconnectError, BrokenPipeError): + print("\t{}V {}A → {}W@{}Hz".format(socket.voltage, socket.current, socket.power, socket.frequency)) + except (SEMSocket.NotConnectedException, bluepy.btle.BTLEDisconnectError): print("Restarting...") if socket != None: socket.disconnect() diff --git a/sem6000.py b/sem6000.py index 2472775..ae35642 100644 --- a/sem6000.py +++ b/sem6000.py @@ -1,5 +1,6 @@ from bluepy import btle import time +import datetime import uuid class SEMSocket(): @@ -8,8 +9,6 @@ class SEMSocket(): voltage = 0 current = 0 power = 0 - power_factor = 0 - total_power = 0 frequency = 0 mac_address = "" custom_service = None @@ -42,6 +41,17 @@ class SEMSocket(): msg = self.BTLEMessage(self, cmd, payload) msg.send() + def syncTime(self): + #15, 12, 1, 0, SECOND, MINUTE, HOUR_OF_DAY, DAY_OF_MONTH, MONTH (+1), int(YEAR/256), YEAR%256, 0, 0, CHKSUM, 255, 255 + now = datetime.datetime.now() + cmd = bytearray([0x01]) + payload = bytearray([0x00]) + payload += bytearray([now.second, now.minute, now.hour]) + payload += bytearray([now.day, now.month, int(now.year/256), now.year%256]) + payload += bytearray([0x00, 0x00]) + msg = self.BTLEMessage(self, cmd, payload) + msg.send() + def login(self, password): self.password = password cmd = bytearray([0x17]) @@ -63,7 +73,7 @@ class SEMSocket(): payload.append(0x00) payload.append(0x01) for i in range(4): - payload.append(int(newPassword[i])) + payload.append(int(self.newPassword[i])) for i in range(4): payload.append(int(self.password[i])) self.password = newPassword @@ -191,27 +201,17 @@ class SEMSocket(): print("Checksum error!") else: print("Unknown error:", data) + elif message_type == 0x01: + print("Time synced") elif message_type == 0x03: #switch toggle print("Switch toggled") self.__btle_device.getStatus() elif message_type == 0x04: #status related data - voltage = data[8] - current = (data[9] << 8 | data[10]) / 1000 - power = (data[5] << 16 | data[6] << 8 | data[7]) / 1000 - total_power = (data[14] << 24 | data[15] << 16 | data[16] << 8 | data[17]) / 1000 - - self.__btle_device.voltage = voltage - self.__btle_device.current = current - self.__btle_device.power = power + 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 self.__btle_device.frequency = data[11] self.__btle_device.powered = bool(data[4]) - self.__btle_device.total_power = total_power - - # calculated values - try: - self.__btle_device.power_factor = power / (voltage * current) - except ZeroDivisionError: - self.__btle_device.power_factor = None elif message_type == 0x17: if data[5] == 0x00 or data[5] == 0x01: if data[4]: