IKEA Trådfri lamp m.b.v. Styrbar en Wemos D1 mini aansturen met Domoticz

In deze tutorial gaan we een STYRBAR Afstandsbediening m.b.v. een Wemos D1 mini ombouwen tot een WIFI gateway zodat we de gekoppelde Trådfri lamp(en) kunnen aansturen met Domoticz middels MQTT.

STYRBAR Afstandsbediening, wit

Onderdelen:

  • STYRBAR Afstandsbediening
  • Trådfri lamp
  • Wemos D1 mini
  • Jumperkabeltjes
  • PLA wit
  • 2 kleine schroefjes

Benodigdheden

  • E27 Fitting + snoer + stekker
  • Soldeerbout + tin
  • Boormachine + 2, 3 en 4mm boortjes
  • 3D printer
  • 2 AAA-batterijen
  • Optioneel: Breadboard

Up-and-running

  • Domoticz
  • MQTT
  • Domoticz MQTT client gateway plugin
  • Node-red

Links

https://m.heise.de/make/artikel/Ikea-Tradfri-Anleitung-fuer-ein-ESP8266-Lampen-Gateway-3598411.html?wt_ref=https%3A%2F%2Fgithub.com%2Fbasilfx%2FTRADFRI-Hacking&wt_t=1643312726194

https://github.com/basilfx/TRADFRI-Hacking/issues/46

Node-red flows en ESPEasy rule-files zijn ook te downloaden op github: https://github.com/sydspost/styrbar-wifi

Stap 1. Lamp aanmelden op afstandsbediening

Eerste stap is het aanmelden van de lamp(en) op de afstandsbediening conform de beschrijving van IKEA. De installatiehandleiding vindt je hier: https://manuals.plus/m/7091affd1c18c18c8c45b14926fabebe46d78e92c5e82876d3e189c3fa6707b7_optim.pdf

Dus open de afstandsbediening middels de schroef aan de achterzijde met een muntje of schroevendraaier. Plaats twee AAA-batterijen. Schroef de Trådfri lamp in een E27 fitting en steek de stekker in een stopcontact. Hoe de afstandsbediening op maximaal 5 centimeter van de lamp en druk gedurende 10 seconden op het pairingknopje aan de achterzijde van de afstandsbediening.

De lamp begint nu te dimmen en feller te worden, wacht de 10 seconden af en de twee devices zijn gepaird. Herhaal dit als je meer lampen wilt koppelen aan dezelfde afstandsbediening. Let op, de gekoppelde lampen kun je niet separaat bedienen, ze gedragen zich als een groep. Je kunt maximaal 10 apparaten koppelen aan dezelfde afstandsbediening.

Stap 2. Afstandsbediening demonteren

Haal de batterijen uit het batterijen-compartiment. In dit batterijen-compartiment zie je twee kleine uitsparingen, met een klein schroevendraaiertje kun je de twee nokjes die in die uitsparing inhaken indrukken. Daarmee komt het boven deksel van de afstandsbediening los. Dit vergt wel enige kracht, forceer echter niet want we willen het deksel kunnen hergebruiken.

Draai daarna de 3 schroefjes los en haal de printplaat uit de behuizing

Stap 3. Proefopstelling maken

Als de printplaat omdraait zie je even onder de + van de batterijhouder 7 soldeerpuntjes met TX, RX, CLK, DIO, RST, GND en VDD.

Deze soldeerpuntjes gaan we o.a. gebruiken om aan te sluiten op een Wemos D1 mini. De GPIO’s van de MGM210L zijn helaas niet op deze wijze aan te sluiten, hiervoor moeten we jumperkabeltjes rechtstreeks op de pootjes van de chip solderen. Dit volgens onderstaande tabel

Wemos D1 MiniStyrbar remote
3v3VCC (Pin 13)
GNDGND (Pin 14)
D1 (GPIO5) PA01 (CLK, PIN 1)
D6 (GPIO12)PA02 (Pin 2)
D2 (GPIO4)PA03 (Pin 3)
D5 (GPIO14)PA04 (Pin 4)

Links uit de datasheet van de MGM210L de pin-beschrijving en rechts een close-up van de chip (excuses voor de wazige foto, maar kon met mijn telefoon geen scherpere foto maken)

Hieronder het wiring-schema

Eerst maak ik een proefopstelling met behulp van een breadboard (jij kan natuurlijk ook gelijk voor het echie gaan en deze stap overslaan). Ik knip één zijde van mail-mail jumperkabeltjes af, strip ze en vertin ze. Daarna soldeer ik ze voorzichtig op de printplaat en chip van de afstandsbediening. Daarna verbindt ik de afstandsbediening conform bovenstaande pinout beschrijving met de Wemos D1 mini middels het breadboard. De Wemos D1 mini heb ik (al eerder) voorzien van header pins.

Rode jumperkabeltjes waren op, dus voor 3.3v naar +strip van breadboard een oranje jumperkabeltje gebruikt

Stap 4. Wemos D1 mini voorzien van ESPEasy mega

Download de ESPEasy Mega software voor ESP8266 van Github: https://github.com/letscontrolit/ESPEasy/releases en unzip de file. In de root van de directory staat het programma “ESP.Easy.Flasher.exe”, start deze op

Toelichting op non-default waarden

LabelWaardeToelichting
COM port(COM3)Kies de com-poort waar jij je Wemos D1 mini aan gekoppeld hebt
FirmwareESP_Easy_mega_20210503_normal_ESP8266_4M1M.binAls jij de laatste versie hebt gedownload dan is de datum in de firmware naam waarschijnlijk afwijkend
Post-flash actionAangevinktZorgt ervoor dat je hostnaam en WiFi instellingen automatisch ingesteld worden op de Wemos (werkt bij mij niet altijd)
Unit-NameikeaZinvolle naam
Number99Uniek nummer voor al je ESP-devices
WiFi SSIDH369ABF8AF9SSID van jou WiFi netwerk
WiFi passwordWachtwoord van jou WiFi netwerk

Klik op “Flash ESP Easy FW” en ESPEasy Mega wordt naar je Wemos geflashed, tijdens het flashen knippert de blauwe led van de Wemos. Na het flashen wordt de Wemos automatisch gereset. Je kunt nu ESP Easy flasher afsluiten. En als de Post-flash actions correct worden uitgevoerd dan is je Wemos daarna bereikbaar via de hostname “ikea”. Bij mij werkte dat niet, en schoot de Wemos in AP-mode. Maak in dat geval met je laptop of telefoon verbinding met dit AccessPoint, te herkennen aan de naam ESP-Easy. En klik op “Tik hier om in te loggen bij het netwerk”. Je browser opent nu automatisch de website van de Wemos. Kies je 2.4Ghz WiFi netwerk, vul je WiFi password in en klik op “Connect”. De Wemos D1 mini maakt nu verbinding met je WiFi netwerk.

Maak nu met de browser op je laptop verbinding met de Wemos D1 mini via de url http://esp-easy.<domeinnaam>, in mijn geval is de hostname http://esp-easy.sydspost.nl/

Stap 5. ESPEasy configureren

Klik op het tabblad “Config” en configureer de Wemos als volgt

En klik op Submit.

Toelichting op non-default waarden

LabelWaardeToelichting
Unit NameikeaZinvolle naam
Unit Number99Unieke waarde voor al je ESPEasy devices
SSIDH369ABF8AF9SSID van je WiFi netwerk, heb je in de vorige stap al geconfigureerd
WPA Key*****Password van je WiFi netwerk, heb je in de vorige stap al geconfigureerd.

We gaan nu de MQTT-settings configureren, klik op het tabblad “Controllers”, en klik op “Add” en configureer MQTT als volgt

En klik op “Submit”

Toelichting op non-default waarden

LabelWaardeToelichting
ProtocolDomoticz MQTT
Controller IP192.168.2.29IP-address van mijn MQTT server, vul hier het IP-address van jou MQTT server in
EnabledAangevinkt

Nu gaan we de hardware configureren, klik op het tabblad “Hardware” en configureer de hardware als volgt

En klik op “Submit”

Toelichting op non-default waarden

LabelWaardeToelichting
GPIO-SDA– None –Maakt D2 (GPIO-4) vrij voor gebruik als input
GPIO-SCL– None –Maakt D1 (GPIO-5) vrij voor gebruik als input

Nu gaan we drie dummy devices aanmaken welke als variabelen worden gebruikt, klik op het tabblad “Devices” en op “Add”, configureer de dummy devices als volgt

Toelichting op non-default waarden

LabelWaardeToelichting
DeviceGeneric – Dummy device
NameOn_offVariable om aan-uit status device op te slaan
Output Data TypeSwitchGedraagt zich als een schakelaar
Values 1On_offZinvolle naam waarde

Klik op “Submit” en daarna op “Add” om volgende dummy device aan te maken

Toelichting op non-default waarden

LabelWaardeToelichting
DeviceGeneric – Dummy device
NameDimVariable om dim-waarde device op te slaan
Output Data TypeDimmerGedraagt zich als een dimmer
Values 1DimZinvolle naam waarde

Klik op “Submit” en daarna op “Add” om volgende dummy device aan te maken

Toelichting op non-default waarden

LabelWaardeToelichting
DeviceGeneric – Dummy device
NameWarmWhiteVariable om warmwhite waarde device op te slaan
Output Data TypeDimmerGedraagt zich als een dimmer
Values 1WarmWhiteZinvolle naam waarde

Klik op “Submit”, de onderstaande dummy devices zijn nu aangemaakt

Vervolgens gaan we vier switches aanmaken die het indrukken van de knoppen van het device synchroniseren naar Domoticz. Dit met de volgende beperking. Er is in EspEasy geen mogelijkheid om de lengte van een “Longpress”, dus het langdurig indrukken van een knop, te meten in milliseconden. Als je dus de brightness (grote zonnetje) op de Styrbar langdurig indrukt, dan zal bijv. de brightness van de lamp tot maximaal gaan. Echter in mijn code heb ik dit vertaald naar 1 graad op 5 graden brightness binnen Domoticz. Dus Domoticz zal hierdoor 20% brightness registreren. Door de bediening van de lampen middels de knoppen kan er dus een synchronisatie issue ontstaan tussen de werkelijkheid en hetgeen wat in Domoticz aan waardes geregistreerd zijn. Dit is in software niet op te lossen. Mocht je hier problemen door ondervinden, er is een workarround: Maximaliseer brightness en/of warmwhite in Domoticz, en automatisch wordt het device gesynchroniseerd.

Maar eerst de vier switches

Toelichting op non-default waarden

LabelWaardeToelichting
DeviceSwitch input – SwitchWaarden 1-op-1 overnemen, wordt in de code naar verwezen
NameSync_on_off
Enabledaangevinkt
GPIOGPIO-5 (D1)
Longpress eventActive on LOW & HIGH (Event= 10 or 11)
Values #1on_off

Klik op “Submit”, vervolgens op “Close” en daarna op “Add” om de volgende switch aan te maken

Toelichting op non-default waarden

LabelWaardeToelichting
DeviceSwitch input – SwitchWaarden 1-op-1 overnemen, wordt in de code naar verwezen
NameSync_dim
Enabledaangevinkt
GPIOGPIO-14 (D5)
Longpress eventActive on LOW & HIGH (Event= 10 or 11)
Values #1Dim

Klik op “Submit”, vervolgens op “Close” en daarna op “Add” om de volgende switch aan te maken

Toelichting op non-default waarden

LabelWaardeToelichting
DeviceSwitch input – SwitchWaarden 1-op-1 overnemen, wordt in de code naar verwezen
NameSync_Warm
Enabledaangevinkt
GPIOGPIO-4 (D2)
Longpress eventActive on LOW & HIGH (Event= 10 or 11)
Values #1WarmWhite

Klik op “Submit”, vervolgens op “Close” en daarna op “Add” om de volgende switch aan te maken

Toelichting op non-default waarden

LabelWaardeToelichting
DeviceSwitch input – SwitchWaarden 1-op-1 overnemen, wordt in de code naar verwezen
NameSync_cold
Enabledaangevinkt
GPIOGPIO-12 (D6)
Longpress eventActive on LOW & HIGH (Event= 10 or 11)
Values #1WarmWhite

Klik op “Submit”, vervolgens op “Close”, de volgende 4 switch-devices zijn nu aangemaakt

Voor het ontvangen van MQTT-berichten vanuit Node-red voegen we nog een Generic – MQTT import device toe. Klik op “Add”

Toelichting op non-default waarden

LabelWaardeToelichting
NameMQTTinWaarden 1-op-1 overnemen, wordt in de code naar verwezen
Enabledaangevinkt
MQTT Topic 1ikea/on_off
MQTT Topic 2ikea/dim
MQTT Topic 3ikea/warmwhite
Values 1on_off
Values 2dim
Values 3warmwhite

Klik op “Submit”, vervolgens op “Close”, de MQTT import helder is aangemaakt

We gaan nu het tabblad “Rules” aanzetten en nog wat randzaken configureren, klik op het tabblad “Tools” en op “Advanced”

Toelichting op non-default waarden

LabelWaardeToelichting
RulesAangevinktStelt het tabblad Rules beschikbaar
Use NTPAangevinktEnable tijdsynchronisatie
NTP hostname192.168.2.29IP-address van je NTP-server, in mijn geval 192.168.2.29 mijn lokale NTP server. Alternatief is time.google.com
Syslog IP192.168.2.29Optioneel: IP-address van je syslog-server (zie ook mijn tutorial over het inrichten van een syslog-server). In mijn geval 192.168.2.29, vervang dit door het ip-address van jou syslog server.
Syslog log levelInfoAlleen informatieve berichten worden naar je syslog server gestuurd, pas dit naar behoefte aan om meer logging te krijgen.

Tussen je tabbladen verschijnt nu het tabblad “Rules”, klik deze aan en kies voor Rules Set 1. Kopieer hierin onderstaande code:

on System#Boot do
  Let,4,0                            // If 0 perform On WiFi#Connected
  longpulse_ms,5,0,6500              // Max brigthness
  TaskValueSet 1,1,0                 // Update dummy device with defaults
  TaskValueSet 2,1,5
  TaskValueSet 3,1,5
  TimerSet,5,10                      // After 10sec device off
endon

on on_off do                         // http event on_off
  if %eventvalue%=0
    pulse,14,0,50                    // Device off
  else
    pulse,5,0,50                     // Device on
  endif
  TaskValueSet 1,1,%eventvalue%
endon

on dim do                            // http event dim
  if %eventvalue%-[Dim#Dim]>0 
    looptimerset_ms,1,1300,%eventvalue%-[Dim#Dim]             // Brighter
    TaskValueSet 2,1,%eventvalue%
  endif
  if [Dim#Dim]-%eventvalue%>=1
    looptimerset_ms,2,1300,[Dim#Dim]-%eventvalue%             // Dim
    TaskValueSet 2,1,%eventvalue%
  endif
endon

on warmwhite do                     // http event warmwhite
  if %eventvalue%-[WarmWhite#WarmWhite]>0 
    looptimerset_ms,3,1000,%eventvalue%-[WarmWhite#WarmWhite] // Warmer
    TaskValueSet 3,1,%eventvalue%
  endif
  if [WarmWhite#WarmWhite]-%eventvalue%>=1
    looptimerset_ms,4,1000,[WarmWhite#WarmWhite]-%eventvalue% // Colder
    TaskValueSet 3,1,%eventvalue%
  endif
endon

on Rules#Timer=1 do                // Brighter
  Longpulse_ms,5,0,1300
endon

on Rules#Timer=2 do                // Dim
  Longpulse_ms,14,0,1300
endon

on Rules#Timer=3 do                // Warmer
  Longpulse_ms,4,0,1000
endon

on Rules#Timer=4 do                // Colder
  Longpulse_ms,12,0,1000
endon

on Rules#Timer=5 do                // Device off
  pulse,14,0,50
endon

Klik op “Save” en kies vervolgens voor “Rules Set 2”. Kopieer hierin onderstaande code (let op, eerste regel dient nog aangepast te worden, zie hieronder):

Let,3,277                    // Change this to your Domoticz IDX

on Sync_on_off#on_off=0 do   // Brighter button pressed on device
    timerSet,6,1
endon

on Sync_dim#Dim=0 do         // Dim button pressed on device
    timerSet,7,1
endon

on Sync_warm#WarmWhite=0 do  // Warm button pressed on device
  if [WarmWhite#WarmWhite]<5
    Let,2,[WarmWhite#WarmWhite]*51+51
    Publish domoticz/in,'{"idx": [Var#3], "command": "setcolbrightnessvalue", "color": {"b":0,"cw":0,"g":0,"m":2,"r":0,"t":[Var#2],"ww":0}, "parse": false}'
    Let,2,[WarmWhite#WarmWhite]+1
    TaskValueSet,3,1,[Var#2]
  endif
endon

on Sync_cold#WarmWhite=0 do  // Cold button pressed on device
  if [WarmWhite#WarmWhite]>1
    Let,2,[WarmWhite#WarmWhite]*51-51
    Publish domoticz/in,'{"idx": [Var#3], "command": "setcolbrightnessvalue", "color": {"b":0,"cw":0,"g":0,"m":2,"r":0,"t":[Var#2],"ww":0}, "parse": false}'
    Let,2,[WarmWhite#WarmWhite]-1
    TaskValueSet,3,1,[Var#2]
  endif
endon

on rules#timer=6 do            // Shortpress:Switch on, longpress:Brighter
  if [Sync_on_off#on_off]=1    // Check if longpress or not
    Publish domoticz/in,'{"idx": [Var#3], "command": "switchlight", "switchcmd": "On", "parse": false}'
    TaskValueSet,1,1,1
  else
    if [Dim#Dim]<5
      Let,1,[Dim#Dim]*20+20
      Publish domoticz/in,'{"idx": [Var#3], "command": "switchlight", "switchcmd": "Set Level", "level": [Var#1] }'
      Let,1,[Dim#Dim]+1
      TaskValueSet,2,1,[Var#1]
    endif
  endif
endon

on rules#timer=7 do           // Shortpress:Switch off, longpress:Dim
  if [Sync_dim#Dim]=1         // Check if longpress or not
    Publish domoticz/in,'{"idx": [Var#3], "command": "switchlight", "switchcmd": "Off", "parse": false}'
    TaskValueSet,1,1,0
  else
    if [Dim#Dim]>1
      Let,1,[Dim#Dim]*20-20
      Publish domoticz/in,'{"idx": [Var#3], "command": "switchlight", "switchcmd": "Set Level", "level": [Var#1] }'
      Let,1,[Dim#Dim]-1
      TaskValueSet,2,1,[Var#1]
    endif
  endif
endon

Verander in de bovenste regel de Domoticz IDX, en mijn geval is die 277, zie ook volgende stap. Vul hier de IDX in van jou Domoticz device. Klik op “Save” en kies vervolgens voor “Rules Set 3”. Kopieer hierin onderstaande code:

on WiFi#Connected do
  if [Var#4]=0
    // Calibrate Domoticz
    Publish domoticz/in,'{"idx": [Var#3], "command": "setcolbrightnessvalue", "color": {"b":0,"cw":0,"g":0,"m":2,"r":0,"t":255,"ww":0}, "parse": false}'
    Publish domoticz/in,'{"idx": [Var#3], "command": "switchlight", "switchcmd": "Set Level", "level": 100 }'
    Publish domoticz/in,'{"idx": [Var#3], "command": "switchlight", "switchcmd": "Off", "parse": false}'
    Let,4,1
  endif
endon

// MQTT Event handling
on MQTTin#on_off do
  event,on_off=[MQTTin#on_off]
endon

on MQTTin#dim do
  event,dim=[MQTTin#dim]
endon

on MQTTin#warmwhite do
  event,warmwhite=[MQTTin#warmwhite]
endon

Klik op “Save”. Je Wemos D1 mini is nu volledig geconfigureerd.

Stap 6. Domoticz device aanmaken

Kies binnen Domoticz voor Instellingen -> Hardware

Als je het hardware-item “Virtuele devices” nog niet aangemaakt hebt, vul dan onderstaande gegevens in, en klik op “Toevoegen”

Klik daarna bij hardware-item “Virtuele devices” op “Maak virtuele sensoren” en geen de lamp(en) een zinvolle naam, kies voor Sensor Type “RGBWW Switch” en klik op “OK”

Kies nu voor Instellingen, Apparaten en sorteer op IDX aflopend, de nieuwe virtuele sensor staat nu bovenaan. Noteer de IDX, die heb je straks nodig voor de Node-red flow in de volgende stap. In mijn geval is dat IDX 277.

Stap 7. Node-red flow aanmaken

Open Node-red en klik op het + teken om een nieuwe flow aan te maken, klik vervolgens op het menu-icoontje en kies voor Flows -> Rename en geef de flow een zinvolle naam, in mijn geval “IKEA Tradfri”.

Kies weder om voor het menu-icoontje en kies voor Import, knip daarin onderstaand json-file en plak deze in het import venster en klik op “Import”

[
    {
        "id": "20495f2c.32411",
        "type": "tab",
        "label": "IKEA Styrbar",
        "disabled": false,
        "info": ""
    },
    {
        "id": "64034f48.6d64a",
        "type": "mqtt in",
        "z": "20495f2c.32411",
        "name": "MQTT in",
        "topic": "domoticz/out",
        "qos": "2",
        "datatype": "json",
        "broker": "b8897d4f.7ebdc",
        "x": 120,
        "y": 220,
        "wires": [
            [
                "589ee6c2.745e18"
            ]
        ]
    },
    {
        "id": "589ee6c2.745e18",
        "type": "switch",
        "z": "20495f2c.32411",
        "name": "Select device",
        "property": "payload.idx",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "277",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 360,
        "y": 220,
        "wires": [
            [
                "b7cb6a7a.6fab58"
            ]
        ]
    },
    {
        "id": "d13fa6e7.157bf8",
        "type": "change",
        "z": "20495f2c.32411",
        "name": "Dim level",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "$ceil(payload.Level/20)",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 720,
        "y": 340,
        "wires": [
            [
                "d4420c37.421be"
            ]
        ]
    },
    {
        "id": "b7cb6a7a.6fab58",
        "type": "switch",
        "z": "20495f2c.32411",
        "name": "On/Off",
        "property": "payload.nvalue",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "0",
                "vt": "str"
            },
            {
                "t": "btwn",
                "v": "1",
                "vt": "num",
                "v2": "15",
                "v2t": "num"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 570,
        "y": 220,
        "wires": [
            [
                "9253da2e.a10a48"
            ],
            [
                "d13fa6e7.157bf8",
                "1e6cc1b0.214a2e",
                "6b12f107.4119b"
            ]
        ]
    },
    {
        "id": "1e6cc1b0.214a2e",
        "type": "change",
        "z": "20495f2c.32411",
        "name": "WarmWhite",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "$ceil(payload.Color.ww/51)",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 730,
        "y": 420,
        "wires": [
            [
                "3a73fbe6.4b9d54"
            ]
        ]
    },
    {
        "id": "74c3c37b.dbf49c",
        "type": "mqtt out",
        "z": "20495f2c.32411",
        "name": "MQTTout",
        "topic": "ikea/on_off",
        "qos": "",
        "retain": "",
        "broker": "b8897d4f.7ebdc",
        "x": 1200,
        "y": 220,
        "wires": []
    },
    {
        "id": "9253da2e.a10a48",
        "type": "function",
        "z": "20495f2c.32411",
        "name": "Off",
        "func": "msg.payload=\"0\";\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 910,
        "y": 200,
        "wires": [
            [
                "74c3c37b.dbf49c"
            ]
        ]
    },
    {
        "id": "6b12f107.4119b",
        "type": "function",
        "z": "20495f2c.32411",
        "name": "On",
        "func": "msg.payload=\"1\";\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 910,
        "y": 260,
        "wires": [
            [
                "74c3c37b.dbf49c"
            ]
        ]
    },
    {
        "id": "d4420c37.421be",
        "type": "mqtt out",
        "z": "20495f2c.32411",
        "name": "MQTTout",
        "topic": "ikea/dim",
        "qos": "",
        "retain": "",
        "broker": "b8897d4f.7ebdc",
        "x": 1200,
        "y": 340,
        "wires": []
    },
    {
        "id": "3a73fbe6.4b9d54",
        "type": "mqtt out",
        "z": "20495f2c.32411",
        "name": "MQTTout",
        "topic": "ikea/warmwhite",
        "qos": "",
        "retain": "",
        "broker": "b8897d4f.7ebdc",
        "x": 1200,
        "y": 420,
        "wires": []
    },
    {
        "id": "b8897d4f.7ebdc",
        "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": ""
    }
]

De flow ziet er dan als volgt uit

Toelichting per node

NodeToelichting
MQTT inConnectie naar je MQTT-broker. Voeg eventueel je MQTT-server toe middels het “Pennetje” of hergebruik een bestaande server door uit het pull-down te kiezen. En klik op “Done”
Select deviceFiltert de MQTT-berichten voor jou ikea device uit. Voer hier het IDX nummer uit de vorige stap in, in mijn geval was dit 277. Vervang dit door jou IDX. En klik op “Done”
On/OffRouteert de flow op basis van aan- en uit commando van het device
Dim LevelHaalt het gewenste Dim level uit het Domoticz json-bericht en rekent dit om naar een waarde tussen de 1 en 5
WarmWhiteHaalt het gewenste WarmWhite niveau uit het Domoticz json-bericht en rekent dit om naar een waarde tussen de 1 en 5
Off – MQTToutStuurt MQTT-bericht met payload waarde 0 (uit) naar ikea/on_off topic van ESPEasy. Vervang in de MQTTout node in de Server settings de FQDN hostname van jou ESPEasy device, in mijn geval ikea.sydspost.nl.
On – MQTToutStuurt MQTT-bericht met payload waarde 1 (aan) naar ikea/on_off topic van ESPEasy. Vervang in de MQTTout node in de Server settings de FQDN hostname van jou ESPEasy device, in mijn geval ikea.sydspost.nl.
Dim Level – MQTToutStuurt MQTT-bericht met payload waarde tussen 1 en 5 naar ikea/dim topic van ESPEasy. Vervang in de MQTTout node in de Server settings de FQDN hostname van jou ESPEasy device, in mijn geval ikea.sydspost.nl. .
Warmwhite – MQTToutStuurt MQTT-bericht met payload waarde tussen 1 en 5 naar ikea/warmwhite topic van ESPEasy. Vervang in de MQTTout node in de Server settings de FQDN hostname van jou ESPEasy device, in mijn geval ikea.sydspost.nl.

Deploy de flow door op de “Deploy” knop te klikken, de flow is nu actief.

Stap 8. Test werking

Voer binnen Domoticz de volgende testen uit:

  • Zet lamp aan
  • Zet lamp uit
  • Laat lamp feller branden, lamp zou automatisch aan moeten gaan
  • Dim lamp
  • Stel warmere kleur in
  • Stel koudere kleur in

Voer op de Styrbar afstandsbediening de volgende testen uit

  • Druk kort (korter dan 500ms) op de “Brighter” (groot zonnetje) button, de lamp gaat nu aan en de status in Domoticz veranderd in “Aan”
  • Druk langer dan 500ms op “Brighter” (groot zonnetje) button, de lamp gaat nu feller branden en in Domoticz stijgt de Dim waarde met 20%
  • Druk langer dan 500ms op “Dim” (klein zonnetje) button, de lamp gaat nu minder fel branden en in Domoticz daalt de Dim waarde met 20%
  • Druk langer dan 500ms op “<” button, de lamp gaat nu minder warm branden en in Domoticz daalt de WarmWhite waarde met 20%
  • Druk langer dan 500ms op “>” button, de lamp gaat nu warmer branden en in Domoticz stijgt de WarmWhite waarde met 20%
  • Druk kort (korter dan 500ms) op de “Dim” (klein zonnetje) button, de lamp gaat nu uit en de status in Domoticz veranderd in “Uit”
  • Reboot Wemos, na reboot kalibreert Wemos de dim- en warmwhite stand zowel op het device als in Domoticz op maximaal en zet daarna de lampen uit

Stap 9. 3D-print behuizing voor Wemos D1 mini

De huidige behuizing van de afstandsbediening biedt niet genoeg ruimte voor de Wemos D1 mini. Op zich zou het batterijhouder hiervoor ruimte bieden, maar de bevestigingsnokjes van de bovenkant van de afstandsbediening lopen helaas doorheen.

Heb een 3D ontwerp gemaakt van een sokkel die achter de meegeleverde metalen bevestigingsmal valt en ruimte biedt voor de Wemos D1 mini. Op deze wijze blijft de afstandsbediening grotendeels intact. De jumperkabeltjes kunnen via een gaatje in de batterijenhouder, en een extra gaatje in de metalen bevestigingsmal doorgevoerd worden naar de Wemos. De Wemos klemt tussen twee geleiders.

Het ontwerp en de STL file vind je hier

FileDownload
Sokkel Styrbar afstandsbediening-Body.stlhttps://drive.google.com/file/d/1TTW2Fftz0ttolTXOHRdb6pTMyL6ocyY-/view?usp=sharing
Sokkel Styrbar afstandsbediening.FCStdhttps://drive.google.com/file/d/1TTW2Fftz0ttolTXOHRdb6pTMyL6ocyY-/view?usp=sharing

Stap 10. Montage

Haal de 6 jumperkabeltjes van de Styrbar los van het breadboard en knip van de andere zijde van het jumperkabeltje ook het stekkertje. Strip en vertin de afgeknipte zijde van de jumperkabeltjes met uitzondering van de zwarte GND draad. De metalen wandhouder van de Styrbar gaan we hergebruiken. Boor hierin met een 3mm staalboor twee kleine gaatjes op 10mm van de randen links boven en rechts beneden.

Pak de basis van de Styrbar (met de batterijhouder) erbij, en boor met een 4mm staalboortje een 3 tal gaatjes voor doorvoer van de jumperkabels in de batterijhouder (boor ze nog iets dichter tegen de aanzet dan op bijgaande foto te zien is (die van mij ziet er intussen uit als een gatenkaas ;-), want anders past de printplaat niet meer goed). Steek vervolgens de vcc (rood) en gnd (zwart) kabeltjes door het linker gaatje, en de overige 4 kabeltjes door de rechter gaatjes.

Schroef vervolgens de printplaat vast op de basis met de drie schroefjes.

Steek vervolgens alle kabeltjes door het grootste gat in de metalen wandplaat, en laat de metalen printplaat vastklikken op de basis.

Note: De klep van de batterijhouder gebruiken we niet, de batterijhouder gebruiken we voor de kabeldoorvoer naar de sokkel. Plaats geen batterijen in de batterijhouder, de Styrbar wordt gevoed vanuit de 3v3 aansluiting van de Wemos. Zowel batterijen plaatsen als voeding vanuit de Wemos kan brandgevaar opleveren !

Knip van een USB-kabel de stekker die je normaal in een apparaat stopt, maar behoud de USB-A stekker. Strip de kabel, en de draadjes in de kabel. Knip de shielding, witte en groen draden af. Vertin de rode draad, de zwarte niet, die wordt straks samengevoegd met de zwarte GND draad van de Styrbar printplaat.

USB pinout, wiring and how it works!

Voer de USB kabel door het gaatje in de 3D print basis van de Wemos D1 mini.

Soldeer nu de draadjes op de Wemos D1 mini volgens onderstaande pinout

Wemos D1 MiniStyrbar afstandsbedieningUSB kabel
5vRode draad (5v)
3v3VCC (Pin 13)
GNDGND (Pin 14)Zwarte draad (GND)
D1 (GPIO5) PA01 (CLK, PIN 1)
D6 (GPIO12)PA02 (Pin 2)
D2 (GPIO4)PA03 (Pin 3)
D5 (GPIO14)PA04 (Pin 4)

En druk de Wemos D1 mini tussen de houders van de 3D sokkel die je in de vorige stap hebt geprint. Maak m.b.v. een tie-wrap een trek-beveiliging op de USB kabel

Note: Als je van plan bent de sokkel op een wand oid te monteren, dan is het nu de tijd om de sokkel op de wand vast te schroeven m.b.v. de twee gaatjes in de sokkel. Zelf heb ik met behulp van de meegeleverde dubbelzijdige sticker de sokkel op de kabelgoot bij mijn werkplek gemonteerd.

Schroef nu de metalen plaat vast op de sokkel met twee kleine schroefjes, druk de bovenkant van de Styrbar afstandsbediening terug op de onderkant. Hiervoor moet je behoorlijke druk uitoefenen, forceer dit niet waardoor de weerhaakjes afbreken. En laat als kers op de taart de onderkant vastklikken op de metalen plaat waarbij de kabeltjes in de ruimte van de batterijhouder vallen.

Noot: Mocht je in de toekomst vervangende of nieuwe lampen op de afstandsbediening willen aansluiten, klik dan de afstandsbediening los van de metalen plaat. Je kunt nu bij het pairingsknopje komen.

Sluit nu de Styrbar afstandsbediening aan op een vrije USB poort of oude telefoonoplader. En klaar is je project.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.