NEWS
[How-to] Hue Dimmer-Schalter: alle Tastendrücke einfach auswerten
-
Hallo,
<size size="150">Einleitung:</size>
Der https://github.com/ioBroker/ioBroker.hue auch in der neuesten Version 1.0.0 erkennt zwar die Hue Dimmer-Schalter und setzt da auch je zwei Datenpunkte (buttonevent und lastupdated), aber dies zum einen nur verzögert und zum anderen beim Buttonevent nicht gerade komfortabel mit dem vierstelligen Code (z.B. 3002).
Als bessere Umsetzung habe ich mir den Thread https://forum.iobroker.net/viewtopic.php?f=37&t=11302 zu Nutze gemacht und mittels https://github.com/ioBroker/ioBroker.node-red/blob/master/README.md eine bessere Lösung gebaut. Es wird aber keine Amazon Alexa hierfür benötigt, nur wird dort alles schön beschrieben.
Dadurch bekomme ich bei Tastendruck sofort die Werte in Datenpunkte und kann mit diesen entsprechend in ioBroker arbeiten:
Dies ist exemplarisch mit dem Hue Dimmer-Switch gemacht, aber ich denke hiermit ist auch die Integration der Bewegungsmelder und anderer Geräte leicht machbar:
<size size="150">Hier nun meine Vorgehensweise:</size>
<u>Hinweis:</u> Super Infos zu Node-RED (Installation, Palette hinzufügen, usw.) stehen https://forum.iobroker.net/viewtopic.php?f=37&t=11302, daher gehe ich nicht näher darauf ein. Bitte dort im Beitrag nachlesen.
SCHRITT NR. 1: Legt Euch für jeden Dimmer-Schalter, den Ihr steuern möchtet, jeweils 3 Datenpunkte an (siehe oben 1. Screenshot).
Ich habe meine so benannt, aber da seid ihr im Prinzip vollkommen frei, sofern auf die Namenskonvention geachtet wird (Sonderzeichen usw.):
javascript.0.me.hue.dimmer-switch.wohnzimmer.action javascript.0.me.hue.dimmer-switch.wohnzimmer.button javascript.0.me.hue.dimmer-switch.wohnzimmer.updated
SCHRITT NR. 2: Den Adapter Node-RED installiert.
SCHRITT NR. 3: In Node-RED die Palette "node-red-contrib-huemagic" hinzugefügt (bei mir Version 1.5.4). Wie das geht, steht ebenfalls z.B. https://forum.iobroker.net/viewtopic.php?f=37&t=11302
****SCHRITT NR. 4:****In Node-RED folgendes erstellt:
Zu den einzelnen Nodes, die Ihr hier seht:
-
Schalter-Wohnlicht: Hier habe ich von der linken Seite unter "HueMagic" den Node "Hue Switch" rüber gezogen. Diesen doppelklicken, Name ändern, und die Hue Bridge hinzufügen (wird erklärt, ihr müsst hierbei dann auch den Button der Hue Bridge drücken, dann wird auch eine ID erstellt). Bei Hilfe hierzu bitte googlen, habe ich auch so gemacht Unter "Switch" dann per Lupe und Drop-Down-Feld Euren Schalter auswählen. Beispiel:
-
Get Button Name: Hier von Links unter Kategorie "function" das Node "function" rüber ziehen. Dort folgender Code:
msg.payload = msg.payload.name; return msg;
-
Get Button Action: Hier von Links unter Kategorie "function" das Node "function" rüber ziehen. Dort folgender Code:
msg.payload = msg.payload.action; return msg;
-
Get Button Updated on: Hier von Links unter Kategorie "function" das Node "function" rüber ziehen. Dort folgender Code:
msg.payload = msg.payload.updated; return msg;
-
Set Button Name: Hier von Links unter "output" den Node "ioBroker" rüber ziehen. Diesen doppelklicken, neben dem Feld "Topic" den Punkt (.) anklicken. Dann könnt Ihr den oben unter 'SCHRITT NR. 1' erstellen Datenpunkt auswählen, hier also z.B. (…)wohnzimmer.button
Falls Eure zuvor erstellten Datenpunkte noch nicht erscheinen: hier half bei mir nur ein "sudo reboot", also Neustart der Raspberry, dann waren die neu erstellten Datenpunkte verfügbar. Vermutlich geht das auch besser zur Aktualisierung, aber so geht es sicher
-
Set Button Action: Vorgehensweise wie bei "Set Button Name". Hier wählt ihr nur den entsprechenden anderen Datenpunkt, also z.B. (…)wohnzimmer.action
-
Set Button Updated On: Vorgehensweise wie bei "Set Button Name". Hier wählt ihr nur den entsprechenden anderen Datenpunkt, also z.B. (…)wohnzimmer.updated
Zum Schluss verbindet Ihr die einzelnen Nodes mit der Maus wie oben im Screenshot ersichtlich.
SCHRITT NR. 5: Jetzt im Node-RED oben rechts auf den roten "Deploy"-Knopf drücken. Das war es auch schon. Nun könnt Ihr das ganze testen, in dem Ihr auf Eurem Philips Hue-Schalter einen Knopf drückt, dann sollten die zuvor erstellten Datenpunkte auch entsprechend die Werte eingetragen bekommen.
<size size="150">Was macht man nun mit den Datenpunkten?</size>
Das ist natürlich Euch überlassen Im Endeffekt könnt ihr nun alles schalten mit dem Hue-Schalter, also Scripte auslösen, usw.
Hier empfiehlt sich natürlich ein Script, welches z.B. den Datenpunkt "….wohnzimmer.updated" überwacht auf Aktualisierung. Dann kann je nach dem, was der Mensch gemacht hat (welcher Button, also an, aus, heller, dunkler; sowie lange oder kurz gedrückt) eine Aktion folgen. Ich werde wohl demnächst hier noch ein JavaScript nachliefern.
Alternativ könnt Ihr natürlich auch auf Datenpunkte verzichten und direkt im Node-RED Geräte steuern (eben z.B. Hue-Geräte).
<size size="150">Fragen?</size>
Könnt Ihr natürlich gerne hier stellen Allerdings kann ich nur Fragen zur oben genannten Vorgehensweise etc. beantworten und aus Zeitgründen nicht immer auf Fragen, z.B. wie Ihr Node-RED einrichtet, warum die Hue-Bridge nicht gefunden wird, etc., eingehen.
Viele Infos hierzu findet Ihr aber auch hier: https://forum.iobroker.net/viewtopic.php?f=37&t=11302. Ihr braucht hierzu auch keine Alexa, dort wird nur anhand Alexa die Vorgehensweise mit Node-RED sehr gut erklärt.
So, nun hoffe ich, dass die Anleitung für Euch hilfreich ist. Fröhliches Schalten 8-)
-
-
Hallo habe mir das ganze durchgelesen aber scheitere schon an den Datenpunkten. Bin ein Anfänger im ioBroker
Wäre sehr dankbar für eine anleitung punkt für punkt da ich etwas am verzweifeln bin…
-
Hallo,
ich bin zufällig auf diesen Beitrag gestossen, da ich ebenfalls große Probleme mit dem HUE Adapter habe. Deine Umsetzung mit Node Red finde ich ganz große klasse, habe aber noch Schwierigkeiten weiter zu machen.
Das Auslesen der Geräte passt und die Datenpunkte werden perfekt ausgelesen.
Wie funktioniert es aber, einen Datenpunkt zu ändern, um damit die Lampe zu steuern??
Ich will z.B.: den Wert Brightness von 80 auf 40 ändern und dann soll das Licht auf 40% gesetzt werden. Hab einiges versucht, aber es passiert irgendwie nichts
Vielleicht kannst Du ja sogar den Flow mal exportieren
Beste Grüße
Andy
-
Muss mich auch mal mit einhängen.
action und button die Felder werden gefüllt.
Nur bei updated da bekomme ich ums verrecken nichts rein.
Bleibt leer.
Alles nach Anleitung gemacht und x mal kontrolliert.
-
Vielleicht kannst Du ja sogar den Flow mal exportieren `
Dafür wäre ich auch dankbar….....
-
Ich möchte die Daten in Vis bekommen, bzw. das es mir die Werte anzeigt…........daran scheitere ich schon fast.......
Node -Red ist anscheinend nicht so meins......
Naja Kinderzimmer und Schlafzimmer kann ich schon mal schalten...........
Aber die Bewegung und Temperatur bekomme ich nicht hin.
-
Sigi, Du bist hier beim Dimmer Schalter,Du suchst den Motion Sensor
-
upps
-
Vielleicht kannst Du ja sogar den Flow mal exportieren `
Dafür wäre ich auch dankbar…..... `
Hi zusammen,
gerne, also diesen Flow habe ich exportiert:
Hier der Export:
! ````
[
{
"id": "f4bad278.cc832",
"type": "hue-switch",
"z": "cb8e827e.1b7c7",
"name": "Schalter-Wohnlicht",
"bridge": "ec9ad76d.8ede48",
"sensorid": "2",
"x": 110,
"y": 80,
"wires": [
[
"c05b3eb1.b0bcb",
"d101536.0344db",
"31776f58.e3335"
]
]
},
{
"id": "1b6e5a28.db6ae6",
"type": "ioBroker out",
"z": "cb8e827e.1b7c7",
"name": "Set Button Name",
"topic": "javascript.0.mic.hue.dimmer-switch.wohnzimmer.button",
"ack": "false",
"autoCreate": "false",
"x": 690,
"y": 80,
"wires": []
},
{
"id": "c05b3eb1.b0bcb",
"type": "function",
"z": "cb8e827e.1b7c7",
"name": "Get Button Name",
"func": "msg.payload = msg.payload.name;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 450,
"y": 80,
"wires": [
[
"1b6e5a28.db6ae6"
]
]
},
{
"id": "d101536.0344db",
"type": "function",
"z": "cb8e827e.1b7c7",
"name": "Get Button Action",
"func": "msg.payload = msg.payload.action;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 450,
"y": 140,
"wires": [
[
"8bdc8c84.03e85"
]
]
},
{
"id": "8bdc8c84.03e85",
"type": "ioBroker out",
"z": "cb8e827e.1b7c7",
"name": "Set Button Action",
"topic": "javascript.0.mic.hue.dimmer-switch.wohnzimmer.action",
"ack": "false",
"autoCreate": "false",
"x": 690,
"y": 140,
"wires": []
},
{
"id": "31776f58.e3335",
"type": "function",
"z": "cb8e827e.1b7c7",
"name": "Get Button Updated on",
"func": "msg.payload = msg.payload.updated;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 460,
"y": 200,
"wires": [
[
"f3f19322.ce44d"
]
]
},
{
"id": "f3f19322.ce44d",
"type": "ioBroker out",
"z": "cb8e827e.1b7c7",
"name": "Set Button Updated On",
"topic": "javascript.0.mic.hue.dimmer-switch.wohnzimmer.updated",
"ack": "false",
"autoCreate": "false",
"x": 710,
"y": 200,
"wires": []
},
{
"id": "ec9ad76d.8ede48",
"type": "hue-bridge",
"z": "",
"name": "Philips hue",
"bridge": "10.10.0.101",
"key": "KEY_HIER_EINTRAGEN",
"interval": "3000"
}
]Und hier noch das JavaScript von mir, welches die Datenpunkte erzeugt, die dann entsprechend ausgewertet werden können für jeden der 4 Knöpfe und kurz oder lange drückend. ![6940_zwischenablage02.png](/assets/uploads/files/6940_zwischenablage02.png) >! ```` /**************************************************************************************** * Setup ****************************************************************************************/ const STATE_PATH = 'javascript.'+ instance + '.' + 'mic.hue.'; >! /**************************************************************************************** * Create States ****************************************************************************************/ // Hue Schalter Wohnzimmer - für node.red! MG_createState (STATE_PATH + 'dimmer-switch.wohnzimmer.button', 'Hue: Welcher Button wurde gedrückt', 'string', 'hue-button', ''); MG_createState (STATE_PATH + 'dimmer-switch.wohnzimmer.action', 'Hue: Wie wurde der Button gedrückt', 'string', 'hue-button', ''); MG_createState (STATE_PATH + 'dimmer-switch.wohnzimmer.updated', 'Hue: Wann wurde der Button gedrückt', 'string', 'hue-button', ''); >! /**************************************************************************************** * node-red: Hue Dimmer Switch - Wohnzimmer ****************************************************************************************/ on({id: STATE_PATH + 'dimmer-switch.wohnzimmer.updated', change: "any"}, function (obj) { >! // (pressed, holded, short released, long released) var hueBtnAction = getState(STATE_PATH + 'dimmer-switch.wohnzimmer.action').val; >! // (On, Dim Up, Dim Down, Off) switch (getState(STATE_PATH + 'dimmer-switch.wohnzimmer.button').val) { case "On": switch (hueBtnAction) { case "short released": // Hier Code für Long Released break; case "long released": // Hier Code für Long Released break; } break; case "Dim Up": switch (hueBtnAction) { case "short released": // Hier Code für Short Released break; case "long released": // Hier Code für Long Released break; } break; case "Dim Down": switch (hueBtnAction) { case "short released": // Hier Code für Short Released break; case "long released": // Hier Code für Long Released break; } break; case "Off": switch (hueBtnAction) { case "short released": // Hier Code für Short Released break; case "long released": // Hier Code für Short Released break; } break; } }); >! /** * Create States - General * @param {string} stId ID * @param {string} stName Name, Description * @param {mixed} stType Datatype: string, boolean, etc. * @param {string} stRole Role: button, etc. * @param {mixed} stDef Default value */ function MG_createState(stId, stName, stType, stRole, stDef) { createState(stId, { 'name': stName, 'desc': stName, 'type': stType, 'read': true, 'write': true, 'role': stRole, 'def': stDef, }); } >! ```` Im Script sind Euren Freiheiten im Prinzip keine Grenzen gesetzt :) Also für Dimmen dann entsprechend den entsprechenden Datenpunkt auslesen und z.B. um -10 heruntersetzen…..
-
Erstmal vielen Dank Mic für die Bereitstellung. Ist ja auch nicht selbstverständlich.
Ich habe bei lastupdate das Problem, dass er anscheinend zeitlich in ner anderen Zone ist
Zeitzonen sind alle richtig eingestellt.
In der Hue App ist auch alles korrekt.
Wo kommen die +0200 Stunden her? Oder besser, wie bekomme ich sie weg.
(Im HUE Adapter sieht es genauso aus, GMT +0200)
-
Wo kommen die +0200 Stunden her? `
Siehe z.B. hier: https://greenwichmeantime.com/time-zone/gmt-plus-2/
Wenn Dich das stört, dann kannst Du das ja im auswertenden Script entsprechend kalkulieren/korrigieren.
-
Wenn ich das könnte, würde ich es ja machen
-
Das kann man lernen Hier z.B.: https://javascript.info/date
-
Muss das Thema leider nochmal hochholen.
Ich habe die Objekte/Datenpunkte manuell angelegt, weil mein Javascript Adapter irgendwie ne Menge Ressourcen frisst.
Die beiden ersten Punkte werden live befüllt, nur beim updated Datenpunkt kommt nichts.
Woran mag das liegen.
function Node sieht so aus:
Wie kriege ich den Zeitstempel in das updatet Feld? (ohne Javascript)
-
Selbst gelöst :lol: :lol:
Hab Dein Script genommen…Datenpunkte erstellen lassen...Script aus.
Datenpunkt angepasst, wie ich sie hatte.
Und das Datum im Werte Feld vernünftig per Blockly konvertiert.
THX Mic
-
Lieber Mic,
es funktioniert hervorragned!
Bin total begeistert!!
Vielen Dank für deine Mühen!
Gruß
Jörg
-
Hallo,
sehe ich es richtig, dass man mit dieser Lösung immer nur zu den polling-Intervallen eine Rückmeldung zu den Sensordaten bekommt? Falls ja, was wäre ein "noch" sinnvoller möglichst kleiner Wert?
Grüße
-
Die Rückmeldung kommt in Millisekunden, wie schnell willst Du es noch haben?
-
Hi,
bei mir ist das leider nicht der Fall. Je nach dem was ich beim polling-Intervall eingestellt habe kann es eben so lange dauern (Standardwert z.B. 3000ms => siehe Screenshot) Wenn ich unter 1000ms gehe bringt es gefühlt nichts mehr, da dann wohl die Abfrageperformance in die Knie geht und selbst eine Sekunde ist als Reaktionszeit schon grenzwertig lang für mich. Daher wäre meine nächste Frage, was ihr in der Polling Intervall stehen habt, da eine Wertangabe wohl zwingend nötig ist.
Grüße Michael
-
Guten Morgen,
ich wollte gerade folgendes nachgehen: https://forum.iobroker.net/topic/10476/alexa-anbindung-ohne-cloud-und-skill
Zusammengefasst, ich will 3 Tasmota Birnen über ein Philips Hue Dimmschalter steuern in Node-Red oder auch sonst wo.
Ich habe das schon bereits mit den Sonoff sowie Philips Hue Extended Adapter Datenpunkten/objects geschafft, jedoch gibt es dort eine Verzögerung von 6-7 Sekunden. Die Datenpunkte/objects habe ich vom Philips Hue Extended Adapter für den Dimmschalter.
Ich habe die 3 Datenpunkte wie folgt erstellt:
Node-Red sowie Philips Hue Magic installiert.
Schritt 4 verstehe ich nicht, bzw. wie man so ein "Music/Cinema" Tab erstellt und wofür das gut sein soll bzw. man das machen muss? Also das hier:
Schritt 5 (Philips Hue Bridge hinzugefügt, Dimmschalter etc.) und folgende habe ich alle.
Sieht nun so aus:
Jetzt habe ich noch die Datenpunkte/objects von den Tasmota Birnen durch den Sonoff Adapter (MQTT?), wie verbinde ich diese nun mit dem Schalter bzw. schaffe es, das keine extreme Verzögerung auftritt? (entweder direkt in Node-Red oder auch sonst wo)
So habe ich das in Blocky aktuell mit starker Verzögerung (6-7 Sekunden)
Kann mir da jemand bitte helfen? Bin da schon seit Tagen dran mit dem dämlichen Schalter und den Birnen ^^