Seite 1 von 2
TCR IP 4 Status XML verarbeiten
Verfasst: 9. Mär 2020 08:57
von mike-eddk
Hallo zusammen,
ich hab mich jetzt doch mal durchgerungen, meine vielen kleinen Tools in Openhab zu bündeln.
Nachdem die Grundinstallation durch ist, stoße ich jetzt schon an meine Grenzen

Ich habe einen "TCR IP 4" bei dem kann ich den Status aller vier Schalter über das Netzwerk
192.168.0.3/status.xml
das Ergebnis sieht so aus(led1 ist on):
Code: Alles auswählen
<response>
<led1>1</led1>
<led2>0</led2>
<led3>0</led3>
<led4>0</led4>
<pot0>nicht angeschlossen</pot0>
</response>
Jeden einzelnen Schalter kann ich toggeln:
192.168.0.3/leds.cgi?led=1
192.168.0.3/leds.cgi?led=2
...
Jetzt meine Frage wie kann ich den Status der 4 Schalter aus dem XML auslesen und an die Items übergeben?
Danke für die Anregungen.
Gruß Mike
Re: TCR IP 4 Status JSON verarbeiten
Verfasst: 9. Mär 2020 14:11
von udo1toni
Das was Du Da gepostet hast, ist kein JSON und auch kein XML (obwohl der Link das vermuten lässt).
Gesendet von meinem SM-G973F mit Tapatalk
Re: TCR IP 4 Status JSON verarbeiten
Verfasst: 9. Mär 2020 14:31
von mike-eddk
Ok, dann sagen wir mal strukturierte Daten
Kann ich die in irgendeiner Weise Verarbeiten/gebrauchen?
Re: TCR IP 4 Status JSON verarbeiten
Verfasst: 9. Mär 2020 14:37
von udo1toni
Na ja, strukturiert... ich frage mal andersrum... ist das tatsächlich exakt das, was zurückgeliefert wird? (Stichwort Quelltext anzeigen)
Gesendet von meinem SM-G973F mit Tapatalk
Re: TCR IP 4 Status JSON verarbeiten
Verfasst: 9. Mär 2020 15:05
von mike-eddk
Ja, genau so kommt das zurück:
Code: Alles auswählen
<response>
<led1>1</led1>
<led2>0</led2>
<led3>0</led3>
<led4>0</led4>
<pot0>nicht angeschlossen</pot0>
</response>
Vollständig und ungekürzt
Re: TCR IP 4 Status XML verarbeiten
Verfasst: 9. Mär 2020 16:00
von udo1toni
Dann wirst Du vermutlich mit einem Java script als Transformation arbeiten müssen, den ankommenden String am CR zerlegen und Teilstring 0 ,1,2 oder 3 zurückgeben. Wahlweise mit Wandlung nach OFF/ON
Gesendet von meinem SM-G973F mit Tapatalk
Re: TCR IP 4 Status XML verarbeiten
Verfasst: 9. Mär 2020 16:43
von mike-eddk
Prima ...
ich freu mich, dass ich schon mal ein paar Things und Items eingerichtet habe.
Hast du einen Ansatz was ich da jetzt an welcher Stelle einstellen muss?
Re: TCR IP 4 Status XML verarbeiten
Verfasst: 10. Mär 2020 06:08
von udo1toni
Oh Mann... Ich fasse es nicht... Ich hab gestern über tapatalk rein geschaut, da standen ausschließlich die Werte, nicht aber die umgebenden Tags. Jetzt am PC sieht das komplett anders aus

Das was da zurück kommt ist entgegen meinem ersten Post xml. Entsprechend sollte es reichen, als transformation XPATH(/response/led1()) für die erste LED zu verwenden, um 0 oder 1 für die erste LED zurück zu bekommen.
Re: TCR IP 4 Status XML verarbeiten
Verfasst: 10. Mär 2020 09:48
von mike-eddk
Ich habe jetzt mal in den .items die vier Button angelegt.
Code: Alles auswählen
Switch button1 "Markiese" { http=">[ON:POST:http://local/leds.cgi?led=1] >[OFF:POST:http://local/leds.cgi?led=1]" }
Switch button2 "Terrasse" { http=">[ON:POST:http://local/leds.cgi?led=2] >[OFF:POST:http://local/leds.cgi?led=2]" }
Switch button3 "Steckdose" { http=">[ON:POST:http://local/leds.cgi?led=3] >[OFF:POST:http://local/leds.cgi?led=3]" }
Switch button4 "Eingang" { http=">[ON:POST:http://local/leds.cgi?led=4] >[OFF:POST:http://local/leds.cgi?led=4]" }
Das Schalten funktioniert, an welcher Stelle muss ich denn jetzt die Statusabfrage einbauen, ich stehe da etwas auf dem Schlauch ...
Re: TCR IP 4 Status XML verarbeiten
Verfasst: 10. Mär 2020 14:48
von udo1toni
Am einfachsten verwendest Du dazu separate Items und eine Rule.
Items:
Code: Alles auswählen
Group gButtons
Group gButtonStates
Switch button1 "Markiese" (gButtons) { http=">[ON:POST:http://local/leds.cgi?led=1] >[OFF:POST:http://local/leds.cgi?led=1]" }
Switch button2 "Terrasse" (gButtons) { http=">[ON:POST:http://local/leds.cgi?led=2] >[OFF:POST:http://local/leds.cgi?led=2]" }
Switch button3 "Steckdose" (gButtons) { http=">[ON:POST:http://local/leds.cgi?led=3] >[OFF:POST:http://local/leds.cgi?led=3]" }
Switch button4 "Eingang" (gButtons) { http=">[ON:POST:http://local/leds.cgi?led=4] >[OFF:POST:http://local/leds.cgi?led=4]" }
Number button1_state "Markiese" (gButtonStates) { http="<[http://local/status.xml:30000:XPATH(/response/led1())]" }
Number button2_state "Terrasse" (gButtonStates) { http="<[http://local/status.xml:30000:XPATH(/response/led2())]" }
Number button3_state "Steckdose" (gButtonStates) { http="<[http://local/status.xml:30000:XPATH(/response/led3())]" }
Number button4_state "Eingang" (gButtonStates) { http="<[http://local/status.xml:30000:XPATH(/response/led4())]" }
Code: Alles auswählen
rule "update status"
when
Member of gButtonStates changed
then
gButtons.members.filter[i |
i.name == triggeringItem.name.split("_").get(0)
].head.postUpdate(if(triggeringItem.state != 1) OFF else ON)
end
Die Rule triggert jedes Mal, wenn der Status eines der Items der Gruppe gButtonStates sich ändert.
Anschließend sucht die Rule das passende Item aus der Gruppe gButtons heraus und ändert den Status des Items passend.
Das große Problem ist hier allerdings das ständige Pollen des Status, alle 30 Sekunden 4 mal. das kannst Du mit einem http cache etwas entschärfen. Bleibt noch der lange Updatezeitraum (30000 Millisekunden), den könnte man zusammen mit dem http cache vielleicht noch etwas reduzieren, z.B. auf 10 Sekunden. Du hast aber trotzdem massig Polls.