Homematic Abfrage mit V1.0 Beta 6

HomeMatic bietet für fast alle Situationen des häuslichen Lebens eine praktische Lösung: Das Home-Control-System erleichtert den Alltag und übernimmt wiederkehrende Vorgänge im Haus, wie z.B. das Einfahren der Markise, das Schließen der Rollladen oder das Öffnen des Garagentors.
Antworten
Benutzeravatar
vecci
Beiträge: 28
Registriert: Sa 21. Jul 2018, 13:14
Wohnort: Hagen-Hohenlimburg
Mäher: Gardena R40Li
Firmware des Mähers (MSW): MSW 6.xx.xx
Herstellungsjahr: 2017
Robonect-Modul: Robonect Hx (Rev.5)
Robonect Firmware: V1.0_Beta6b

Homematic Abfrage mit V1.0 Beta 6

Beitrag von vecci » Do 26. Jul 2018, 21:25

Hallo zusammen,
ich bin heute irgendwie alles auf einmal angegangen.
Angefangen habe ich mit dem Einbau der Gleitplatte, dann das Robonect, dann ALEXA und nun verzweifel ich seit Stunden an der Homematic Anbindung.
Homematic nutze ich seit 8 Jahren, allerdings kenne ich mich nicht so gut mit den Skripten aus.
Ich habe tagelang sämtliche Beiträge zu der Homematic hier im Forum studiert, kriege es aber einfach nicht hin.

Es kann ja auch sein, das es an der neuen FW Beta6 liegt??

Sämtliche Variablen sind angelegt, ein Skript habe ich mir zusammen gebastelt, es hapert aber an manchen Abfragen.

Mein Skript:
!Shaun CUxD Abfrage V1
!Als Systemvariablen sind in Homematic angelegt:
!Shaun_Modus
!Shaun_Modus_Text
!Shaun_Stop
!Shaun_Batterie
!Shaun_Zeit_in_Status
!Shaun_Laufzeit
!Shaun_Status
!Shaun_Status_Text
!Shaun_Timer_Status
!Shaun_Timer_Datum
!Shaun_Timer_Zeit
!Shaun_Fehler
!Shaun_LastSync
!Shaun_Wlan


!IP Adresse des Maehers
string Url = 'http://192.168.178.23/json?cmd=status';
string User = 'vecci';
string Password = '*********';

!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:1.CMD_SETS").State("wget --http-user=" # User # " --http-password=" # Password # " -q -O - '" # Url # "'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string stdout= dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

!cuxd Serien Nummer
!dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
!dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
!string stdout= dom.GetObject("CUxD.CUX2801001:1.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('Shaun_Status').State(substring);
WriteLine("M_Status: " # substring);

! nur für Chart CUxD
dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("Shaun_Status;"#substring.ToInteger());

if (substring == 0) {dom.GetObject('Shaun_Status_Text').State("Status wird ermittelt");}
if (substring == 1) {dom.GetObject('Shaun_Status_Text').State("parkt");}
if (substring == 2) {dom.GetObject('Shaun_Status_Text').State("mäht");}
if (substring == 3) {dom.GetObject('Shaun_Status_Text').State("sucht die Ladestation");}
if (substring == 4) {dom.GetObject('Shaun_Status_Text').State("lädt auf");}
if (substring == 5) {dom.GetObject('Shaun_Status_Text').State("sucht");}
if (substring == 7) {dom.GetObject('Shaun_Status_Text').State("befindet sich im Fehlerstatus");}
if (substring == 8) {dom.GetObject('Shaun_Status_Text').State("Schleifensignal verloren");}

substring = stdout.Substr(pos, 2).StrValueByIndex(posEnd, 0) ;

if (substring == 16) {dom.GetObject('Shaun_Status_Text').State("abgeschaltet");}
if (substring == 17) {dom.GetObject('Shaun_Status_Text').State("schläft");}
}
else
{
dom.GetObject('Shaun_Status_Text').State("ausgeschaltet ?");
}

string temp = dom.GetObject('Shaun_Status_Text').Value();
WriteLine("Shaun_Status_Text: " # 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('Shaun_Stop').State(substring);
if (substring == "true") {dom.GetObject('Shaun_Stop').State("true");}
if (substring == "fals") {dom.GetObject('Shaun_Stop').State("false");};
WriteLine("Stop: " # substring);
}
else
{
dom.GetObject('Shaun_Stop').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("Shaun_Zeit_in_Status: " # substring);

dom.GetObject("Shaun_Zeit_in_Status").State(substring);
}
else
{
dom.GetObject('Shaun_Zeit_in_Status').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('Shaun_Modus').State(substring.ToInteger() );
WriteLine("Shaun_Modus: " # substring);
if (substring == 0) {dom.GetObject('Shaun_Modus_Text').State("Modus Auto");}
if (substring == 1) {dom.GetObject('Shaun_Modus_Text').State("Modus Manuell");}
if (substring == 2) {dom.GetObject('Shaun_Modus_Text').State("Modus Home");}
if (substring == 3) {dom.GetObject('Shaun_Modus_Text').State("Modus Demo");}
}
else
{
dom.GetObject('Shaun_Modus').State('-');
}

var temp = dom.GetObject('Shaun_Modus_Text').Value();
WriteLine("Shaun_Modus_Text: " # temp);

pos=0;
posStart = '"battery": ';
posEnd = ', "';
pos = stdout.Find(posStart) + posStart.Length();
!WriteLine("pos");
!WriteLine(pos);
!substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;
substring = stdout.Substr(pos, 3).StrValueByIndex(posEnd, 0) ;
batt=substring;
substring = substring.ToInteger();
dom.GetObject('Shaun_Batterie').State(substring.ToInteger() );
!WriteLine("Shaun_Batterie: " # substring);
!batt=substring;
substring =substring + ' %';
if(stdout.Find(posStart)>0)
{
!WriteLine("Battery");
!WriteLine(substring);
dom.GetObject('Shaun_Batterie').State(substring.ToString(1));
dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("Shaun_Batterie;"#batt.ToString(1));
!WriteLine("Batterie ende!");
}
else
{
dom.GetObject('Shaun_Batterie').State('Variable nicht gesetzt');
}

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('Shaun_Laufzeit').State(substring.ToString(1));
}
else
{
dom.GetObject('Shaun_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('Shaun_Time_Status').State("Deaktiviert");}
if (substring == 1) {dom.GetObject('Shaun_Time_Status').State("Aktiv");}
if (substring == 2) {dom.GetObject('Shaun_Time_Status').State("Standby");}
}
else
{
dom.GetObject('Shaun_Time_Status').State(' ');
}

var temp = dom.GetObject('Shaun_Time_Status').Value();
WriteLine("Shaun_Time_Status: " # 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('Shaun_Time_Datum').State(substring.ToString(1));
}
else
{
dom.GetObject('Shaun_Time_Datum').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('Shaun_Time_Zeit').State(substring.ToString(1) );
}
else
{
dom.GetObject('Shaun_Time_Zeit').State('-');
}

WriteLine("Shaun_Time_Zeit: " # 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('Shaun_Fehler').State(substring.ToString(1));
}
else
{
dom.GetObject('Shaun_Fehler').State('keine Fehlermeldung');
}

WriteLine("Shaun_Fehler: " # 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('Shaun_Wlan').State(substring.ToString() );
}
else
{
dom.GetObject('Shaun_Wlan').State(' ');
}

WriteLine("Shaun_Wlan: " # substring);

var temp = system.Date("%d.%m.%Y %H:%M:%S");
dom.GetObject('Shaun_LastSync').State(temp.ToString() );
WriteLine("lastsync " # temp);



Als Ausgabe bekomme ich:
Antwort: {"name": "Shaun", "id": "A614B5", "status": {"status": 2, "distance": 15, "stopped": false, "door": false, "duration": 1485, "mode": 0, "battery": 81, "hours": 27}, "timer": {"status": 1}, "blades": {"quality": 99, "hours": 2, "days": 0}, "wlan": {"signal": -78}, "health": {"temperature": 36, "humidity": 36}, "clock": {"date": "2018-07-26", "time": "21:09:53", "unix": 1532639393}, "successful": true}
Shaun_Status_Text: ausgeschaltet ?
Stop: fals
24 Minuten M_duration
zahl 0:24
zahl h Gesamtstunden: 0
zahl d Tage:0
zahl restl.Minuten: 24
zahl Minuten:24
Shaun_Zeit_in_Status: 0 Tage 0 Stunden 24 Minuten
Shaun_Modus: 0
Shaun_Modus_Text: Modus Auto

Sieht dann so aus:
Der Dateianhang hm.jpg existiert nicht mehr.
Wie ihr seht, passt da einiges nicht.
Die Abfrage im Browser klappt einwandfrei:
hm.jpg

Ich hoffe irgend jemand von euch hat da Plan von und kann mir weiter helfen...
**Gardena R40Li Bj 2017**Gleitplatte**Lenkbares Heckrad von Geisi-tech**Robonect V5 mit V1.0_Beta6b**Homematic (derzeit im Test) u. ALEXA-Einbindung**

Antworten

Zurück zu „Homematic“