示例#1
0
    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}')
示例#2
0
    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()
示例#4
0
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)
示例#5
0
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))
示例#6
0
##########

#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) + ' }'