Transformation für String

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: Transformation für String

Beitrag von udo1toni »

BOP hat geschrieben: 4. Okt 2021 20:39 ich befürchte, wir schreiben etwas aneinander vorbei.
Als Erstes: Meine Things und Items sind alle über die GUI angelegt. Nicht über Dateien. Deswegen ist die Konfiguration an der einen oder andere Stelle etwas abweichend. Und, wie ich fürchte, nicht alles Möglich.
Nein, Deine Befürchtung ist unbegründet. Es spielt tatsächlich keine Rolle, ob Du Items und/oder Things über UI oder über Textdatei anlegst. Für die Textvariante musst Du halt wissen, wie die Schlüsselworte lauten, das ist aber auch schon der ganze Unterschied.

Natürlich gibt es Dinge, die Du nicht über die UI erreichen kannst, z.B. die exec.whitelist. Du kommst also nicht komplett um die Textkonfiguration herum. JavaScript Transformations oder auch Mappings gehören ebenfalls in die Kategorie der Dinge, die zwingend über Text laufen müssen. Macht abeer auch nichts, man kann ja beide Oberflächen parallel verwenden. Man sollte nur möglichst bei einer Konfigurationsart für einen Teilbereich bleiben, um sich nicht selbst eine lange Nase zu machen ("Warum finde ich meine UI-Konfiguration nicht in der Textdatei?" - "Warum kann ich meine Text-Konfiguration in der UI zwar sehen aber nicht bearbeiten?")
BOP hat geschrieben: 4. Okt 2021 20:39 Das Skript beinhaltet (inzwischen) nur noch den curl Befehl. Siehe oben. Und da mir jetzt auffällt, dass das Skript eigentlich unnötig ist, da ich den einen Befehl auch direkt ausführen kann, wird der Befehl jetzt direkt vom Exec-Thing ausgeführt. Ohne Umweg über das Skript.
Wobei Du dafür weder curl noch exec brauchst. Die Abfrage kannst Du genauso gut über das http Binding erledigen.
Der Vorteil des nativen http Bindings ist hier ganz klar die Eignung für Number Items. Es sollte problemlos möglich sein, die Werte als echte Zahlen direkt in die Items zu schreiben (evtl. geht das sogar mittels Profile aus einem String Channel heraus... das müsste man halt ausprobieren)
BOP hat geschrieben: 4. Okt 2021 20:39 Mein Gedanke, das JavaScript direkt auf dem Thing auszuführen, war eigentlich, dass die Reihenfolge keine Rolle spielen sollte. Ob ich im gesamten String erst alle Komma durch Punkte ersetze und dann das REGEX darauf loslasse oder umgekehrt, sollte doch eigentlich in diesem Fall keinen relevanten Unterschied machen!?
Ja, da hast Du natürlich recht, das ist mir inzwischen auch aufgegangen. :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

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

Re: Transformation für String

Beitrag von udo1toni »

BOP hat geschrieben: 4. Okt 2021 20:39 ich befürchte, wir schreiben etwas aneinander vorbei.
Als Erstes: Meine Things und Items sind alle über die GUI angelegt. Nicht über Dateien. Deswegen ist die Konfiguration an der einen oder andere Stelle etwas abweichend. Und, wie ich fürchte, nicht alles Möglich.
Nein, Deine Befürchtung ist unbegründet. Es spielt tatsächlich keine Rolle, ob Du Items und/oder Things über UI oder über Textdatei anlegst. Für die Textvariante musst Du halt wissen, wie die Schlüsselworte lauten, das ist aber auch schon der ganze Unterschied.

Natürlich gibt es Dinge, die Du nicht über die UI erreichen kannst, z.B. die exec.whitelist. Du kommst also nicht komplett um die Textkonfiguration herum. JavaScript Transformations oder auch Mappings gehören ebenfalls in die Kategorie der Dinge, die zwingend über Text laufen müssen. Macht abeer auch nichts, man kann ja beide Oberflächen parallel verwenden. Man sollte nur möglichst bei einer Konfigurationsart für einen Teilbereich bleiben, um sich nicht selbst eine lange Nase zu machen ("Warum finde ich meine UI-Konfiguration nicht in der Textdatei?" - "Warum kann ich meine Text-Konfiguration in der UI zwar sehen aber nicht bearbeiten?")
BOP hat geschrieben: 4. Okt 2021 20:39 Das Skript beinhaltet (inzwischen) nur noch den curl Befehl. Siehe oben. Und da mir jetzt auffällt, dass das Skript eigentlich unnötig ist, da ich den einen Befehl auch direkt ausführen kann, wird der Befehl jetzt direkt vom Exec-Thing ausgeführt. Ohne Umweg über das Skript.
Wobei Du dafür weder curl noch exec brauchst. Die Abfrage kannst Du genauso gut über das http Binding erledigen.
Der Vorteil des nativen http Bindings ist hier ganz klar die Eignung für Number Items. Es sollte problemlos möglich sein, die Werte als echte Zahlen direkt in die Items zu schreiben (evtl. geht das sogar mittels Profile aus einem String Channel heraus... das müsste man halt ausprobieren)
BOP hat geschrieben: 4. Okt 2021 20:39 Mein Gedanke, das JavaScript direkt auf dem Thing auszuführen, war eigentlich, dass die Reihenfolge keine Rolle spielen sollte. Ob ich im gesamten String erst alle Komma durch Punkte ersetze und dann das REGEX darauf loslasse oder umgekehrt, sollte doch eigentlich in diesem Fall keinen relevanten Unterschied machen!?
Ja, da hast Du natürlich recht, das ist mir inzwischen auch aufgegangen. :)

Ich möchte Dir aber raten, wenigstens einen Versuch mit der Api zu starten, über das http Binding. Dir Base URL wäre dann

Code: Alles auswählen

https://www.data199.com/api/pv1/device/lastmeasureme 
und Du musst dann noch Daten übergeben (das geht unter advanced options)

Code: Alles auswählen

deviceids=0216CBA48229,026ECD8ABC79,0258290D6C2A&phoneid=519032776604
Es handelt sich um einen POST Request, das musst Du so konfigurieren.

Da laut Doku diverse Sensoren unterstützt werden, wäre das auf jeden Fall einen Versuch wert.

Wenn das klappt, bekommst Du ein JSON Objekt zurück, mit dem Du wesentlich einfacher arbeiten kannst.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

BOP
Beiträge: 197
Registriert: 23. Sep 2018 19:43
Answers: 1

Re: Transformation für String

Beitrag von BOP »

udo1toni hat geschrieben: 4. Okt 2021 21:34 Man sollte nur möglichst bei einer Konfigurationsart für einen Teilbereich bleiben, um sich nicht selbst eine lange Nase zu machen ("Warum finde ich meine UI-Konfiguration nicht in der Textdatei?" - "Warum kann ich meine Text-Konfiguration in der UI zwar sehen aber nicht bearbeiten?")
Genau so handhabe ich das auch. Things und Items lege ich über die GUI an. Den ganzen Rest erledige ich mit Dateien.
Was ich meinte ist, dass ich über die GUI z.B. keine Transformations verknüpfen kann, da ich den Typ ja als Optionbox angeben muss.
Wobei Du dafür weder curl noch exec brauchst. Die Abfrage kannst Du genauso gut über das http Binding erledigen.
Das habe ich versucht. Wenn du mir verrätst, wie ich die Browserkennung dabei mit übergebe ...
Ohne geht es leider nicht. Dann meldet der Server einen Fehler zurück.
Ich möchte Dir aber raten, wenigstens einen Versuch mit der Api zu starten, über das http Binding. Dir Base URL wäre dann

Code: Alles auswählen

https://www.data199.com/api/pv1/device/lastmeasureme 
und Du musst dann noch Daten übergeben (das geht unter advanced options)

Code: Alles auswählen

deviceids=0216CBA48229,026ECD8ABC79,0258290D6C2A&phoneid=519032776604
Es handelt sich um einen POST Request, das musst Du so konfigurieren.

Da laut Doku diverse Sensoren unterstützt werden, wäre das auf jeden Fall einen Versuch wert.

Wenn das klappt, bekommst Du ein JSON Objekt zurück, mit dem Du wesentlich einfacher arbeiten kannst.
Werde ich die Tage auf jeden Fall noch ausprobieren.

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

Re: Transformation für String

Beitrag von udo1toni »

BOP hat geschrieben: 5. Okt 2021 18:28 Genau so handhabe ich das auch. Things und Items lege ich über die GUI an. Den ganzen Rest erledige ich mit Dateien.
Was ich meinte ist, dass ich über die GUI z.B. keine Transformations verknüpfen kann, da ich den Typ ja als Optionbox angeben muss.
Ich weiß jetzt ehrlich gesagt nicht, was Du damit meinst. Grundsätzlich lassen sich Transformations ohne Einschränkungen auch über die UI erstellen. Natürlich, wenn man MAP oder JS o.Ä. verwendet, muss man die beteiligte Datei separat erstellen, das passiert bei der Anlage über Textdateien aber auch. Die Verknüpfung funktioniert aber in der GUI genauso.
BOP hat geschrieben: 5. Okt 2021 18:28 Das habe ich versucht. Wenn du mir verrätst, wie ich die Browserkennung dabei mit übergebe ...
Ohne geht es leider nicht. Dann meldet der Server einen Fehler zurück.
Ich habe das noch nicht selbst verwendet, aber letztlich ist das ein Parameter, der im Header übergeben wird. Mutmaßlich schreibst Du einfach

Code: Alles auswählen

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
in das Feld Header rein. Ausprobiert habe ich das aber noch nicht.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

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

Re: Transformation für String

Beitrag von udo1toni »

Hab gerade noch mal etwsa gestöbert. Tatsächlich lässt mich dieser Thread vermuten, dass es derzeit nicht möglich ist, den User Agent frei zu setzen.

Das ist sehr schade und sollte im Zweifel als Issue erfasst werden. Wozu kann ich den Header setzen, aber nicht bestimmte Bestandteile des Headers...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

BOP
Beiträge: 197
Registriert: 23. Sep 2018 19:43
Answers: 1

Re: Transformation für String

Beitrag von BOP »

udo1toni hat geschrieben: 5. Okt 2021 20:54 Ich weiß jetzt ehrlich gesagt nicht, was Du damit meinst. Grundsätzlich lassen sich Transformations ohne Einschränkungen auch über die UI erstellen.
Damit meine ich die von dir weiter oben vorgeschlagene Verkettung des REGEX Ausruckes mit anschließendem JS Aufruf.
In der GUI muss ich mich für eine Transformation entscheiden:
oh3.jpg
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: Transformation für String

Beitrag von udo1toni »

Du befindest Dich da aber immer noch im Profile. Im Profile geht das Verketten keinesfalls.

Ich rede aber immer noch vom Thing/Channel.

Um das noch mal zu verdeutlichen:

Code: Alles auswählen

---------------------
|      Binding      |
| ----------------- |   -----------   --------
| |               | |   |         |   |      |
| | Thing/Channel | |->-| Profile |->-| Item |
| |               | |   |         |   |      |
| ----------------- |   -----------   --------
|                   |
---------------------
Du musst die Konfiguration im Thing vornehmen, nicht im Profile (bzw. Du kannst einen Teil der Konfiguration im Thing anlegen und einen weiteren Teil im Profile - das hat dann den Vorteil, dass Du dennoch nur ein Thing brauchst, wenn Du auf mehr als ein Detail des Rückgabewertes in unterschiedlichen Items zugreifen willst.)

Gewöhnlich ist die Transformation Bestandteil des Channels, im Falle von exec ist diese aber direkt im Thing untergebracht, schließlich gibt es nur genau einen String, der per Transformation zu bearbeiten ist.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

BOP
Beiträge: 197
Registriert: 23. Sep 2018 19:43
Answers: 1

Re: Transformation für String

Beitrag von BOP »

udo1toni hat geschrieben: 8. Okt 2021 18:32 Du befindest Dich da aber immer noch im Profile. Im Profile geht das Verketten keinesfalls.
Ich dachte bis gerade, textbasiert geht das. Ich wollte nur erklären, was ich mit meiner Aussage, dass in der GUI nicht alles geht, was textbasiert geht, meinte.
Wenn das Textbasiert aber auch nicht geht, ziehe ich meine Aussage zurück und behaupte das Gegenteil! :lol:
... (bzw. Du kannst einen Teil der Konfiguration im Thing anlegen und einen weiteren Teil im Profile - ...
Das habe ich ja so umgesetzt. Nur dass die JS Transformation im Thing irgendwie nicht das tut, was sie soll. Also Komma durch Punkt ersetzen.
Habs mir jetzt aber, aus Zeitmangel, auch nicht weiter angeschaut.

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

Re: Transformation für String

Beitrag von udo1toni »

Nun, vielleicht ist da noch irgendwo ein grundsätzlicher Fehler drin ;) Blöderweise sehe ich da keinen Fehler.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

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

Re: Transformation für String

Beitrag von udo1toni »

Ah... Vielleicht doch... Das exec Binding ist ein bisschen älter... vielleicht muss der Aufruf JS(comma2dot.js) heißen, nicht JS:comma2dot.js
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten