Robbie + Wetter + Zeit + Garagentor

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

Moderator: Lampi

swat33333
Forum-Nutzer
Beiträge: 15
Registriert: Fr 7. Okt 2016, 17:17
Mäher: Husqvarna Automower 105
Herstellungsjahr: 2016
Robonect Firmware: 0.9c
Kontaktdaten:

Robbie + Wetter + Zeit + Garagentor

Beitrag von swat33333 »

Servus wie schon oben beschrieben Steuer ich meinen Robbi abhängig von der Uhrzeit und Wetter. Weiter ist ein timer integriert der pro mäh Minute um eins verringert wird und täglich um die gewünschte Zeit hoch gesetzt wird.
Jedes Mal wenn mein Robbi los will wird das elektrische Tor geöffnet und nach dem mähen wieder geschlossen.

Ih weis hier im Forum gibt es schon eine gute Anleitung allerdings würde ich meine hör noch etwas genauer beschreiben sodass man sie einfacher nachbauen kann.

Würde da intresse bestehen ?

Nooblucker
Forum-Anfänger
Beiträge: 8
Registriert: Di 12. Jul 2016, 21:19
Wohnort: Lauchringen
Mäher: Gardena R40Li
Firmware des Mähers (MSW): MSW 3.xx.xx
Herstellungsjahr: 2013
Robonect-Modul: Robonect H30x (Rev.3)
Robonect Firmware: 1.0

Re: Robbie + Wetter + Zeit + Garagentor

Beitrag von Nooblucker »

Hallo,

ich würde mich über eine weitere Beschreibung sehr freuen, denn so einfach ist es nicht den Robbie ihn die Homematic-Welt einzubinden.

Freue mich mal auf deine Anleitung und Beispiele für weitere Anregungen.

LG

Kay-Uwe

swat33333
Forum-Nutzer
Beiträge: 15
Registriert: Fr 7. Okt 2016, 17:17
Mäher: Husqvarna Automower 105
Herstellungsjahr: 2016
Robonect Firmware: 0.9c
Kontaktdaten:

Re: Robbie + Wetter + Zeit + Garagentor

Beitrag von swat33333 »

OK fangen wir mal ganz von vorne an, sodass auch Neueinsteiger mitkommen.

Als erstes benötigen wir CuxD
Das bekommen wir hier https://homematic-forum.de/forum/viewto ... 37&t=15298

Installation von CuxD
Auf der CCU einloggen
Einstellungen -> Systemsteuerung ->Zusatzsoftware
Hier wählen wir die Datei von CuxD aus und installieren diese.

Nun werden diverse Timer, Variablen usw sowohl in CuxD und der CCU benötigt.

Variablen in der CCU

Name Typ Wert Maßeinheit
Robbi_Batterie Zahl 0-65000 %
Robbi_Fehler Zahl 0-65000
Robbi_LastSync Zeichenkette
Robbi_Laufzeit Zeichenette
Robbi_Modus Zahl 0-65000
Robbi_Modus_Text Zeichenkette
Robbi_Status Zahl 0-65000
Robbi_Status_Text Zeichenkette
Robbi_Stop Logikwert
Robbi_Time_Datum Zeichenkette
Robbi_Timer_Status Zeichenkette
Robbi_Timer_Zeit Zahl 0-650000
Robbi_Wlan Zahl 0-650000
Robbi_Zeit_in_Status Zeichekette
Robbi_Auto/Man Logikwert
Robbi_Maehzeit Zahl 0-650000
Regen ja/nein Logikwert

Gerät in CuxD einrichten
Dazu geht man in der CCU auf Einstellungen -> Systemsteuerung -> Cux-Daemon
Nun öffnet sich ein neues Fenster in dem Man auf „Geräte“ klickt
Hier richten wir dann einen Timer und eine Fernbedienung als virtuelles Gerät ein.
Was wie folgt funktioniert.

CuxD Gerätetyp ->“(28) System“
Funktion ->“Timer“
Gerät auf CCU erzeugen klicken

Gerätetyp ->“(28) System“
Funktion ->“Exec“
Gerät auf CCU erzeugen klicken

Jetzt sollten auf der rechten Seite zwei neue Geräte auftauchen, um diese nun in der CCU zu verwenden müssen sie noch angelernt werden.
Das CuxD Fenster kann jetzt einfach geschlossen werden. Auf der CCU Oberfläche gehen wir nun auf „Geräte anlernen“ und dort auf den Posteingang hier werden die beiden neuen Geräte wie alle anderen CCU Geräte eingelernt.
Jetzt sollten alle Vorbereitungen soweit gelaufen sein. Kommen wir nun zum ersten Programm

Status Abfrage des Robbi weitere Infos hier im Forum
Hierzu erstellen wir in der CCU eine neues Programm welches Periodisch alle 2 Minuten den Status abfragt.
Bedingung:Wenn
Zeitsteuerung –> Ganztätig – Intervall 2 Minuten -> zu Zeitpunkt auslösen
Aktivität:Dann
Skript -> Skript einfügen -> sofort
Hier ist das Skript welches eingefügt werden muss

Code: Alles auswählen

string url='http://192.168.1.10/json?cmd=status';
var stdout="";
var posStart;
var posEnd;
var substring;
var batt;
var temp;
string stderr;
string stdout;
string pos;

dom.GetObject("CUxD.CUX2801002:2.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:2.CMD_QUERY_RET").State(1);
string stdout= dom.GetObject("CUxD.CUX2801002:2.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('Robbi_Status').State(substring);
WriteLine("M_status: " # substring);

dom.GetObject("CUxD.CUX2801002:2.LOGIT").State("Robbi_Status;"#substring.ToInteger());

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

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

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

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

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

var temp = dom.GetObject('Robbi_Modus_Text').Value();
WriteLine("Robbi_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('Robbi_Batterie').State(substring.ToString(1));
!schreibt log in CUxD
dom.GetObject("CUxD.CUX2801002:2.LOGIT").State("Robbi_Batterie;"#temp.ToString(1));
}
else
{
dom.GetObject('Robbi_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('Robbi_Laufzeit').State(substring.ToString(1));
}
else
{
dom.GetObject('Robbi_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('Robbi_Time_Status').State("Deaktiviert");}
if (substring == 1) {dom.GetObject('Robbi_Time_Status').State("Aktiv");}
if (substring == 2) {dom.GetObject('Robbi_Time_Status').State("Standby");}
}
else
{
dom.GetObject('Robbi_Time_Status').State(' ');
}

var temp = dom.GetObject('Robbi_Time_Status').Value();
WriteLine("Robbi_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('Robbi_Time_Datum').State(substring.ToString(1));
}
else
{
dom.GetObject('Robbi_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('Robbi_Time_Zeit').State(substring.ToString(1) );
}
else
{
dom.GetObject('Robbi_Time_Zeit').State('-');
}

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

WriteLine("Robbi_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('Robbi_Wlan').State(substring.ToString() );
}
else
{
dom.GetObject('Robbi_Wlan').State(' ');
}

WriteLine("Robbi_Wlan: " # substring);

var temp = system.Date("%d.%m.%Y %H:%M:%S");
dom.GetObject('Robbi_LastSync').State(temp.ToString() );
WriteLine("lastsync " # temp);
Tägliche mäh Zeit festlegen die unter normal Bedingungen pro Tag erledigt werden soll.
Bedingung Wenn:
Zeitsteuerung -> täglich um 02:00 -> zum Zeitpunkt auslösen
Aktivität:Dann
Skript -> Skript einfügen -> sofort
Hier ist das Skript welches eingefügt werden muss

Code: Alles auswählen

	
	var a = dom.GetObject("Robbi_Maehzeit").Value();
	var b = 80;
	var c = a+b;
	WriteLine(c);
	dom.GetObject("Robbi_Maehzeit").State(c);
Var a holt die Aktuelle Restzeit die noch in der Variablen Robbi_Maehzeit steht und speichert diese in „a“.
Var b nimmt den Wert der als Zahl dahinter steht. Diese Zahl gibt die Minuten an die pro Tag erledigt werden sollen somit muss diese angepasst werden.
Var c rechnet die Restzeit des Vortages mit der des aktuellen Tages zusammen und speichert diese wieder in der Variablen.


Reduzierung der Mähzeit pro Minute

Bedingung Wenn:
Zeitsteuerung -> Täglich, gantägig -> zum Zeitpunkt auslösen
Systemzustand->Robbi_Status, im Wertbereich 2.00 bis kleiner 3.00 ->bei Änderung auslösen
Geräteauswahl->HM-RC-19 CUX2800001:1, Schaltzustand ein -> bei Aktualisierung auslösen
Aktivität Dann:
Skript-> Skript einfügen -> sofort
Geräteauswahl -> HM-RC-19 CUX2800001:1-> verzögert um 1 sec -> Timer_Set 59

Code: Alles auswählen

	var a = dom.GetObject("Robbi_Maehzeit ").Value();
	var b = 1;
	var c = a-b;
	WriteLine(c);
	dom.GetObject("Robbi_Maehzeit ").State(c);
Die Zeitsteuerung täglich wird benötigt das man mit der Robbi:Status variablen arbeiten kann. Ist ein Fehler in der CCU Software der so behoben wird.
Über den Systemzustand 2 bis kleiner 3 wird festgelegt das das Programm nur ausgeführt wird wenn der Robbi in Status 2 ist also wenn er aktiv mäht.

Bei der Geräteauswahl HM-RC-19 müsst ihr euer CUX code eintragen der bei euch für die Timer Fernbedienung generiert worden ist.

Das Skript zieht dann jede Minute eine Minute von der Zeit aus der Variablen Robbi_Maehzeit ab.


Robbi- Start/Stop
Bedingung Wenn:
Systemzustand -> Robbi_Batterie größer oder gleich 100% -> bei änderung auslösen
Und
Systemzustand -> Robbi_Maehzeit größer als 0.00 -> nur prüfen
Und
Zeitsteuerung -> Wöchentlich von 10:00 uhr bis 21:00 -> zum Zeitpunkt auslösen
Und
Systemzustand -> Regen nein -> bei Änderung auslösen

Aktivät Dann:
Geräteauswahl -> Robby Garage – sofort- Behanghöhe auf 100%
Geräteauswahl -> Hm-RC-19 Cux2800001:1 verzögert um 5 sec auf ein
Skript -> skritpt einfügen -> verzögert um 20 Sekunden

Code: Alles auswählen

string User = '';
string Password = '';
string Url="http://192.168.1.10/xml?cmd=mode&mode=auto";
system.Exec("wget --http-user=" # User # " --http-password=" # Password # " -q -O - '" # Url # "'");
Bedingung Sonst, wenn:
Systemzustang -> Robbi_Meahzeit kleiner oder gleich 0.00 ->Bei Änderung auslösen
Oder
Systemzustand -> Robbi_Batterie kleiner oder gleich 25.00%->Bei Änderung auslösen
Oder
Systemzustand -> Regen ja -> bei Änderung auslösen
Aktivität Dann:
Geräteauswahl -> Hm-RC-19 Cux2800001:1 sofort Schaltzustand aus.
Skript -> Skirpt einfügen -> sofort

Code: Alles auswählen

string User = '';
string Password = '';
string Url="http://192.168.1.10/xml?cmd=mode&mode=home";
system.Exec("wget --http-user=" # User # " --http-password=" # Password # " -q -O - '" # Url # "'");
*
Hier muss darauf geachtet werden das die HM-RC 19 CUX nummer die gleiche ist wie die bei der mäh Zeit Berechnung. Durch den Befehl Schaltzustand ein wird quasi das Skript aktiviert das immer eine Minute abgezogen wird.

Weiter muss die IP Adresse unter der der Robbi erreichbar ist noch aktualiersiert werden.
Im Robbi selbst dürfen keine Zeiten gespeichert sein da diese sonst Vorrang haben und der Robbi evtl nicht los fährt. Passwort und User habe ich bei meinem Robbi nicht gesetzt.
Im Abschnitt Zeitsteuerung könnt ihr festlegen an welchen Tagen und von wann bis wann der Robby Auslauf hat. In meinem Beispiel das er ab 10 uhr morgens bis spätestens 21 uhr Abends das Haus verlassen.

Für die Garagen Steuerung nutze ich einen Elektrischen Rollladen welcher über einen Rollladen-Aktor betrieben wird.
Dieser wird sofort angesteuert und der Start Befehl des Robbi kommt er 20 sec später damit das Tor genügend Zeit hat um aufzufahren.


Mehr auf meinem Blog oder demnächst hier.
Fortsetzung folgt...

Nooblucker
Forum-Anfänger
Beiträge: 8
Registriert: Di 12. Jul 2016, 21:19
Wohnort: Lauchringen
Mäher: Gardena R40Li
Firmware des Mähers (MSW): MSW 3.xx.xx
Herstellungsjahr: 2013
Robonect-Modul: Robonect H30x (Rev.3)
Robonect Firmware: 1.0

Re: Robbie + Wetter + Zeit + Garagentor

Beitrag von Nooblucker »

Hallo swat,

vielen Dank für die Aufstellung... ich konnte vieles übernehmen und habe endlich den CUX Timer mal angewandt, ich hatte dieses mit einer Variablen, welche ich jede Minute aktualisieren lassen habe vorher gelöst - CUX-Timer ist aber besser :-)

Ich freue mich auf deinen Block, den ich lerne gerne dazu und freue mich immer wieder über neue Projekte.

LG

Kay-Uwe


PS: Falls das der Moderator liest, ich bin total begeistert von den Robonect-Modulen, so einfach und stabil in der
Anwendung - vielen Dank für die tolle Arbeit :-)

saschen79
Forum-Anfänger
Beiträge: 7
Registriert: Sa 20. Jan 2018, 14:52
Mäher: Gardena R40Li
Herstellungsjahr: 2014
Robonect-Modul: noch kein Robonect verbaut
Robonect Firmware: ---

Re: Robbie + Wetter + Zeit + Garagentor

Beitrag von saschen79 »

Hallo swat,

erstmal vielen Dank für die ausführliche Anleitung. Ich habe vor kurzem alles aufgebaut, und regelmäßig den Zyklus abgefragt. Hat alles perfekt funktioniert. Heute habe ich Robby aus dem Winterschlaf geholt und der Batteriestatus wird nicht mehr aktualisiert. Alle anderen Werte werden ausgelesen und die SV aktualisiert. Hast Du (oder jeder andere natürlich auch :) ) eine Idee, woran das liegen kann?
Anbei auch das Skript.

Danke und Gruß Sascha.

Code: Alles auswählen

string url='http://192.168.178.XX/json?cmd=status';
var stdout="";
var posStart;
var posEnd;
var substring;
var batt;
var temp;
string stderr;
string stdout;
string pos;

dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
string stdout= dom.GetObject("CUxD.CUX2801002: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('Robbi_Status').State(substring);
WriteLine("M_status: " # substring);

dom.GetObject("CUxD.CUX2801002:1.LOGIT").State("Robbi_Status;"#substring.ToInteger());

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

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

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

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

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

var temp = dom.GetObject('Robbi_Modus_Text').Value();
WriteLine("Robbi_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('Robbi_Batterie').State(substring.ToString(1));
!schreibt log in CUxD
dom.GetObject("CUxD.CUX2801002:1.LOGIT").State("Robbi_Batterie;"#temp.ToString(1));
}
else
{
dom.GetObject('Robbi_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('Robbi_Laufzeit').State(substring.ToString(1));
}
else
{
dom.GetObject('Robbi_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('Robbi_Time_Status').State("Deaktiviert");}
if (substring == 1) {dom.GetObject('Robbi_Time_Status').State("Aktiv");}
if (substring == 2) {dom.GetObject('Robbi_Time_Status').State("Standby");}
}
else
{
dom.GetObject('Robbi_Time_Status').State(' ');
}

var temp = dom.GetObject('Robbi_Time_Status').Value();
WriteLine("Robbi_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('Robbi_Time_Datum').State(substring.ToString(1));
}
else
{
dom.GetObject('Robbi_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('Robbi_Time_Zeit').State(substring.ToString(1) );
}
else
{
dom.GetObject('Robbi_Time_Zeit').State('-');
}

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

WriteLine("Robbi_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('Robbi_Wlan').State(substring.ToString() );
}
else
{
dom.GetObject('Robbi_Wlan').State(' ');
}

WriteLine("Robbi_Wlan: " # substring);

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

Camel2k
Forum-Nutzer
Beiträge: 19
Registriert: Sa 6. Jan 2018, 13:24
Wohnort: Wremen
Mäher: Husqvarna Automower 315
Firmware des Mähers (MSW): MSW 7.xx.xx
Herstellungsjahr: 2017
Robonect-Modul: Robonect Hx (Rev.3)
Robonect Firmware: 1.0

Re: Robbie + Wetter + Zeit + Garagentor

Beitrag von Camel2k »

Moin

was passiert denn, wenn du in der HM (Scrips bearbeiten Fenster)das Script ausführst ?

saschen79
Forum-Anfänger
Beiträge: 7
Registriert: Sa 20. Jan 2018, 14:52
Mäher: Gardena R40Li
Herstellungsjahr: 2014
Robonect-Modul: noch kein Robonect verbaut
Robonect Firmware: ---

Re: Robbie + Wetter + Zeit + Garagentor

Beitrag von saschen79 »

Dann aktualisieren alle SV des Skripts, nur die Batterie nicht. :(

Rudi2017
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: Robbie + Wetter + Zeit + Garagentor

Beitrag von Rudi2017 »

JA HIER,

bei mir ist genau das gleiche. Alle Werte sind da, nur der Akku nicht. Könnte es sein das der Mäher erst einmal gefahren sein muss? Wobei, wenn ich die Status JSON im Browser eingebe, wird der Batterie Stand auch angezeigt. Merkwürdig.

saschen79
Forum-Anfänger
Beiträge: 7
Registriert: Sa 20. Jan 2018, 14:52
Mäher: Gardena R40Li
Herstellungsjahr: 2014
Robonect-Modul: noch kein Robonect verbaut
Robonect Firmware: ---

Re: Robbie + Wetter + Zeit + Garagentor

Beitrag von saschen79 »

Mein Robby läuft seit ein paar Tagen und folgende SV werden nicht aktualisiert:

Robbi_Auto/Man
Robbi_Batterie
Robbi_Fehler

Ich versuche mal das Skript zu teilen.

swat33333
Forum-Nutzer
Beiträge: 15
Registriert: Fr 7. Okt 2016, 17:17
Mäher: Husqvarna Automower 105
Herstellungsjahr: 2016
Robonect Firmware: 0.9c
Kontaktdaten:

Re: Robbie + Wetter + Zeit + Garagentor

Beitrag von swat33333 »

geht mir aktuell genau so habe den Fehler auch noch nicht finden können und auch mal eine anfrage hier ins forum gestellt..

Antworten

Zurück zu „Homematic-Nutzer“