Tech-Ecke / Basteleien / IR-Lesekopf mit Tasmota Firmware

  IR-Lesekopf mit Tasmota Firmware (Hichi Wifi)

Alternative zum poweropti von powerfox

Diese Seite beinhaltet

Da ich beim Einrichten meines Hichi Wifi IR-Lesekopfes den ein oder anderen Klemmer hatte, entsteht mal wieder eine neue Seite auf der Tech-ecke. Inwiefern die Einzelnen Schritte zu anderen IR-Leseköpfen mit Tasmota Firmware passen kann ich leider nicht sagen, da ich aktuell nur diesen einen habe.

Inbetriebnahme


WLAN-Konfiguration

Der erste Schritt, das einbinden ins heimische WLAN-Netzwerk ist relativ unspektakulär. Das Prozedere kennt man von vielen anderen IoT-Geräten, weshalb ich hier mal nur schnell drüber fliegen werde.


Script für Zähler einfügen

Im nächsten Schritt muss dem Lesekopf ein Script aufgespielt werden, damit er mit dem Stromzähler zu kommunizieren. Das Script ist Zählerabhängig und muss passend zum Zählertyp und Hersteller erstellt werden. Man braucht sich das Script in aller Regel jedoch nicht selbst zusammenbasteln, sondern kann sich auf der GitHub-Seite "Smart-Meter-Interface" ein fertiges Script angeln.
Auf der Seite sucht man am rechten Bildschirmrand nach seinem Zähler bzw. Zählerserie und wählt ihn aus. Er wird dann in der Mitte angezeigt und durch einen Klick auf den "Pfeil" am Ende der "View script"-Box erscheint auch schon der begehrte Code. Diesen kopiert man sich hier in die Zwischenablage.

Zurück auf der Tasmota-Seite wählt man [Consoles] und dann [Edit Script]. Die Tasmota-Seite öffnet man übrigens im Browser durch Eingabe der IP-Adresse, welche der Lesekopf vom Router zugewiesen bekommen hat - darum hat man sich diese auch wie beschrieben notiert :-)

Im Edit-Fenster fügt man nun das kopierten Script ein, setzt den Haken bei "Script enable" und klickt abschließend auf [Save].

Im Main "Menu" sollten nun auch die Werte vom Zähler reinpurzeln.

So, bis hierher war eigentlich alles problemlos. Aber ich habe natürlich mehr vor als mir nur die drei Daten ab und zu mal anzuschauen. Da ich bislang einen poweropti von powerfox in Betrieb hatte, habe ich auch schon eine ungefähre Vorstellungen was ich mit den gesammelten Daten gerne anstellen würde, dazu später mehr. Als erstes möchte ich die aktuelle Last anderen Geräten, wie z.B. meinem Smart Lüfter zur Verfügung stellen. Dieser lief bis dato mit der API von powerfox, aber so recht hat mir das noch nie gefallen. Zum einen ist deren Server sehr unzuverlässig und zum anderen finde ich es irgendwie schräg die Daten erst ins Internet zu blasen, um sie von dort dann wieder einzufangen. Mit dem Tasmota nutze ich jetzt die Kommunikation via MQTT-Protokoll, welches auch von vielen Smart-Home-Systemen genutzt wird. Und genau dabei kam ich ins Stolpern.


MQTT einrichten

Eigentlich ist alles ganz einfach, wenn man weiß wie :-/ Als erstes benötigen man einen MQTT-Broker, dieser läuft bei mir aktuell auf einem "Raspberry Zero W2". Wie man den MQTT-Broker Mosquitto auf einem Raspberry einrichtet steht hier.
Zum Einrichten am Tasmota klickt man im "Main Menu" auf [Configuration] und dann auf [Configure MQTT]. Im daraufhin erscheinendem Fenster trägt man bei Host die Adresse des Brokers ein, im meinen Fall die lokale IP-Adresse meines Raspberry Zero. Der Standardport für einen MQTT-Broker ist "1883". Bei Client kann man irgend einen sprechenden Namen eintragen. Danach den Benutzername (User) und Passwort (Password) für den Broker (falls gesetzt). Im Feld Topic tragen wir nun den Topic ein, unter dem der Lesekopf die Daten "Puplishen" soll. Ich verwende hier den gleichen Namen wie bei Client. Und jetzt kommen wir zu meinem ersten Stolperer! Im Feld "Full Topic" wird jetzt noch ein Prefix angegeben (in meinem Fall "iot"), gefolgt vom Topic, welcher hier aber mit der Variable %topic% eingetragen wird, das Ganze getrennt und abgeschlossen mit einem Schrägstich (Forward Slash). Also im Feld "Topic" steht bei mir nun "StromZaehler", im Feld "Full Topic" steht "iot/%topic%/", daraus ergibt sich der komplette Topic von "iot/StromZähler"... dachte ich zumindest, aber das Stolpern geht weiter :-/

 

Ich fasse mich an der Stelle jetzt mal kurz. Dem Topic "iot/StromZähler" ist am Ende noch ein "SENSOR" anzuhängen, wodurch der schlussendliche Topic "iot/StromZaehler/SENSOR" lautet. Das mag für routinierte Tasmotaner alles logisch erscheinen, für mich als Neuling war es eine echte Hürde. Wie auch immer, mit dem kleinen Tool TE MQTT Client kann man jetzt die Daten vom IR-Lesekopf anfliegen sehen... oder doch nicht :-/ Nun ja, im ersten Moment dachte ich das wirklich, aber es lag letztendlich doch nur an meiner Ungeduld.

Sendeintervall anpassen
Denn der Tasmota sendet ab Werk nur alle 300 Sekunden eine Nachricht. Die 5 Minuten sind für mein Vorhaben jedoch entschieden zu lange. Zum Glück kann der Intervall zwischen 10-300 Sekunden frei gewählt werden. Dazu schnappt man sich seinen Lieblingsbrowser und gibt folgendes in die Adresszeile ein:

Anstelle von "<IP-Tasmota>" setzt man die IP-Adresse des Lesekopfes ein. Der so abgesetzte Befehl wird den Sendeintervall auf 10 Sekunden reduzieren. Die "%20" vor der "10" ist der Sonderzeichencode für ein Leerzeichen, der Befehl lautet also "TelePeriod 10". Der Browser quittiert einem die vorgenommene Änderung wie folgt:

Der Lesekopf sendet nun alle 10 Sekunden einen Nachricht in form eines Strings, der in etwa wie folgt aussehen kann:

{"Time":"2024-05-06T18:10:59","SML":{"total_in":6852.65,"total_out":14917.27,"power_curr":-3650}}

Die Nachricht wird jedoch von Zähler zu Zähler etwas anders ausfallen. Mein Zähler liefert nur die drei Werte "Verbrauch gesamt", "Einspeisung gesamt" und "aktuelle Last", andere Zähler liefern mit unter einiges mehr an Daten, entsprechend länger wird der String dann ausfallen. Ein negativer Wert (-) bedeutet dass gerade Eingespeist wird, ein positiver Wert (ohne Vorzeichen) zeigt einen Bezug an.

Beispielanwendung
So, und was macht man nun mit den Werten? Ein plakatives Beispiel ist mein Smart Lüfter, dieser kann wahlweise über die API von powerfox oder eben per MQTT Daten beziehen und verarbeiten. Das schöne am MQTT ist, dass ich den XP-Rechner wieder vom Internet nehmen konnte, da sich mein Broker im heimischen Netz befindet.
Aber man kann auch mittels ESP8266 ganz auf einen Rechner verzichten und somit viele Geräte relativ einfach "smart" machen. Wie das funktioniert kann man hier erfahren.



Daten sammeln und verarbeiten


Daten in Textdatei schreiben

Eine recht einfache Methode die Daten zu sammeln ist, diese an einen Webserver zu senden, der sie mittels PHP-Script in eine Textdatei schreibt. Dazu benötigt man einen Webserver der PHP unterstützt. Das ist ebenfalls mal wieder ein Fall für den Raspberry, man komm an so einem Ding quasi gar nicht mehr vorbei und für weniger als 20 EUR hat man damit jede Menge Spaß. Wie man den Webserver und PHP auf einem Raspberry installiert und konfiguriert kann man hier nachlesen. Jedoch sollte man bei der Anwendung Abstand von einer SD-Karteninstallation nehmen und stattdessen eine SSD als Datenspeicher verwenden. SD-Karten sind nicht für einen ständigen Schreibzugriff ausgelegt und können dadurch früher als erwartet ausfallen. Zum Experimentieren eignet sich aber auch XAMPP, welcher ohne Installation und im Handumdrehen auf jedem Windows-Rechner (ab XP) einen Webserver mit PHP-Unterstützung laufen lässt. Wie das geht ist hier zu sehen.

Als erstes muss man das Script vom Stromzähler etwas manipulieren, so dass es die Daten in einem vorgegebenen Intervall über eine PHP-Datei an den Webserver sendet. Dazu öffnet man den Script-Editor in der Tasmota-Oberfläche über [Consoles] und dann [Edit Script]. Grau ist der originale Code von der "Smart-Meter-Interface" Seite für meinen Stromzähler, der grüne Code ist nun zusätzlich hinzugekommen.

Das PHP-Script "logger.php" auf dem Server sieht wie folgt aus:

Auch hier müssen die Messwerte gegebenenfalls analog dem Stromzähler-Script angepasst werden ($_GET['a'], $_GET['b'], etc.). Die Daten werden nun zeilenweise in die Textdatei "stromlog.txt" gespeichert. Die Datei wird im gleichen Verzeichnis wie die "logger.php" geschrieben und endlos befüllt. Möchte man beispielsweise eine monatliche Textdateien anlegen, so nimmt man  $Jahr + $Monat mit in den Dateinamen auf.


Daten in MySQL-Datenbank schreiben

Wenn man die Daten nicht gerade in Excel, sondern webbasiert abrufen, filtern und grafisch darstellen möchten, dann ist es wesentlich eleganterer die Daten in eine MySQL-Datenbank zu schaufeln. Dazu benötigen wir jedoch erst einmal eine entsprechende Datenbank und ja, das ist wieder ein Anwendungsfall für den Raspberry. Auch hier gilt, wie schon bei der Textdatei, die Himbeere sollte hierzu mit einer SSD-Karte betrieben werden. Wie man eine MySQL-Datenbank (Maria DB) auf dem Raspberry installiert ist hier nachzulesen. Und auch bei dieser Übung kann zu Testzwecken der XAMPP zum Einsatz kommen. Wie die Datenbank selbst aufgesetzt und konfiguriert wird ist auf der XAMPP-Seite zu finden.
Als erstes benötigen wir eine neue Datenbank mit dem Namen "StromLogger", darin wird eine Tabelle mit dem Namen "Verbrauch" benötigt die wie folg aufgebaut sein muss:

Um die Tabelle schnell anlegen zu können kann man den folgenden Code in die SQL-Anweisung auf der phpMyAdmin-Seite einfügen und ausführen. Siehe dazu den Tipp auf der XAMPP-Seite unter "Exportieren und Importieren von Daten".

In der Datenbank muss jetzt noch ein neuer Benutzer mit dem Namen und Passwort "Tasmota" angelegt werden. Wie das erledigt wird ist ebenfalls auf der XAMPP-Seite unter "Neue Benutzer anlegen" nachzulesen. Die Zugangsdaten kann und sollte man natürlich später entsprechend anpassen (Datenbank + PHP-Datei). Nun fehlt nur noch die modifizierte PHP-Datei:

Das Stromzähler-Script ist das gleiche wie beim Schreiben in eine Textdatei.



Daten grafisch darstellen

Um die Daten grafisch aufzubereiten werde ich aller Wahrscheinlichkeit nach die JpGraph PHP-Bibliothek verwenden, allerdings könnte das noch ein bisschen dauern, weil die warme Jahreszeit hat begonnen und da gibt es besseres zu tun also vor der Kiste herum zu setzen :-)


Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !
[erstellt: 28.04.2021 - letzte Aktualisierung 27.01.2024]