Aufgrund derzeit hohem Spamaufkommens werden neue Nutzer sehr restriktiv behandelt. Nach kurzer "Bewährungszeit" hat man als normaler Nutzer weitreichende Rechte und benötigt auch kein Captcha mehr.
.
Nutzer, die sich danach dennoch als Spammer oder Trolle erweisen, können jederzeit wieder auf diesen Status zurückgesetzt oder gebannt werden.
Dasselbe gilt für Versuche, politische Überzeugungen kund zu tun, egal aus welcher Richtung diese kommen.
.
.:!: Achtung! Derzeit ist Robonect (noch) nicht mit dem Automower 305 ab Baujahr 2020 zusammen mit der neuen Mäher-FW MSW 41.4.0 kompatibel!
Aber: Im DailyBuild ist ein Patch enthalten, der getestet werden kann! (Stand 15.02.2024)
.
.Du hast Deinen Gardena-Mäher auf die Gardena-Firmware von 2023 aktualisiert?
.:arrow: Testmöglichkeit für das Daily Build.

Das FW-Update am Mäher wird dennoch nicht empfohlen, da das Daily Build nach aktuellen Berichten von Beta-Testern noch keine vollständige Kompatibilität gewährleisten kann! (Stand: 15.02.2024)
Wir empfehlen, das Gardena-Update noch nicht durchzuführen!

.
.

Homematic für Dummies

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

Moderator: Lampi

miwi
Forum-Nutzer
Beiträge: 38
Registriert: Di 29. Mär 2016, 18:18

Homematic für Dummies

Beitrag von miwi »

Moin zusammen,

habe seit Jahren für Heizung, Licht und Rolladen Homematic Komponenten in Betrieb, welche über die CCU2 gesteuert werden.
Auf iPhone und IPad benutze ich zur Visualisierung Pocket Control.
Leider bin ich nie über den Bereich der einfachen Programmierung der Komponenten hinausgekommen. Sprich ich habe NULL Ahnung von Skripten und Programmen.

Jetzt würde ich gern das Robonect Modul einbinden. Ziel ist es zum einen die automatische Einwahl ins VPN von Pocket Control zu nutzen und das ganze "hübsch" aufzubereiten.
Des weiteren fände ich es gut wenn ich Statuszustände visualisieren könnte und Alarme als Email mitgeteilt bekomme.

Habe mir alle Beiträge hier im Homematic Unterforum durchgelesen, werde aber nicht wirklich schlau daraus.

Brauche ich neben der CCU2 auch noch CUL/CUX oder geht das auch ohne?

Falls ja, wäre ein kurzes how-to für Dummies super.

vielen Dank aus Solingen

Michael

Timberland
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

Beitrag von Timberland »

Würde dir statt der Mail Benachrichtigung auch eine PushMitteilung ins Pocketcontrol reichen? Dann könnte ich mein aktuelles Skript für dich etwas abändern und einige Screenshots posten...
Momentan läuft mein Skript alle 5 Sekunden und fragt die Daten vom Robonect ab. Wie das ganze aussieht findest du hier:
viewtopic.php?f=13&t=77#p480

miwi
Forum-Nutzer
Beiträge: 38
Registriert: Di 29. Mär 2016, 18:18

Re: Homematic für Dummies

Beitrag von miwi »

vielen Dank Timberland,

Push würde aber bedeuten, dass Pocket control dauerhaft im Hintergrund laufen muss. Ich glaube, dass das nicht geht, da ich um von unterwegs auf due CCU zugreifen zu können VPN anschalten muss. VPN kann aber nicht permanent laufen, da ich auf dem Handy bereits permanent einen Tunnel zum Firmennetzwerk offen haben muss und nur kurz zum Heim VPN switchen kann.
Deshalb würde ich Email bevorzugen.

Aber reicht im Grundsatz die "nackte" CCU2 aus oder brauche ich zwingend CUL Cux?

Grüße aus NRW

Michael

Timberland
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

Beitrag von Timberland »

Ich habe nichts anderes als eine CCU2 hier laufen. Damit kannst du im eigentlichen schon viel steuern und "anrichten" :D

Geh in die Admin Oberfläche der CCU2 und dort in Einstellungen -> Systemvariablen.
Erstelle dort die Systemvariablen nach diesen Vorgaben:
1.jpg
1.jpg (119.03 KiB) 11208 mal betrachtet
Danach gehst du in den Bereich "Programme" und erstellst ein neues Programm. Fülle die Felder nach diesen Vorgaben aus:
1.5.jpg
1.5.jpg (123.37 KiB) 11208 mal betrachtet
Bei Zeitsteuerung kannst du die Periode einstellen, wie oft das Programm ausgeführt wird (also wie oft die Daten von Robonect abgefragt werden).
2.jpg
2.jpg (88.08 KiB) 11208 mal betrachtet
Bei Skript fügst du folgendes ein: Achte bitte darauf die IP deines Rasenmähers in der ersten Zeile zu ändern!

Code: Alles auswählen

string Url='http://192.168.0.52/json?cmd=status';
var stdout;
var posStart;
var posEnd;
var preis;
var substring;
var posValueStart;
var posValueEnd;
var posValue;
string stderr;
string stdout;
string pos;
string substring2;
WriteLine("strings gesetzt");
system.Exec("wget -q -O - "#Url, &stdout, &stderr);
WriteLine("Abrufen");
WriteLine(stdout);


posStart = '{"status": ';
posEnd = ', "mode';
pos = stdout.Find(posStart) + posStart.Length();
WriteLine("pos");
WriteLine(pos);
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;   
WriteLine(substring);
dom.GetObject('R45Li-Status').State(substring);

WriteLine("Status ende!");



posStart = '"mode": ';
posEnd = ', "batt';
pos = stdout.Find(posStart) + posStart.Length();
WriteLine("pos");
WriteLine(pos);
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;   
WriteLine(substring);
dom.GetObject('R45Li-Modus').State(substring);
WriteLine("Modus ende!");



posStart = '"battery": ';
posEnd = ', "hou';
pos = stdout.Find(posStart) + posStart.Length();
WriteLine("pos");
WriteLine(pos);
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;   
WriteLine(substring);
dom.GetObject('R45Li-Battery').State(substring.ToString(1) + " %");
WriteLine("Batterie ende!");


posStart = '"hours": ';
posEnd = '}, "timer';
pos = stdout.Find(posStart) + posStart.Length();
WriteLine("pos");
WriteLine(pos);
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;   
WriteLine(substring);
dom.GetObject('R45Li-Laufzeit').State(substring.ToString(1) + " Stunden");
WriteLine("Laufzeit ende!");

posStart = '"next": {"date": "';
posEnd = '", "time":';
pos = stdout.Find(posStart) + posStart.Length();
WriteLine("pos");
WriteLine(pos);
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;   
WriteLine("substring:");
WriteLine(substring);
string SysMonat = system.Date("%d.%m.%Y").ToString();
WriteLine("SysMonat:");
WriteLine(SysMonat);

WriteLine("substring:");
WriteLine(substring);

! WriteLine("Tag:");
! WriteLine(Tag);
! dom.GetObject('R45Li-Mähtag').State(substring);
if (substring == SysMonat) {dom.GetObject('R45Li-Mähtag').State(0); WriteLine("Heute!");}
if (substring == SysMonat + 1) {dom.GetObject('R45Li-Mähtag').State(1);}
if (substring == SysMonat + 2) {dom.GetObject('R45Li-Mähtag').State(2);}
!else {dom.GetObject('R45Li-Mähtag').State("Fehler!");}
WriteLine("Tag ende!");
Im Pocketcontrol fügst du dann deine Variablen zur Anzeige hinzu. Die Daten werden dann regelmäßig aktualisiert, je nachdem was du in der Zeitsteuerung eingegegen hast...


Wenn Du Fragen hast oder nicht weiter kommst, melde dich einfach...
Zuletzt geändert von Timberland am Mi 4. Mai 2016, 09:28, insgesamt 1-mal geändert.

miwi
Forum-Nutzer
Beiträge: 38
Registriert: Di 29. Mär 2016, 18:18

Re: Homematic für Dummies

Beitrag von miwi »

MegaGEIL!!!

vielen Dank für die ausführliche Erklärung. Werde mich heute Abend mal hinsetzen und mein Glück versuchen.

Grüße aus Solingen

Michael

Timberland
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

Beitrag von Timberland »

Für PushBenachrichtigungen muss PocketControl nicht im Hintergrund laufen.

Schalte in der App die Push Benachrichtigugn an und füge folgendes Programm zur CCU2 hinzu:
3.jpg
3.jpg (101.5 KiB) 11207 mal betrachtet
Das Ganze kannst du nach belieben abändern (zb für Fehlermeldungen oder anderes), die Herangehensweise ist jedesmal gleich...

miwi
Forum-Nutzer
Beiträge: 38
Registriert: Di 29. Mär 2016, 18:18

Re: Homematic für Dummies

Beitrag von miwi »

Habe mich an die Anleitung gehalten.

Erhalte aber in der Homematic im Bereich Status und Bedienung >Systemvariable nicht bei allen Variablen die richtigen Werte.

Bei Laufzeit steht: 58}, "time Stunden
Bei Mähzeit steht: ???
Bei Status steht: 0
und bei Timer steht: ???


Wo liegt mein Fehler?

Nochmals vielen Dank für die Hilfe,

Michael

czierl
Forum-Nutzer
Beiträge: 47
Registriert: Do 31. Mär 2016, 15:25

Re: Homematic für Dummies

Beitrag von czierl »

Probiers mal damit:

Code: Alles auswählen

string Url='http://192.168.1.XXX/json?cmd=status';
var stdout="";
var posStart;
var posEnd;
var substring;
string stderr;
string stdout;
string pos;
!WriteLine("strings gesetzt");
system.Exec("wget -q -O - "#Url, &stdout, &stderr);
!WriteLine("Abrufen");
WriteLine(stdout);

!********Mähroboter Status abfragen***********
pos=0;
posStart = '{"status": ';
posEnd = ', "mode';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
!WriteLine("pos");
!WriteLine(pos);
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;   
WriteLine("Status");
WriteLine(substring);
if (substring == 0) {dom.GetObject('Mähroboter-Status').State("schläft");}
if (substring == 1) {dom.GetObject('Mähroboter-Status').State("parkt");}
if (substring == 2) {dom.GetObject('Mähroboter-Status').State("mäht");}
if (substring == 3) {dom.GetObject('Mähroboter-Status').State("sucht die Ladestation");}
if (substring == 4) {dom.GetObject('Mähroboter-Status').State("lädt auf");}
if (substring == 5) {dom.GetObject('Mähroboter-Status').State("sucht");}
if (substring == 7) {dom.GetObject('Mähroboter-Status').State("Fehler!");}
WriteLine("Status ende!");
}
else
{
dom.GetObject('Mähroboter-Status').State('Variable nicht gesetzt');
}
!********Mähroboter Status abfragen ENDE***********

!********Mähroboter Modus abfragen***********
pos=0;
posStart = '"mode": ';
posEnd = ', "batt';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
!WriteLine("pos");
!WriteLine(pos);
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;  
WriteLine("Modus"); 
WriteLine(substring);
if (substring == 0) {dom.GetObject('Mähroboter-Modus').State("Auto");}
if (substring == 1) {dom.GetObject('Mähroboter-Modus').State("Manu");}
if (substring == 2) {dom.GetObject('Mähroboter-Modus').State("Home");}
if (substring == 3) {dom.GetObject('Mähroboter-Modus').State("Demo");}
WriteLine("Modus ende!");
}
else
{
dom.GetObject('Mähroboter-Modus').State('Variable nicht gesetzt');
}
!********Mähroboter Modus abfragen ENDE***********

!********Mähroboter Batterie abfragen***********
pos=0;
posStart = '"battery": ';
posEnd = ', "';
pos = stdout.Find(posStart) + posStart.Length();
!WriteLine("pos");
!WriteLine(pos);
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;   
substring =substring + '%';
if(stdout.Find(posStart)>0)
{
WriteLine("Battery");
WriteLine(substring);
dom.GetObject('Mähroboter-Battery').State(substring.ToString(1));
WriteLine("Batterie ende!");
}
else
{
dom.GetObject('Mähroboter-Battery').State('Variable nicht gesetzt');
}
!********Mähroboter Batterie abfragen ENDE***********

!********Mähroboter Laufzeit abfragen***********
pos=0;
posStart = '"hours": ';
posEnd = '}';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
!WriteLine("pos");
!WriteLine(pos);
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;   
substring =substring + 'h';
WriteLine("Laufzeit");
WriteLine(substring);
dom.GetObject('Mähroboter-Laufzeit').State(substring.ToString(1));
WriteLine("Laufzeit ende!");
}
else
{
dom.GetObject('Mähroboter-Laufzeit').State('Variable nicht gesetzt');
}
!********Mähroboter Laufzeit abfragen ENDE***********

!********Mähroboter Status abfragen***********
pos=0;
posStart = '"timer": {"status": ';
posEnd = ',';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
!WriteLine("pos");
!WriteLine(pos);
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;   
WriteLine("Timer Status");
WriteLine(substring);
if (substring == 0) {dom.GetObject('Mähroboter-Timer-Status').State("Deaktiviert");}
if (substring == 1) {dom.GetObject('Mähroboter-Timer-Status').State("Aktiv");}
if (substring == 2) {dom.GetObject('Mähroboter-Timer-Status').State("Standby");}
WriteLine("Timer Status ende!");
}
else
{
dom.GetObject('Mähroboter-Timer-Status').State('Variable nicht gesetzt');
}
!********Mähroboter Status abfragen ENDE***********

!********Mähroboter Mähtag abfragen***********
pos=0;
posStart = '"next": {"date": "';
posEnd = '", "time":';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
!WriteLine("pos");
!WriteLine(pos);
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;   
WriteLine("Tag");
WriteLine(substring);
dom.GetObject('Mähroboter-Mähtag').State(substring.ToString(1));
WriteLine("Tag ende!");
}
else
{
dom.GetObject('Mähroboter-Mähtag').State('Variable nicht gesetzt');
}
!********Mähroboter Mähtag abfragen ENDE***********

!********Mähroboter Mähzeit abfragen***********
pos=0;
posStart = '"time": "';
posEnd = '", "unix":';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
!WriteLine("pos");
!WriteLine(pos);
substring = stdout.Substr(pos, 8).StrValueByIndex(posEnd, 0) ; 
WriteLine("Zeit");  
WriteLine(substring);
dom.GetObject('Mähroboter-Mähzeit').State(substring.ToString(1));
WriteLine("Mähzeit ende!");
}
else
{
dom.GetObject('Mähroboter-Mähzeit').State('Variable nicht gesetzt');
}
!********Mähroboter Mähzeit abfragen ENDE***********

!********Mähroboter Fehlermeldung abfragen***********
pos=0;
posStart = '"error_message": "';
posEnd = '", "date"';
pos = stdout.Find(posStart) + posStart.Length();
if(stdout.Find(posStart)>0)
{
!WriteLine("pos");
!WriteLine(pos);
substring = stdout.Substr(pos, 8).StrValueByIndex(posEnd, 0) ; 
WriteLine("Error");  
WriteLine(substring);
dom.GetObject('Mähroboter-Fehlermeldung').State(substring.ToString(1));

! Hier den Empfänger der Mail angeben
string MailEmpfaenger = "christoph.zierl@gmail.com";
! Hier den Betreff der Mail angeben
string MailBetreff = "Homematic: Mähroboter Fehler";

! Hier den Inhalt der Mail angeben
string MailText;
MailText = substring.ToString(1)+"\r\n";
!MailText = MailText # "Es können einfach weitere Zeilen hinzu gefügt werden\r\n";

string stdout;
string stderr;
string teilstr;
string sendmail = "";
string sendbetreff = "";
string mailto = "";
foreach(teilstr, MailBetreff.Split(" "))
{
sendbetreff = sendbetreff # "+" # teilstr;
}

foreach(teilstr, MailText.Split(" "))
{
sendmail = sendmail # "+" # teilstr;
}

foreach(teilstr, MailEmpfaenger.Split(" "))
{
mailto = mailto # "+" # teilstr;
}

system.Exec ("/bin/sh /etc/config/addons/mh/email.sh "# sendbetreff # " " # sendmail # " " # mailto, &stdout, &stderr);

WriteLine("Error Ende!");
}
else
{
dom.GetObject('Mähroboter-Fehlermeldung').State('Variable nicht gesetzt');
}
!********Mähroboter Fehlermeldung abfragen ENDE***********

!********Mähroboter LastSyncTime schreiben***********
dom.GetObject('Mähroboter-LastSync').State(system.Date("%d.%m.%Y %H:%M:%S"));
!********Mähroboter LastSyncTime schreiben***********
Folgende Variablen sind dafür anzulegen:
Mähroboter-Status
Mähroboter-Modus
Mähroboter-Battery
Mähroboter-Laufzeit
Mähroboter-Timer-Status
Mähroboter-Mähtag
Mähroboter-Mähzeit
Mähroboter-Fehlermeldung
Mähroboter-LastSync
MSW-Software: R40Li, MSW-Version: 5.01.00, SUB-Version: 0.00.00, Robonect: 0.7b

miwi
Forum-Nutzer
Beiträge: 38
Registriert: Di 29. Mär 2016, 18:18

Re: Homematic für Dummies

Beitrag von miwi »

Sind die Variabelen Fehlermeldung und Lastsync als Zeichenkette oder als Werteliste anzulegen?

miwi
Forum-Nutzer
Beiträge: 38
Registriert: Di 29. Mär 2016, 18:18

Re: Homematic für Dummies

Beitrag von miwi »

Bekomme nun bei Fehlermeldung und Mähzeit den Status: Variable nicht gesetzt
Bei Timer Status steht: ???

Wo liegt mein Fehler?

Antworten

Zurück zu „Homematic-Nutzer“