def _updatePowerInfo(self): if self._selectedSmartSocket is None: return self._NameLabel.setText(f'Name: {self._selectedSmartSocket.name}') self._StateLabel.setText( f'State: {"on" if self._selectedSmartSocket.state else "off"}') if self._selectedSmartSocket.key is None: self._IpLabel.setText('IP: searching...') self._WattLabel.setText('Watts: updating...') self._AmpereLabel.setText('mA: updating...') self._VoltLabel.setText('Volts: updating...') return (state, W, mA, V, err) = tuyapower.deviceInfo( self._selectedSmartSocket.id, self._selectedSmartSocket.ip, self._selectedSmartSocket.key, self._selectedSmartSocket.version) self._selectedSmartSocket.state = state self._selectedSmartSocket.W = W self._selectedSmartSocket.mA = mA self._selectedSmartSocket.V = V self._IpLabel.setText(f'IP: {self._selectedSmartSocket.ip}') self._WattLabel.setText(f'Watts: {self._selectedSmartSocket.W}') self._AmpereLabel.setText(f'mA: {self._selectedSmartSocket.mA}') self._VoltLabel.setText(f'Volts: {self._selectedSmartSocket.V}')
def get_data(self): data = dict() (on, w, mA, V, err) = tuyapower.deviceInfo(self.device['id'], self.device['ip'], self.device['localKey'], self.device['version']) data['watts'] = w * 100 data['mA'] = mA * 100 data['V'] = V * 100 return data
# skip devices that are not configured if not data['gwId'] in devices: print("ignoring unconfigured device %s at %s" % (data['gwId'], data['ip'])) continue if not devices[gwid]['lastseen']: print("discovered device %s (%s) at %s" % (gwid, devices[gwid]['name'], data['ip'])) devices[gwid]['ip'] = data['ip'] devices[gwid]['version'] = data['version'] # poll device and set metrics if successful (on, w, mA, V, err) = tuyapower.deviceInfo(gwid, data['ip'], devices[gwid]['key'], data['version']) if (err == "OK"): if (DEBUG): print("%s (%s) - %s - Power: %sW, %smA, %sV" % (gwid, devices[gwid]['name'], on, w, mA, V)) label_values = [ devices[gwid]['name'], gwid, data['ip'], data['version'] ] gs.labels(*label_values).set(on) gp.labels(*label_values).set(w) ga.labels(*label_values).set(mA / 1000) gv.labels(*label_values).set(V) devices[gwid]['lastseen'] = time.time()
DEVICEID=sys.argv[1] if len(sys.argv) >= 2 else '01234567891234567890' DEVICEIP=sys.argv[2] if len(sys.argv) >= 3 else '10.0.1.99' DEVICEKEY=sys.argv[3] if len(sys.argv) >= 4 else '0123456789abcdef' DEVICEVERS=sys.argv[4] if len(sys.argv) >= 5 else '3.1' # Check for environmental variables and always use those if available (required for Docker) PLUGID=os.getenv('PLUGID', DEVICEID) PLUGIP=os.getenv('PLUGIP', DEVICEIP) PLUGKEY=os.getenv('PLUGKEY', DEVICEKEY) PLUGVERS=os.getenv('PLUGVERS', DEVICEVERS) now = datetime.datetime.utcnow() iso_time = now.strftime("%Y-%m-%dT%H:%M:%SZ") # Poll Smart Swich for Power Data (on, w, mA, V, err) = tuyapower.deviceInfo(PLUGID,PLUGIP,PLUGKEY,PLUGVERS) # Check for error if err != 'OK': print(' ERROR: %s\n' % err) # Compute projected kWh day = (w/1000.0)*24 week = 7.0 * day month = (week * 52.0)/12.0 # Print Output print('TuyaPower (Tuya Power Stats)') print("\nDevice %s at %s key %s protocol %s:" % (PLUGID,PLUGIP,PLUGKEY,PLUGVERS)) print(' Switch On: %r' % on) print(' Power (W): %f' % w)
def getIP(d, gwid): for ip in d: if (gwid == d[ip]['gwId']): return (ip, d[ip]['version']) return (0, 0) print("Polling devices...") for i in data: name = i['name'] (ip, ver) = getIP(devices, i['id']) if (ip == 0): print('%s[%s]%s - %sError - No IP found%s' % (bold, name, dim, alert, normal)) else: (on, w, mA, V, err) = tuyapower.deviceInfo(i['id'], ip, i['key'], ver) state = alertdim + "Off" + dim if isinstance(on, dict): state = dim + "%d Switches: " % len(on) for e in on: if (on[e] == True): state = state + dim + e + ":" + subbold + "On " + dim else: state = state + dim + e + ":" + alertdim + "Off " + dim elif (on): state = subbold + "On" + dim if (err == "OK"): print("%s[%s - %s]%s - %s - Power: %sW, %smA, %sV" % (bold, name, ip, dim, state, w, mA, V)) else: print("%s[%s - %s]%s - %s" % (bold, name, ip, dim, state))
########## #devices = tuyapower.deviceScan() tuyaips = sys.argv[6].split(",") tuyadevids = sys.argv[7].split(",") tuyadevkeys = sys.argv[8].split(",") tuyadevvers = sys.argv[9].split(",") iteration = 0 for ip in tuyaips: ip = tuyaips[iteration] id = tuyadevids[iteration] key = tuyadevkeys[iteration] vers = tuyadevvers[iteration] (on, w, mA, V, err) = tuyapower.deviceInfo(id, ip, key, vers) print("Device at %s: ID %s, state=%s, W=%s, mA=%s, V=%s [%s]" % (ip, id, on, w, mA, V, err)) mqttc = mqtt.Client(MQTTUSER) mqttc.username_pw_set(MQTTUSER, MQTTPASSWORD) mqttc.connect(MQTTSERVER, int(MQTTPORT)) if (w == -99): w = 0 if (mA == -99): mA = 0 if (V == -99): V = 0 payload = '{ "power": ' + str(w) + ', "current": ' + str( mA) + ', "voltage": ' + str(V) + ' }'