ziirish / OctoPrint-TuyaSmartplug

Tuya Smartplug plugin for OctoPrint
Other
19 stars 15 forks source link

[Feature Request] Python 3 Compatibility #19

Closed quloquloqulo closed 3 years ago

quloquloqulo commented 3 years ago

Please add Python 3 Compatibility as outlined here.

Deses commented 3 years ago

I agree! This plugin is an integral part of my setup, I can't upgrade Octoprint until this one gets updated.

bepstein111 commented 3 years ago

+1

ziirish commented 3 years ago

Hello,

I'm on it, but I would need beta testers since I'm not using any tuya smart plug anymore and I also don't have (yet) a python3 setup for octoprint.

Any vonlunteer?

bepstein111 commented 3 years ago

Absolutely count me in!

ziirish commented 3 years ago

Anyone wanting to give it a shot, here is the upcoming 0.3.0 build:

OctoPrint-TuyaSmartplug.tar.gz

Deses commented 3 years ago

Does it work with Python 2 installations?

EDIT: OK, according yo init.py it does, so I'll install this and give it a whirl in my environment.

ziirish commented 3 years ago

It should, although I didn't have a chance to give it a proper try yet.

Also the pytuya code is now embedded to avoid the installation issues on python2 setup.

Deses commented 3 years ago

Something is wrong... I installed it but the plugin is nowhere to be found in the web interface. Not even in the disabled plugin list.

octoprint.log

Here's what I found in the logs:

Traceback (most recent call last):
  File "/home/pi/oprint/local/lib/python2.7/site-packages/octoprint/plugin/core.py", line 972, in _import_plugin
    module = _load_module(module_name, spec)
  File "/home/pi/oprint/local/lib/python2.7/site-packages/octoprint/plugin/core.py", line 71, in _load_module
    return imp.load_module(name, f, filename, details)
  File "/home/pi/oprint/local/lib/python2.7/site-packages/octoprint_tuyasmartplug/__init__.py", line 14, in <module>
    from octoprint_tuyasmartplug.utils import pytuya
ImportError: No module named utils

And this is the install log:

/home/pi/oprint/bin/python2 -m pip --disable-pip-version-check install file:///tmp/tmp37v4gW.zip --no-cache-dir
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing /tmp/tmp37v4gW.zip
Requirement already satisfied: OctoPrint in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint-TuyaSmartplug==0.3.0) (1.4.2)
Requirement already satisfied: pyaes==1.6.1 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint-TuyaSmartplug==0.3.0) (1.6.1)
Requirement already satisfied: pycrypto==2.6.1 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint-TuyaSmartplug==0.3.0) (2.6.1)
Requirement already satisfied: futures<4,>=3.3; python_version < "3" in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (3.3.0)
Requirement already satisfied: semantic-version<3,>=2.8.5 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (2.8.5)
Requirement already satisfied: future<1,>=0.18.2 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (0.18.2)
Requirement already satisfied: blinker<2,>=1.4 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.4)
Requirement already satisfied: Flask-Assets<3,>=2.0 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (2.0)
Requirement already satisfied: unidecode<0.05,>=0.04.14 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (0.4.21)
Requirement already satisfied: PyYAML<6,>=5.3.1 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (5.3.1)
Requirement already satisfied: pylru<2,>=1.2 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.2.0)
Requirement already satisfied: OctoPrint-FileCheck>=2020.07.06 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (2020.8.7)
Requirement already satisfied: pkginfo<2,>=1.5.0.1 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.5.0.1)
Requirement already satisfied: wrapt<2,>=1.12.1 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.12.1)
Requirement already satisfied: chainmap<2,>=1.0.3; python_version < "3" in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.0.3)
Requirement already satisfied: Click<8,>=7.1.2 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (7.1.2)
Requirement already satisfied: markdown<3.2,>=3.1 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (3.1.1)
Requirement already satisfied: watchdog<1,>=0.10.2 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (0.10.3)
Requirement already satisfied: netifaces<1,>=0.10.9 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (0.10.9)
Requirement already satisfied: scandir<2,>=1.10; python_version < "3" in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.10.0)
Requirement already satisfied: filetype<2,>=1.0.7 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.0.7)
Requirement already satisfied: itsdangerous<2,>=1.1.0 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.1.0)
Requirement already satisfied: tornado==5.1.1 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (5.1.1)
Requirement already satisfied: cachelib<1,>=0.1 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (0.1)
Requirement already satisfied: werkzeug<2,>=1.0.1 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.0.1)
Requirement already satisfied: typing<4,>=3.7.4.1; python_version < "3" in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (3.7.4.1)
Requirement already satisfied: regex!=2018.11.6 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (2019.8.19)
Requirement already satisfied: flask<2,>=1.1.2 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.1.2)
Requirement already satisfied: markupsafe<2.0,>=1.1 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.1.1)
Requirement already satisfied: Flask-Babel<2,>=1.0 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.0.0)
Requirement already satisfied: feedparser<6,>=5.2.1 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (5.2.1)
Requirement already satisfied: netaddr<1,>=0.7.19 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (0.7.19)
Requirement already satisfied: requests<3,>=2.23.0 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (2.24.0)
Requirement already satisfied: websocket-client<1,>=0.57 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (0.57.0)
Requirement already satisfied: sarge==0.1.5post0 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (0.1.5.post0)
Requirement already satisfied: sentry-sdk<1,>=0.15.1 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (0.16.3)
Requirement already satisfied: Jinja2<3,>=2.11.2 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (2.11.2)
Requirement already satisfied: rsa==4.0 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (4.0)
Requirement already satisfied: Flask-Login<0.6,>=0.5 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (0.5.0)
Requirement already satisfied: emoji<1,>=0.5.4 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (0.5.4)
Requirement already satisfied: pyserial<4,>=3.4 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (3.4)
Requirement already satisfied: frozendict<2,>=1.2 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.2)
Requirement already satisfied: OctoPrint-FirmwareCheck>=2020.06.22 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (2020.9.23)
Requirement already satisfied: monotonic<2,>=1.5; python_version < "3" in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.5)
Requirement already satisfied: psutil<6,>=5.7 in /home/pi/oprint/lib/python2.7/site-packages (from OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (5.7.2)
Requirement already satisfied: webassets>=2.0 in /home/pi/oprint/lib/python2.7/site-packages (from Flask-Assets<3,>=2.0->OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (2.0)
Requirement already satisfied: setuptools>=36 in /home/pi/oprint/lib/python2.7/site-packages (from markdown<3.2,>=3.1->OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (41.5.1)
Requirement already satisfied: pathtools>=0.1.1 in /home/pi/oprint/lib/python2.7/site-packages (from watchdog<1,>=0.10.2->OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (0.1.2)
Requirement already satisfied: singledispatch in /home/pi/oprint/lib/python2.7/site-packages (from tornado==5.1.1->OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (3.4.0.3)
Requirement already satisfied: backports-abc>=0.4 in /home/pi/oprint/lib/python2.7/site-packages (from tornado==5.1.1->OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (0.5)
Requirement already satisfied: Babel>=2.3 in /home/pi/oprint/lib/python2.7/site-packages (from Flask-Babel<2,>=1.0->OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (2.7.0)
Requirement already satisfied: pytz in /home/pi/oprint/lib/python2.7/site-packages (from Flask-Babel<2,>=1.0->OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (2019.3)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /home/pi/oprint/lib/python2.7/site-packages (from requests<3,>=2.23.0->OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.25.6)
Requirement already satisfied: certifi>=2017.4.17 in /home/pi/oprint/lib/python2.7/site-packages (from requests<3,>=2.23.0->OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (2019.9.11)
Requirement already satisfied: chardet<4,>=3.0.2 in /home/pi/oprint/lib/python2.7/site-packages (from requests<3,>=2.23.0->OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (3.0.4)
Requirement already satisfied: idna<3,>=2.5 in /home/pi/oprint/lib/python2.7/site-packages (from requests<3,>=2.23.0->OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (2.8)
Requirement already satisfied: six in /home/pi/oprint/lib/python2.7/site-packages (from websocket-client<1,>=0.57->OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (1.12.0)
Requirement already satisfied: pyasn1>=0.1.3 in /home/pi/oprint/lib/python2.7/site-packages (from rsa==4.0->OctoPrint->OctoPrint-TuyaSmartplug==0.3.0) (0.4.7)
Building wheels for collected packages: OctoPrint-TuyaSmartplug
Building wheel for OctoPrint-TuyaSmartplug (setup.py): started
Building wheel for OctoPrint-TuyaSmartplug (setup.py): finished with status 'done'
Created wheel for OctoPrint-TuyaSmartplug: filename=OctoPrint_TuyaSmartplug-0.3.0-py2-none-any.whl size=11028 sha256=2be32720a741493a7f0d9bf7fbfcd1df7ecb3214c2733ecf63bc5c6660a64d64
Stored in directory: /tmp/pip-ephem-wheel-cache-VQZ7JX/wheels/6f/b9/ca/0fd0976269ad0efdf01a638b98c8068c6a21be5b1d332bce3b
Successfully built OctoPrint-TuyaSmartplug
Installing collected packages: OctoPrint-TuyaSmartplug
Attempting uninstall: OctoPrint-TuyaSmartplug
Found existing installation: OctoPrint-TuyaSmartplug 0.3.0
Uninstalling OctoPrint-TuyaSmartplug-0.3.0:
Successfully uninstalled OctoPrint-TuyaSmartplug-0.3.0
Successfully installed OctoPrint-TuyaSmartplug-0.3.0
Done!

image

Deses commented 3 years ago

I changed line 14 in __init__.py from from octoprint_tuyasmartplug.utils import pytuya to import pytuya and the installation worked.

OctoPrint-TuyaSmartplug.zip

Here's the zip, if anyone wants it.


The updated plugin picked up the old settings as is and turns the plug on and off just fine in my Python 2.7.16 OctoPrint installation. Great work! 👍

ziirish commented 3 years ago

Thanks for trying this version. Something is probably missing from the manifest, that would explain the lack of the 'utils' module. Your fix on the other hand is using the upstream version of pytuya which was already present in your venv.

I'll have another look then. Thanks again for your valuable feedback.

Deses commented 3 years ago

I tried reverting back my change to __init__.py and adding the utils folder in the manifest but it didn't work.

include README.md
recursive-include octoprint_tplinksmartplug/templates *
recursive-include octoprint_tplinksmartplug/translations *
recursive-include octoprint_tplinksmartplug/static *
recursive-include octoprint_tplinksmartplug/utils *

Your fix on the other hand is using the upstream version of pytuya which was already present in your venv.

I guess I got lucky! :D

ziirish commented 3 years ago

Ok, so I have made a new build.

You may need to uninstall the old version first though.

OctoPrint-TuyaSmartplug-0.3.0.zip

Deses commented 3 years ago

Perfect! It installed without any issue!

ziirish commented 3 years ago

Thanks for the tests.

0.3.0 is now released with support for python 3.