NEWS
Dunstabzugshaube mit Homekit steuern
-
Hallo,
ich habe gerade etwas rumgefrickelt und bin auf ein paar Probleme gestoßen. Diese habe ich nun m.E. lösen können und sollen anderen ggf. helfen.
Vielen Dank auch an @paul53.
Ziel: Die Lüftung und das Licht der Haube sowohl via Gerät, als per Bosch-App und Homekit steuern
Gerät: Bosch DWK97JR60 (geht sicher auch mit anderen Dunstabzugshauben/ Geräten)
Adapter: Yahka 0.92, Homeconnect 0.0.26- Problem - Lüfter an/aus homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.BSH_Common_Setting_PowerState steuert man den Datenpunkt nicht via true/false sondern via BSH.Common.EnumType.PowerState.On/ BSH.Common.EnumType.PowerState.Off
Okay - das kann man via Mapping im Yahka-Service erledigen... irgendwie
-
Problem - Das Arbeitslicht homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.Cooking_Common_Setting_Lighting darf nicht via true/false MIT ACK geändert werden, sondern nur ohne ACK, sonst geht das nicht
-
Problem - Die direkte Verknüpfung der DP mit Homekit hat leider dazu geführt, dass die Kopplung zwischen Dunstabzugshaube und Herd ständig aufwendig neu hergestellt werden musste.
Aufgrund der 3 Probleme habe ich ein eigenes Gerät erstellt... aber nun von Beginn an:
-
Erstellen eines eigenen Objektes. Hierzu oben auf + drücken, wegen der Übersichtlichkeit habe ich ein Gerät mit 2 Tochterobjekten erstellt (states)
-
Erstellen des Gerätes in Yahka und verknüpfen mit den eigenen Datenpunkten
2 Zusätzliche Services (zuerst den Fan, dann den Lightbulb) und mit den DP verknüpfen
- Erstellen eines Scriptes, welches die Status zwischen eigenen DP und den originalen DP syncronisiert. Hierbei ist wichtig, dass die eigenen DP nicht durch JavaScript-Anpassungen getriggert werden dürfen, da sich das Script ansonsten selbst steuert.
In dem Script wird dann auch das Mapping erledigt (wenn BSH.Common.EnumType.PowerState.Off dann setze false usw.)
Außerdem wird mit den Script sichergestellt, dass kein ACK gesendet wird (setState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.Cooking_Common_Setting_Lighting"/Arbeitslicht/, 'true', false). Deshalb ist das Script aus meiner Sicht nur mit Blockly nicht möglich. Falls doch, bitte Rückmeldung hier, dann weiss ich das für die Zukunft. Grundlage bildete natürlich Blockly...
Jetzt nur noch das untere Script einbinden und starten. In den ersten beiden Blöcken übertrage ich die Änderung des Lichtes aus dem eigenen Datenpunkt an den original Datenpunkt und zurück. In den letzten beiden Blöcken das Ganze mit dem Lüfter.
Bei Optimierungsmöglichkeiten - gern her damit.
Das Ganze hier soll Euch als Unterstützung für eigene Dinge dienen. Ich hoffe ich war ausführlich genug und es hilft jemanden.
// Uebertragen der Datenpunkt-Anderung des Lichtes (z.B. aus Homekit) auf Original Datenpunkt und damit steuern des Geraetes, Wichtig: Kein ACK setzen, da es im Adpater sonst nicht funktioniert on({id: '0_userdata.0.Dunstabzugshaube.Licht', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.from : "") != 'system.adapter.javascript.0') { if (getState("0_userdata.0.Dunstabzugshaube.Licht").val == true) { setState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.Cooking_Common_Setting_Lighting"/*Arbeitslicht*/, 'true', false); } if (getState("0_userdata.0.Dunstabzugshaube.Licht").val == false) { setState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.Cooking_Common_Setting_Lighting"/*Arbeitslicht*/, 'false', false); } } }); // Uebertragen der Aenderungen am Original Datenpunkt bzgl. Licht (App, Bedienung am Geraet) zum setzen im eigenen Datenpunkt on({id: 'homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.Cooking_Common_Setting_Lighting', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.Cooking_Common_Setting_Lighting").val == true) { setState("0_userdata.0.Dunstabzugshaube.Licht"/*Licht*/, true, true); } if (getState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.Cooking_Common_Setting_Lighting").val == false) { setState("0_userdata.0.Dunstabzugshaube.Licht"/*Licht*/, false, true); } // Uebertragen der Datenpunkt-Aenderungen des Luefters (z.B. aus Homekit) und steuern des Geraetes on({id: '0_userdata.0.Dunstabzugshaube.Luefter', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.from : "") != 'system.adapter.javascript.0') { if (getState("0_userdata.0.Dunstabzugshaube.Luefter").val == true) { setState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.BSH_Common_Setting_PowerState"/*Energiezustand*/, 'BSH.Common.EnumType.PowerState.On', false); } if (getState("0_userdata.0.Dunstabzugshaube.Luefter").val == false) { setState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.BSH_Common_Setting_PowerState"/*Energiezustand*/, 'BSH.Common.EnumType.PowerState.Off', false); } } }); // Uebertragen der Aenderung am Geraet (Bedienung oder APP) zum setzen im eigenen Datenpunkt on({id: 'homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.BSH_Common_Setting_PowerState', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.BSH_Common_Setting_PowerState").val == 'BSH.Common.EnumType.PowerState.On') { setState("0_userdata.0.Dunstabzugshaube.Luefter"/*Luefter*/, true, true); } if (getState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.BSH_Common_Setting_PowerState").val == 'BSH.Common.EnumType.PowerState.Off') { setState("0_userdata.0.Dunstabzugshaube.Luefter"/*Luefter*/, false, true); } }); });
So sieht das dann im iPhone aus. In der Übersicht sieht mann dann einen schönen drehenden Lüfter.!!
-
@oberfragger sagte:
Deshalb ist das Script aus meiner Sicht nur mit Blockly nicht möglich.
Doch ist es, denn der Block "steuere" ist setState(id, val), wobei ack = false ist, denn es ist die Voreinstellung, wenn kein ack angegeben wird.
-