Seite 1 von 11

Homematic - Einbindung

Verfasst: Sa 12. Mär 2016, 13:30
von mrlee
Moin!

Wollte mal fragen ob Homematic-User dabeind...würde morgen mal anfangen Dolly einzubinden...

Bei mir läuft ne CCU2 mit cuxd und nen RASPI mit IOBroker sowie CCU.io

...wenn jemand auch dabei ist...Ideen und Vorgehen gerne austauschen!

bis denne
MrLee

Re: Homematic - Einbindung

Verfasst: Sa 12. Mär 2016, 14:48
von Timberland
Bin ebenfalls mit einer CCU2 vertreten und habe noch einen Raspberry auf dem die Homebridge für Siri läuft.
Es läuft alles womit ganz gut und ich würde den Mäher über die Webapi starten / stoppen lassen und ggf ein paar Werte auslesen (Akku stand etc) (Wenn das überhaupt möglich ist. hab da noch nicht groß reingeschaut...)

Re: Homematic - Einbindung

Verfasst: Sa 12. Mär 2016, 19:57
von Timberland
So, ich habe die letzten Stunden damit verbracht mich mit der Skriptsprache rumzuärgern :D Daher ist das alles auch quick n dirty, da ich nicht wirklich programmieren gelernt habe und mir alles selber beigebracht (zusammengeklaut) habe. Aber immerhin verstehe ich schon mal was da so abläuft. ;)

Es werden 4 Programme benötigt: 3 zum Schalten des Modus und eins zum auslesen der Statusmeldungen
Bildschirmfoto 2016-03-12 um 19.46.54.png
Bildschirmfoto 2016-03-12 um 19.46.54.png (59.87 KiB) 14339 mal betrachtet
Weiterhin müssen folgende Systemvariablen (alle Strings) angelegt werden:
Bildschirmfoto 2016-03-12 um 19.43.01.png
Bildschirmfoto 2016-03-12 um 19.43.01.png (81.96 KiB) 14339 mal betrachtet
EDIT: Ich habe die Variable R45Li-Mähzeit hier vergessen! Diese muss ebenfalls als Zeichenkette angelegt werden!

Im Programm wird eine periodische Wiederholung eingestellt, sodass die CCU die Systemvariable aller paar Sekunden aktualisiert.
@Admin: Gäbe es hier ein Problem mit einer Abfrage aller 30 Sekunden? Ich will das Modul nicht überlasten...
Bildschirmfoto 2016-03-12 um 19.42.20.png
Bildschirmfoto 2016-03-12 um 19.42.20.png (73.62 KiB) 14339 mal betrachtet
Als Aktivität wählt man "Skript" und fügt folgendes ein:

Code: Alles auswählen

string Url='http://192.168.0.67/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);
if (substring == 0) {dom.GetObject('R45Li-Status').State("schläft");}
if (substring == 1) {dom.GetObject('R45Li-Status').State("parkt");}
if (substring == 2) {dom.GetObject('R45Li-Status').State("mäht");}
if (substring == 3) {dom.GetObject('R45Li-Status').State("sucht die Ladestation");}
if (substring == 4) {dom.GetObject('R45Li-Status').State("lädt auf");}
if (substring == 5) {dom.GetObject('R45Li-Status').State("sucht");}
if (substring == 7) {dom.GetObject('R45Li-Status').State("Fehler!");}
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);
if (substring == 0) {dom.GetObject('R45Li-Modus').State("Auto");}
if (substring == 1) {dom.GetObject('R45Li-Modus').State("Manu");}
if (substring == 2) {dom.GetObject('R45Li-Modus').State("Home");}
if (substring == 3) {dom.GetObject('R45Li-Modus').State("Demo");}
WriteLine("Modus ende!");



posStart = '"battery": ';
posEnd = ', "hours';
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));
WriteLine("Laufzeit ende!");

posStart = 'timer": {"status": ';
posEnd = '}}';
pos = stdout.Find(posStart) + posStart.Length();
WriteLine("pos");
WriteLine(pos);
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;   
WriteLine(substring);
string SysMonat = system.Date("%d");
integer Tag = SysMonat.ToInteger();
if (substring == Tag) {dom.GetObject('R45Li-Mähtag').State("Heute");}
if (substring == Tag + 1) {dom.GetObject('R45Li-Mähtag').State("Morgen");}
if (substring == Tag + 2) {dom.GetObject('R45Li-Mähtag').State("Übermorgen");}
else {dom.GetObject('R45Li-Mähtag').State("Fehler!");}
WriteLine("Tag ende!");



posStart = '","time":"';
posEnd = '","unix';
pos = stdout.Find(posStart) + posStart.Length();
WriteLine("pos");
WriteLine(pos);
substring = stdout.Substr(pos, 10).StrValueByIndex(posEnd, 0) ;   
WriteLine(substring);
dom.GetObject('R45Li-Mähzeit').State(substring.ToString(1));
WriteLine("Mähzeit ende!");
Die Programme zum setzen der Modi sind ebenfalls Skripte. Hier gibt man jedoch bei den Bedingungen nichts an und fügt nur bei Aktivität das folgende Skript hinzu:

Code: Alles auswählen

string stderr;
string stdout;
string url="http://192.168.0.67/xml?cmd=mode&mode=auto";
system.Exec("wget -q -O - "#url, &stdout, &stderr);


Wer mag kann hier als 2. Skript das o.a. zum Auslesen der Variablen noch hinzufügen. So werden die Systemvariablen nach dem Setzen des Modus wieder aktualisiert.
Für die weiteren Skript zum Setzen der Modi "Home" und MAN" muss lediglich das "auto" gegen "home" und "man" ersetzt werden!


Leider funktioniert bei mir das Auslesen des Timers nicht, daher habe ich zwar implementiert aber nicht testen können!
Ich bekomme nur diesen Status:

Code: Alles auswählen

{"successful": true:"status": {"status": 1, "mode": 0, "battery": 73, "hours": 0}:"timer": {"status": 2}}
Liegt vielleicht daran, dass Shawn nicht in der Ladestation sitzt?

Re: Homematic - Einbindung

Verfasst: Sa 12. Mär 2016, 20:35
von Timberland
So sieht das Ganze dann auf dem iPhone mit PocketControl aus:
Foto 12.03.16, 20 19 44.png
Foto 12.03.16, 20 19 44.png (445.89 KiB) 14330 mal betrachtet

Re: Homematic - Einbindung

Verfasst: Sa 12. Mär 2016, 20:43
von Admin
Cool!! :shock: 8-)

Re: Homematic - Einbindung

Verfasst: Mo 14. Mär 2016, 08:34
von mrlee
Moin!

Sehr cool...bin nur etwas neidisch das Du schon zum Einbinden gekommen bist und ich noch keine Zeit hatte :-(

Hab mal kurz Dein Script für den Status ausprobiert...ich hatte das Problem das das Ende des Strings nicht korrekt gefunden wurde...Ergebnis sah dann aus wie bei Dir in "Mähzeit".

Habe mal als QuickFix aus
posEnd = '}:"timer';
folgendes gemacht:
posEnd = '}';
Schätze er hat Probleme mit den Anführungszeichen. Vermutlich müssten diese auch als Escapesequenz gehen (\")...teste ich nachher mal.


Aber auf jeden Fall extrem cool!!!!

Re: Homematic - Einbindung

Verfasst: Mo 14. Mär 2016, 15:53
von mrlee
Moin!

So, hab mich mal ein bsichen bei Deinem Script bedient (ca. 97% 8-) )...vielen Dank!

sieht aktuell so aus:
Unbenannt.PNG
Unbenannt.PNG (110.39 KiB) 14248 mal betrachtet
Jetzt kommt noch:
- Regensperre (an/aus)
- Timer-Einstellungen
- dedizierte Knöpfe für 2 x vorne / 2x hinten

In der Steuerung fange ich an mit:
- Dolly Feierabend wenn Leute im Garten
- Regensperre
- sync mit den Beregnern

Re: Homematic - Einbindung

Verfasst: Mi 16. Mär 2016, 02:23
von Timberland
Coole Sache! Nur weiter so! Ist das ccu.io?
Mir ist der Haken, dass meine Mähzeit gar nicht im Statusbericht auftaucht... Daher war das n Schuss ins Blaue...

Re: Homematic - Einbindung

Verfasst: Mi 16. Mär 2016, 07:39
von mrlee
Klar geht das weiter...ab Ostern wird gedüngt...dann muß das laufen :-)

Der Screenschot ist von vis (IOBroker). Läuft aber auch unter Webmatic.

Im mOment habe ich nur noch nen paar Probleme die denke ich mit 0.5 gefixt sind...dann brauche ich noch die API für die neuen Funktionen und dann gehts weiter...

Ohne Deinen Start hätte ich noch nicht mal das!

bis denne
Mr.Lee

Re: Homematic - Einbindung

Verfasst: Di 22. Mär 2016, 17:33
von Sprite01
Dann sollte ja eine Einbindung in DashUI auch möglich sein ?