ESP in OpenHAB

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

starbright
Beiträge: 71
Registriert: 16. Jan 2023 19:27
Answers: 0

Re: ESP in OpenHAB

Beitrag von starbright »

Hab jetzt auf meinem ESP8366 was drauf das MQTT sendet.
Mosquitto ist auf dem BeagleBone.
In /etc/mosquitto/mosquitto.conf musste ich noch nachtragen:

Code: Alles auswählen

allow_anonymous true
listener 1883

Ich hab jetzt ein Device das sendet:
19:41:09.553 -> Sending message to topic: arduino/simple
19:41:09.553 -> hello 686
19:41:09.553 ->
19:41:10.549 -> Sending message to topic: arduino/simple
19:41:10.549 -> hello 687
19:41:10.549 ->

Und mosquitto empfängt das auch:

Client (null) received PUBLISH (d0, q0, r0, m0, 'arduino/simple', ... (9 bytes))
arduino/simple hello 733
Client (null) received PUBLISH (d0, q0, r0, m0, 'arduino/simple', ... (9 bytes))
arduino/simple hello 734

Ich bin der Beschreibung hier gefolgt:
https://bloggingwelt.de/mqtt-in-openhab-3-einrichten/
Aber jetzt hänge ich. Ich hab das das Thing MQTT Broker und ein Thing MQTT-Generic device eingerichtet und in diesen den Broker eingetragen.

Aber jetzt komme ich nicht weiter. Wie funktioniert die Verknüpfungen von dem arduino/simple (und dessen Inhalt : hello (konstant) und eine Zahl) zu einem bzw zwei Items?
Wo muss ich das keyword: "arduino simple" eintragen und wie adressiere ich dann die beiden Felder (nehme an einen String und eine Zahl)?

Benutzeravatar
udo1toni
Beiträge: 13987
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: ESP in OpenHAB

Beitrag von udo1toni »

Na, Du definierst in openHAB eine mqtt Bridge (das ist die Verbindung zwischen openHAB und dem Broker).
Danach legst Du ein Generic mqtt Thing an. Beides ist über die Main UI zu erreichen:
Main UI -> Adminstration -> Things -> Add (das weiße plus im blauen Kreis rechts unten) -> MQTT -> MQTT Broker/Generic MQTT Thing.
In der Bridge trägst Du die Zugangsdaten für mosquitto ein (also host/Port/User/Password/ID), im generic Thing trägst Du die Bridge ein.
Außerdem musst Du bei beiden Things (die Bridge ist auch ein Thing...) ein Label und eine ID eintragen. Die ID setzt openHAB zur Not auch selbst, aber da Du die ID später nicht mehr ändern kannst, solltest Du hier direkt etwas sinnvolles eintragen, z.B. broker oder mosquitto. und beim thing z.B. diy_1, wichtig ist bei der ID, dass sie nur Zeichen aus dem englischen Alphabet und arabische Ziffern sowie den Unterstrich enthalten darf, es gibt noch ein, zwei weitere Zeichen, besser ist aber, sich auf die drei Typen zu beschränken. openHAB ist grundsätzlich Case Sensitive und es besteht die Vereinbarung, CamelCase zu verwenden, wobei der erste Buchstabe klein geschrieben wird. Das ist aber nur eine Vereinbarung, man kann das auch anders halten.

Wenn Du das Generic Thing angelegt hast, rufst Du es direkt wieder auf und wechselst auf die nun verfügbare Channel-Seite. Dort kannst Du nun auswählen, welchen Datentyp Du nutzen willst (string, number,dimmer,switch usw.) Auch ein Channel benötigt eine ID und ein Label, und dann noch ein stateTopic (Empfangsrichtung, Daten kommen von Mosquitto und werden bei openHAB abgeliefert) oder auch ein commandTopic (Senderichtung openHAB sendet Befehle an mosquitto, welcher dann den Befehl an das entsprechende Topic weiterleitet.
Gewöhnlich verwendet man pro Datenpunkt ein eigens Topic, alternativ werden alle Daten über ein Topic gesendet, dann in den meisten Fällen als JSON formatiert. openHAB bringt JSONPath mit, womit das dekodieren von JSON sehr einfach ist.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

starbright
Beiträge: 71
Registriert: 16. Jan 2023 19:27
Answers: 0

Re: ESP in OpenHAB

Beitrag von starbright »

>>In der Bridge trägst Du die Zugangsdaten für mosquitto ein (also host/Port/User/Password/ID), im generic Thing trägst Du die Bridge ein.

Ich hab beim Anlegen des Brokers nur den host: 127.0.0.1 angegeben. Mehr war da nicht verlangt. Steht auch auf "online" (hoffe das bedeutet auch was).

>>Außerdem musst Du bei beiden Things (die Bridge ist auch ein Thing...) ein Label und eine ID eintragen.
ok, das sind aber soweit ich sehe frei wählbare Namen.

An den Broker können ja beliebig viele Sensoren senden. Meiner hat das Topic arduino/simple. Ich sehe aber nicht wo die Verknüpfung auf das Topic passiert? Wo kann ich das auswählen?
Im Generic Thing gibt es (erst unter Advanced, das hatte ich bisher nicht gesehen) ein Availability Topic. Aber da ein Topic ja immer gebraucht wird kann ich mir nicht vorstellen dort "arduino/simple" einzutragen. Oder doch?

Edit: Habs geschafft, "arduino/simple" muss ich in Generic Thing im "MQTT State Topic" eintragen. Wie ich die beiden Werte dann auf zwei Items lege muss ich mal sehen. Brauch ich dafür zwei channels? Können aus einem Channel zwei Items werden?

Frage: Die /var/lib/mosquitto.db : wächst die nicht unaufhörlich? Muss die auch in Ramdisk verlagern, sonst ist mein Flash bald hin.

Benutzeravatar
udo1toni
Beiträge: 13987
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: ESP in OpenHAB

Beitrag von udo1toni »

wenn Du mosquitto auf dem selben Rechner laufen lässt wie openHAB, kannst Du natürlich localhost (bzw. 127.0.0.1) als host angeben. Den Port musst Du angeben, wenn Du mosquitto so konfiguriert hast, dass es auf einem anderen Port läuft :)
User und Passwort musst Du angeben, wenn Du User und Passwort definiert hast. Ansonsten ist mosquitto halt offen (und das ist auch nicht schlimm, wenn es nur lokal betrieben wird).

Wegen der Trennung der Daten hatte ich im letzten Absatz im letzten Satz etwas geschrieben. Weil die Formulierung vielleicht nicht so ganz klar ist, versuche ich es noch mal anders :)

Gewöhnlich werden Daten vom Sender strukturiert geliefert, entweder indem alle Daten eigene Topics haben, oder indem alle Daten in einem gemeinsamen Topic geliefert werden, aber in einer Datenstruktur. Die meisten Geräte verwenden für die Datenstruktur JSON, XML wäre aber auch noch eine Möglichkeit (nur ist der Overhead bei XML halt viel höher ohne tatsächlich Vorteile zu schaffen).
openHAB kann JSON mittels JSONPath analysieren und die Daten dann auf mehrere Channel aufteilen. Alternativ kannst Du einen einzelnen "Empfangs-Channel" verwenden (der muss dann zwingend vom Typ string sein, weil nur string ein vollständiges JSON Objekt aufnehmen kann) und die Daten erst im Anschluss über das Profile verschiedenen Items zuweisen.
Du solltest also Deinen Sensor so programmieren, dass er die Daten als gültiges JSON sendet, oder alternativ als mehrere diskrete Werte auf unterschiedlichen Topics.
Du kannst alternativ auch die jetzige Form nutzen und die Daten per REGEX aufteilen, nur erscheint das - gerade wenn man ohnehin noch am entwickeln ist - als eher suboptimal. REGEX Ausdrücke sind vergleichsweise fehleranfällig.

So oder so musst Du JSONPath, XPAth (wenn es partout xml sein soll) und auch REXEX aus dem Addon Store nachinstallieren.

Die mosquitto.db sollte eigentlich nicht wachsen, es sei denn, Du sendest die Werte retained. Es kann aber auch sein, dass mosquitto in seiner Datenbank noch andere Dinge speichert :) nur kann ich Dir versichern, dass nicht mosquitto Deine Micro-SD-Karte lyncht, sondern eher openHAB.
Wenn Du als Unterbau das openHABian Image nutzt (das ist der angebotene Download auf der openHAB-Homepage), dann ist bereits ZRAM aktiv, womit das Wearout mittels RAM-Disk Overlay Dateisystem verhindert wird. In der Folge ist es aber essenziell, dass Du den Pi immer ordnungsgemäß herunterfährst oder bootest, da sonst die im RAM befindlichen Daten nicht (einmalig) auf die Micro-SD-Karte geschrieben werden können.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

starbright
Beiträge: 71
Registriert: 16. Jan 2023 19:27
Answers: 0

Re: ESP in OpenHAB

Beitrag von starbright »

Vielen Dank, jetzt bin ich einigermaßen klar !
Ich hab etwas vergeblich mit Regexp probiert. Ich glaube dass das nicht so funktioniert wie gedacht, also wie man das in https://regex101.com/ testen kann. Und ja, regexp ist fehlerträchtig und bin dann auf Nummer sicher gegangen und hab zwei Topics gemacht die nur die Zahlenwerte Temp/Luftfeuchte senden und das klappt gut.

Damit der Sensor mit Akku betrieben eine Weile hält will ich den schlafen legen zwischen den Messungen (alle 5 Min).
Wenn keine neuen Werte kommen - wird im Diagramm der alte Wert gehalten? Das wäre am besten. Aber das ist schon ein eigenes Thema....

Idealerweise in den Deepsleep, dann Messung machen und nur Wifi an/MQTT senden wenn sich das gegenüber vorher geändert hat. Dann wieder Deepsleep für 5 Min.
Wahrscheinlich kennt er aber den Wert von vorher nicht mehr nach Deepsleep. Also entweder dann immer senden oder einen anderen Sleepstate wählen der das RAM behält. Muss mal nachforschen wie die Verbrauchs-Werte in den entprechenden Fällen sind.

PS: Openhabian geht auf meinen ollen Beagleboard leider nicht, aber ich hab die persistance/log files in ein tmpfs umgeleitet. Einmal am Tag wird in emmc gesichert. Aber Langzeit-Daten ist sowieso nicht der Focus bei mir.

Benutzeravatar
udo1toni
Beiträge: 13987
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: ESP in OpenHAB

Beitrag von udo1toni »

starbright hat geschrieben: 14. Feb 2024 09:58Beagleboard
Oha. Nun ja, openHAB läuft darauf, und das ist dann vermutlich auch schon alles... ;)

Was die Persistence betrifft, so kannst Du das Verhalten von openHAB frei konfigurieren, sei es, welche Services hierzu verwendet werden, welche Items von welchen Services persistiert werden (exklusiv oder parallel) oder auch welche Strategies zum Einsatz kommen. Die Strategy beschreibt, wann ein Item persistiert wird. Gewöhnlich wird man everyChange verwenden, der Wert wird also bei Änderung gesichert - mit Zeitstempel. Möchte man auch mitbekommen, ob ein Sensor regelmäßig sendet, wäre everyUpdate nett, denn hier werden auch aufeinanderfolgende gleiche Werte persistiert.

Für rrd4j (das ist die Standard Persistence) ist es allerdings zwingend notwendig, dass mindestens ein Wert pro Minute persistiert wird (pro Datenreihe natürlich, also pro Item). rrd4j arbeitet mit mehreren RoundRobin Listen, die für unterschiedliche Zeitabschnitte und unterschiedliche zeitliche Auflöung zuständig sind, also z.B. Auflösung 10 Sekunden, für die letzte Stunde, das wären also maximal 360 Werte, die in dieser Liste enthalten sein könnten.
Einmal pro Minute werden die Werte der letzten Minute ausgelesen und der Mittelwert bestimmt (dabei werden auch die Zeitstempel berücksichtigt - wenn ich also zwei mal 0 und einmal 30 als Wert habe, bedeutet das nicht, dass hier 10 raus kommt, vielmehr ist ausschlaggebend, wie lange die 30 ansteht, und wie lange 0 ansteht). Dieser Mittelwert kommt in die nächste Liste, in der meinetwegen wieder 360 Werte gespeichert werden, und zwar mit exakt minütlicher Auflösung für die letzten 6 Stunden. Alle 10 Minuten werden aus diesen Werten wieder Mittelwerte bestimmt, und so weiter und so fort. Wenn ein neuer Wert rein kommt bzw. ein neuer Wert berechnet wird, fliegt der jeweils älteste Wert aus der Liste heraus (eben RoundRobin), womit die Größe der Datendateien fix ist. Dafür muss aber wie gesagt zwingend mindestens ein Messwert pro Minute gespeichert werden, auch wenn es gar keine Messung gab. openHAB verwendet dafür dann eine zyklische Strategy (everyMinute, solche Strategies kann man nach Belieben auch selbst erstellen). Nachteilig ist hier, dass man keine Chance hat, zwischen "echten" und wiederholten Werten zu unterscheiden, man kann an rrd4j also z.B. gewöhnlich nicht ablesen, ob ein Sensor zwischendrin ausgefallen ist, weil everyUpdate ja nicht reicht.

Werte ändern sich in openHAB nur, wenn neue Werte empfangen werden. openHAB teilt beim Start dem Broker lediglich mit, an welchen Topics es interessiert ist, es abonniert diese Topics. Der Broker sendet dann alle Updates, die er auf dem Topic empfängt direkt an openHAB weiter. Es ist dabei irrelevant, ob der Sensor zwischendurch aus ist, der Sensor muss sich auch keine alten Werte merken, die sind ja... alt.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

EmptySoft
Beiträge: 188
Registriert: 7. Jan 2020 14:45
Answers: 2
Kontaktdaten:

Re: ESP in OpenHAB

Beitrag von EmptySoft »

peter-pan hat geschrieben: 8. Feb 2024 17:52
EmptySoft hat geschrieben: 8. Feb 2024 13:52 einen "blanken" ESP
Hab gerade mal gesucht, aber nichts in der Richtung gefunden. Hast du da einen Link ?
Hi Peter Pan.!

Sorry für die späte Antwort, komme derzeit nicht so viel zum Forum lesen. Der "nackte" ESP8266 heißt esp01.
https://www.google.com/search?client=fi ... -d&q=esp01
BYe
Harald

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: ESP in OpenHAB

Beitrag von peter-pan »

EmptySoft hat geschrieben: 15. Feb 2024 13:20 Der "nackte" ESP8266 heißt esp01
Danke für die Info. Das macht gar nichts, dass du erst jetzt dazu gekommen bist. Ich hab Zeit (Rentner :lol: )

Ich hab grad mal in meine "Kruschtelkischte geguckt" und tatsächlich so ein Teil in Verbindung mit einem Relais gefunden (vor ca. 3-4 Jahren gekauft) und wahrscheinlich gleich wieder rein geschmissen, weil ich keine Ahnung hatte, was ich damit machen kann.

Das/den werde ich jetzt mal genauer anschauen und probieren, ob ich den geflasht krieg. Hab das schon lang nicht mehr gemacht.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

EmptySoft
Beiträge: 188
Registriert: 7. Jan 2020 14:45
Answers: 2
Kontaktdaten:

Re: ESP in OpenHAB

Beitrag von EmptySoft »

peter-pan hat geschrieben: 15. Feb 2024 13:54
EmptySoft hat geschrieben: 15. Feb 2024 13:20 Der "nackte" ESP8266 heißt esp01
Danke für die Info. Das macht gar nichts, dass du erst jetzt dazu gekommen bist. Ich hab Zeit (Rentner :lol: )

Ich hab grad mal in meine "Kruschtelkischte geguckt" und tatsächlich so ein Teil in Verbindung mit einem Relais gefunden (vor ca. 3-4 Jahren gekauft) und wahrscheinlich gleich wieder rein geschmissen, weil ich keine Ahnung hatte, was ich damit machen kann.

Das/den werde ich jetzt mal genauer anschauen und probieren, ob ich den geflasht krieg. Hab das schon lang nicht mehr gemacht.
schweift ein wenig vom Thema ab, aber die Programmerplatine dran anschließen und einen Pin muss man auf Masse legen und schon geht es
BYe
Harald

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: ESP in OpenHAB

Beitrag von peter-pan »

EmptySoft hat geschrieben: 15. Feb 2024 15:10 schweift ein wenig vom Thema ab, aber die Programmerplatine dran anschließen und einen Pin muss man auf Masse legen und schon geht es
👍 ...ich kann mich schwach erinnern.

Danke - Peter
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Antworten