Statusabfrage über Homematic per API

Einbindung von Robonect Hx und IO in Deine bereits bestehende Homematic-Anlage

Moderator: Lampi

Lampi
sehr erfahrener Forum-Nutzer
Beiträge: 344
Registriert: Di 14. Feb 2017, 17:07
Mäher: Husqvarna Automower 330X
Firmware des Mähers (MSW): MSW 7.xx.xx
Herstellungsjahr: 2014
Robonect-Modul: Robonect Hx (Rev.1)
Robonect Firmware: V1.2 (Final Release)
hat sich bedankt: 1 Mal
wurde gedankt: 1 Mal

Re: Statusabfrage über Homematic per API

Beitrag von Lampi »

Ulfberht hat geschrieben:
Mo 20. Mai 2019, 20:20
Wenn ich das richtig sehe, haben sich bei robonect die Variablen geändert.
Nicht wirklich. Je nach dem von wann das Skript ist sind seit dem nur welche dazugekommen.
Ich vermute mal eher, Du hast das Skript dahingegen geändert, dass es vormals den Status per json und jetzt per xml abfragt. Dann passt natürlich nichts mehr.

Den Unterschied siehst Du, wenn Du folgendes mal unter Skript testen eingibst:
(user und pass bitte zwei mal anpassen)

Code: Alles auswählen

var stdout="";
string stderr;


string url='http://192.168.188.43/xml?user=xxxx&pass=xxxx1234&cmd=status';
dom.GetObject("CUxD.CUX2801001:7.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:7.CMD_QUERY_RET").State(1);
string stdout= dom.GetObject("CUxD.CUX2801001:7.CMD_RETS").State();
WriteLine("Antwort xml: " # stdout);


string url='http://192.168.188.43/json?user=xxxx&pass=xxxx1234&cmd=status';
dom.GetObject("CUxD.CUX2801001:7.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:7.CMD_QUERY_RET").State(1);
string stdout= dom.GetObject("CUxD.CUX2801001:7.CMD_RETS").State();
WriteLine("Antwort json: " # stdout);
... oder entsprechend im Browser.

Ulfberht hat geschrieben:
Mo 20. Mai 2019, 20:20
Kann mir bitte jemand den Code für "blades" einmal richtig angeben, damit ich den Code mit den anderen Variablen korrigieren kann?

bei xml und CUxD:

Code: Alles auswählen

posStart = ' quality ';
posEnd = ' /quality ';

Gruß
Lampi
Fragen? Fragen!

Ulfberht
Forum-Nutzer
Beiträge: 31
Registriert: Fr 28. Apr 2017, 22:41
Mäher: Gardena R40Li
Firmware des Mähers (MSW): MSW 6.xx.xx
Herstellungsjahr: 2017
Robonect-Modul: Robonect Hx (Rev.4)
Robonect Firmware: v1.0 Beta 4

Re: Statusabfrage über Homematic per API

Beitrag von Ulfberht »

Vielen Dank, Lampi. Ich habe tatsächlich nicht aufgepasst. Das Script ist für einen Abruf per json geschrieben.

Ich habe den Abruf der Daten auf json geändert:

Code: Alles auswählen

string url='http://192.168.188.43/json?user=xxxxxxx&pass=xxx1234&cmd=status';
Wenn ich im Browser eingebe:

Code: Alles auswählen

{"name": "Mein Automower", "id": "07718A", "status": {"status": 17, "distance": 10, "stopped": false, "duration": 16146, "mode": 0, "battery": 100, "hours": 959}, "timer": {"status": 2, "next": {"date": "2019-05-22", "time": "12:00:00", "unix": 1558526400}}, "blades": {"quality": 78, "hours": 17, "days": 8}, "wlan": {"signal": -58}, "health": {"temperature": 25, "humidity": 25}, "clock": {"date": "2019-05-21", "time": "23:42:23", "unix": 1558482143}, "successful": true}
Ansonsten hatte ich an dem Script zunächst nichts geändert. Die Variablen wurden nicht gefüllt. Ich habe ohne Erfolg verschiedene Möglichkeiten für posStart und posEnd eingegeben. Als ich vor der Änderung noch den Abruf per xml machte und deinen Vorschlag einfügte, wurde die Variable "blades" auch nicht befüllt.

Wo könnte denn wohl noch ein Fehler sein?

Grüße
Ulf

Ulfberht
Forum-Nutzer
Beiträge: 31
Registriert: Fr 28. Apr 2017, 22:41
Mäher: Gardena R40Li
Firmware des Mähers (MSW): MSW 6.xx.xx
Herstellungsjahr: 2017
Robonect-Modul: Robonect Hx (Rev.4)
Robonect Firmware: v1.0 Beta 4

Re: Statusabfrage über Homematic per API

Beitrag von Ulfberht »

Ich habe Alternativ das Script 2 und 3 aus der zip-Datei ausprobiert.

Bei der Datei 2 löschte ich das "!", damit die Variablen automatisch angelegt werden. Das hat nicht funktioniert, die Variablen wurden nicht angelegt.

Das Script 3 funktioniert nicht, weil dort die Variablen nicht angelegt werden?

Grüße

Ulf

Lampi
sehr erfahrener Forum-Nutzer
Beiträge: 344
Registriert: Di 14. Feb 2017, 17:07
Mäher: Husqvarna Automower 330X
Firmware des Mähers (MSW): MSW 7.xx.xx
Herstellungsjahr: 2014
Robonect-Modul: Robonect Hx (Rev.1)
Robonect Firmware: V1.2 (Final Release)
hat sich bedankt: 1 Mal
wurde gedankt: 1 Mal

Re: Statusabfrage über Homematic per API

Beitrag von Lampi »

Hallo Ulfberht,
Ulfberht hat geschrieben:
Mi 22. Mai 2019, 00:18
Ansonsten hatte ich an dem Script zunächst nichts geändert. Die Variablen wurden nicht gefüllt. Ich habe ohne Erfolg verschiedene Möglichkeiten für posStart und posEnd eingegeben. Als ich vor der Änderung noch den Abruf per xml machte und deinen Vorschlag einfügte, wurde die Variable "blades" auch nicht befüllt.

Wo könnte denn wohl noch ein Fehler sein?
Entschuldige bitte, aber Fehlersuche in dem Skript kann ich nicht leisten. Das müsste dann vielleicht jemand machen der dies auch einsetzt.
Als Ansatz für Dich als xml:

Code: Alles auswählen

WriteLine("Hallo Welt!");

string stdout = "";
string stderr = "";
string url = 'http://192.168.188.43/xml?user=xxxx&pass=xxxx1234&cmd=status';

integer pos;
string posStart;
string posEnd;
string substring;


dom.GetObject("CUxD.CUX2801001:7.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:7.CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD.CUX2801001:7.CMD_RETS").State();
WriteLine("Antwort xml: " # stdout);


pos = 0;
posStart = ' quality ';
posEnd = ' /quality ';
pos = stdout.Find(posStart) + posStart.Length();
if (stdout.Find(posStart) > 0) {
  substring = stdout.Substr(pos, 15).StrValueByIndex(posEnd, 0);
  dom.GetObject('M_blades').State(substring);
} else {
  dom.GetObject('M_blades').State(' ');
}

WriteLine("M_blades: " # substring);
und als json:

Code: Alles auswählen

WriteLine("Hallo Welt!");

string stdout = "";
string stderr = "";
string url = 'http://192.168.188.43/json?user=xxxx&pass=xxxx1234&cmd=status';

integer pos;
string posStart;
string posEnd;
string substring;


dom.GetObject("CUxD.CUX2801001:7.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:7.CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD.CUX2801001:7.CMD_RETS").State();
WriteLine("Antwort json: " # stdout);


pos = 0;
posStart = 'quality": ';
posEnd = ',';
pos = stdout.Find(posStart) + posStart.Length();
if (stdout.Find(posStart) > 0) {
  substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0);
  dom.GetObject('M_blades').State(substring);
} else {
  dom.GetObject('M_blades').State(' ');
}

WriteLine("M_blades: " # substring);


Ulfberht hat geschrieben:
Mi 22. Mai 2019, 00:49
Bei der Datei 2 löschte ich das "!", damit die Variablen automatisch angelegt werden. Das hat nicht funktioniert, die Variablen wurden nicht angelegt.

ich gehe davon aus, dass Du dieses meinst

Code: Alles auswählen

! Entkommentieren der folgenden Zeilen und einmaliges starten schreibt die Werteliste in die Variablen
! anschließend wieder auskommentieren
Da steht nichts von automatisch angelegt.
Wie weiter oben im Skript aufgeführt handelt es sich um Variablen vom Typ Werteliste. Die Variablen müssen alle von Hand angelegt werden. Durch entkommentieren werden lediglich in die schon vorhandenen Variablen die entsprechenden Werte als Liste eingetragen.

Ulfberht hat geschrieben:
Mi 22. Mai 2019, 00:49
Das Script 3 funktioniert nicht, weil dort die Variablen nicht angelegt werden?
Das 3. Skript ist nur eine Kopie von dem 2. Es ist nur der unnötige Ballast zum Testen entfernt um es vernünftiger in ein Programm einfügen zu können.

Wenn Du dieses Skript nutzen möchtest, kannst Du entweder die Variablen anlegen oder das Skript dahingehend ändern, dass Du schon vorhandene Variablen weiternutzt. Achte dabei aber bitte darauf den Variablentyp auch entsprechend zu übernehmen. Ferner ist am Ende eine Variable verwendet, die von thomas.flaechsig angefügt wurde und oben nicht beschrieben ist.

Gruß
Lampi
Fragen? Fragen!

Ulfberht
Forum-Nutzer
Beiträge: 31
Registriert: Fr 28. Apr 2017, 22:41
Mäher: Gardena R40Li
Firmware des Mähers (MSW): MSW 6.xx.xx
Herstellungsjahr: 2017
Robonect-Modul: Robonect Hx (Rev.4)
Robonect Firmware: v1.0 Beta 4

Re: Statusabfrage über Homematic per API

Beitrag von Ulfberht »

Hallo Lampi,

Danke!

Es sollte niemand das Script umschreiben. Da ich es nicht verändert hatte und es funktioniert nicht mehr, hätte es ja sein können, dass jemand das Script kennt und ähnliche Probleme hatte.

Bei der Version von thomas.flaechsig bin ich tatsächlich von ausgegangen, dass die Variablen automatisch angelegt werden. Da ich die Variablen bisher nicht angelegt habe, kann das nicht funktionieren.

Ich habe jetzt noch eine dumme Frage:
Ich habe ein Programm angelegt, das Script, z.B. den Anfang für die Abfrage der Messer von dir, eingefügt, dann das Programm manuell gestartet und anschließend bei den Variablen nachgesehen, ob sie aktualisiert wurden. Das war nicht der Fall.

Dann habe ich das letzte Rumpf-Script von dir getestet (Script testen), dabei hat sich der Raspi bzw. piVCCU aufgehängt. Nach dem Neustart waren alle Werte aktualisiert. Ich habe mittlerweile mehrere Programme gespeichert, wobei mein altes, das die alten Variablen füllte, deaktiviert ist. Nur das von dir war aktiv. Im Moment stehe ich auf dem Schlauch. Damit werde ich mich die nächsten Tage beschäftigen.

Grüße

Ulf

Lampi
sehr erfahrener Forum-Nutzer
Beiträge: 344
Registriert: Di 14. Feb 2017, 17:07
Mäher: Husqvarna Automower 330X
Firmware des Mähers (MSW): MSW 7.xx.xx
Herstellungsjahr: 2014
Robonect-Modul: Robonect Hx (Rev.1)
Robonect Firmware: V1.2 (Final Release)
hat sich bedankt: 1 Mal
wurde gedankt: 1 Mal

Re: Statusabfrage über Homematic per API

Beitrag von Lampi »

Hallo Ulf,
Ulfberht hat geschrieben:
Fr 24. Mai 2019, 22:59
Es sollte niemand das Script umschreiben. Da ich es nicht verändert hatte und es funktioniert nicht mehr, hätte es ja sein können, dass jemand das Script kennt und ähnliche Probleme hatte.
Sorry, war vielleicht mein Fehler. Hatte mich angesprochen gefühlt. :roll:

Ulfberht hat geschrieben:
Fr 24. Mai 2019, 22:59
Ich habe jetzt noch eine dumme Frage:
Ich habe ein Programm angelegt, das Script, z.B. den Anfang für die Abfrage der Messer von dir, eingefügt, dann das Programm manuell gestartet und anschließend bei den Variablen nachgesehen, ob sie aktualisiert wurden. Das war nicht der Fall.
Leider konnte ich da keine Frage erkennen. :roll:

Ulfberht hat geschrieben:
Fr 24. Mai 2019, 22:59
Dann habe ich das letzte Rumpf-Script von dir getestet (Script testen), dabei hat sich der Raspi bzw. piVCCU aufgehängt.
Beide Skripte habe ich bei mir mit meiner ip, user und pass unter Skripte testen erfolgreich getestet. Einzig die Zeilen in denen die Variable "M_blades" geschrieben werden, habe ich, da die Variable bei mir nicht existiert, durch ein "!" auskommentiert. Warum sich jetzt deine pivccu aufgehängt, kann ich mir nicht erklären.

Ulfberht hat geschrieben:
Fr 24. Mai 2019, 22:59
Nach dem Neustart waren alle Werte aktualisiert. Ich habe mittlerweile mehrere Programme gespeichert, wobei mein altes, das die alten Variablen füllte, deaktiviert ist. Nur das von dir war aktiv.
Wenn doch nur das Programm mit dem Beispielskript aktiv war, kann aber nur die Variable "M_blades" aktualisiert worden sein und nicht alle. :?:


Gruß
Lampi
Fragen? Fragen!

Ulfberht
Forum-Nutzer
Beiträge: 31
Registriert: Fr 28. Apr 2017, 22:41
Mäher: Gardena R40Li
Firmware des Mähers (MSW): MSW 6.xx.xx
Herstellungsjahr: 2017
Robonect-Modul: Robonect Hx (Rev.4)
Robonect Firmware: v1.0 Beta 4

Re: Statusabfrage über Homematic per API

Beitrag von Ulfberht »

Hallo Lampi,

Danke für deine Hilfe. Bis auf zwei werden alle Variablen mit meinem alten Script aktualisiert. Wo der Knackpunkt lag, weiß ich allerdings nicht.

Noch eine Frage zu dem Script von thomas.flaechsig. Ich probiere das Script 3.

Als was die Variablen angelegt werden müssen, ist ja angegeben.

Wenn der Mähername = Robbi lautet, wie muss dann eine Variable angelegt werden?
Ich habe die Variable "Robbi Betriebsstunden" als Zeichenkette angelegt, mit einem Leerschritt, also nicht "RobbiBetriebsstunden".

Ist das so korrekt?

Grüße
Ulf

Lampi
sehr erfahrener Forum-Nutzer
Beiträge: 344
Registriert: Di 14. Feb 2017, 17:07
Mäher: Husqvarna Automower 330X
Firmware des Mähers (MSW): MSW 7.xx.xx
Herstellungsjahr: 2014
Robonect-Modul: Robonect Hx (Rev.1)
Robonect Firmware: V1.2 (Final Release)
hat sich bedankt: 1 Mal
wurde gedankt: 1 Mal

Re: Statusabfrage über Homematic per API

Beitrag von Lampi »

Hallo Ulf,
Ulfberht hat geschrieben:
Sa 25. Mai 2019, 23:22
Ich habe die Variable "Robbi Betriebsstunden" als Zeichenkette angelegt, mit einem Leerschritt, also nicht "RobbiBetriebsstunden".

Ist das so korrekt?
Das ist so korrekt. 👍

Ulfberht hat geschrieben:
Sa 25. Mai 2019, 23:22
Noch eine Frage zu dem Script von thomas.flaechsig. Ich probiere das Script 3.
Ich habe die Skripte auf denen die basieren, die ich thomas.flaechsig angepasst habe, noch mal etwas überarbeitet. Ich würde Dir empfehlen, diese zu verwenden. Überprüfe aber bitte noch mal den Typ der von Dir angelegten Variablen da sie nicht alle identisch sind. Falls Du aber doch das Skript 3 nutzen willst, fange bitte mit dem 2 unter Skripte testen an. Und stell bitte die Variable vTestlauf auch mal um.

Es sind jetzt vier Versionen. Da scheinbar noch immer viele dem system.exec nicht vertrauen, sind jetzt zwei für CUxD dazu gekommen. Die Versionen für system.exec und CUxD sind vom Funktionsumpfang identisch.
Die Version 0.3.0xx ist Gedacht um unter Skript Testen erst mal zu überprüfen, ob die generelle Abfrage funktioniert und alle Systemvariablen vorhanden sind. Bei fehlenden oder falsch geschriebenen werden entsprechende Meldungen ausgegeben. Das kann man später auch gut zur Fehlersuche nutzen.
Wenn es da keine Meldungen auf fehlende Variablen gibt, kann man dann die Version 0.3.2xx in Programmen verwenden. Wegen den fehlenden Überprüfungen und WriteLine ist dieses deutlich schlanken.

Und wie immer kann ich immer nur die Testversion auf Funktion prüfen. Daher bitte noch mal melden, wenn es Probleme gibt.

Viele Grüße
Lampi

Edit: Dateien noch mal neu hochgeladen. Ich hatte vergessen vorher meine eigenen Daten zu löschen. :shock:
Dateianhänge
Robonect Statusabfrage 0.3.x.cuxd.zip
(3.95 KiB) 230-mal heruntergeladen
Robonect Statusabfrage 0.3.x.sysex.zip
(3.9 KiB) 127-mal heruntergeladen
Fragen? Fragen!

Ulfberht
Forum-Nutzer
Beiträge: 31
Registriert: Fr 28. Apr 2017, 22:41
Mäher: Gardena R40Li
Firmware des Mähers (MSW): MSW 6.xx.xx
Herstellungsjahr: 2017
Robonect-Modul: Robonect Hx (Rev.4)
Robonect Firmware: v1.0 Beta 4

Re: Statusabfrage über Homematic per API

Beitrag von Ulfberht »

Hallo Lampi,

ich habe die Version 0.3.2.cu getestet. Es funktioniert alles. Vielen Dank!!

Ich nutze piVCCU auf einem Raspi. Warum empfiehlst du system.exec? Als ich mit der CCU2 anfing, hieß es, glaube ich, dass das zu viel Ressourcen verbraucht. Empfiehlst du jetzt, Cux nicht zu nutzen, dafür system.exec?

Grüße
Ulf

Lampi
sehr erfahrener Forum-Nutzer
Beiträge: 344
Registriert: Di 14. Feb 2017, 17:07
Mäher: Husqvarna Automower 330X
Firmware des Mähers (MSW): MSW 7.xx.xx
Herstellungsjahr: 2014
Robonect-Modul: Robonect Hx (Rev.1)
Robonect Firmware: V1.2 (Final Release)
hat sich bedankt: 1 Mal
wurde gedankt: 1 Mal

Re: Statusabfrage über Homematic per API

Beitrag von Lampi »

Hallo Ulf,
Ulfberht hat geschrieben:
Mo 27. Mai 2019, 22:34
ich habe die Version 0.3.2.cu getestet. Es funktioniert alles. Vielen Dank!!
Vielen Dank für die Rückmeldung.

Ulfberht hat geschrieben:
Mo 27. Mai 2019, 22:34
Ich nutze piVCCU auf einem Raspi. Warum empfiehlst du system.exec? Als ich mit der CCU2 anfing, hieß es, glaube ich, dass das zu viel Ressourcen verbraucht. Empfiehlst du jetzt, Cux nicht zu nutzen, dafür system.exec?
Als Empfehlung war das nicht gemeint. Nur macht es aus meiner Sicht heute keinen Unterschied mehr welches von Beiden man einsetzt. Zu Zeiten der CCU1 führte der Einsatz von system.exec früher oder später zu einem Absturz. Darauf beruht das große Misstrauen. Aber seit Einführung der CCU2 und erst recht seitdem so einige Fehler in der Software bereinigt wurden, spricht nichts mehr gegen den Einsatz von system.exec. Ich selber komme teilweise auf deutlich über tausend Aufrufe pro Tag.
Wenn also jemand CUxD nur installiert um damit das system.exec zu ersetzen kann meiner Meinung nach gut darauf verzichten.


Gruß
Jörg
Fragen? Fragen!

Antworten

Zurück zu „Homematic-Nutzer“