Seite 1 von 1

Homematic Abfrage mit V1.0 Beta 6

Verfasst: Do 26. Jul 2018, 21:25
von vecci
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...