Dimmy über TP1-TP6 steuern?

Hallo zusammen,

ich bin über folgenden Beitrag gestolpert. Würde sich das nicht auf die Steuerung über Tasterdruck um Bügeln lassen?
https://flows.nodered.org/flow/b0a8df9a33b4c53427a5304f31c8705a
Wenn ich die Eingänge des Relay Bausteins auswerte?

Hey,

versuch mal das hier:

[{"id":"ac99b5b05abe5bfe","type":"inject","z":"d7541481519af74d","name":"true","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":870,"y":660,"wires":[["8b5c7a3c16c40fc2"]]},{"id":"23d87658fb48e428","type":"inject","z":"d7541481519af74d","name":"false","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"false","payloadType":"bool","x":870,"y":700,"wires":[["8b5c7a3c16c40fc2"]]},{"id":"6cec84b33532a098","type":"ui_slider","z":"d7541481519af74d","name":"","label":"slider","tooltip":"","group":"4229bceb.57ece4","order":2,"width":0,"height":0,"passthru":true,"outs":"all","topic":"topic","topicType":"msg","min":0,"max":"100","step":1,"x":1970,"y":700,"wires":[["6799ee9ec22ff987"]]},{"id":"4dbe60385a046c44","type":"trigger","z":"d7541481519af74d","name":"","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"-250","extend":false,"overrideDelay":false,"units":"ms","reset":"false","bytopic":"all","topic":"topic","outputs":1,"x":1630,"y":700,"wires":[["e6435cfb7e32baf5"]]},{"id":"e6435cfb7e32baf5","type":"function","z":"d7541481519af74d","name":"long push","func":"if (flow.get(\"timer\") == \"stop\") {\n    return null\n}\n\n//if dimmer > 50 then dim down\nif (flow.get(\"dimmer0_state\") >= 50) {\n    if (global.get(\"dimmer0\") <= 0) {\n        global.set(\"dimmer0\", 0)\n    }\n    else { global.set(\"dimmer0\", global.get(\"dimmer0\")-7.5)}\n}\n//if dimmer < 50 then dim up\nelse if (flow.get(\"dimmer0_state\") < 50) {\n    if (global.get(\"dimmer0\") >= 100) {\n        global.set(\"dimmer0\", 100)\n    }\n    else { global.set(\"dimmer0\", global.get(\"dimmer0\")+7.5)}\n}\nmsg.payload = global.get(\"dimmer0\")\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1820,"y":700,"wires":[["6cec84b33532a098"]]},{"id":"8b5c7a3c16c40fc2","type":"function","z":"d7541481519af74d","name":"get true/false","func":"flow.set(\"dimmer0_state\", Number(global.get(\"dimmer0\")))\n\nif (msg.payload == true) {\n    msg.time = Date.now()\n    msg.topic = \"start\"\n    flow.set(\"timer\", \"start\")\n}\nif (msg.payload == false) {\n    msg.time = Date.now()\n    msg.topic = \"stop\"\n    flow.set(\"timer\", \"stop\")\n}\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1030,"y":680,"wires":[["8c23a4213e9f3f0c"]]},{"id":"6799ee9ec22ff987","type":"debug","z":"d7541481519af74d","name":"debug 11","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":2120,"y":700,"wires":[]},{"id":"8c23a4213e9f3f0c","type":"join","z":"d7541481519af74d","name":"long/short push?","mode":"custom","build":"object","property":"time","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"1","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":1210,"y":680,"wires":[["b5d31f390e917e80"]]},{"id":"b5d31f390e917e80","type":"function","z":"d7541481519af74d","name":"short/long push","func":"if (msg.time.hasOwnProperty(\"start\") && msg.time.hasOwnProperty(\"stop\") && msg.topic == \"stop\") {\n    return [msg, null]\n}\nelse if (msg.topic == \"start\") { \n    return [null, msg]\n}\nelse if (msg.topic == \"stop\") { \n    msg.payload = false\n    return [null, msg]\n}","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1400,"y":680,"wires":[["33ade699c1b8d5f1"],["4dbe60385a046c44"]]},{"id":"33ade699c1b8d5f1","type":"function","z":"d7541481519af74d","name":"short push","func":"msg.payload = (global.get(\"dimmer0\") > 0 ? 0 : 50)\nglobal.set(\"dimmer0\", msg.payload)\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1810,"y":660,"wires":[["6cec84b33532a098"]]},{"id":"4229bceb.57ece4","type":"ui_group","name":"Zigbee","tab":"b128bba3.f99e38","order":5,"disp":true,"width":"6","collapse":false},{"id":"b128bba3.f99e38","type":"ui_tab","name":"Einstellungen","icon":"dashboard","order":6,"disabled":false,"hidden":false}]

Mit den Injects am Anfang hab ich true oder false, das von den MCPs kommt emuliert. Dann wird über die join Node geprüft, ob true und false innerhalb von einer Sekunde gekommen sind, dann gehe ich von einem Short push aus und setze den Slider (Dimmer) entweder auf 0 wenn er an ist, oder auf 50 wenn er aus ist.
Bei einem Long Push, also länger als eine Sekunde, werden dem Dimmerwert alle 250ms 7,5 hinzu addiert oder abgezogen, bis er entweder auf 100 oder auf 0 steht. Oder ein false kommt.
Gut möglich, dass true und false noch getauscht werden müssen. Aber ich denke das könnte ein guter Ansatz sein

1 Like

Mega das Probiere ich mal aus!

1 Like

@thesmartvanproject
Hallo Matze.
ich bab das bei mir schon länger, allerdinst mit externen Eingängen über MQTT.
funktioniert einwandfrei :wink:

Gruß
Arno

1 Like

Ich wollte das über Zigbee2MQTT realisieren, allerdings bekomme ich das leider nicht richtig hin.
Als Aktor habe ich den Hue Button ( Philips 8718699693985 control via MQTT | Zigbee2MQTT) verwendet. Das Gerät sendet bei Tastendruck nur:

{“action”: “brightness_step_down”, “action_step_size”:56, “action_transition_time”:0.09, “battery”:100, “linkquality”:184, “update”:{“state”: “idle”}}

oder

{“action”: “brightness_step_up”, “action_step_size”:56, “action_transition_time”:0.09, “battery”:100, “linkquality”:176, “update”:{“state”: “idle”}}

Vielleicht wäre es doch einfach über die GPIO zu gehen?
Welchen Schalter / Aktor habt ihr verwenet?

Hey Chris,

Dafür schaust du einfach ob brighntess_up oder brighness_down reinkommt und setzt dann dementsprechend den neuen Dimmerwert. Hab dabei wirklich nur die action value berücksichtigt.

Danach kannst du direkt über die MQTT Api den Dimmer schalten, hier am Beispiel vom ersten Dimmer:

[{"id":"a3e1e0bb3f703883","type":"function","z":"71d2baa986138c38","name":"set dimmer ","func":"if (msg.payload.action == \"brightness_step_up\") {\n    if (global.get(\"dimmer0\") <= 100) {\n        msg.payload = global.get(\"dimmer0\") + 7.5\n    }\n    else if (global.get(\"dimmer0\") > 100) {\n        msg.payload = 100  \n    }\n}\nelse if (msg.payload.action == \"brightness_step_down\") {\n    if (global.get(\"dimmer0\") >= 0) {\n        msg.payload = global.get(\"dimmer0\") - 7.5\n    }\n    else if (global.get(\"dimmer0\") < 0) {\n        msg.payload = 0\n    }\n}\n\nmsg.topic =\"pkw/cmnd/dimmer/1/POWER\"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1810,"y":2120,"wires":[["719eb6dea11c0730"]]},{"id":"b018a0d618827a04","type":"mqtt in","z":"71d2baa986138c38","name":"","topic":"zigbee2mqtt/test","qos":"2","datatype":"auto-detect","broker":"0ddb07c65cbb68bc","nl":false,"rap":true,"rh":0,"inputs":0,"x":1620,"y":2120,"wires":[["a3e1e0bb3f703883"]]},{"id":"719eb6dea11c0730","type":"mqtt out","z":"71d2baa986138c38","name":"","topic":"","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"0ddb07c65cbb68bc","x":1970,"y":2120,"wires":[]},{"id":"0ddb07c65cbb68bc","type":"mqtt-broker","name":"","broker":"http://localhost","port":"1883","clientid":"","usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"sessionExpiry":""}]

Denk dran die MQTT Nodes entsprechend anzupassen.

1 Like

Also das Funktioniert top. habe es jetzt auch auf den MCP um gebaut. Das Dimmen funktioniert jetzt auch Mit Taster Druck.

[{"id":"48ac167d7d63684d","type":"trigger","z":"0e4ef1e0739bd351","name":"","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"-250","extend":false,"overrideDelay":false,"units":"ms","reset":"false","bytopic":"all","topic":"topic","outputs":1,"x":780,"y":400,"wires":[["481e8c0f05c3bbe1"]]},{"id":"481e8c0f05c3bbe1","type":"function","z":"0e4ef1e0739bd351","name":"long push","func":"if (flow.get(\"timer\") == \"stop\") {\n    return null\n}\n\n//if dimmer > 50 then dim down\nif (flow.get(\"dimmer0_state\") >= 50) {\n    if (global.get(\"dimmer0\") <= 0) {\n        global.set(\"dimmer0\", 0)\n    }\n    else { global.set(\"dimmer0\", global.get(\"dimmer0\")-7.5)}\n}\n//if dimmer < 50 then dim up\nelse if (flow.get(\"dimmer0_state\") < 50) {\n    if (global.get(\"dimmer0\") >= 100) {\n        global.set(\"dimmer0\", 100)\n    }\n    else { global.set(\"dimmer0\", global.get(\"dimmer0\")+7.5)}\n}\nmsg.payload = global.get(\"dimmer0\")\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":980,"y":380,"wires":[["9c260c0c01dcecee"]]},{"id":"d0dd5900fa9af270","type":"function","z":"0e4ef1e0739bd351","name":"get true/false","func":"flow.set(\"dimmer0_state\", Number(global.get(\"dimmer0\")))\n\nif (msg.payload == true) {\n    msg.time = Date.now()\n    msg.topic = \"start\"\n    flow.set(\"timer\", \"start\")\n}\nif (msg.payload == false) {\n    msg.time = Date.now()\n    msg.topic = \"stop\"\n    flow.set(\"timer\", \"stop\")\n}\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":320,"wires":[["de4894f66561fbc5"]]},{"id":"de4894f66561fbc5","type":"join","z":"0e4ef1e0739bd351","name":"long/short push?","mode":"custom","build":"object","property":"time","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"1","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":500,"y":320,"wires":[["ba9b11e91ca85947"]]},{"id":"ba9b11e91ca85947","type":"function","z":"0e4ef1e0739bd351","name":"short/long push","func":"if (msg.time.hasOwnProperty(\"start\") && msg.time.hasOwnProperty(\"stop\") && msg.topic == \"stop\") {\n    return [msg, null]\n}\nelse if (msg.topic == \"start\") { \n    return [null, msg]\n}\nelse if (msg.topic == \"stop\") { \n    msg.payload = false\n    return [null, msg]\n}","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":380,"wires":[["86814d1319edae5b"],["48ac167d7d63684d"]]},{"id":"86814d1319edae5b","type":"function","z":"0e4ef1e0739bd351","name":"short push","func":"msg.payload = (global.get(\"dimmer0\") > 0 ? 0 : 50)\nglobal.set(\"dimmer0\", msg.payload)\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":970,"y":340,"wires":[["9c260c0c01dcecee"]]},{"id":"e73a6c69d1030105","type":"mcp23017input","z":"0e4ef1e0739bd351","name":"","chip":"4e9949f3b6e19991","bitNum":"2","pullUp":true,"invert":true,"debounce":200,"onMsg":true,"offMsg":true,"x":120,"y":320,"wires":[["d0dd5900fa9af270"]]},{"id":"4e9949f3b6e19991","type":"mcp23017chip","addr":"0x20","interval":"100"}]

Das MCP element und den Get true/false habe ich aus dem Relay Control Node genommen.

Richtig Nice habe noch gar nicht mit Node gearbeitet aber das ist echt Easy.

2 Likes

Welche Taster oder Schalter verwendest du?

Ich habe normale Runde Drucktaster von Amazon im Bus verbaut. Allerdings ist der Aufbau bei mir noch auf dem Schreibtisch und ich habe das jetzt mit offenen Kabelende in verbindung zu Masse getestet.

1 Like

Hey,
ich bekomme das einfach nicht hin. das ist zu kompliziert für mein skilllevel :smiley:
bei langem Tastendruck “hold” bleibt der Wert 7x bei 92,5 und dann 7x bei 107,5
Wahrscheinlich ist das ziemlich einfach, aber für mich zu schwierig :slight_smile:

Moin Moin,
der Dimmy ist auch in meinem Besitz. Allerdings habe ich es noch nicht hinbekommen, die LEDs über Taster zu schalten.
Ich bin leider kein Node Red Pro, von daher schwierig für mich.
Kann man jemand erklären, wie ich das hinbekomme?

Thx

Hey Martin,

was hast du denn schon versucht, also an welchem Punkt bist du denn grade?

@ChrisF kannst du das nochmal genau erklären? Der Wert bleibt immer gleich, oder wie meinst du das? Kannst du deinen Flow mal hier reinstellen?

Das korrekte anschließen vom Dimmy war kein Problem. Wemos verlötet und geflashed. Das funktioniert auch alles perfekt.
Wie kann ich per Schalter das Dimmy steuern? Das mit den GPIOs verstehe ich nicht richtig. Wie und wo muss was angeschlossen werden.
Muss ich noch etwas in node red programmieren?

Prinzipiell hast du da zwei Möglichkeiten:

  1. Du benutzt das Dimmy Standalone, da kannst du die Schalter mit den GPIOs des Dimmy verbinden und dann steuern. Es besteht dann keine Verbindung zum Rest des Systems.

  2. Wenn das Dimmy per Wlan/I2C mit dem Raspberry verbunden ist, kannst du die 6 Lötpunkte TP1-TP6 auf dem Relayboard verwenden, um deine Schalter einzubinden. Vorgefertigt kannst du darüber dann die Relays schalten lassen (Config → Switches → MCP Input). Möchtest du allerdings etwas anderes schalten, dann musst du das in Node-RED dazu programmieren. Dabei kann ich (oder jemand anderes aus der Community) dir gerne behilflich sein. Um diese Variante geht es ursprünglich in diesem Thread.

Je nach Variante brauchst du die entsprechende Software auf dem Wemos des Dimmy.

1 Like

Ich habe das mit dem Hue Button aufgegeben :joy: erst einmal.

Ahh okay gute Erklärung.
Das neue Dimmy habe mir jetzt auch mal zugelegt.
Mit dem alten blauen Board funktioniert das auch irgendwie bzw. wired? Wenn nicht, dann per WLAN.
Die Lötpunkte habe ich ja leider nicht.

Am Liebsten würde ich das Licht per Taster und Touchscreen/http steuern.

1 Like

Auf dem älteren blauen Board war noch kein I2C Anschluss, da müsstest du Wlan benutzen.
Über das Touchdisplay und per http ist ja alles eingebunden, die Taster dann wie gesagt an das neue Dimmy oder man benutzt Wifi/Zigbee/etc. Taster.

2 Likes

Moin Leute,

Sorry war leider beruflich in Schweden unterwegs.

Ich schaue mir meine Implementation nacher noch mal an.
Aber ich habe den Code von 31.7. in die Dimm Logic mit eingebaut.
und Poste das nochmal hier.
Ich habe aber auch aktuell etwas EMV probleme meine Parallel laufende 230V Leitung den ich noch beheben muss.

Noch eine andere Frage:
Die Verkabelung erfolgt wie folgt:

Bild1

Bild2

Was muss ich in Node Red programmieren, damit es funktioniert?
Nur einen Schalter anschließen funktioniert ja nicht.

Moin zusammen also für die implementierung bei I2C habe ich das wie folgt gemacht.

im MCP23017input lässt sich der Kanal über die Bit Number einstellen

Bit 2 ist Tp1 Bit 3 TP2 usw.
grafik

mit dem Ausgängen von short push und Long push bin ich dann an den Eingang des Slieders des jeweils zu dimmenden Ausgangs gegangen bei mir Slider1 und Slider2

Anbei der code der bei mir Funktioniert.

[{"id":"e73a6c69d1030105","type":"mcp23017input","z":"0e4ef1e0739bd351","name":"","chip":"4e9949f3b6e19991","bitNum":"7","pullUp":true,"invert":true,"debounce":200,"onMsg":true,"offMsg":true,"x":120,"y":320,"wires":[["d0dd5900fa9af270"]]},{"id":"d0dd5900fa9af270","type":"function","z":"0e4ef1e0739bd351","name":"get true/false","func":"flow.set(\"dimmer0_state\", Number(global.get(\"dimmer0\")))\n\nif (msg.payload == true) {\n    msg.time = Date.now()\n    msg.topic = \"start\"\n    flow.set(\"timer\", \"start\")\n}\nif (msg.payload == false) {\n    msg.time = Date.now()\n    msg.topic = \"stop\"\n    flow.set(\"timer\", \"stop\")\n}\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":320,"wires":[["de4894f66561fbc5"]]},{"id":"de4894f66561fbc5","type":"join","z":"0e4ef1e0739bd351","name":"long/short push?","mode":"custom","build":"object","property":"time","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"1","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":500,"y":320,"wires":[["ba9b11e91ca85947"]]},{"id":"ba9b11e91ca85947","type":"function","z":"0e4ef1e0739bd351","name":"short/long push","func":"if (msg.time.hasOwnProperty(\"start\") && msg.time.hasOwnProperty(\"stop\") && msg.topic == \"stop\") {\n    return [msg, null]\n}\nelse if (msg.topic == \"start\") { \n    return [null, msg]\n}\nelse if (msg.topic == \"stop\") { \n    msg.payload = false\n    return [null, msg]\n}","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":380,"wires":[["86814d1319edae5b"],["48ac167d7d63684d"]]},{"id":"48ac167d7d63684d","type":"trigger","z":"0e4ef1e0739bd351","name":"","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"-250","extend":false,"overrideDelay":false,"units":"ms","reset":"false","bytopic":"all","topic":"topic","outputs":1,"x":780,"y":400,"wires":[["481e8c0f05c3bbe1"]]},{"id":"86814d1319edae5b","type":"function","z":"0e4ef1e0739bd351","name":"short push","func":"msg.payload = (global.get(\"dimmer0\") > 0 ? 0 : 50)\nglobal.set(\"dimmer0\", msg.payload)\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":970,"y":340,"wires":[["9c260c0c01dcecee"]]},{"id":"481e8c0f05c3bbe1","type":"function","z":"0e4ef1e0739bd351","name":"long push","func":"if (flow.get(\"timer\") == \"stop\") {\n    return null\n}\n\n//if dimmer > 50 then dim down\nif (flow.get(\"dimmer0_state\") >= 50) {\n    if (global.get(\"dimmer0\") <= 0) {\n        global.set(\"dimmer0\", 0)\n    }\n    else { global.set(\"dimmer0\", global.get(\"dimmer0\")-7.5)}\n}\n//if dimmer < 50 then dim up\nelse if (flow.get(\"dimmer0_state\") < 50) {\n    if (global.get(\"dimmer0\") >= 100) {\n        global.set(\"dimmer0\", 100)\n    }\n    else { global.set(\"dimmer0\", global.get(\"dimmer0\")+7.5)}\n}\nmsg.payload = global.get(\"dimmer0\")\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":980,"y":380,"wires":[["9c260c0c01dcecee"]]},{"id":"9c260c0c01dcecee","type":"ui_slider","z":"0e4ef1e0739bd351","name":"slider1","label":"{{msg.label}}","tooltip":"","group":"b39a769e1a5ab2d0","order":1,"width":0,"height":0,"passthru":true,"outs":"end","topic":"topic","topicType":"msg","min":0,"max":"100","step":"1","className":"","x":770,"y":593,"wires":[["6c2a8f64017e95f3","dd9af841e8537f3d","354f1305d10a584d","fe8125f01767e145"]]},{"id":"4e9949f3b6e19991","type":"mcp23017chip","addr":"0x20","interval":"100"},{"id":"b39a769e1a5ab2d0","type":"ui_group","name":"Dimmer","tab":"2fa37e0c8559eb92","order":4,"disp":true,"width":"6","collapse":false,"className":""},{"id":"2fa37e0c8559eb92","type":"ui_tab","name":"Switches","icon":"mi-toggle_on","order":2,"disabled":false,"hidden":false}]

kleiner Tipp von mir die Leitungen zu den Schaltern nicht Parallel zur 230V Leitung legen.
:sweat_smile:
Führt bei mir manchmal dazu, dass das licht einfach angeht.

1 Like