HabAPP fail, cron win

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

Openhabian 3 and MQTT

MQTT is an OASIS standard messaging protocol for the Internet of Things (IoT). It is designed as an extremely lightweight publish/subscribe messaging transport that is ideal for connecting remote devices with a small code footprint and minimal network bandwidth.

https://mqtt.org/

I continue to use OpenHabian. Currently it does just a few (very useful) things:

  • Turns on the heating in the TV room if the TV is turned on and it is cold outside and it is cold in the room
  • Turns on the heating in my wife’s sewing room if her radio is on and her phone is on the wifi
  • Thanks us for topping up the boiler (verbally) when the coffee machine turns off.

With the increase in electricity costs I thought it would be interesting to play with power monitoring smart sockets. I wanted to use tasmota but was too lazy to go through the rigmarole of flashing something myself. I bought four from athom. I imagined they would take weeks from Hong Kong or something but they came within a week. I should have read their shipping page which says 4-6 days.

Getting them to work with OpenHabian was fine. I just used some excellent instructions from the OpenHAB forum. MQTT explorer is excellent. The only minor change was that it does not tell you you can rename them in the MQTT configuration by changing the topic. I had to keep the faith with OpenHabian, and it worked first time.

Now I have to work out what to do with them. I bunged them on 171-174 ip address and plugged them in to the following:

  1. Printer
  2. Microwave
  3. TV stack
  4. PC

This reminded me that I really feel I need to understand openhabian better :-/

OpenHAB, Max2Play, Squeezebox, Google Assistant working together

So, I have been pretty distracted from geekiness for a while, but MBH was away, the kids have grown up and I noticed that Max2Play (which has been brilliant!) had introduced integration with OpenHAB, something I had never heard of.

After a couple of evenings of fiddling, I now am able to achieve basic on-off control of the squeezebox using my google home.  This is a result!

I won’t go in to many details, but here are the steps as I remember them plus the key line of code.

  • Set up OpenHAB using the wizard
  • Add the services OpenHAB Cloud and HomeKit Integration 
  • Add the SqueezeBox Binding
  • Register with myOpenHab to get your secret key, and put it somewhere (I can’t remember where that went, most likely in the Configure setting in OpenHAB Cloud the first time you use it.
  • In your items file (mine is in /etc/openhab2/items/) add the following line:
Switch Kitchen_Squeezelite_Power "Kitchen Squeezelite" <receiver> [ "Switchable" ] { channel="squeezebox:squeezeboxplayer:<your unique ids here>:power" }

I can now say “Hey Google, turn off/on the Squeezebox” and it works!

I found that to add other commands, you had to delete OpenHab from Google Assistant, then re-add it.  I also set up the volume of the squeezebox as an item and called it “The tunes”.  So “Hey google, turn up the tunes” works fine.

A new start with SqueezeServer

I first started running with the squeeze ecosystem in about 2008. I ordered an original squeezebox from slim devices, which took months to come and arrived as a rebranded logitech squeezebox (not as handsome as the original). I first ran the server software on a specially bought Fit PC (which cost £250!).

The Fit PC served me well, if slowly for several years. It travelled to New Zealand with us for a year, where I tried to install Windows 7 on it with no success.  When we got back home I Father Christmas bought me one of the first generation of Raspberry Pis. With help from the internet I got the Pi running LMS (slowly). I was delighted.

By now my display on the squeezebox was fading, and one day it stopped working.  I sold it on ebay only to discover it was only the power supply.  Argh!  I then built my own hacked around player (RPizeBox) that even worked with the remote control.

That got silly, so I bought a Squeezebox Touch in 2014. As new Raspberry Pis came out I updated the server by just moving on the sd-card.

The server was pretty badly hacked together over the years as I used peoples’ work to solve problems with the BBC, Spotify etc.  Eventually it began to be problematic a lot of the time.  I decided to rebuild the server from scratch.

But… before I did this I thought that things had moved on so much “there must be an image”.  2 minutes later and I was downloading max2play.  Amazingly, within 20 minutes I had a working LMS. I was flabberghasted. So much work saved. I immediately dobbed them a 5 year license for all of €20. This new server was immediately more stable and faster than anything I had achieved with my RPi3. Half an hour later and an old RPi2 was plugged in to the living room amp through HDMI as a headless player. I ordered a HiFi Berry amp and 7″ touch screen for the RPi3 and a week later had a perfect replacement for my touch. No idea why I had not done this before. I guess it is time, but at the moment I am stuck at home recovering from a stupid operation in the sole of my foot.

I got really thinking and rebuilt the pi connected to the amp as retropie, added squeezelite and kodi and xsqueeze and now can control the seezelite with the TV remote. Result!

The troops are delighted and we all wonder why I never did this before. The only downside is the lack of remote for the new “Touch” in the kitchen, but I am hoping that hab-tunes.com can fill that gap.

 

New Blue Boar

Started on February 29th. 110g of priming sugar @ 5g per litre.

 

DateSpecific GravityAlcohol Content (%)
29th February 201610380
22nd March 20161,0222.1%
Again the alcohol content looks really suspiciously low. Dodgy measuring I guess.