NEWS
Lichtsteuerung in VIS
-
Hallo zusammen,
ich habe in unserem Haus annähernd 40 Philips-Hue-Lampen, die ich in VIS steuern möchte. Hier ein Screenshot z.B. vom OG:
Man tippt auf der Übersicht auf eine Lampe oder einen Bereich und in der rechten Karte kann man dann die Änderungen vornehmen. Die Werte werden über ein JS-Skript übernommen und auch geändert. Das funktioniert schon einmal gut.Aber: wie bekomme ich es hin, dass sich die Werte anpassen, wenn sie von extern geändert werden, z.B. der Hue-App?
Jeder Slider korrespondiert mit einem manuell angelegten Datenpunkt. Ich müsste wahrscheinlich ein Array, z.B. [hue.Lampe1.on, hue.Lampe2.on,...] und dann auswerten, ob es eine Änderung bei dem DP gibt, dessen Werte in der VIS gerade angezeigt werden. Und hier komme ich nicht weiter.
Habt Ihr eine Idee?
Danke schon einmal,
Timo -
@Spampunk Es gibt doch die hue-Adapter:
Installieren und schon hat man die Werte aus der App! -
@MCU
Die Info fehlte wahrscheinlich noch: Den Hue-Adapter habe ich natürlich installiert.Aber stell dir vor, du hast 40 Lampen, jeweils mit den Datenpunkten "on", "level", "color", usw. In der VIS wird gerade Lampe 7 angezeigt und du möchtest, dass der Slider-Wert sich parallel ändert, wenn du auf deiner Hue-App die Helligkeit dimmst.
Du musst also alle "level"-DPs beobachten, aber nur der Wert von der Lampe 7 wird auch in den Datenpunkt übertragen, der mit dem Helligkeits-Slider verknüpft ist.
-
@Spampunk Problem noch nicht verstanden. Die Werte von Lampe 7 in der VIS sind doch mit der Hue-Instanz verknüpft oder nicht?
-
Das sollte genau so funktionieren. Was hast du bei Polling in der Adapter Einstellung eingetragen?
-
@MCU
nein, die Logik der VIS ist mit eigenen Datenpunkten verknüpft.
Damit brauche ich nur einen View anstatt 40, der Rest soll per JS passieren. Wie gesagt, das Anbinden an die Slider der jeweiligen Lampen habe ich schon. Ich muss jetzt nur noch hinbekommen, dass der View sich auch aktualisiert, wenn das Licht der gerade aktiven Lampe von extern geändert, z.B. gedimmt wird. Dann ändert sich ja der .level-DP der entsprechenden Lampe. Aber wie übertrage ich das auf die Object ID, in diesem Fall 0_userdata.0.EigeneDP.MD-VIS.Navigation.OG_Licht_bri?
Ich benötige also ein Script, das in diesem Fall alle Hue.level-Datenpunkte überwacht. Und wenn etwas bei der Lampe geändert wird, die gerade in VIS aktiv ist, soll der Wert in den DP 0_userdata.0.EigeneDP.MD-VIS.Navigation.OG_Licht_bri übertragen werden. Genau hier komme ich nicht weiter.
-
@Spampunk Schick mal die Liste der eigenen DatenPunkte oder ein Bild von der Struktur und die entsprechenden HUE-DatenPunkte, die darin abgebildet werden oder werden sollen.
Beispiel Helligkeit:
Oder Level:
-
@MCU
Das ist ein super Tipp gewesen! Mit "IDs vom Selektor..." kann ich ein Array bilden - perfekt!Meinen Code habe ich nun entsprechend angepasst, wohl in JS. Hier für den Helligkeitswert:
on({id: Array.prototype.slice.apply($("channel[state.id=hue.0.*.bri]")), change: "ne"}, function (obj) { if ((obj.state ? obj.state.from : "") == 'system.adapter.hue.0') { let dp = obj.id.slice(0, obj.id.length - 4); if (dp == getState("0_userdata.0.EigeneDP.MD-VIS.Navigation.OG_LichtView").val) { setState("0_userdata.0.EigeneDP.MD-VIS.Navigation.OG_Licht_bri", obj.state.val); } } });
Also vielen Dank, hiermit komme ich nun wieder weiter.
-
Moin @spampunk
Das sieht total klasse aus, bin auf der Suiche nach einer ansprechenden Lichtsteuerung und vir allem Darstellung hier gelandet. Würdest du eventuell die VIS-views und JSScripte zur Verfügung stellen?
-
Moin @aueland
Nachdem ich etliche Probleme mit dem Skript hatte, bin ich letztendlich doch wieder dazu übergegangen, für jede Gruppe, bzw. Lampe eine eigene Karte zu erstellen. Das Skript ist somit passé.Die Vis basiert auf Uhulas MDUI Material Design Vorlage. Auszüge aus meiner View könnte ich dir schicken, aber leider nicht alles, da du mit vielen Bindings eh nichts anfangen könntest. Vielleicht sagst du mal, woran du Interesse hast, aber dann bitte per PN.
Grüße,
Timo