WebUI-Systemvariable per Raspi auslesen

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

WebUI-Systemvariable per Raspi auslesen

Beitrag von dtp » 16.04.2016, 12:27

Hallo,

versuche gerade, den Zustand meiner Systemvariablen "Haus SV Anwesenheit" über meinen Raspi auszulesen. Mit dem Befehl

Code: Alles auswählen

curl -s -k "http://192.168.0.20:8181/rega.exe?x=dom.GetObject('Haus%20SV%20Anwesenheit').Variable()"
erhalte ich jedoch nur folgende Ausgabe:

Code: Alles auswählen

<xml><exec>/rega.exe</exec><sessionId></sessionId><httpUserAgent>User-Agent: curl/7.38.0</httpUserAgent><x>1</x></xml>
Würde aber gerne als Ausgabe den wirklichen Inhalt der Systemvariablen, also "anwesend" oder "nicht anwesend" angezeigt bekommen. Hat jemand einen Tipp?

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: WebUI-Systemvariable per Raspi auslesen

Beitrag von dtp » 16.04.2016, 15:42

So, Lösung gefunden. War eigentlich durchaus auf dem richtigen Weg. Allerdings erhalte ich nur "true" oder "false" als Antwort, was aber kein Problem darstellt. Hier mal ein kleines Bashskript, mit dem ich mir nun beim Betätigen der Klingel bei Abwesenheit (present = false) eine Push-Nachricht und ein Bild (Haustürklingel.jpg) per Telegram zuschicken lasse. Sollte jemand zuhause sein (present == true), wird auf der CCU die virtuelle Taste "EG Briefkasten VT Klingel" betätigt, über die ich den Dimmer im Keller blinken lasse.

Code: Alles auswählen

#!/bin/bash
CCU_IP=<IP-Adresse der CCU>
LBoxPi_IP=<IP-Adresse des Raspberry>
HMInfo=<Telegram Bot Token>
ChatId=<Telegram Chat-ID>

present=$(curl -s -k "http://${CCU_IP}:8181/rega.exe?x=dom.GetObject('Haus%20SV%20Anwesenheit').Value()")
present=${present##*<x>}
present=${present%%</x>*}

if [ "$present" == "true" ]
  then
    curl -s -k "http://${CCU_IP}:8181/rega.exe?x=dom.GetObject('EG%20Briefkasten%20VT%20Klingel').DPByHssDP('PRESS_SHORT').State(1)"
elif [ "$present" == "false" ]
  then
    curl -s -k "https://api.telegram.org/bot${HMinfo}/sendMessage" -d text="Haustürklingel betätigt." -d chat_id=$ChatId
    wget -O /home/pi/Haustürklingel.jpg http://${LBoxPi_IP}:80/cam.jpg
    curl -s -k "https://api.telegram.org/bot${HMinfo}/sendPhoto" -F chat_id=$ChatId -F disable_notifications=1 -F photo="@/home/pi/Haustürklingel.jpg"
fi

exit 0
Vielleicht kann's ja mal jemand gebrauchen.

Eine Frage hätte ich aber noch. Bisher habe ich keine Lösung dafür gefunden, wenn im Namen der Systemvariablen oder der virtuellen Taste Umlaute enthalten sind. Das Ersetzen durch die entsprechenden UTF-8-Codes wird leider ignoriert. Hat hier jemand eine Idee?

Bis dann,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Xel66
Beiträge: 14085
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 580 Mal
Danksagung erhalten: 1492 Mal

Re: WebUI-Systemvariable per Raspi auslesen

Beitrag von Xel66 » 16.04.2016, 16:38

dtp hat geschrieben:Vielleicht kann's ja mal jemand gebrauchen.
Das kann man sicherlich gebrauchen. Auch wäre das Auslagern von solchen Funktionen in leistungsfähiger Hardware, die nicht so Systemvariablen-empfindlich ist, der durchaus bessere Weg. Auf dem gleichen Weg lassen sich ja auch Ergebnisse von externen Scriptläufen per URL auf die CCU in Systemvariablen zurückschreiben.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

Re: WebUI-Systemvariable per Raspi auslesen

Beitrag von alchy » 16.04.2016, 22:38

dtp hat geschrieben: Würde aber gerne als Ausgabe den wirklichen Inhalt der Systemvariablen, also "anwesend" oder "nicht anwesend" angezeigt bekommen. Hat jemand einen Tipp?
Sorry, bin erst jetzt drüber gestolpert.
Das sollte *IMHO* auch über .ValueName() direkt funktionieren. :wink:

Code: Alles auswählen

http://IP.DEINER.EIGENEN.CCU:8181/egal.exe?x=dom.GetObject("Anwesenheit").ValueName();
Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

paul53
Beiträge: 2554
Registriert: 26.04.2012, 20:42
Wohnort: Berlin
Danksagung erhalten: 15 Mal

Re: WebUI-Systemvariable per Raspi auslesen

Beitrag von paul53 » 16.04.2016, 23:36

alchy hat geschrieben:Das sollte *IMHO* auch über .ValueName() direkt funktionieren.
Die Methode .ValueName() war mir bisher unbekannt. Funktioniert sie tatsächlich ?
Ansonsten kennen ich die Methoden .ValueName0() und .ValueName1() (für Typ "Logikwert") und die Methode .ValueList() für Typ "Werteliste".
Versionen: HM-CC-TC 2.1, HM-LC-Sw1 1.9, HM-CC-RT-DN 1.1, HM-MOD-RPI-PCB 1.2.1 (keine CCU)

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

Re: WebUI-Systemvariable per Raspi auslesen

Beitrag von alchy » 17.04.2016, 07:40

Hoffentlich habe ich jetzt keinen Mist geschrieben. :shock: Ich hatte das nicht getestet, da von unterwegs gepostet.
Wenn du so fragst, wirst du es sicher probiert haben und es funktioniert nicht. Dann sorry.

Ich hatte mir mal irgendwann ein Script zusammengeschrieben, welches genau das macht, was dtp will.
Also Rückgabe von anwesend / nicht anwesend oder eingeschaltet/ ausgeschaltet usw. bei den Variablen.
Dabei ist es in einem Script sehr mühsam per if true dann anwesend usw. auf alle Variablen zu reagieren, da ja unter Umständen jede Variable einen anderen Rückgabewert hat....
Das ist mir gestern abend beim Lesen der Frage eingefallen, vielleicht aber auch nicht vollständig. Mein Gedächnis ist auch nicht mehr das , was es mal war. :mrgreen:
Kann auch durchaus sein, das ich das mittels einer if then else gemacht habe, die dann jeweils mittels .ValueName0() und .ValueName1() den Rückgabewert ausgelesen hat.

dtp, oder wer anders wird sich schon melden, wenn es nicht funktioniert.
Ich kann es im Moment schlecht ausprobieren.

sorry nochmal
Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: WebUI-Systemvariable per Raspi auslesen

Beitrag von dtp » 18.04.2016, 14:08

alchy hat geschrieben: dtp, oder wer anders wird sich schon melden, wenn es nicht funktioniert.
Ich kann es im Moment schlecht ausprobieren.
Hi Alchy,

auf jeden Fall vielen Dank für Deinen Hinweis.

Mit den Befehlen "##*<x>" und "%%</x>*", wie im obigen Shellskript von mir verwendet, klappt es aber auch sehr gut. So kann ich aus dem Antwortstring alles wegschneiden, was mich nicht interessiert.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: WebUI-Systemvariable per Raspi auslesen

Beitrag von dtp » 18.04.2016, 22:25

So, hab's mal mit "ValueName()" versucht. Dann erhalte ich als Ausgabe in der Tat den Inhalt der Systemvariablen. Allerdings weiterhin in der Form

Code: Alles auswählen

<xml><exec>/rega.exe</exec><sessionId></sessionId><httpUserAgent>User-Agent: curl/7.38.0</httpUserAgent><x>anwesend</x></xml>
Es bleibt also bei der Notwendigkeit des Ausfilterns. Trotzdem danke für den Tipp. Aber ich glaube, ich werde es bei "Value()" belassen, da ich dann ggf. den Inhalt der booleschen Systemvariablen ohne Folge für das Skript verändern kann, denn "true" und "false" bleiben ja erhalten.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: WebUI-Systemvariable per Raspi auslesen

Beitrag von dtp » 22.04.2016, 12:10

Hallo,

ich bin's nochmal.

Kann mir mal jemand erklären, warum es nicht möglich ist, Systemvariablen mit Umlauten bzw. Sonderzeichen per curl abzufragen? Folgende Abfrage führt bei mir z.B. immer zum Ergebnis "null", obwohl die Systemvariable "Haus SV Außentemperatur" existiert.

Code: Alles auswählen

curl -s -k "http://192.168.0.20:8181/rega.exe?x=dom.GetObject('Haus%20SV%20Au%C3%9Fentemperatur').Value()"
Was mache ich falsch? Eigentlich müsste es doch funktionieren, oder? Wie gesagt, die Leerzeichen werden korrekt interpretiert.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

Re: WebUI-Systemvariable per Raspi auslesen

Beitrag von alchy » 22.04.2016, 14:14

Du hast doch immer gesagt, " gar kein Problem mit Sonderzeichen" :P :mrgreen:

Ich habe es aufgegeben mir Gedanken darüber zu machen, es werden einfach keine Sonderzeichen verwendet und damit ist es gut.
Zumal es auch immer unterschiedlich interpretiert wird, soweit ich mich erinnere, kannst du mit

Code: Alles auswählen

dom.GetObject("Außentemperatur").State(10);
z.B. unter Script testen, bekannterweise sehr wohl den Wert der Variablen Außentemperatur auf 10 stellen.
Unter dem Script Executer geht das dann wieder nicht.
Wo der Fehler eigentlich liegt ist mir ziemlich egal, wird nicht benutzt.
Wenn du die ISE_ID benutzen würdest, müsste deine Curl abfrage aber funktionieren.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

Zurück zu „HomeMatic allgemein“