Last Updated on 15 maart 2024 by Syds
Dit slimme scenario heeft tot doel om een Shelly dimmer 2 aan te sturen met een andere Shelly dimmer.
In mijn woning hangen meerdere groepen met ledspots, zo hangen er in mijn woonkamer zo’n 12 ledspots aan de balken op 3 meter hoogte, en nogmaals 12 ledspots aan de balken op 6 meter hoogte. Beide groepen ledspots zitten aangesloten op een andere groep in de meterkast. Het aan- en uitzetten of dimmen van deze ledspots wordt geregeld met één impulsschakelaar. Normaliter zou dat niet kunnen, omdat je anders de groepen met elkaar gaat vermengen en als deze groepen dan ook nog vanuit verschillende fasen vanuit je meterkast wordt gevoed, dan wordt het helemaal spannend 😉
Ik heb dit opgelost door de groepen met ledspots in de meterkast aan te sluiten op hun eigen Shelly dimmer 2 die middels een DIN-rail mount in de groepenkast zijn bevestigd. Achter de impulsschakelaar in de woonkamer heb ik een derde Shelly dimmer 2 aangesloten.
Hieronder heb ik twee alternatieven beschreven om de Shelly’s onderling te laten communiceren. Het eerste alternatief werkt op basis van getasmotizde Shelly’s (Shelly Dimmer 2 voorzien van het Tasmota OS, zie ook mijn blog
https://www.sydspost.nl/index.php/2022/05/29/shelly-dimmer-2-tamotizen/) die onderling via UDP communiceren in een Tasmota DeviceGroup. Dit alternatief heb ik onlangs (13-12-2023) ontwikkeld en neemt alle nadelen weg die alternatief 2 kent.
Het tweede alternatief is een oplossing via MQTT en Node-Red, hier verzorgt MQTT de onderlinge communicatie tussen de devices en Node-Red voor de logica. De Shelly Dimmer 2 met standaard Shelly firmware stuurt zijn aan- uit- en dim commando’s naar de MQTT server. In Node red heb ik vervolgens een flow aangemaakt die naar die MQTT-berichten luistert en deze doorgeeft aan de Shelly dimmers in de meterkast.
Benodigdheden:
- 2 (of meer) Shelly dimmer 2’s
- Optioneel: Shelly dimmer 2 DIN rail mount voor inbouw in de groepenkast
- stukje Bruin 2.5mm² VD-draad
- stukje Blauw 2.5mm² VD-draad
- stukje Zwart 1.5mm² VD-draad
- Paar Wago klemmen
- Schroevendraaier
- Kniptang
- Afstriptang
Reeds geïnstalleerd en up-and-running:
- Domoticz
- MQTT
- MQTT plugin voor Domoticz
- Node Red
Pinout:
Shelly dimmer 2 #1 (bijv. in meterkast)
Connector |
Draad |
Kleur |
SW1 |
|
|
SW2 |
|
|
L |
|
|
L |
Fase |
Bruin |
L |
|
|
N |
Neutraal |
Blauw |
O |
Lamp |
Zwart |
Shelly dimmer 2 #2 (bijv. in de woonkamer achter een schakelaar)
Connector |
Draad |
Kleur |
SW1 |
Schakelaar uit |
Blauw |
SW2 |
|
|
L |
|
|
L |
Fase |
Bruin |
L |
|
|
N |
Neutraal |
Blauw |
O |
|
|
De ingang van de schakelaar zit middels een WAGO klem ook aangesloten op de neutraaldraad in je wandcontactdoos, zie ook onderstaand schema
Montage:
De Shelly dimmer 2 #1 heb ik middels een DIN-rail mount bevestigd in de groepenkast. Vervolgens heb ik de module voorzien van fase (L) en neutraal (N) en de uitgaande draad naar de lamp bevestigd op de output (O)
De Shelly dimmer 2 #2 heb ik aangesloten op de fase (L) en neutraal (N) draden in de wandcontactdoos. Op de neutraal heb ik een Wago klem gemonteerd, en vandaar een aftakking gemaakt naar de Ingang van de Impulsschakelaar. De uitgang van de Impulsschakelaar heb ik aangesloten op de SW1 connect van de Shelly dimmer 2.
Stappenplan Alternatief 1:
Stap 1. Shelly’s getasmotized en geconfigureerd conform de beschrijving elder op deze website
- https://www.sydspost.nl/index.php/2022/05/29/shelly-dimmer-2-tamotizen/
Hierbij de shelly’s een zinvolle FCDN naam gegeven
- Shelly dimmer 2 #1: Badkamer.sydspost.nl
- Shelly dimmer 2 #2: Badkamer-meterkast.sydspost.nl
stap 2. Tasmota DeviceGroup aangemaakt
Open hiervoor de Console binnen het Tasmota hoofdmenu op zowel Shelly dimmer 2 #1 als #2 en typ achtereenvolgens de volgende commando’s:
SetOption85 1
DevGroupName Badkamer
DevGroupShare -1,-1
typ alleen op Shelly dimmer 2 #1 het volgende commando:
DevGroupSend 128=1
SwitchMode 11
SetOption32 10
Rule 1 1
Rule1
on system#boot do var1 + ENDON
on switch1#state=2 do POWER TOGGLE ENDON
on switch1#state=4 do DIMMER %var1% ENDON
on switch1#state=7 do event upordown=%var1% ENDON
on event#upordown=+ do var1 - ENDON
on event#upordown=- do var1 + ENDON
check daarna de instellingen op beide shelly’s met het commando:
DevGroupStatus
Output van Shelly dimmer 2 #1 is bij mij:
15:42:02.821 CMD: DevGroupStatus
15:42:02.828 MQT: stat/tasmota_E122AC/RESULT = {"DevGroupStatus":{"Index":0,"GroupName":"Badkamer","MessageSeq":7,"MemberCount":1,"Members":[{"IPAddress":"192.168.2.68","ResendCount":0,"LastRcvdSeq":2,"LastAckedSeq":7}]}}
en van Shelly dimmer 2 #2:
15:43:11.126 CMD: DevGroupStatus
15:43:11.133 MQT: stat/tasmota_E1167F/RESULT = {"DevGroupStatus":{"Index":0,"GroupName":"Badkamer","MessageSeq":2,"MemberCount":1,"Members":[{"IPAddress":"192.168.2.127","ResendCount":0,"LastRcvdSeq":7,"LastAckedSeq":2}]}}
Stap 3. Domoticz
Binnen Domoticz een virtueel device toegevoegd met sensortype “Schakelaar” voor Shelly dimmer 2 #1, en deze daarna geconfigureerd als een dimmer. Vervolgens in Tasmota vanuit het hoofdmenu gekozen voor “Configuration” en “Configure MQTT” en het ip-address van mijn MQTT-server ingevoerd. Daarna in Tasmota vanuit het hoofdmenu gekozen voor “Configuration” en “Configure Domoticz” en bij Idx 1 het idx nummer van het virtuele device in Domoticz overgenomen.
Voor beide shelly’s een virtueel device toegevoegd met sensortype “Temperatuur”. Vervolgens op Shelly dimmer 2 #2 ook in Tasmota vanuit het hoofdmenu gekozen voor “Configuration” en “Configure MQTT” en het ip-address van mijn MQTT-server ingevoerd. Daarna op beide shelly’s in Tasmota vanuit het hoofdmenu gekozen voor “Configuration” en “Configure Domoticz” en bij Idx 1 het idx nummer van betreffend virtuele device in Domoticz overgenomen.
Stappenplan Alternatief 2:
Stap 1. Shelly’s geconfigureerd conform de beschrijving elders op deze website
Stap 2. De shelly’s een zinvolle naam gegeven binnen Domoticz
- Shelly dimmer 2 #1: Basisverlichting
- Shelly dimmer 2 #2: Basisverlichting schakelaar
Stap 3. Button type van shelly dimmer 2 #1 Basisverlichting aangepast
Stap 3. Een Node red flow aangemaakt
- Deze Node red flow zorgt ervoor dat de aan-, uit- en dim commando’s die de Shelly dimmer 2 #2 Basisverlichting schakelaar naar MQTT verstuurd, omgezet wordt naar MQTT commando’s voor Shelly dimmer 2 #1 Basisverlichting.
Node |
Actie |
MQTT in |
Leest MQTT berichten van shellydimmer2-E8DB84D6A91F (Basisverlichting schakelaar) topic shellies/shellydimmer2-E8DB84D6A91F/light/0/status |
Payload to http request |
Deze functie zet de MQTT commando’s On (true), Off (false) en Set Level (Brightness) om naar http query parameter |
Basisverlichting |
Doet http request naar shellydimmer2-E8DB84D6A986 (Basisverlichting) met query parameters uit ‘Payload to http request’ |
Keuken |
Doet http request naar shellydimmer2-E8DB84D2E117 (Keuken) met query parameters uit ‘Payload to http request’ |
Plafondverlichting |
Doet http request naar shellydimmer2-shellydimmer2-D8BFC019EDE7 (Plafondverlichting) met query parameters uit ‘Payload to http request’ |
Export:
[{“id”:”c55937e6.9d3e88″,”type”:”tab”,”label”:”Basisverlichting”,”disabled”:false,”info”:””},{“id”:”996aa6da.a999d8″,”type”:”mqtt in”,”z”:”c55937e6.9d3e88″,”name”:”MQTT in”,”topic”:”shellies/shellydimmer2-E8DB84D6A91F/light/0/status”,”qos”:”2″,”datatype”:”auto”,”broker”:”ede154bd.f75f38″,”x”:110,”y”:60,”wires”:[[“1522a293.0d187d”]]},{“id”:”1522a293.0d187d”,”type”:”function”,”z”:”c55937e6.9d3e88″,”name”:”Payload to http request”,”func”:”// {\”ison\”:false,\”has_timer\”:false,\”timer_started\”:0,\”timer_duration\”:0,\”timer_remaining\”:0,\”mode\”:\”white\”,\”brightness\”:49}\”\n\nvar on_off = msg.payload.split(‘:’)[1].substr(0,5).replace(‘,’,”);\nvar brightness = msg.payload.split(‘:’)[7].substr(0,2);\n\nif (on_off == ’true’)\n{\n on_off = ‘on’;\n} else {\n on_off = ‘off’;\n}\n\nmsg.payload = ‘?turn=’ + on_off + ‘&brightness=’ + brightness;\n\nreturn msg;”,”outputs”:1,”noerr”:0,”initialize”:””,”finalize”:””,”x”:370,”y”:60,”wires”:[[“590213ab.3ba16c”,”cf092c72.dc5f2″,”2b94118a.fa81ee”]]},{“id”:”590213ab.3ba16c”,”type”:”http request”,”z”:”c55937e6.9d3e88″,”name”:”Basisverlichting”,”method”:”GET”,”ret”:”txt”,”paytoqs”:”ignore”,”url”:”http://shellydimmer2-E8DB84D6A986.sydspost.nl/light/0{{{payload}}}”,”tls”:””,”persist”:false,”proxy”:””,”authType”:””,”x”:660,”y”:60,”wires”:[[]]},{“id”:”cf092c72.dc5f2″,”type”:”http request”,”z”:”c55937e6.9d3e88″,”name”:”Keuken”,”method”:”GET”,”ret”:”txt”,”paytoqs”:”ignore”,”url”:”http://shellydimmer2-E8DB84D2E117.sydspost.nl/light/0{{{payload}}}”,”tls”:””,”persist”:false,”proxy”:””,”authType”:””,”x”:640,”y”:140,”wires”:[[]]},{“id”:”2b94118a.fa81ee”,”type”:”http request”,”z”:”c55937e6.9d3e88″,”name”:”Plafondverlichting”,”method”:”GET”,”ret”:”txt”,”paytoqs”:”ignore”,”url”:”http://shellydimmer2-D8BFC019EDE7.sydspost.nl/light/0{{{payload}}}”,”tls”:””,”persist”:false,”proxy”:””,”authType”:””,”x”:670,”y”:220,”wires”:[[]]},{“id”:”ede154bd.f75f38″,”type”:”mqtt-broker”,”z”:””,”name”:”pi”,”broker”:”192.168.2.29″,”port”:”1883″,”clientid”:””,”usetls”:false,”compatmode”:false,”keepalive”:”60″,”cleansession”:true,”birthTopic”:””,”birthQos”:”0″,”birthPayload”:””,”closeTopic”:””,”closeQos”:”0″,”closePayload”:””,”willTopic”:””,”willQos”:”0″,”willPayload”:””}]
1-8-2021: Na gisteren de firmware te hebben geupdated naar versie 20210723-153500/v1.11.0-Dimmer-g1d5998d, werkte de Node red flow niet meer. Analyse leverde op dat het bericht wat via MQTT wordt verstuurd inhoudelijk was gewijzigd:
Oud: {“ison”:false,”has_timer”:false,”timer_started”:0,”timer_duration”:0,”timer_remaining”:0,”mode”:”white”,”brightness”:49}”
Nieuw: {“ison”:false,”source”:”http”,”has_timer”:false,”timer_started”:0,”timer_duration”:0,”timer_remaining”:0,”mode”:”white”,”brightness”:51,”transition”:0}”
Verschillen:
“source”:”http” is toegevoegd
“transition”:0 is toegevoegd
Door de toevoeging van het veld source werkte de flow niet meer, hieronder de flow voor firmware versie 20210723-153500/v1.11.0-Dimmer-g1d5998d en hoger:
[{“id”:”c55937e6.9d3e88″,”type”:”tab”,”label”:”Basisverlichting”,”disabled”:false,”info”:””},{“id”:”996aa6da.a999d8″,”type”:”mqtt in”,”z”:”c55937e6.9d3e88″,”name”:”MQTT in Basisverlichting”,”topic”:”shellies/shellydimmer2-E8DB84D6A91F/light/0/status”,”qos”:”2″,”datatype”:”auto”,”broker”:”ede154bd.f75f38″,”x”:150,”y”:200,”wires”:[[“4bb6f964.e1aea8”]]},{“id”:”1522a293.0d187d”,”type”:”function”,”z”:”c55937e6.9d3e88″,”name”:”Payload to http request”,”func”:”// {\”ison\”:false,\”has_timer\”:false,\”timer_started\”:0,\”timer_duration\”:0,\”timer_remaining\”:0,\”mode\”:\”white\”,\”brightness\”:49}\”\n// {\”ison\”:false,\”source\”:\”http\”,\”has_timer\”:false,\”timer_started\”:0,\”timer_duration\”:0,\”timer_remaining\”:0,\”mode\”:\”white\”,\”brightness\”:51,\”transition\”:0}\”\n\nvar on_off = msg.payload.split(‘:’)[1].substr(0,5).replace(‘,’,”);\nvar brightness = msg.payload.split(‘:’)[8].substr(0,2);\n\n// node.warn(\”Brightness: \”+brightness);\n\nif (on_off == ’true’)\n{\n msg.payload = ‘?turn=on’ + ‘&brightness=’ + brightness;\n flow.set(\”initStatus\”,’On’);\n flow.set(\”initLevel\”,brightness);\n// node.warn(\”initStatus=On:\”+msg.payload);\n} else {\n msg.payload = ‘?turn=off’;\n flow.set(\”initStatus\”,’Off’);\n flow.set(\”initLevel\”,brightness);\n// node.warn(\”initStatus=Off:\”+msg.payload);\n}\n\n// node.warn(\”parameter=\”+msg.payload);\n\nreturn msg;”,”outputs”:1,”noerr”:0,”initialize”:””,”finalize”:””,”x”:1190,”y”:200,”wires”:[[“590213ab.3ba16c”,”cf092c72.dc5f2″,”2b94118a.fa81ee”]]},{“id”:”590213ab.3ba16c”,”type”:”http request”,”z”:”c55937e6.9d3e88″,”name”:”Basisverlichting”,”method”:”GET”,”ret”:”txt”,”paytoqs”:”ignore”,”url”:”http://shellydimmer2-E8DB84D6A986.sydspost.nl/light/0{{{payload}}}”,”tls”:””,”persist”:false,”proxy”:””,”authType”:””,”x”:1460,”y”:140,”wires”:[[“48832255.954dac”]]},{“id”:”cf092c72.dc5f2″,”type”:”http request”,”z”:”c55937e6.9d3e88″,”name”:”Keuken”,”method”:”GET”,”ret”:”txt”,”paytoqs”:”ignore”,”url”:”http://shellydimmer2-E8DB84D2E117.sydspost.nl/light/0{{{payload}}}”,”tls”:””,”persist”:false,”proxy”:””,”authType”:””,”x”:1440,”y”:200,”wires”:[[“48832255.954dac”]]},{“id”:”2b94118a.fa81ee”,”type”:”http request”,”z”:”c55937e6.9d3e88″,”name”:”Plafondverlichting”,”method”:”GET”,”ret”:”txt”,”paytoqs”:”ignore”,”url”:”http://shellydimmer2-D8BFC019EDE7.sydspost.nl/light/0{{{payload}}}”,”tls”:””,”persist”:false,”proxy”:””,”authType”:””,”x”:1470,”y”:260,”wires”:[[“48832255.954dac”]]},{“id”:”dd87464a.d91c78″,”type”:”http request”,”z”:”c55937e6.9d3e88″,”name”:”Get current status”,”method”:”GET”,”ret”:”obj”,”paytoqs”:”ignore”,”url”:”http://192.168.2.29:8080/json.htm?type=devices&rid=193″,”tls”:””,”persist”:false,”proxy”:””,”authType”:””,”x”:410,”y”:60,”wires”:[[“1928ab8f.b99034”]]},{“id”:”4bb6f964.e1aea8″,”type”:”function”,”z”:”c55937e6.9d3e88″,”name”:”Get message status”,”func”:”// {\”ison\”:false,\”has_timer\”:false,\”timer_started\”:0,\”timer_duration\”:0,\”timer_remaining\”:0,\”mode\”:\”white\”,\”brightness\”:49}\”\n// {\”ison\”:false,\”source\”:\”http\”,\”has_timer\”:false,\”timer_started\”:0,\”timer_duration\”:0,\”timer_remaining\”:0,\”mode\”:\”white\”,\”brightness\”:51,\”transition\”:0}\”\n\n\nvar on_off = msg.payload.split(‘,’)[0].split(‘:’)[1];\nvar level = msg.payload.split(‘,’)[7].split(‘:’)[1].replace(‘}’,”);\n\n// node.warn(\”on_off=\”+on_off);\n// node.warn(\”level=\”+level);\n\nif (on_off == ’true’)\n{\n on_off = ‘On’;\n} else {\n on_off = ‘Off’;\n}\n\nflow.set(‘msgStatus’,on_off);\nflow.set(‘msgLevel’,level);\n\n// node.warn(\”initStatus: \”+flow.get(‘initStatus’));\n// node.warn(\”initLevel: :\”+flow.get(‘initLevel’));\n// node.warn(\”msgStatus=\”+on_off);\n// node.warn(\”msgLevel=\”+level);\n\nreturn msg;”,”outputs”:1,”noerr”:0,”initialize”:””,”finalize”:””,”x”:620,”y”:200,”wires”:[[“9d6d9b50.cb79f8″,”6c51e1e4.ff0dd”]]},{“id”:”9d6d9b50.cb79f8″,”type”:”switch”,”z”:”c55937e6.9d3e88″,”name”:”StatusChanged”,”property”:”initStatus”,”propertyType”:”flow”,”rules”:[{“t”:”neq”,”v”:”msgStatus”,”vt”:”flow”},{“t”:”eq”,”v”:”msgStatus”,”vt”:”flow”}],”checkall”:”true”,”repair”:false,”outputs”:2,”x”:900,”y”:200,”wires”:[[“1522a293.0d187d”],[]]},{“id”:”94b5871c.aeba78″,”type”:”inject”,”z”:”c55937e6.9d3e88″,”name”:”Run Once at Startup”,”props”:[],”repeat”:””,”crontab”:””,”once”:true,”onceDelay”:0.1,”topic”:””,”x”:160,”y”:60,”wires”:[[“dd87464a.d91c78”]]},{“id”:”1928ab8f.b99034″,”type”:”function”,”z”:”c55937e6.9d3e88″,”name”:”Store in Context”,”func”:”var status=msg.payload.result[0].Status;\nvar level=msg.payload.result[0].Level;\n\n// node.warn(\”initStatus=\”+status);\n// node.warn(\”initLevel=\”+level);\n\nflow.set(\”initStatus\”,status);\nflow.set(\”initLevel\”,level);\n\nreturn msg;”,”outputs”:1,”noerr”:0,”initialize”:””,”finalize”:””,”x”:640,”y”:60,”wires”:[[]]},{“id”:”6c51e1e4.ff0dd”,”type”:”switch”,”z”:”c55937e6.9d3e88″,”name”:”LevelChanged”,”property”:”initLevel”,”propertyType”:”flow”,”rules”:[{“t”:”neq”,”v”:”msgLevel”,”vt”:”flow”},{“t”:”eq”,”v”:”msgLevel”,”vt”:”flow”}],”checkall”:”false”,”repair”:false,”outputs”:2,”x”:900,”y”:260,”wires”:[[“1522a293.0d187d”],[]]},{“id”:”48832255.954dac”,”type”:”debug”,”z”:”c55937e6.9d3e88″,”name”:””,”active”:true,”tosidebar”:true,”console”:false,”tostatus”:false,”complete”:”false”,”statusVal”:””,”statusType”:”auto”,”x”:1730,”y”:200,”wires”:[]},{“id”:”ede154bd.f75f38″,”type”:”mqtt-broker”,”z”:””,”name”:”pi”,”broker”:”192.168.2.29″,”port”:”1883″,”clientid”:””,”usetls”:false,”compatmode”:false,”keepalive”:”60″,”cleansession”:true,”birthTopic”:””,”birthQos”:”0″,”birthPayload”:””,”closeTopic”:””,”closeQos”:”0″,”closePayload”:””,”willTopic”:””,”willQos”:”0″,”willPayload”:””}]
Nabeschouwingen:
Hoewel dit Alternatief 2 technisch gezien werkt zitten er wel een paar onhebbelijkheden is, namelijk:
- Als je de Basisverlichting via de app, domoticz of google assistant uitzet, dan gaat hij automatisch na een paar seconden weer aan. Immers er is geen communicatie terug van Basisverlichting naar de schakelaar. Dus bij de eerstvolgende MQTT statusupdate van de schakelaar wordt de instelling van de Basisverlichting weer overruled.
- Het dim-commando wordt pas verstuurd nadat je de schakelaar hebt losgelaten, dus het is een beetje gokken welke dim-stand de Basisverlichting aanneemt.
- Je moet de schakelaar vrij lang ingedrukt houden om de Basisverlichting terug te dimmen.
Bovenstaande nadelen van Alternatief 2 worden volledig weggenomen door Alternatief 1 wat uiteindelijk een betere functionaliteit biedt.
Nadelen Alternatief 1:
- Je neemt afscheid van de meegeleverde software van Shelly. Veel zaken die je via de web userinterface van Shelly kunt regelen en overzichtelijk gepresenteerd worden, moet je binnen Tasmota via de console en tasmota commando’s regelen.