I have never seen the powermonitor script cause action on a device. What device are you using? The KEY that is used is a bogus value which should prevent state changes on the device and only allows the script to read state values.
I updated the pytuya library in jasonacox/powermonitor to the latest version and also added PLUGKEY as a user defined environmental value if you need to change it. You might want to pull the latest and try again.
#!/bin/bash
export PLUGID='xxxxxxx'
export PLUGIP="10.0.x.x"
export PLUGKEY="0123456789abcde1"
./plugpower.py
Polling Device xxxxxxx at 10.0.x.x with key 0123456789abcde1
Dictionary {u'devId': u'xxxxxxx', u'dps': {u'1': True, u'2': 0, u'5': 12, u'4': 70, u'6': 1220}}
Switch On: True
Power (W): 1.200000
Current (mA): 70.000000
Voltage (V): 122.000000
Projected usage (kWh): Day: 0.028800 Week: 0.201600 Month: 0.873600
or using docker:
$ docker run -e PLUGID='xxxxxxx' -e PLUGIP="10.0.x.x" -e PLUGKEY="0123456789abcde1" jasonacox/powermonitor
Polling Device xxxxxxx at 10.0.x,x with key 0123456789abcde1
Dictionary {'devId': 'xxxxxxx', 'dps': {'1': True, '2': 0, '4': 70, '5': 13, '6': 1211}}
Switch On: True
Power (W): 1.300000
Current (mA): 70.000000
Voltage (V): 121.100000
Projected usage (kWh): Day: 0.031200 Week: 0.218400 Month: 0.946400
Hi Jason,
Would there be any chance that you could give some details on how to integrate a Tuya switch (power monitoring) with Home assistant?
I’d really appreciate it.
Thanks.
Edit:
Could this be added to PyPi, and then it can be integrated into Home Assistant?
Also, I’ve very little experience with Docker… Does Power monitor have to be run as a docker container? I’m a little confused as it not explicitly mentioned, especially if you are following ‘Build & Run > Option 2’.
Any clarification / pointers on getting this setup would be really appreciated.
Hi Phill, no, you do not need docker. The powermonitor script will run with just python and the pycrypto package. “Option 2” has you: 1) edit the script to add your DeviceID and IP address, 2) install the pycrypto package with pip install pycrypto. After that just run python plugpower.py. I’ll edit the README to better explain that.
I’ll investigate to see what it would take to integrate Tuya and HA.
I pulled the latest code, used docker this time, and made sure the KEY was a bogus value. I polled the device, got the correct power information, …and right after running the program the switch turned off…
Polling Device 17778125dc4f22856c29 at 192.168.10.67 with key 0123456789abcdef
Dictionary {‘devId’: ‘17778125dc4f22856c29’, ‘dps’: {‘1’: True, ‘2’: 0, ‘4’: 1027, ‘5’: 1726, ‘6’: 1210, ‘7’: 1, ‘8’: 1794, ‘9’: 11303, ‘10’: 48714, ‘11’: 449}}
Switch On: True
Power (W): 172.600000
Current (mA): 1027.000000
Voltage (V): 121.000000
Projected usage (kWh): Day: 4.142400 Week: 28.996800 Month: 125.652800
Hi Mark, thanks for the update. This is an interesting and concerning result. I would advise against using that smart switch at all, and here is why: In your example, you are sending a bogus “key” . Actions and commands against a smart switch require a valid key or you are at risk of being hacked. Based on the vulnerability you have uncovered with the TopGreener switch, a bad actor could potentially destroy whatever appliance is attached to that switch by sending rapid on-off sequences to the switch (think Stuxnet malware). Since the powermonitor code and tuya library is only polling for information instead of requesting action, the only other thing I can think of is that the switch’s processor and wifi logic is underpowered or buggy and asking for the power usage data with a bogus key is causing it to crash, subsequently dropping the control signal to the relay (causing it to turn off). Again, that vulnerability opens you up to attack if an intruder or malware enters your local network. I’ll add a note to my project about this switch. Thanks for doing the test!
I’ve had a good experience flashing my Tuya plugs using tuya convert to get ESPHome on them, and then integrating it into Home Assistant.
May be an option? You can measure daily energy use too
Yes I would be interested to see the details also.
But first thanks to the developers of powermonitor esp. @jasonacox
In node-red I get “Not connected” for a registered tuya device after supplying the product_id, ip_addr and localkey.
Running the plugpower.py script the output looks like:
Polling Device 655256142462ab4489d6 at 192.168.1.36 with key 26cd47ce8XXXXXXX and protocol version 3.3
Dictionary {u'devId': u'655256142462ab4489d6', u'dps': {u'24': 17196, u'25': 1210, u'20': 2438, u'21': 1, u'22': 614, u'23': 29735, u'19': 0, u'18': 0, u'1': True, u'9': 0}}
Switch On: True
Power (W): 0.000000
Current (mA): 0.000000
Voltage (V): 243.800000
Projected usage (kWh): Day: 0.000000 Week: 0.000000 Month: 0.000000
Dictionary {u'devId': u'655256142462ab4489d6', u'dps': {u'24': 17196, u'25': 1210, u'20': 2438, u'21': 1, u'22': 614, u'23': 29735, u'19': 0, u'18': 0, u'1': True, u'9': 0}}
Switch On: True
Power (W): 0.000000
Current (mA): 0.000000
Voltage (V): 243.800000
Projected usage (kWh): Day: 0.000000 Week: 0.000000 Month: 0.000000
ERROR: No response from plug 655256142462ab4489d6 [192.168.1.36].
So it is reporting voltage but not current or power and thus not able to calculate Day, Week etc.
and if I use a “bogus” localkey it fails to respond. Using anything but Version 3.3 also fails.
My device reports firmware version 3.0.1 in the Tuya app and the phone app reports the current and power etc. so the device is sending the data.
The Dictionary line for the script doesn’t fetch any other variables from my device.
Does this all mean that a firmware update would be required for this device to reveal the data to us?
I managed to run your code…I’m able to get switch state but unfortunately I’m getting application error when it comes to power measurement: [Power data unavailable]
Device at 192.168.xxx.31: ID 04348535d56390c71382, state=True, W=-99, mA=-99, V=-99 [Power data unavailable]
Device FW version is 1.0.7.
Does anybody experienced the same issue?