Homematic für Dummies
Moderator: Lampi
- PaulMerkelbach
- Forum-Nutzer
- Beiträge: 20
- Registriert: Di 20. Sep 2016, 15:42
- Mäher: Gardena R40Li
- Firmware des Mähers (MSW): MSW 6.xx.xx
- Herstellungsjahr: 2016
- Robonect-Modul: Robonect Hx (Rev.1)
- Robonect Firmware: V 1.2
- hat sich bedankt: 2 Male
Re: Homematic für Dummies
meinst du die Minuten Mähzeit innerhalb des eingestellten Timer-Intervalls ?
du kannst ja alle 15 Minuten abrufen (so mach ich es) und die "duration" auswerten.
Entweder er mäht noch
oder er lädt schon wieder
oder ist geladen
Als Ungenauigkeit bleiben dann nur die "Such"-Minuten (bei mir 1-4 Minuten)
Wenn man jedoch über den Webbrowser abruft, wird die duration mit jedem Aufruf wieder auf null gesetzt
meine typische Mähdauer ist etwa 90 Minuten, Ladezeit etwa 60 Minuten
Mit niedriger Mähzeit anfangen. Nur wenn einzelne Büschel stehen bleiben: Mähzeit etwas erhöhen
du kannst ja alle 15 Minuten abrufen (so mach ich es) und die "duration" auswerten.
Entweder er mäht noch
oder er lädt schon wieder
oder ist geladen
Als Ungenauigkeit bleiben dann nur die "Such"-Minuten (bei mir 1-4 Minuten)
Wenn man jedoch über den Webbrowser abruft, wird die duration mit jedem Aufruf wieder auf null gesetzt
meine typische Mähdauer ist etwa 90 Minuten, Ladezeit etwa 60 Minuten
Mit niedriger Mähzeit anfangen. Nur wenn einzelne Büschel stehen bleiben: Mähzeit etwas erhöhen
- joe1313
- Forum-Nutzer
- Beiträge: 13
- Registriert: Mo 14. Nov 2016, 21:08
- Mäher: Gardena R40Li
- Firmware des Mähers (MSW): MSW 2.xx.xx
- Herstellungsjahr: 2011
- Robonect-Modul: Robonect Hx (Rev.2)
- Robonect Firmware: -V1.1b
Re: Homematic für Dummies
Hallo,
ich habe es erstmal wie folgt gelöst:
Fensterkontakt an der Ladestation gibt mir Auskunft , ob er in der Station steht. - wenn NEIN - dann Statusabfrage
alle 1 min.
Bei Status "maeht", Zeit gespeichert und wenn Status "maeht" nicht mehr vorhanden Endzeit - Differenz ist Maehzeit.
Automatische Statusabfrage beendet.
ich habe es erstmal wie folgt gelöst:
Fensterkontakt an der Ladestation gibt mir Auskunft , ob er in der Station steht. - wenn NEIN - dann Statusabfrage
alle 1 min.
Bei Status "maeht", Zeit gespeichert und wenn Status "maeht" nicht mehr vorhanden Endzeit - Differenz ist Maehzeit.
Automatische Statusabfrage beendet.
-
- Forum-Anfänger
- Beiträge: 1
- Registriert: Di 20. Sep 2016, 11:32
Re: Homematic für Dummies
Habe noch einen Fehler gefunden, in der 6. Zeile fehlt {HMROHAJUE hat geschrieben: ↑So 2. Apr 2017, 21:13 Hallo Paul,
nachdem mir die Sache keine Ruhe gelassen habe, bin ich die Punkte nochmals Stück für Stück durchgegangen. Ergebnis ist Dein erster Script mit 2 Änderungen. In Zeile 3 des nachfolgenden Ausschnitt Deines Scripts habe ich das LEER (posEnd = ',';)vor dem Komma entfernt. In Zeile 6 die Anzahl der Stellen von 1 auf 2 (substring = stdout.Substr(pos, 2).....)erhöht. Wobei es keine Rolle spielt, ob 2 oder mehr! Die Auswertung erfolgt jetzt genau bis zum Komma.
pos=0;
posStart = '{"Status": ';
posEnd = ' ,';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
substring = stdout.Substr(pos, 1).StrValueByIndex(posEnd, 0) ;
dom.GetObject('M_status').State(substring);
WriteLine("M_status: " # substring);
Mit diesen Änderungen erfolgt jetzt die Befüllung der Systemvariablen wie gewünscht. Ich hoffe das es so bleib!
Wünsche noch einen schönen Abend!
pos=0;
posStart = '{"Status": ';
posEnd = ' ,';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
substring = stdout.Substr(pos, 1).StrValueByIndex(posEnd, 0) ;
dom.GetObject('RoboDolly_Status').State(substring);
WriteLine("M_status: " # substring);
Mit dieser Änderung läuft das Script dann einwandfrei.
Meine auf meine Bedürfnisse geändertes Script:
Code: Alles auswählen
!RoboDolly 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:
!RoboDolly_Modus
!RoboDolly_Modus_Text
!RoboDolly_Stop
!RoboDolly_Batterie
!RoboDolly_Zeit_in_Status
!RoboDolly_Laufzeit
!RoboDolly_Status
!RoboDolly_Status_Text
!RoboDolly_Timer_Status
!RoboDolly_Timer_Datum
!RoboDolly_Timer_Zeit
!RoboDolly_Fehler
!RoboDolly_LastSync
!RoboDolly_Wlan
string url='http://192.168.xxx.yyy/json?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) ;
dom.GetObject('RoboDolly_Status').State(substring);
WriteLine("M_status: " # substring);
! nur für Chart CUxD
dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("RoboDolly_Status;"#substring.ToInteger());
if (substring == 0) {dom.GetObject('RoboDolly_Status_Text').State("Status wird ermittelt");}
if (substring == 1) {dom.GetObject('RoboDolly_Status_Text').State("parkt");}
if (substring == 2) {dom.GetObject('RoboDolly_Status_Text').State("mäht");}
if (substring == 3) {dom.GetObject('RoboDolly_Status_Text').State("sucht die Ladestation");}
if (substring == 4) {dom.GetObject('RoboDolly_Status_Text').State("lädt auf");}
if (substring == 5) {dom.GetObject('RoboDolly_Status_Text').State("sucht");}
if (substring == 8) {dom.GetObject('RoboDolly_Status_Text').State("Schleifensignal verloren");}
if (substring == 16) {dom.GetObject('RoboDolly_Status_Text').State("abgeschaltet");}
if (substring == 17) {dom.GetObject('RoboDolly_Status_Text').State("schläft");}
}
else
{
dom.GetObject('RoboDolly_Status_Text').State("ausgeschaltet ?");
}
string temp = dom.GetObject('RoboDolly_Status_Text').Value();
WriteLine("RoboDolly_Status_Text: " # temp);
pos=0;
posStart = '"stopped": ';
posEnd = '", duration"';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
substring = stdout.Substr(pos, 5).StrValueByIndex(posEnd, 0) ;
!dom.GetObject('RoboDolly_Stop').State(substring);
if (substring == "true") {dom.GetObject('RoboDolly_Stop').State("true");}
if (substring == "false") {dom.GetObject('RoboDolly_Stop').State("false");};
WriteLine("Stop: " # substring);
}
else
{
dom.GetObject('RoboDolly_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 RoboDolly_Zeit_in_Status");
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 # " Std. " # zahl #" Min.");
WriteLine("RoboDolly_Zeit_in_Status: " # substring);
dom.GetObject("RoboDolly_Zeit_in_Status").State(substring);
}
else
{
dom.GetObject('RoboDolly_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('RoboDolly_Modus').State(substring.ToInteger() );
WriteLine("RoboDolly_Modus: " # substring);
if (substring == 0) {dom.GetObject('RoboDolly_Modus_Text').State("Auto");}
if (substring == 1) {dom.GetObject('RoboDolly_Modus_Text').State("Manuell");}
if (substring == 2) {dom.GetObject('RoboDolly_Modus_Text').State("Home");}
if (substring == 3) {dom.GetObject('RoboDolly_Modus_Text').State("Demo");}
}
else
{
dom.GetObject('RoboDolly_Modus').State('-');
}
var temp = dom.GetObject('RoboDolly_Modus_Text').Value();
WriteLine("RoboDolly_Modus_Text: " # 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('RoboDolly_Batterie').State(substring.ToString(1));
!schreibt log in CUxD
dom.GetObject("CUxD.CUX2801001:7.LOGIT").State("RoboDolly_Batterie;"#temp.ToString(1));
}
else
{
dom.GetObject('RoboDolly_Batterie').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('RoboDolly_Laufzeit').State(substring.ToString(1));
}
else
{
dom.GetObject('RoboDolly_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('RoboDolly_Timer_Status').State("Deaktiviert");}
if (substring == 1) {dom.GetObject('RoboDolly_Timer_Status').State("Aktiv");}
if (substring == 2) {dom.GetObject('RoboDolly_Timer_Status').State("Standby");}
}
else
{
dom.GetObject('RoboDolly_Timer_Status').State(' ');
}
var temp = dom.GetObject('RoboDolly_Timer_Status').Value();
WriteLine("RoboDolly_Timer_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('RoboDolly_Timer_Datum').State(substring.ToString(1));
}
else
{
dom.GetObject('RoboDolly_Timer_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('RoboDolly_Timer_Zeit').State(substring.ToString(1) );
}
else
{
dom.GetObject('RoboDolly_Timer_Zeit').State('-');
}
pos=0;
posStart = '"error_message": "';
posEnd = '", "date"';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
substring = stdout.Substr(pos, 8).StrValueByIndex(posEnd, 0) ;
dom.GetObject('RoboDolly_Fehler').State(substring.ToString(1));
}
else
{
dom.GetObject('RoboDolly_Fehler').State('---');
}
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('RoboDolly_Wlan').State(substring.ToString() );
}
else
{
dom.GetObject('RoboDolly_Wlan').State(' ');
}
var temp = system.Date("%d.%m.%Y %H:%M:%S");
dom.GetObject('RoboDolly_LastSync').State(temp.ToString() );
WriteLine("lastsync " # temp);
- PaulMerkelbach
- Forum-Nutzer
- Beiträge: 20
- Registriert: Di 20. Sep 2016, 15:42
- Mäher: Gardena R40Li
- Firmware des Mähers (MSW): MSW 6.xx.xx
- Herstellungsjahr: 2016
- Robonect-Modul: Robonect Hx (Rev.1)
- Robonect Firmware: V 1.2
- hat sich bedankt: 2 Male
Re: Homematic für Dummies
Ich habe das Skript zur Statusabfrage überarbeitet.
wesentliche Änderungen:
1. M_status #7 fehlte und 2-stellige Werte wurden nicht korrekt ausgewertet
2. stopped wurde nicht korrekt ausgewertet
3. error message wurde nicht korrekt ausgewertet
wesentliche Änderungen:
1. M_status #7 fehlte und 2-stellige Werte wurden nicht korrekt ausgewertet
2. stopped wurde nicht korrekt ausgewertet
3. error message wurde nicht korrekt ausgewertet
Code: Alles auswählen
var posEnd;
var substring;
var batt;
var temp;
string stderr;
string stdout;
string pos;
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('M_status').State(substring);
WriteLine("M_status: " # substring);
! nur für Chart CUxD
dom.GetObject("CUxD.CUX2801001:1.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:1.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);
var temp = system.Date("%d.%m.%Y %H:%M:%S");
dom.GetObject('M_lastsync').State(temp.ToString() );
WriteLine("lastsync " # temp);
WriteLine("Hallo Welt");
-
- Forum-Nutzer
- Beiträge: 21
- Registriert: Di 13. Jun 2017, 23:03
- Mäher: Husqvarna Automower 305
- Firmware des Mähers (MSW): MSW 5.xx.xx
- Herstellungsjahr: 2013
- Robonect-Modul: Robonect Hx (Rev.4)
- Robonect Firmware: 1.0 Beta 7
Re: Homematic für Dummies
Hat jemand eine Idee warum mein Mäher bei jeder Statusabfrage per Skript in den "Stop"-Modus geht? Ich verwende folgendes Skript:
Code: Alles auswählen
string url='http://192.168.2.10/json?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) ;
dom.GetObject('Shawn_Status').State(substring);
WriteLine("Shawn_Status: " # substring);
! nur für Chart CUxD
dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("Shawn_Status;"#substring.ToInteger());
if (substring == 0) {dom.GetObject('Shawn_Status_Text').State("Status wird ermittelt");}
if (substring == 1) {dom.GetObject('Shawn_Status_Text').State("parkt");}
if (substring == 2) {dom.GetObject('Shawn_Status_Text').State("mäht");}
if (substring == 3) {dom.GetObject('Shawn_Status_Text').State("sucht die Ladestation");}
if (substring == 4) {dom.GetObject('Shawn_Status_Text').State("lädt auf");}
if (substring == 5) {dom.GetObject('Shawn_Status_Text').State("sucht");}
if (substring == 7) {dom.GetObject('Shawn_Status_Text').State("befindet sich im Fehlerstatus");}
if (substring == 8) {dom.GetObject('Shawn_Status_Text').State("Schleifensignal verloren");}
substring = stdout.Substr(pos, 2).StrValueByIndex(posEnd, 0) ;
if (substring == 16) {dom.GetObject('Shawn_Status_Text').State("abgeschaltet");}
if (substring == 17) {dom.GetObject('Shawn_Status_Text').State("schläft");}
}
else
{
dom.GetObject('Shawn_Status_Text').State("ausgeschaltet ?");
}
string temp = dom.GetObject('Shawn_Status_Text').Value();
WriteLine("Shawn_Status_Text: " # temp);
pos=0;
posStart = '"stopped": ';
posEnd = '", duration"';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
substring = stdout.Substr(pos, 5).StrValueByIndex(posEnd, 0) ;
!dom.GetObject('Shawn_Stop').State(substring);
if (substring == "true") {dom.GetObject('Shawn_Stop').State("true");}
if (substring == "false") {dom.GetObject('Shawn_Stop').State("false");};
WriteLine("Stop: " # substring);
}
else
{
dom.GetObject('Shawn_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 Shawn_Zeit_in_Status");
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 # " Std. " # zahl #" Min.");
WriteLine("Shawn_Zeit_in_Status: " # substring);
dom.GetObject("Shawn_Zeit_in_Status").State(substring);
}
else
{
dom.GetObject('Shawn_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('Shawn_Modus').State(substring.ToInteger() );
WriteLine("Shawn_Modus: " # substring);
if (substring == 0) {dom.GetObject('Shawn_Modus_Text').State("Auto");}
if (substring == 1) {dom.GetObject('Shawn_Modus_Text').State("Manuell");}
if (substring == 2) {dom.GetObject('Shawn_Modus_Text').State("Home");}
if (substring == 3) {dom.GetObject('Shawn_Modus_Text').State("Demo");}
}
else
{
dom.GetObject('Shawn_Modus').State('-');
}
var temp = dom.GetObject('Shawn_Modus_Text').Value();
WriteLine("Shawn_Modus_Text: " # 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('Shawn_Batterie').State(substring.ToString(1));
!schreibt log in CUxD
dom.GetObject("CUxD.CUX2801001:7.LOGIT").State("Shawn_Batterie;"#temp.ToString(1));
}
else
{
dom.GetObject('Shawn_Batterie').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('Shawn_Laufzeit').State(substring.ToString(1));
}
else
{
dom.GetObject('Shawn_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('Shawn_Timer_Status').State("Deaktiviert");}
if (substring == 1) {dom.GetObject('Shawn_Timer_Status').State("Aktiv");}
if (substring == 2) {dom.GetObject('Shawn_Timer_Status').State("Standby");}
}
else
{
dom.GetObject('Shawn_Timer_Status').State(' ');
}
var temp = dom.GetObject('Shawn_Timer_Status').Value();
WriteLine("Shawn_Timer_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('Shawn_Timer_Datum').State(substring.ToString(1));
}
else
{
dom.GetObject('Shawn_Timer_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('Shawn_Timer_Zeit').State(substring.ToString(1) );
}
else
{
dom.GetObject('Shawn_Timer_Zeit').State('-');
}
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('Shawn_Fehler').State(substring.ToString(1));
}
else
{
dom.GetObject('Shawn_Fehler').State('keine Fehlermeldung');
}
WriteLine("Shawn_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('Shawn_Wlan').State(substring.ToString() );
}
else
{
dom.GetObject('Shawn_Wlan').State(' ');
}
var temp = system.Date("%d.%m.%Y %H:%M:%S");
dom.GetObject('Shawn_LastSync').State(temp.ToString() );
WriteLine("lastsync " # temp);
-
- erfahrener Forum-Nutzer
- Beiträge: 99
- Registriert: Fr 4. Mär 2016, 21:56
- Wohnort: Dessau-Roßlau
- Mäher: Gardena R45Li
- Firmware des Mähers (MSW): MSW 5.xx.xx
- Herstellungsjahr: 2013
- Robonect-Modul: Robonect H30x (Rev.1)
- Robonect Firmware: 1.0beta
Re: Homematic für Dummies
vielleicht wegen
?
Code: Alles auswählen
if (substring == "true") {dom.GetObject('Shawn_Stop').State("true");}
?
-
- Forum-Nutzer
- Beiträge: 21
- Registriert: Di 13. Jun 2017, 23:03
- Mäher: Husqvarna Automower 305
- Firmware des Mähers (MSW): MSW 5.xx.xx
- Herstellungsjahr: 2013
- Robonect-Modul: Robonect Hx (Rev.4)
- Robonect Firmware: 1.0 Beta 7
Re: Homematic für Dummies
Hm, dazu bin ich selbst nicht tief genug in der Materie. Einen Unterschied zum Skript von PaulMerkelbach habe ich noch gefunden, er interpretiert an dieser Stelle Pos 4, ich habe Pos 5 im Skript. Ich ändere das noch mal oder entferne den Block einfach komplett.
-
- Forum-Nutzer
- Beiträge: 21
- Registriert: Di 13. Jun 2017, 23:03
- Mäher: Husqvarna Automower 305
- Firmware des Mähers (MSW): MSW 5.xx.xx
- Herstellungsjahr: 2013
- Robonect-Modul: Robonect Hx (Rev.4)
- Robonect Firmware: 1.0 Beta 7
Re: Homematic für Dummies
Der Tipp war richtig, vielen Dank. Ich habe die gesamte Passage aus der Abfrage entfernt, danach funktioniert alles wie gewünscht.Timberland hat geschrieben: ↑Do 22. Jun 2017, 07:56 vielleicht wegen
Code: Alles auswählen
if (substring == "true") {dom.GetObject('Shawn_Stop').State("true");}
-
- Forum-Anfänger
- Beiträge: 7
- Registriert: So 18. Jun 2017, 15:56
- Mäher: Husqvarna Automower 105
- Firmware des Mähers (MSW): MSW 6.xx.xx
- Herstellungsjahr: 2016
- Robonect-Modul: Robonect Hx (Rev.5)
- Robonect Firmware: V1.0 Beta7
Re: Homematic für Dummies
Hallo zusammen, ich habe gestern Abend eine Ewigkeit damit verbracht meinen Mähroboter in die homematic ein zu binden, mit mäßigem Erfolg. Das Script am Anfang dieses Thread habe ich zum laufen bekommen, bis mit aufgefallen ist, das zB der Status nicht richtig übermittelt wird. Dann habe ich weitergelesen und das mit der nr 17 entdeckt. Nun habe ich neue systemvariablen angelegt und das Skript der letzten Seite genutzt, aber nun bekomme ich gar keine Werte mehr in die systemvariablen mehr. Heute Mogen habe ich CuxD installiert. bringt mir das irgendwas, muss hier noch irgendwas auf der Oberfläche von CuxD eingestellt werden?
-
- Forum-Nutzer
- Beiträge: 13
- Registriert: Fr 12. Mai 2017, 06:28
- Mäher: Gardena R40Li
- Firmware des Mähers (MSW): MSW 5.xx.xx
- Herstellungsjahr: 2012
- Robonect-Modul: Robonect Hx (Rev.4)
- Robonect Firmware: 0.9e
Re: Homematic für Dummies
Du musst auf alle Fälle zunächst unter der CUxD-Oberfläche ein neues virtuelles Gerät erzeugen:
Typ 28 (System)
Funktion: Exec
Seriennummer: 1
Dann auf "Gerät in der CCU erzeugen" klicken. Bei den Geräten unter der Homematic-Oberfläche zur Sicherheit nochmal schauen, ob da dann eine Funk-Fernbedienung mit der Adresse CUX2801001:1 - irgendwas vorhanden ist.
Wenn Du dann im Script von PaulMerkelbach (vielen Dank an der Stelle) die richtige String-URL deines Robonects und alle Variablen richtig angelegt hast, sollte alles einwandfrei funktionieren.
Was ich gerne bei dem Script wissen würde: Geht das irgendwie auch mit gesetztem Username und Passwort? Ich traue mich da nicht zu experimentieren, da ich diesbezüglich von abschmierenden CCU's gelesen habe....
Typ 28 (System)
Funktion: Exec
Seriennummer: 1
Dann auf "Gerät in der CCU erzeugen" klicken. Bei den Geräten unter der Homematic-Oberfläche zur Sicherheit nochmal schauen, ob da dann eine Funk-Fernbedienung mit der Adresse CUX2801001:1 - irgendwas vorhanden ist.
Wenn Du dann im Script von PaulMerkelbach (vielen Dank an der Stelle) die richtige String-URL deines Robonects und alle Variablen richtig angelegt hast, sollte alles einwandfrei funktionieren.
Was ich gerne bei dem Script wissen würde: Geht das irgendwie auch mit gesetztem Username und Passwort? Ich traue mich da nicht zu experimentieren, da ich diesbezüglich von abschmierenden CCU's gelesen habe....