Trying to make python work for OpenHabian rules…
- Used the openhabian cli to install HabAPP.
- The service didn’t start: ModuleNotFoundError: No module named ‘pydantic’
- I knew I would need curl so…
pip3 install pydantic sudo systemctl start habapp.service sudo systemctl status habapp.service
The service still didn’t start. Is HabAPP running in a venv?
pip3 remove pydantic
I determined from the HabAPP documentation that it might run in a venv
openhabian@openhabian:/opt/habapp $ source ./bin/activate pip3 install pydantic sudo systemctl start habapp.service sudo systemctl status habapp.service
Status now said I was missing a different module, EasyCo, and on I went installing and testing…
pip3 install EasyCo pip3 install eascheduler pip3 install stackprinter pip3 install watchdog pip3 install paho-mqtt pip3 install aiohttp pip3 install aiohttp_sse_client pip3 install immutables pip3 install bidict
And finally it worked! I was able to list the packages that are installed.
(habapp) openhabian@openhabian:/opt/habapp $ sudo systemctl status habapp.service ● habapp.service - HABApp Loaded: loaded (/etc/systemd/system/habapp.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2022-11-12 16:03:56 GMT; 2s ago Docs: https://habapp.readthedocs.io Main PID: 16102 (habapp) Tasks: 7 (limit: 4915) CGroup: /system.slice/habapp.service └─16102 /opt/habapp/bin/python3 /opt/habapp/bin/habapp -c /etc/openhab/habapp Nov 12 16:03:56 openhabian systemd: Started HABApp. (habapp) openhabian@openhabian:/opt/habapp $ pip3 list Package Version ------------------ ------- aiohttp 3.8.3 aiohttp-sse-client 0.2.1 aiosignal 1.3.1 astral 2.2 async-timeout 4.0.2 asynctest 0.13.0 attrs 22.1.0 bidict 0.22.0 charset-normalizer 2.1.1 EAScheduler 0.1.7 EasyCo 0.2.3 frozenlist 1.3.3 HABApp 0.31.2 idna 3.4 immutables 0.19 multidict 6.0.2 paho-mqtt 1.6.1 pendulum 2.1.2 pip 22.3.1 pkg_resources 0.0.0 pycurl 7.45.1 pydantic 1.10.2 python-dateutil 2.8.2 pytz 2022.6 pytzdata 2020.1 ruamel.yaml 0.17.21 ruamel.yaml.clib 0.2.7 setuptools 65.5.1 six 1.16.0 stackprinter 0.2.9 typing_extensions 4.4.0 voluptuous 0.13.1 watchdog 2.1.9 yarl 1.8.1
I then endlessley faffed about with no success, watching the log with tail -f and duckduckgoing until I found this page which told me it was broken in OH3.3!! I went back in to the cli and removed HabAPP.
Back to plan A then. I will set up a venv and script to make it work with cron. I already have the script. Should have done this ages ago. All it does is tell me the kWh yesterday as a proof of concept. I already have an Item set up with the number.
import json import pycurl import certifi from io import BytesIO from openhab import OpenHAB buffer = BytesIO() c = pycurl.Curl() c.setopt(c.URL, 'https://api.octopus.energy/v1/electricity-meter-points/xxxxxxxx/meters/xxxxxxxxxxxxxx/consumption/') c.setopt(c.USERPWD,'xxxxxxxxxxxxx:') c.setopt(c.WRITEDATA, buffer) c.setopt(c.CAINFO, certifi.where()) c.perform() c.close() body = buffer.getvalue() usage = json.loads(body.decode('iso-8859-1')) # Body is a byte string. # We have to know the encoding in order to print it to a text file # such as standard output. count = 0 yesterday = 0 for x in usage["results"]: yesterday = yesterday + x["consumption"] count = count + 1 #print(count,x["consumption"]) if count == 48: break yesterday = round(yesterday,2) base_url = 'http://openhabian:8080/rest' openhab = OpenHAB(base_url) # fetch all items items = openhab.fetch_all_items() items['Yesterday_kWh'].update(str(yesterday) + 'kWh')
And schedule that with cron by making a script to call it that has the full path to the venv inside calling the main.py
0 7 * * * /home/openhabian/projects/energy/energy.py