Hallo,
ich habe ein Luftentfeuchtungsgerät, das per http eine Statusseite anzeigt, darin ist der aktuelle Feuchtetransport enthalten. Ich möchte diesen Wert gerne kontinuierlich auslesen, um den Verlauf zu sehen.
Ich kann den Wert per Shell-Commando extrahieren (curl | grep | awk), dann erhalte ich eine Zahl (z.B. 524).
Wie muss ich nun vorgehen, damit OpenHAB z.B. 1x/h ein solches Kommando ausführt, das Ergebnis als Zahl speichert und ich diese dann in der Oberfläche sehen kann?
Vielen Dank!!!!
Stephan
Numerischen Wert aus curl extrahieren und als Number weiterverarbeiten
-
- Beiträge: 6
- Registriert: 12. Nov 2022 12:20
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Numerischen Wert aus curl extrahieren und als Number weiterverarbeiten
Wenn die Daten per http abrufbar sind, wäre es das Einfachste, das auch per http Binding zu erledigen. Wichtig zu wissen wäre dafür lediglich die http-URL und wie der Output der URL aussieht, um auf openHAB-Seite (gewöhnlich per REGEX) einen passenden FIlter einzurichten, der den Wert ermittelt.
Natürlich kannst Du auch dne Weg über ein externes Script gehen, das ist aber umständlich (und das exec Binding ist kein "Anfänger-Binding", da gibt es schon ein paar Fallstricke zu umgehen). http sollte das problemlos "alleine" erledigen können, sogar mitsamt einer passenden Einheit, falls die Zahl eine sinnvolle Einheit hat.
Natürlich kannst Du auch dne Weg über ein externes Script gehen, das ist aber umständlich (und das exec Binding ist kein "Anfänger-Binding", da gibt es schon ein paar Fallstricke zu umgehen). http sollte das problemlos "alleine" erledigen können, sogar mitsamt einer passenden Einheit, falls die Zahl eine sinnvolle Einheit hat.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 6
- Registriert: 12. Nov 2022 12:20
Re: Numerischen Wert aus curl extrahieren und als Number weiterverarbeiten
Hallo,
die vom Gerät ausgegebene Seite ist statisch, der Abschnitt mit dem interessanten Wert sieht so aus:
--> im Beispiel ist der Wert "798" (ohne das Minus).
Per Skript wäre es:
das gibt dann
aus.
Wie wäre denn das Vorgehen mit dem REGEX-Filter?
die vom Gerät ausgegebene Seite ist statisch, der Abschnitt mit dem interessanten Wert sieht so aus:
Code: Alles auswählen
...
<div class='style1c' id='feuchtetransport'>
Feuchtetransport:<br>
-798 g/24h
</div>
...
Per Skript wäre es:
Code: Alles auswählen
curl http://192.168.178.107 | grep g/24h | awk -v FS="(-| g/24h)" '{print $2}'
Code: Alles auswählen
798
Wie wäre denn das Vorgehen mit dem REGEX-Filter?
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Numerischen Wert aus curl extrahieren und als Number weiterverarbeiten
Du brauchst wie gesagt das http Addon sowie den RegEx Transformation Service
(Main UI->Administration->Einstellungen->Add-on Store->Bindings->http sowie Add-on Store->Other->Transformation Add-ons->RegEx)
Zunächst erstellst Du ein http url Thing:
(Main UI->Administration->Einstellungen->Things->(ganz rechts ganz unten das weiße Plus im blauen Kreis)->http Binding->http URL thing)
Als ID gibst Du z.B. entfeuchter an, als Label Luftentfeuchter.
Die ID sollte möglichst kurz aber eindeutig sein, sie darf keine Sonderzeichen enthalten, Großbuchstaben sind möglich, aber verpönt (openHAB nutzt CamelCase Schreibweise), Unterstrich und minus sind erlaubt, sollten aber vermieden werden, Ziffern nach Möglichkeit nicht zu Beginn und nur, wenn sie sich nicht vermeiden lassen (z.B. mehrere gleichartige Geräte). Die ID kann später nicht geändert werden (das gilt für alle IDs systemweit, man kann dann höchstens das entsprechende Objekt löschen und neu erstellen - oder man fährt openHAB herunter und bearbeitet alle Dateien, in denen auf die ID verwiesen wird von Hand - nicht ganz ungefährlich...)
Das Label kannst Du nach eigenem Gutdünken gestalten, auch UTF-8 ist erlaubt, das Label kann jederzeit geändert werden.
Das Thing wird unter dem Label gelistet, suchen kannst Du danach sowohl mit ID als auch mit Label.
Als baseURL gibst Du http://192.168.178.107 an (das Protokoll muss mit angegeben werden, da das Binding auch https beherrscht).
Über den Parameter refresh kannst Du die Zeit zwischen zwei Abrufen einstellen, also z.B. 60 für "alle 60 Sekunden"
Nun musst Du das Thing speichern.
Anschließend öffnest Du das Thing wieder aus der Thing-Liste heraus.
Jetzt kannst Du auf die Channel-Ansicht umschalten (oberer Rand des Fensters) und einen neuen Channel hinzufügen.
Als ID kannst Du z.B. transport setzen, als Label entsprechend Feuchtetransport. Diese Werte sind eigentlich eher nebensächlich, aber wir sind ja ordentlich
Als Channel Type wählst Du Number-Kanal aus und als status-Transformation gibst Du REGEX:.*<br>.*-(\d+) g.24h.* an, was bedeutet, vorne beliebige Zeichenfolge, gefolgt von <br>, gefolgt von beliebiger Zeichenfolge, gefolgt von -, gefolgt von mindestens einer Ziffer, alle Ziffern merken, nach der letzten Ziffer folgt ein Leerzeichen und g, ein beliebiges Zeichen und die Zeichen 24h, sowie beliebige andere Zeichen. Der in Klammern stehende Wert wird zurückgegeben und landet als Status im Channel transport. Falls das Suchmuster nicht genau genug ist, kann es noch beliebig erweitert werden, man muss nur etwas wegen der umliegenden Zeichen aufpassen (z.B. Zeilenumbruch, Einrückungen, Sonderzeichen)
Das geänderte Thing sicherst Du und lässt anschließend noch ein Number Item mit dem Channel verlinken:
Channel selektieren, Add Link to Item...-> Create a new Item->sinnvollen Namen vergeben (nur englisches Alphabet, Unterstrich und arabische Ziffern erlaubt) und ein sinnvolles Label vergeben - das wird in der UI mit angezeigt, also z.B. Feuchte Transport, der Typ sollte automatisch auf Number stehen. g/h ist in openHAB keine übliche Unit, es ist also in diesem Fall nicht sinnvoll, eine Dimension auszuwählen.
Wenn du den Link speicherst, sollte das Item unmittelbar mit dem aktuellen Wert angezeigt werden.
Zum Abschluss kannst Du in der Itemliste (oder alternativ auch über den Channellink) das gerade erstellte Item bearbeiten und in den Metadaten die State Description ergänzen. Du trägst unter Pattern die Zeichenfolge %.0f g/24h ein. Das bedeutet: der Wert als Floatzahl ohne Nachkommastellen, gefolgt von der Zeichenfolge g/24h.
In der UI (nicht in der Itemliste innerhalb der Administrationsoberfläche) sollte nun der Zahlenwert incl. Einheit angezeigt werden.
(ist alles mehr oder weniger aus dem Kopf, ich bin auf der Arbeit und habe momentan keinen Zugriff auf mein System...)
(Main UI->Administration->Einstellungen->Add-on Store->Bindings->http sowie Add-on Store->Other->Transformation Add-ons->RegEx)
Zunächst erstellst Du ein http url Thing:
(Main UI->Administration->Einstellungen->Things->(ganz rechts ganz unten das weiße Plus im blauen Kreis)->http Binding->http URL thing)
Als ID gibst Du z.B. entfeuchter an, als Label Luftentfeuchter.
Die ID sollte möglichst kurz aber eindeutig sein, sie darf keine Sonderzeichen enthalten, Großbuchstaben sind möglich, aber verpönt (openHAB nutzt CamelCase Schreibweise), Unterstrich und minus sind erlaubt, sollten aber vermieden werden, Ziffern nach Möglichkeit nicht zu Beginn und nur, wenn sie sich nicht vermeiden lassen (z.B. mehrere gleichartige Geräte). Die ID kann später nicht geändert werden (das gilt für alle IDs systemweit, man kann dann höchstens das entsprechende Objekt löschen und neu erstellen - oder man fährt openHAB herunter und bearbeitet alle Dateien, in denen auf die ID verwiesen wird von Hand - nicht ganz ungefährlich...)
Das Label kannst Du nach eigenem Gutdünken gestalten, auch UTF-8 ist erlaubt, das Label kann jederzeit geändert werden.
Das Thing wird unter dem Label gelistet, suchen kannst Du danach sowohl mit ID als auch mit Label.
Als baseURL gibst Du http://192.168.178.107 an (das Protokoll muss mit angegeben werden, da das Binding auch https beherrscht).
Über den Parameter refresh kannst Du die Zeit zwischen zwei Abrufen einstellen, also z.B. 60 für "alle 60 Sekunden"
Nun musst Du das Thing speichern.
Anschließend öffnest Du das Thing wieder aus der Thing-Liste heraus.
Jetzt kannst Du auf die Channel-Ansicht umschalten (oberer Rand des Fensters) und einen neuen Channel hinzufügen.
Als ID kannst Du z.B. transport setzen, als Label entsprechend Feuchtetransport. Diese Werte sind eigentlich eher nebensächlich, aber wir sind ja ordentlich

Als Channel Type wählst Du Number-Kanal aus und als status-Transformation gibst Du REGEX:.*<br>.*-(\d+) g.24h.* an, was bedeutet, vorne beliebige Zeichenfolge, gefolgt von <br>, gefolgt von beliebiger Zeichenfolge, gefolgt von -, gefolgt von mindestens einer Ziffer, alle Ziffern merken, nach der letzten Ziffer folgt ein Leerzeichen und g, ein beliebiges Zeichen und die Zeichen 24h, sowie beliebige andere Zeichen. Der in Klammern stehende Wert wird zurückgegeben und landet als Status im Channel transport. Falls das Suchmuster nicht genau genug ist, kann es noch beliebig erweitert werden, man muss nur etwas wegen der umliegenden Zeichen aufpassen (z.B. Zeilenumbruch, Einrückungen, Sonderzeichen)
Das geänderte Thing sicherst Du und lässt anschließend noch ein Number Item mit dem Channel verlinken:
Channel selektieren, Add Link to Item...-> Create a new Item->sinnvollen Namen vergeben (nur englisches Alphabet, Unterstrich und arabische Ziffern erlaubt) und ein sinnvolles Label vergeben - das wird in der UI mit angezeigt, also z.B. Feuchte Transport, der Typ sollte automatisch auf Number stehen. g/h ist in openHAB keine übliche Unit, es ist also in diesem Fall nicht sinnvoll, eine Dimension auszuwählen.
Wenn du den Link speicherst, sollte das Item unmittelbar mit dem aktuellen Wert angezeigt werden.
Zum Abschluss kannst Du in der Itemliste (oder alternativ auch über den Channellink) das gerade erstellte Item bearbeiten und in den Metadaten die State Description ergänzen. Du trägst unter Pattern die Zeichenfolge %.0f g/24h ein. Das bedeutet: der Wert als Floatzahl ohne Nachkommastellen, gefolgt von der Zeichenfolge g/24h.
In der UI (nicht in der Itemliste innerhalb der Administrationsoberfläche) sollte nun der Zahlenwert incl. Einheit angezeigt werden.
(ist alles mehr oder weniger aus dem Kopf, ich bin auf der Arbeit und habe momentan keinen Zugriff auf mein System...)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 6
- Registriert: 12. Nov 2022 12:20
Re: Numerischen Wert aus curl extrahieren und als Number weiterverarbeiten
Hallo!
Wow - ich bin restlos begeistert! Hat prima funktioniert!
Und das noch "aus dem Kopf" - RESPEKT
Wow - ich bin restlos begeistert! Hat prima funktioniert!
Und das noch "aus dem Kopf" - RESPEKT

- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Numerischen Wert aus curl extrahieren und als Number weiterverarbeiten

openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet