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.
miwi
Beiträge: 38
Registriert: Di 29. Mär 2016, 18:18

Homematic für Dummies

Beitrag von miwi » Mo 2. Mai 2016, 19:41

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
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 » Di 3. Mai 2016, 12:26

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
Beiträge: 38
Registriert: Di 29. Mär 2016, 18:18

Re: Homematic für Dummies

Beitrag von miwi » Di 3. Mai 2016, 21:01

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
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 » Mi 4. Mai 2016, 08:59

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) 2995 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) 2995 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) 2995 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
Beiträge: 38
Registriert: Di 29. Mär 2016, 18:18

Re: Homematic für Dummies

Beitrag von miwi » Mi 4. Mai 2016, 09:26

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
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 » Mi 4. Mai 2016, 09:29

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) 2994 mal betrachtet
Das Ganze kannst du nach belieben abändern (zb für Fehlermeldungen oder anderes), die Herangehensweise ist jedesmal gleich...

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

Re: Homematic für Dummies

Beitrag von miwi » Mi 4. Mai 2016, 21:42

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
Beiträge: 46
Registriert: Do 31. Mär 2016, 15:25

Re: Homematic für Dummies

Beitrag von czierl » Mi 4. Mai 2016, 23:12

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
Beiträge: 38
Registriert: Di 29. Mär 2016, 18:18

Re: Homematic für Dummies

Beitrag von miwi » Do 5. Mai 2016, 09:56

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

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

Re: Homematic für Dummies

Beitrag von miwi » Do 5. Mai 2016, 10:13

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

Wo liegt mein Fehler?

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast