Homematic für Dummies

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.
Benutzeravatar
PaulMerkelbach
Beiträge: 14
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: 0.9e

Re: Homematic für Dummies

Beitrag von PaulMerkelbach » Sa 6. Mai 2017, 14:13

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
"Schäfchen" Gleitteller, FTA-Heckrad, Hütte
API-Steuerung mit Homematic

Benutzeravatar
joe1313
Beiträge: 9
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: -V0.9 Final

Re: Homematic für Dummies

Beitrag von joe1313 » So 7. Mai 2017, 08:35

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.

Homematic-Fan
Beiträge: 1
Registriert: Di 20. Sep 2016, 11:32

Re: Homematic für Dummies

Beitrag von Homematic-Fan » Sa 13. Mai 2017, 18:28

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!
Habe noch einen Fehler gefunden, in der 6. Zeile fehlt {

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

Gruß Andi

Benutzeravatar
PaulMerkelbach
Beiträge: 14
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: 0.9e

Re: Homematic für Dummies

Beitrag von PaulMerkelbach » Sa 13. Mai 2017, 22:55

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

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");
"Schäfchen" Gleitteller, FTA-Heckrad, Hütte
API-Steuerung mit Homematic

Manuel79
Beiträge: 10
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: 0.9e

Re: Homematic für Dummies

Beitrag von Manuel79 » Mi 21. Jun 2017, 21:36

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

Timberland
Beiträge: 96
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

Beitrag von Timberland » Do 22. Jun 2017, 07:56

vielleicht wegen

Code: Alles auswählen

if (substring == "true") {dom.GetObject('Shawn_Stop').State("true");}


?

Manuel79
Beiträge: 10
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: 0.9e

Re: Homematic für Dummies

Beitrag von Manuel79 » Do 22. Jun 2017, 08:41

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.

Manuel79
Beiträge: 10
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: 0.9e

Re: Homematic für Dummies

Beitrag von Manuel79 » Do 22. Jun 2017, 18:09

Timberland hat geschrieben:
Do 22. Jun 2017, 07:56
vielleicht wegen

Code: Alles auswählen

if (substring == "true") {dom.GetObject('Shawn_Stop').State("true");}
Der Tipp war richtig, vielen Dank. Ich habe die gesamte Passage aus der Abfrage entfernt, danach funktioniert alles wie gewünscht.

Rudi2017
Beiträge: 4
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.4)
Robonect Firmware: V.09e

Re: Homematic für Dummies

Beitrag von Rudi2017 » So 2. Jul 2017, 07:44

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?

Marck
Beiträge: 10
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

Beitrag von Marck » So 2. Jul 2017, 19:59

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

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste