Trying to make python work for OpenHabian rules…
Notes
- 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[1]: 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