Den Wifi-Tasmota IR-Lesekopf (Hichi) per HTTP Request auslesen

Der IR-Lesekopf für den Stromzähler von Hichi ist seit Jahren eine etablierte Lösung für das Auslesen des Stromzählers. Schon lange habe ich selbst den USB-Lesekopf im Einsatz und er läuft extrem zuverlässig.

Einem Freund hatte ich kurzerhand die WLAN-Variante mit ESP-01 geschenkt, ohne jedoch auf die Limitierung zu achten, dass ein sinnvolles Auslesen nur mit SmartHome über MQTT (Tasmota als MQTT Client) möglich ist. Also musste etwas Bastelei her, um auch ohne MQTT Broker bequem an die Daten zu kommen.

Für die Einrichtung des Tasmota auf dem Hichi gibt es sehr gute Anleitungen im Netz, die will ich nicht wiederkäuen. Dazu gibt es für eigentliche alle Stromzähler im Tasmota Wiki das passende Script.

Das Auslesen ohne SmartHome

Um ohne MQTT bequem an die Daten zu kommen, ist MQTT eine schlechte Option. Gewählt habe ich daher eine Variante über die sehr schöne Open Source-App „HTTP Request Shortcuts„.

Endpoint des HTTP Requests ist (bei mir) die IP + ?m=1:

http://xx.xx.xx.xx/?m=1

(Im Zweifel bekommt man die korrekte URL auf der Tasmota Seite des Devices, über die Developer Tools – Netzwerk.)

Man bekommt einen nicht ganz so schön nutzbaren Datensatz, den man mittels JavaScript aber leicht etwas zerlegen kann. Den Response des Request deaktiviert man am besten („Nichts anzeigen“), weil man diesen dann über das Scripting steuert.

Das Script selber muss man an die individuelle Zählerkonfiguration anpassen. Bei meinem Fall war es so sehr gut nutzbar:

const regex = /\{s\}(.*?)\{m\}(.*?)kWh/g;
let match;
const extractedValues = {};

while ((match = regex.exec(response.body)) !== null) {
  extractedValues[match[1].replace("LK13BE ","")] = match[2].replace("000","");
}

showDialog("Aktueller Verbauch: "+extractedValues["Verbrauch aktuell"].split(",0")[0] + " W\n\n1 Tag: " + extractedValues["Verbrauch 1 Tag"] + " kWh\n7 Tage: "+ extractedValues["Verbrauch 7 Tage"] +" kWh\n30 Tage:" + extractedValues["Verbrauch 30 Tage"] + " kWh\n365 Tage: "+extractedValues["Verbrauch 365 Tage"]+" kWh\n\nZählerstand: "+extractedValues["Gesamtverbrauch"]+" kWh");

Alternativ kann man es auch als Toast ausgeben lassen (showToast) oder vorlesen lassen (speak). Die Verknüpfung zum Request lässt sich dann auf den Homescreen legen und die aktuellen Zählerdaten sind nur einen Tab entfernt.

Fröhliches Ausprobieren …

Workarround: GPIO Raspberry Pi 5 / Bookworm

Der neue Raspberry PI 5 unter Raspberry Pi OS Bookworm schmeißt einiges in Sachen GPIO über den Haufen. Viele altbekannte Tools funktionieren nichtmehr. Damit war nach dem Upgrade auf Pi 5 auch meine Velux Rollosteuerung im Eimer, da diese über ein Relaisboard an den GPIOs gesteuert werden.

Obwohl der Raspberry Pi 5 immer noch über den standardmäßigen 40-Pin GPIO verfügt, unterscheidet sich seine Funktionsweise nun, da er an den neuen RP1-Southbridge-Chip angebunden ist. Dies ist von Bedeutung, da es die Art beeinflusst, wie manCode zur Interaktion mit dem GPIO schreibt. Früher setzten viele Projekte auf RPi.GPIO, ein von der Community initiiertes Projekt von Ben Croston, das mehrere Generationen des Raspberry Pi unterstützte. Beim Raspberry Pi 5 ist die Verwendung von RPi.GPIO jedoch nicht mehr möglich.

Mit libgpiod gibt es wohl auch schon einen Ersatz für RPi.GPIO, aber mich tiefgreifend damit zu beschäftigen und in NodeRED zum Laufen zu bekommen, dafür habe ich in der „ruhigen“ Adventszeit irgendwie keine Zeit. Hinweise nehme ich gern entgegen. Bis dahin mein quick-and-dirty Workarround mit pinctrl.

Befehle

-p listet dir die verfügbaren GPIOs und deren Status auf:

sudo pinctrl -p

set 18 op dh initialisiert den GPIO18 als Output und setzt ihn auf high (dh)

sudo pinctrl set 18 op dh

Achtung! op ist nicht bootfest.

set 18 dl setzt GPIO18 auf low (dl)

sudo pinctrl set 18 dl

In Node-Red

In Node-Red kriegt ihr das ganze mit dem exec Node ausgeführt. Ich habe entsprechende Trigger integriert, damit mein Relais nur für 500ms angetippt wird.

Maybe to be continued

Pi-hole über das Smart Home steuern

Möchte man Seiten flexibel auf die Black- oder Whitelist von Pi-hole setzen, so gibt es dafür eine recht karge HTTP-API (GET), mit welcher du die „Domains“ von Pi-hole befüllen oder bereinigen kannst.

Diese findest du unter folgender – für deine Situation anzupassenden – URL:

http://[IP]/admin/api.php?list=regex_white&add=(%5c.%7c%5e)youtube%5c.com%24&auth=[Auth-Code]

Erläuterung der Bestandteile

Die IP deines Pi-hole solltest du kennen – genauso ob du den Adminbereich per http oder https erreichst.

Wie in der Adminoberfläche hast du auch über die API die Möglichkeit, die URLs auf die folgenden vier Listen einzutragen:

  • white
  • black
  • regex_white
  • regex_black

Du hast die Möglichkeit eine Domain hinzuzufügen (add) oder zu entfernen (sub).

Die Domain selbst muss encodiert sein. Ein Regex-Filter für youtube.com als Wildcard lautet somit:

(%5c.%7c%5e)youtube%5c.com%24

Das %5c steht z.B. für ein Backslash „\“, %7c ist ein senkrechter Strich „|“, %5e ist ein Zirkumflex „^“ und %24 ist ein Dollar Zeichen „$“.

Zuletzt brauchst du noch den Auth-Code. Diesen findest du in der Pi-hole-Adminoberfläche unter [Settings] -> [API] -> [Show API token].