Statusabfrage über Homematic per API
Moderator: Lampi
-
- Forum-Nutzer
- Beiträge: 14
- Registriert: Di 7. Mai 2019, 18:08
- Mäher: Husqvarna Automower 310
- Firmware des Mähers (MSW): MSW 7.xx.xx
- Herstellungsjahr: 2016
- Robonect-Modul: Robonect Hx (Rev.1)
- Robonect Firmware: V1.0 Beta 7a
Re: Homematic - Einbindung
Guten Morgen Jörg,
ja super genau das habe ich gemein, dann ist ersichtlich von wann die letzen Daten stammen. Danke
Habe auch den Fehler wegen den "19°C" gefunden, hier war nicht das Skript schuld! Dies wurde durch das Zusatzprogramm "Script-Parser" verursacht, mit dem ich meine Skripte teste, bevor ich Programme dazu erstelle. Als ich Dein Skript 1zu1 in ein Programm implementiert habe, waren die Sonderzeichen weg!
Danke nochmal für Deine Unterstützung! Ich werde mich die Tage nun mal mit der Steuerung befassen. Im Prinzip möchte ich gar nicht viel nur:
Button zum nach Hause schicken (Robi fährt in die Ladestation)
Button für Feierabend (Robi hört für diesen Tag auf zu Arbeiten "Regen")
Button Mähen (Robi fängt an zu mähen für Zeit x)
Dan gibt es ja noch "start" und "Stop". Habe dies hier im Forum gefunden, verstehe aber noch nicht wie die befehle zusammen hängen bzw. zusammen hängen müssen damit es nach er auch funktioniert.
LG Andreas
ja super genau das habe ich gemein, dann ist ersichtlich von wann die letzen Daten stammen. Danke
Habe auch den Fehler wegen den "19°C" gefunden, hier war nicht das Skript schuld! Dies wurde durch das Zusatzprogramm "Script-Parser" verursacht, mit dem ich meine Skripte teste, bevor ich Programme dazu erstelle. Als ich Dein Skript 1zu1 in ein Programm implementiert habe, waren die Sonderzeichen weg!
Danke nochmal für Deine Unterstützung! Ich werde mich die Tage nun mal mit der Steuerung befassen. Im Prinzip möchte ich gar nicht viel nur:
Button zum nach Hause schicken (Robi fährt in die Ladestation)
Button für Feierabend (Robi hört für diesen Tag auf zu Arbeiten "Regen")
Button Mähen (Robi fängt an zu mähen für Zeit x)
Dan gibt es ja noch "start" und "Stop". Habe dies hier im Forum gefunden, verstehe aber noch nicht wie die befehle zusammen hängen bzw. zusammen hängen müssen damit es nach er auch funktioniert.
LG Andreas
-
- sehr erfahrener Forum-Nutzer
- Beiträge: 706
- 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.3b
- hat sich bedankt: 8 Male
- wurde gedankt: 82 Male
Re: Homematic - Einbindung
Hallo Andreas,
Falls Du sie noch nicht kennst, kann ich Dir als Einstieg für die Steuerung die Seite viewtopic.php?f=10&t=37 empfehlen.
Allerdings überlege ich, mal ein einfach gehaltenes Skript zu erstellen um den Anfang etwas zu erleichtern. Mal sehen was draus wird.
Viel Erfolg
Jörg
Okay, da wäre ich nicht so schnell drauf gekommen. Wieder was gelernt.
Falls Du sie noch nicht kennst, kann ich Dir als Einstieg für die Steuerung die Seite viewtopic.php?f=10&t=37 empfehlen.
Allerdings überlege ich, mal ein einfach gehaltenes Skript zu erstellen um den Anfang etwas zu erleichtern. Mal sehen was draus wird.
Viel Erfolg
Jörg
Fragen? Fragen!
-
- Forum-Nutzer
- Beiträge: 14
- Registriert: Di 7. Mai 2019, 18:08
- Mäher: Husqvarna Automower 310
- Firmware des Mähers (MSW): MSW 7.xx.xx
- Herstellungsjahr: 2016
- Robonect-Modul: Robonect Hx (Rev.1)
- Robonect Firmware: V1.0 Beta 7a
Re: Homematic - Einbindung
Hallo Jörg,
wenn Du einfaches hast, lass von Dir hören.
Ich versuch es die nächsten Tage auch mal.
LG Andreas
wenn Du einfaches hast, lass von Dir hören.
Ich versuch es die nächsten Tage auch mal.
LG Andreas
-
- Forum-Anfänger
- Beiträge: 3
- Registriert: So 12. Mai 2019, 00:27
- Mäher: Husqvarna Automower 310
- Herstellungsjahr: 2018
- Robonect-Modul: Robonect H30x (Rev.3)
- Robonect Firmware: -
Re: Homematic - Einbindung
Hallo in die Runde, wer kann das Skript V 0.2.15auf CUxD umschreiben und hier reinposten ? Läuft prima und hat genau die Werte die ich benötige, jedoch verträgt meine Raspberrymatic system.exec nicht und schmiert dann nach einiger Zeit ab. vielen Dank vorab
-
- sehr erfahrener Forum-Nutzer
- Beiträge: 706
- 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.3b
- hat sich bedankt: 8 Male
- wurde gedankt: 82 Male
Re: Homematic - Einbindung
Hallo und herzlich willkommen im Forum
Falls sich kein anderer findet, kann ich Dir das Skript gerne auf cuxd umstellen. Dann aber bitte etwas Geduld.
Aber eine Frage, sind es "alte" Erfahrungen bezüglich system.exec? Oder mit diesem Skript?
Gruß
Jörg
Falls sich kein anderer findet, kann ich Dir das Skript gerne auf cuxd umstellen. Dann aber bitte etwas Geduld.
Aber eine Frage, sind es "alte" Erfahrungen bezüglich system.exec? Oder mit diesem Skript?
Gruß
Jörg
Fragen? Fragen!
-
- Forum-Anfänger
- Beiträge: 3
- Registriert: So 12. Mai 2019, 00:27
- Mäher: Husqvarna Automower 310
- Herstellungsjahr: 2018
- Robonect-Modul: Robonect H30x (Rev.3)
- Robonect Firmware: -
Re: Homematic - Einbindung
Hallo Jörg,
keine Eile und vielen Dank vorab !
Nein, keine alten Probleme, Raspberrymatic zickt halt bei system.exec, cpu-load und cpu-Temperatur gehen durch die Decke. Und wenn ich das mit CUxD umgehen kann ist alles gut.
Ich hänge das aktuelle Skript von mir mal an, habe einige kleine Änderungen zu Deinem, da ich .toReal-Werte brauche und das Skript einmal mit kurzer (im Betrieb) und langer (nachts) Freouenz läuft. Ich hoffe, ich kann das hier irgendwie anfügen.
Beste Grüße
Code: Alles auswählen
! Robonect Statusabfrage per xml und system.Exec mit Test
! 0.2.3
! Verwendete Variablen:
! vName + Akku Ladestand - als Zahl
! vName + Betriebsart - als Werteliste
! vName + Betriebsstunden - als Zeichenkette
! vName + Betriebszustand - als Logikwert; wahr = gestoppt, falsch = gestartet
! vName + Distance - als Zahl
! vName + Fehlermeldung - als Zeichenkette
! vName + Feuchte - als Zeichenkette
! vName + LastSync kurz - als Zeichenkette
! vName + Messer Alter - als Zeichenkette
! vName + Messer Betriebsstunden - als Zeichenkette
! vName + Messerqualitaet - als Zeichenkette
! vName + Status - als Werteliste
! vName + Status seit - als Zeichenkette
! vName + Temperatur - als Zeichenkette
! vName + Timer Startzeit - als Zeichenkette
! vName + Timerstatus - als Werteliste
! vName + Verbindung - als Logikwert; wahr = Online, falsch = Offline
! vName + WLAN - als Zeichenkette
! ********************************************************
boolean vTestlauf = false; ! true: Ausgabe als WriteLine ohne Schreiben der Variablen; false: schreiben der Variablen ohne Ausgabe als WriteLine
string vName = "Rasenrobbi"; ! Namen des Roboters für die Variablen
string vBenutzer = "XXXXX"; ! Benutzername
string vPasswort = "XXXXXXXXX"; ! Passwort für Benutzername
string vIP = "192.168.2.156"; ! IP des Mähers
! ********************************************************
! Entkommentieren der folgenden Zeilen und einmaliges starten schreibt die Werteliste in die Variablen
! anschließend wieder auskommentieren
! dom.GetObject(vName # " Betriebsart").ValueList("Auto;Manuell;Home;Demo");
! dom.GetObject(vName # " Status").ValueList("Status wird ermittelt;parkt;mäht;sucht die Ladestation;lädt;wartet auf Umsetzen;6;Fehlerstatus;Schleifensignal verloren;9;10;11;12;13;14;15;abgeschaltet;schläft;wartet bis Tor auf");
! dom.GetObject(vName # " Timerstatus").ValueList("Deaktiviert;Aktiv;Standby");
! ToDo
!
boolean vPing = false;
string stderr = "";
string stdout = "";
string vStart = "";
string vEnde = "";
string vIndex = "";
string vUrl = "'http://" # vIP # "/xml?user=" # vBenutzer # "&pass=" # vPasswort # "&cmd=status'";
integer vStatus = 0;
string vTempo = "";
system.Exec("ping -c 1 " # vIP,&stdout, &stderr);
if (stdout.Contains("ms")) {
vPing = true;
if (vTestlauf) {
vStart = "time=";
vEnde = " ms";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = stdout.Substr(vStart, stdout.Find(vEnde) - vStart).ToInteger();
WriteLine("Der Ping dauerte " # vIndex # " Millisekunden.");
}
} else {
if (vTestlauf) {
WriteLine(vName # " ist Momentan nicht erreichbar.");
}
}
if (vPing) {
vPing = false;
system.Exec("wget -q -O - " # vUrl, &stdout, &stderr);
! Erfolgreich ausgelesen?
if (stdout.Contains("successful>true</successful")) {
vPing = true;
if (vTestlauf) {
WriteLine("API Antwort = " # stdout);
}
} else {
if (vTestlauf) {
WriteLine(vName # " antwortet trotz erfolgreichem Ping nicht.");
}
}
}
if (vPing) {
! Status
vStart = "<status><status>";
vEnde = "</status>";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = (stdout.Substr(vStart, stdout.Find(vEnde) - vStart)).ToInteger();
vStatus = vIndex;
if (vTestlauf){
WriteLine("Status = " # vIndex);
} else {
if (dom.GetObject(vName # " Status")) {
if (vIndex != dom.GetObject(vName # " Status").Value()) {
dom.GetObject(vName # " Status").State(vIndex);
}
} else {
WriteLine("Variable -" # vName # " Status- existiert nicht");
}
}
! Start nach
vStart = "<distance>";
vEnde = "</distance>";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = stdout.Substr(vStart, stdout.Find(vEnde) - vStart);
if (vTestlauf){
WriteLine("Start nach " # vIndex);
} else {
if (dom.GetObject(vName # " Distance")) {
dom.GetObject(vName # " Distance").State(vIndex);
} else {
WriteLine("Variable -" # vName # " Distance- existiert nicht");
}
}
! Betriebszustand
vStart = "<stopped>";
vEnde = "</stopped>";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = stdout.Substr(vStart, stdout.Find(vEnde) - vStart);
if (vTestlauf){
WriteLine("Betriebszustand = " # vIndex);
} else {
if (dom.GetObject(vName # " Betriebszustand")) {
if (vIndex != dom.GetObject(vName # " Betriebszustand").Value()) {
dom.GetObject(vName # " Betriebszustand").State(vIndex);
}
} else {
WriteLine("Variable -" # vName # " Betriebszustand- existiert nicht");
}
}
! Status seit
vStart = "<duration>";
vEnde = "</duration>";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = stdout.Substr(vStart, stdout.Find(vEnde) - vStart).ToInteger();
if (vIndex >= 172800) {vTempo = (vIndex / 86400).ToInteger() # " Tage ";} else {if (vIndex >= 86400) {vTempo = "1 Tag ";} else {vTempo = "";}}
vIndex = vTempo # (vIndex - 3600).ToTime().Format("%T");
if (vTestlauf){
WriteLine("Status seit " # vIndex);
} else {
if (dom.GetObject(vName # " Status seit")) {
dom.GetObject(vName # " Status seit").State(vIndex);
} else {
WriteLine("Variable -" # vName # " Status seit- existiert nicht");
}
}
! Betriebsart
vStart = "<mode>";
vEnde = "</mode>";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = (stdout.Substr(vStart, stdout.Find(vEnde) - vStart)).ToInteger();
if (vTestlauf){
WriteLine("Betriebsart = " # vIndex);
} else {
if (dom.GetObject(vName # " Betriebsart")) {
if (vIndex != dom.GetObject(vName # " Betriebsart").Value()) {
dom.GetObject(vName # " Betriebsart").State(vIndex);
}
} else {
WriteLine("Variable -" # vName # " Betriebsart- existiert nicht");
}
}
! Akku Ladestand
vStart = "<battery>";
vEnde = "</battery>";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = stdout.Substr(vStart, stdout.Find(vEnde) - vStart);
if (vTestlauf){
WriteLine("Akku Ladestand = " # vIndex);
} else {
if (dom.GetObject(vName # " Akku Ladestand")) {
if (vIndex != dom.GetObject(vName # " Akku Ladestand").Value()) {
dom.GetObject(vName # " Akku Ladestand").State(vIndex);
}
} else {
WriteLine("Variable -" # vName # " Akku Ladestand- existiert nicht");
}
}
! Betriebsstunden
vStart = "<hours>";
vEnde = "</hours>";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = stdout.Substr(vStart, stdout.Find(vEnde) - vStart) # " Stunden";
if (vTestlauf){
WriteLine("Betriebsstunden = " # vIndex);
} else {
if (dom.GetObject(vName # " Betriebsstunden")) {
if (vIndex != dom.GetObject(vName # " Betriebsstunden").Value()) {
dom.GetObject(vName # " Betriebsstunden").State(vIndex);
}
} else {
WriteLine("Variable -" # vName # " Betriebsstunden- existiert nicht");
}
}
! Timerstatus
vStart = "<timer><status>";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = stdout.Substr(vStart, 1).ToInteger();
if (vTestlauf){
WriteLine("Timerstatus = " # vIndex);
} else {
if (dom.GetObject(vName # " Timerstatus")) {
if (vIndex != dom.GetObject(vName # " Timerstatus").Value()) {
dom.GetObject(vName # " Timerstatus").State(vIndex);
}
} else {
WriteLine("Variable -" # vName # " Timerstatus- existiert nicht");
}
}
! Messerqualität
vStart = "<quality>";
vEnde = "</quality>";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = stdout.Substr(vStart, stdout.Find(vEnde) - vStart) # "%";
if (vTestlauf){
WriteLine("Messerqualität = " # vIndex);
} else {
if (dom.GetObject(vName # " Messerqualitaet")) {
if (vIndex != dom.GetObject(vName # " Messerqualitaet").Value()) {
dom.GetObject(vName # " Messerqualitaet").State(vIndex);
}
} else {
WriteLine("Variable -" # vName # " Messerqualitaet- existiert nicht");
}
}
! Messer Betriebsstunden
vStart = "ty><hours>";
vEnde = "</hours><d";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = stdout.Substr(vStart, stdout.Find(vEnde) - vStart) # " Stunden";
if (vTestlauf){
WriteLine("Messer Betriebsstunden = " # vIndex);
} else {
if (dom.GetObject(vName # " Messer Betriebsstunden")) {
if (vIndex != dom.GetObject(vName # " Messer Betriebsstunden").Value()) {
dom.GetObject(vName # " Messer Betriebsstunden").State(vIndex);
}
} else {
WriteLine("Variable -" # vName # " Messer Betriebsstunden- existiert nicht");
}
}
! Messer Alter
vStart = "<days>";
vEnde = "</days>";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = stdout.Substr(vStart, stdout.Find(vEnde) - vStart) # " Tage";
if (vTestlauf){
WriteLine("Messer Alter = " # vIndex);
} else {
if (dom.GetObject(vName # " Messer Alter")) {
if (vIndex != dom.GetObject(vName # " Messer Alter").Value()) {
dom.GetObject(vName # " Messer Alter").State(vIndex);
}
} else {
WriteLine("Variable -" # vName # " Messer Alter- existiert nicht");
}
}
! WLAN
vStart = "<signal>";
vEnde = "</signal>";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = stdout.Substr(vStart, stdout.Find(vEnde) - vStart) # "dBm";
if (vTestlauf){
WriteLine("WLAN = " # vIndex);
} else {
if (dom.GetObject(vName # " WLAN")) {
if (vIndex != dom.GetObject(vName # " WLAN").Value()) {
dom.GetObject(vName # " WLAN").State(vIndex);
}
} else {
WriteLine("Variable -" # vName # " WLAN- existiert nicht");
}
}
! Temperatur
vStart = "<temperature>";
vEnde = "</temperature>";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = stdout.Substr(vStart, stdout.Find(vEnde) - vStart) # "°C";
if (vTestlauf){
WriteLine("Temperatur = " # vIndex);
} else {
if (dom.GetObject(vName # " Temperatur")) {
if (vIndex != dom.GetObject(vName # " Temperatur").Value()) {
dom.GetObject(vName # " Temperatur").State(vIndex);
}
} else {
WriteLine("Variable -" # vName # " Temperatur- existiert nicht");
}
}
! Feuchte
vStart = "<humidity>";
vEnde = "</humidity>";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = stdout.Substr(vStart, stdout.Find(vEnde) - vStart) # "%";
if (vTestlauf){
WriteLine("Feuchte = " # vIndex);
} else {
if (dom.GetObject(vName # " Feuchte")) {
if (vIndex != dom.GetObject(vName # " Feuchte").Value()) {
dom.GetObject(vName # " Feuchte").State(vIndex);
}
} else {
WriteLine("Variable -" # vName # " Temperatur- existiert nicht");
}
}
! nächster Start
if (stdout.Contains("<next><date>")){
vStart = "<unix>";
vEnde = "</unix>";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = (stdout.Substr(vStart, stdout.Find(vEnde) - vStart).ToInteger() - 3600 * 1 + system.Date("%s").ToInteger().ToTime().IsDST()).ToTime().Format("%d.%m.%Y %T");
if (vTestlauf){
WriteLine("nächster Start = " # vIndex);
} else {
if (dom.GetObject(vName # " Timer Startzeit")) {
if (vIndex != dom.GetObject(vName # " Timer Startzeit").Value()) {
dom.GetObject(vName # " Timer Startzeit").State(vIndex);
}
} else {
WriteLine("Variable -" # vName # " Timer Startzeit- existiert nicht");
}
}
}
! Fehlermeldung
vStart = "<error_message>";
if (stdout.Contains(vStart)) {
vEnde = "</error_message>";
vStart = stdout.Find(vStart) + vStart.Length();
vIndex = stdout.Substr(vStart, stdout.Find(vEnde) - vStart);
} elseif (vStatus == 8) {
vIndex = "Schleifensignal verloren";
} else {
vIndex = "Kein Fehler";
}
if (vTestlauf){
WriteLine("Fehlermeldung = " # vIndex);
} else {
if (dom.GetObject(vName # " Fehlermeldung")) {
if (vIndex != dom.GetObject(vName # " Fehlermeldung").Value()) {
dom.GetObject(vName # " Fehlermeldung").State(vIndex);
}
} else {
WriteLine("Variable -" # vName # " Fehlermeldung- existiert nicht");
}
}
! Online
if (vTestlauf){
WriteLine(vName # " ist online");
} else {
if (dom.GetObject(vName # " Verbindung")) {
dom.GetObject(vName # " Verbindung").State(true);
} else {
WriteLine("Variable -" # vName # " Verbindung- existiert nicht");
}
}
} else {
! Offline
if (vTestlauf){
WriteLine(vName # " ist offline");
} else {
if (dom.GetObject(vName # " Verbindung")) {
dom.GetObject(vName # " Verbindung").State(false);
} else {
WriteLine("Variable -" # vName # " Verbindung- existiert nicht");
}
}
}
! LastSync
if (vTestlauf){
WriteLine("LastSync kurz = " # system.Date("%Y.%m.%d %T"));
} else {
if (dom.GetObject(vName # " LastSync kurz")) {
dom.GetObject(vName # " LastSync kurz").State(system.Date("%Y.%m.%d %T"));
} else {
WriteLine("Variable -" # vName # " LastSync kurz- existiert nicht");
}
}
string zeit = "";
string zeit = system.Date("%d.%m. %H:%M:%S Uhr");
dom.GetObject("Rasenrobbi Aktualisierung Statusabfrage").State(zeit);
WriteLine("Habe fertig");
WriteLine("Hallo Welt!");
Zuletzt geändert von Lampi am Fr 17. Mai 2019, 19:02, insgesamt 1-mal geändert.
Grund: Zitat-BBCode eingefügt
Grund: Zitat-BBCode eingefügt
-
- sehr erfahrener Forum-Nutzer
- Beiträge: 706
- 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.3b
- hat sich bedankt: 8 Male
- wurde gedankt: 82 Male
Re: Statusabfrage über Homematic per API
Okay, das war mir bisher nicht bekannt. Ich nutze piVCCU und da habe ich diese Phänomene nicht. Raspberrymatic hatte ich nur mal kurz angetestet. Da ich aber auf dem pi noch anderes laufe habe, war es keine Option für mich.thomas.flaechsig hat geschrieben: ↑Mi 15. Mai 2019, 10:49 Nein, keine alten Probleme, Raspberrymatic zickt halt bei system.exec, cpu-load und cpu-Temperatur gehen durch die Decke. Und wenn ich das mit CUxD umgehen kann ist alles gut.
Ich nutze gerne Zeichenkette da ich beim Setzen bestimmen kann wie sie mir angezeigt wird. Wenn ich sie später in einem Skript einlese mache ich es dann mit .ToFloat und habe sie wieder als real.thomas.flaechsig hat geschrieben: ↑Mi 15. Mai 2019, 10:49 Ich hänge das aktuelle Skript von mir mal an, habe einige kleine Änderungen zu Deinem, da ich .toReal-Werte brauche
Im Anhang sind drei Dateien:
1 -> Dein Skript
2 -> auf CUxD mit Test geändert
3 -> auf CUxD ohne Test geändert
2 konnte ich testen und funktioniert bei mir. 3 ist daraus entstanden aber ich konnte es nicht testen. Falls was nicht geht bitte melden.
Gruß
Jörg
- Dateianhänge
-
- thomas.flaechsig.zip
- (6.35 KiB) 655-mal heruntergeladen
Fragen? Fragen!
-
- Forum-Anfänger
- Beiträge: 3
- Registriert: So 12. Mai 2019, 00:27
- Mäher: Husqvarna Automower 310
- Herstellungsjahr: 2018
- Robonect-Modul: Robonect H30x (Rev.3)
- Robonect Firmware: -
Re: Statusabfrage über Homematic per API
Hallo Jörg,
22.758.638 mal Danke - Lief auf Anhieb und mein cpu-load dankt es mit Langeweile
Beste Grüße
Thomas
Zuletzt geändert von Lampi am Fr 17. Mai 2019, 19:06, insgesamt 2-mal geändert.
Grund: Zitat-BBCode eingefügt
Grund: Zitat-BBCode eingefügt
-
- 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: Steuerung über Homematic per API
Bis letztes Jahr lief noch die Statusabfrage mit diesem Script. Ich weiß allerdings nicht mehr, wo ich das gefunden hatte. Wenn ich den Status über den Browser abfrage, kommen die Daten, die ich unten eingefügt habe.
Wenn ich das richtig sehe, haben sich bei robonect die Variablen geändert.
Was muss ich machen, damit die Variablen von Homematic richtig eingelesen werden? Ziemlich am Ende des Scripts habe ich das für "blades" versucht. Kann mir bitte jemand den Code für "blades" einmal richtig angeben, damit ich den Code mit den anderen Variablen korrigieren kann?
Homematic:
Webabfrage:
Wenn ich das richtig sehe, haben sich bei robonect die Variablen geändert.
Was muss ich machen, damit die Variablen von Homematic richtig eingelesen werden? Ziemlich am Ende des Scripts habe ich das für "blades" versucht. Kann mir bitte jemand den Code für "blades" einmal richtig angeben, damit ich den Code mit den anderen Variablen korrigieren kann?
Homematic:
Code: Alles auswählen
!Robbi Statusabfrage V17 mit CUxD 2017-05-13
! Basis Zeilen für CUxD Abfrage (Projekt Rasenboter): Tobias78 2016-09-18
! http://homematic-forum.de/forum/viewtopic.php?f=19&t=32555&p=309715#p309715
! Basis überwiegend Auswertung (Homematic - Einbindung): czierl 2016-05-27
! http://robonect.de/viewtopic.php?f=13&t=77&p=2299#p2299
!als Systemvariablen sind in Homematic angelegt:
!Robbi_Modus
!Robbi_Modus_Text
!Robbi_Stop
!Robbi_Batterie
!Robbi_Zeit_in_Status
!Robbi_Laufzeit
!Robbi_Status
!Robbi_Status_Text
!Robbi_Timer_Status
!Robbi_Timer_Datum
!Robbi_Timer_Zeit
!Robbi_Fehler
!Robbi_LastSync
!Robbi_Wlan
string url='http://192.168.188.43/xml?user=xxxx&pass=xxxx1234&cmd=status';
!löscht vorherige Abfrage
var stdout="";
var posStart;
var posEnd;
var substring;
var batt;
var temp;
string stderr;
string stdout;
string pos;
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: " # stdout);
pos=0;
posStart = '{"status": ';
posEnd = ' ,';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
substring = stdout.Substr(pos, 1).StrValueByIndex(posEnd, 0) ;
!substring = stdout.Substr(pos, 2).StrValueByIndex(posEnd, 0) ;
dom.GetObject('M_status').State(substring);
WriteLine("M_status: " # substring);
! nur für Chart CUxD
dom.GetObject("CUxD.CUX2801001:7.LOGIT").State("M_status;"#substring.ToInteger());
if (substring == 0) {dom.GetObject('M_status_string').State("Status wird ermittelt");}
if (substring == 1) {dom.GetObject('M_status_string').State("parkt");}
if (substring == 2) {dom.GetObject('M_status_string').State("mäht");}
if (substring == 3) {dom.GetObject('M_status_string').State("sucht die Ladestation");}
if (substring == 4) {dom.GetObject('M_status_string').State("lädt auf");}
if (substring == 5) {dom.GetObject('M_status_string').State("sucht");}
if (substring == 7) {dom.GetObject('M_status_string').State("befindet sich im Fehlerstatus");}
if (substring == 8) {dom.GetObject('M_status_string').State("Schleifensignal verloren");}
substring = stdout.Substr(pos, 2).StrValueByIndex(posEnd, 0) ;
if (substring == 16) {dom.GetObject('M_status_string').State("abgeschaltet");}
if (substring == 17) {dom.GetObject('M_status_string').State("schläft");}
}
else
{
dom.GetObject('M_status_string').State("ausgeschaltet ?");
}
string temp = dom.GetObject('M_status_string').Value();
WriteLine("M_status_string: " # temp);
pos=0;
posStart = '"stopped": ';
posEnd = '", duration"';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
substring = stdout.Substr(pos, 4).StrValueByIndex(posEnd, 0) ;
!dom.GetObject('M_stop j/n').State(substring);
if (substring == "true") {dom.GetObject('M_stop j/n').State("true");}
if (substring == "fals") {dom.GetObject('M_stop j/n').State("false");};
WriteLine("Stop: " # substring);
}
else
{
dom.GetObject('M_stop j/n').State('-');
}
pos=0;
posStart = '"duration":';
posEnd = ',';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;
!substring ist hier vom Typ nicht String !!!
substring = substring.ToInteger()/60;
WriteLine(substring # " Minuten M_duration");
var zahl = substring.ToInteger();
WriteLine("zahl 0:" # zahl);
var h = (zahl / 60).ToInteger();
WriteLine("zahl h Gesamtstunden: " # h);
var d = (h / 24).ToInteger();
WriteLine("zahl d Tage:" # d);
zahl = (substring - (d * 24 * 60)).ToInteger();
WriteLine("zahl restl.Minuten: " # zahl);
h = (zahl / 60).ToInteger();
zahl = (zahl - (h * 60).ToInteger() );
WriteLine("zahl Minuten:" # zahl);
string substring = (d # " Tage " # h # " Stunden " # zahl #" Minuten");
WriteLine("M_duration: " # substring);
dom.GetObject("M_duration").State(substring);
}
else
{
dom.GetObject('M_duration').State('-');
}
pos=0;
posStart = '"mode": ';
posEnd = ', "batt';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
substring = stdout.Substr(pos, 3).StrValueByIndex(posEnd, 0) ;
substring = substring.ToInteger();
dom.GetObject('M_mode').State(substring.ToInteger() );
WriteLine("M_mode: " # substring);
if (substring == 0) {dom.GetObject('M_mode_string').State("Modus Auto");}
if (substring == 1) {dom.GetObject('M_mode_string').State("Modus Manuell");}
if (substring == 2) {dom.GetObject('M_mode_string').State("Modus Home");}
if (substring == 3) {dom.GetObject('M_mode_string').State("Modus Demo");}
}
else
{
dom.GetObject('M_mode').State('-');
}
var temp = dom.GetObject('M_mode_string').Value();
WriteLine("M_mode_string: " # temp);
pos=0;
posStart = '"battery": ';
posEnd = ', "';
pos = stdout.Find(posStart) + posStart.Length();
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;
var temp = substring;
substring = substring + '%';
if(stdout.Find(posStart)>0)
{
WriteLine("Battery: " # substring);
dom.GetObject('M_battery').State(substring.ToString(1));
!schreibt log in CUxD
dom.GetObject("CUxD.CUX2801001:7.LOGIT").State("M_battery;"#temp.ToString(1));
}
else
{
dom.GetObject('M_battery').State(' ');
}
pos=0;
posStart = '"hours": ';
posEnd = '}';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;
substring =substring + 'h';
dom.GetObject('M_laufzeit').State(substring.ToString(1));
}
else
{
dom.GetObject('M_laufzeit').State(' ');
}
pos=0;
posStart = '"timer": {"status": ';
posEnd = ',';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
substring = stdout.Substr(pos, 1).StrValueByIndex(posEnd, 0) ;
if (substring == 0) {dom.GetObject('M_timer').State("Deaktiviert");}
if (substring == 1) {dom.GetObject('M_timer').State("Aktiv");}
if (substring == 2) {dom.GetObject('M_timer').State("Standby");}
}
else
{
dom.GetObject('M_timer').State(' ');
}
var temp = dom.GetObject('M_timer').Value();
WriteLine("M_timer: " # temp);
pos=0;
posStart = '"next": {"date": "';
posEnd = '", "time":';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;
dom.GetObject('M_timer_date').State(substring.ToString(1));
}
else
{
dom.GetObject('M_timer_date').State('-');
}
pos=0;
posStart = '"time": "';
posEnd = '", "unix":';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
substring = stdout.Substr(pos, 8).StrValueByIndex(posEnd, 0) ;
dom.GetObject('M_timer_time').State(substring.ToString(1) );
}
else
{
dom.GetObject('M_timer_time').State('-');
}
WriteLine("M_timer_time: " # substring);
pos=0;
posStart = '"error_message": "';
posEnd = '", "date"';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
substring = stdout.Substr(pos, 43).StrValueByIndex(posEnd, 0) ;
dom.GetObject('M_error').State(substring.ToString(1));
}
else
{
dom.GetObject('M_error').State('keine Fehlermeldung');
}
WriteLine("M_error: " # substring);
pos=0;
posStart = 'wlan": {"signal":';
posEnd = '}';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;
dom.GetObject('M_wlan').State(substring.ToString() );
}
else
{
dom.GetObject('M_wlan').State(' ');
}
WriteLine("M_wlan: " # substring);
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.ToString() );
}
else
{
dom.GetObject('M_blades').State(' ');
}
WriteLine("M_blades: " # substring);
var temp = system.Date("%d.%m.%Y %H:%M:%S");
dom.GetObject('M_lastsync').State(temp.ToString() );
WriteLine("lastsync " # temp);
WriteLine("Hallo Welt");
Code: Alles auswählen
<robonect>
<name>Mein Automower</name>
<id>07718A</id>
<status>
<status>17</status>
<distance>10</distance>
<stopped>false</stopped>
<duration>11021</duration>
<mode>0</mode>
<battery>100</battery>
<hours>959</hours>
</status>
<timer>
<status>2</status>
<next>
<date>2019-05-22</date>
<time>12:00:00</time>
<unix>1558526400</unix>
</next>
</timer>
<blades>
<quality>79</quality>
<hours>17</hours>
<days>6</days>
</blades>
<wlan>
<signal>-57</signal>
</wlan>
<health>
<temperature>30</temperature>
<humidity>26</humidity>
</health>
<clock>
<date>2019-05-20</date>
<time>19:48:25</time>
<unix>1558381705</unix>
</clock>
<successful>true</successful>
</robonect>
Zuletzt geändert von Lampi am Mo 20. Mai 2019, 22:10, insgesamt 1-mal geändert.
Grund: Beitrag verschoben. Passt thematisch hier besser.
Grund: Beitrag verschoben. Passt thematisch hier besser.