Aufgrund derzeit hohem Spamaufkommens werden neue Nutzer sehr restriktiv behandelt. Nach kurzer "Bewährungszeit" hat man als normaler Nutzer weitreichende Rechte und benötigt auch kein Captcha mehr.
.
Nutzer, die sich danach dennoch als Spammer oder Trolle erweisen, können jederzeit wieder auf diesen Status zurückgesetzt oder gebannt werden.
Dasselbe gilt für Versuche, politische Überzeugungen kund zu tun, egal aus welcher Richtung diese kommen.
.
.:!: Achtung! Derzeit ist Robonect (noch) nicht mit dem Automower 305 ab Baujahr 2020 zusammen mit der neuen Mäher-FW MSW 41.4.0 kompatibel!
Aber: Im DailyBuild ist ein Patch enthalten, der getestet werden kann! (Stand 15.02.2024)
.
.Du hast Deinen Gardena-Mäher auf die Gardena-Firmware von 2023 aktualisiert?
.:arrow: Testmöglichkeit für das Daily Build.

Das FW-Update am Mäher wird dennoch nicht empfohlen, da das Daily Build nach aktuellen Berichten von Beta-Testern noch keine vollständige Kompatibilität gewährleisten kann! (Stand: 15.02.2024)
Wir empfehlen, das Gardena-Update noch nicht durchzuführen!

.
.

Statusabfrage über Homematic per API

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

Moderator: Lampi

FischerICT
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

Beitrag von FischerICT »

Guten Morgen Jörg,

ja super genau das habe ich gemein, dann ist ersichtlich von wann die letzen Daten stammen. Danke :D

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! :roll:

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

Lampi
sehr erfahrener Forum-Nutzer
Beiträge: 698
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: 81 Male

Re: Homematic - Einbindung

Beitrag von Lampi »

Hallo Andreas,

FischerICT hat geschrieben:
Do 9. Mai 2019, 08:47
Habe auch den Fehler wegen den "19°C" gefunden,
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. :idea:

Viel Erfolg
Jörg
Fragen? Fragen!

FischerICT
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

Beitrag von FischerICT »

Hallo Jörg,

wenn Du einfaches hast, lass von Dir hören.
Ich versuch es die nächsten Tage auch mal.

LG Andreas

thomas.flaechsig
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

Beitrag von thomas.flaechsig »

Lampi hat geschrieben:
Mi 8. Mai 2019, 22:08
Hallo,

der Vollständigkeit halber im zip die Skripte mit eingefügter Variable LastSync.
Die Variable wird bei jedem Aufruf des Skriptes aktualisiert. Auch wenn keine Verbindung zu Robonect besteht. Hoffe das es so gewollt war.

Gruß
Jörg

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 :!:

Lampi
sehr erfahrener Forum-Nutzer
Beiträge: 698
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: 81 Male

Re: Homematic - Einbindung

Beitrag von Lampi »

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
Fragen? Fragen!

thomas.flaechsig
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

Beitrag von thomas.flaechsig »

Lampi hat geschrieben:
Mo 13. Mai 2019, 13:07
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
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

Lampi
sehr erfahrener Forum-Nutzer
Beiträge: 698
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: 81 Male

Re: Statusabfrage über Homematic per API

Beitrag von Lampi »

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.
:shock: 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
Ich hänge das aktuelle Skript von mir mal an, habe einige kleine Änderungen zu Deinem, da ich .toReal-Werte brauche
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.

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) 651-mal heruntergeladen
Fragen? Fragen!

thomas.flaechsig
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

Beitrag von thomas.flaechsig »

Lampi hat geschrieben:
Fr 17. Mai 2019, 11:38
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.

Hallo Jörg,

22.758.638 mal Danke :!: - Lief auf Anhieb und mein cpu-load dankt es mit Langeweile :roll:


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

Lampi
sehr erfahrener Forum-Nutzer
Beiträge: 698
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: 81 Male

Re: Statusabfrage über Homematic per API

Beitrag von Lampi »

Super 😎

und vielen Dank für die Rückmeldung! 👍
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: Steuerung über Homematic per API

Beitrag von Ulfberht »

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:

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");

Webabfrage:

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.

Antworten

Zurück zu „Homematic-Nutzer“