TCR IP 4 Status XML verarbeiten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

mike-eddk
Beiträge: 13
Registriert: 9. Mär 2020 08:41

TCR IP 4 Status XML verarbeiten

Beitrag 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
Zuletzt geändert von mike-eddk am 9. Mär 2020 15:06, insgesamt 1-mal geändert.

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

Re: TCR IP 4 Status JSON verarbeiten

Beitrag 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

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

mike-eddk
Beiträge: 13
Registriert: 9. Mär 2020 08:41

Re: TCR IP 4 Status JSON verarbeiten

Beitrag von mike-eddk »

Ok, dann sagen wir mal strukturierte Daten :-)

Kann ich die in irgendeiner Weise Verarbeiten/gebrauchen?

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

Re: TCR IP 4 Status JSON verarbeiten

Beitrag 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

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

mike-eddk
Beiträge: 13
Registriert: 9. Mär 2020 08:41

Re: TCR IP 4 Status JSON verarbeiten

Beitrag 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

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

Re: TCR IP 4 Status XML verarbeiten

Beitrag 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

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

mike-eddk
Beiträge: 13
Registriert: 9. Mär 2020 08:41

Re: TCR IP 4 Status XML verarbeiten

Beitrag 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?

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

Re: TCR IP 4 Status XML verarbeiten

Beitrag 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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

mike-eddk
Beiträge: 13
Registriert: 9. Mär 2020 08:41

Re: TCR IP 4 Status XML verarbeiten

Beitrag 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 ...

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

Re: TCR IP 4 Status XML verarbeiten

Beitrag 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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten