Je kunt Apple-apparaten vervloeken of verafgoden, maar wat Apple heel goed heeft gedaan, is de integratie van SmartHome-componenten in hun besturingssystemen. iOs biedt inherent de mogelijkheid om HomeKit-apparaten (zo worden SmartHome-componenten in het Apple-universum genoemd) via iOs te besturen.
Ook praktisch is dat je deze HomeKit-apparaten kunt simuleren met NodeRed (en de bijbehorende node). Dit betekent dat u de actuatoren van uw SmartHome vanaf uw iOS-apparaat kunt bedienen en zelfs de sensorgegevens van de SmartHome kunt weergeven (bijvoorbeeld temperatuur, vochtigheid).
Hoe dit werkt en waar u op moet letten, leest u in het volgende artikel.
Veiligheidsinstructies
Ik weet dat de volgende opmerkingen altijd een beetje vervelend zijn en onnodig lijken. Helaas hebben veel mensen die "beter" wisten door onvoorzichtigheid ogen, vingers of andere dingen verloren of zichzelf verwond. Gegevensverlies is in vergelijking bijna te verwaarlozen, maar zelfs dit kan erg vervelend zijn. Neem daarom vijf minuten de tijd om de veiligheidsinstructies te lezen. Omdat zelfs het coolste project geen blessure of andere problemen waard is.
https://www.nerdiy.de/sicherheitshinweise/
Affiliate links / reclame links
De hier vermelde links naar online winkels zijn zogenaamde affiliate-links. Als u op zo'n affiliate-link klikt en via deze link een aankoop doet, ontvangt Nerdiy.de een commissie van de betreffende onlineshop of aanbieder. De prijs verandert voor jou niet. Als u via deze links uw aankopen doet, steunt u Nerdiy.de om in de toekomst andere nuttige projecten aan te kunnen bieden. 🙂
Eisen
Handige artikelen:
Voordat je aan dit artikel begint, moet je de RaspberryPi zo hebben voorbereid dat deze via het netwerk bereikbaar en via SSH te bedienen is. NodeRed moet ook worden geïnstalleerd.
In de volgende drie artikelen wordt beschreven wat er moet gebeuren om de RaspberryPi voor te bereiden:
RaspberryPi – setup voor nerds!
RaspberryPi – De eerste configuratie!
RaspberryPi – Bedien de RaspberryPi via SSH
NodeRed – NodeRed installeren op de RaspberryPi
NodeRed – Installeer nieuwe knooppunten
Vereist gereedschap:
-Nee-
Benodigd materiaal:
In de volgende lijst vindt u alle onderdelen die u nodig heeft om dit artikel te implementeren.
Log in op de configuratie-interface van NodeRed
Voordat u uw NodeRed-configuratie kunt bewerken, moet u - indien geactiveerd - eerst inloggen op de NodeRed-configuratie-interface.
Installatie van de vereiste knooppunten
Damit Ihr Homekit Geräte simulieren könnt muss natürlich erstmal die passende Node installiert sein. Installiert dazu die Node „node-red-contrib-homekit“. Wie Ihr Nodes installiert ist im Artikel NodeRed – Installeer nieuwe knooppunten uitgelegd.
node-red-contrib-homekit
Lees bewegingsmelders
Ein kleiner Beispiel-Node-Code um über den Status eines Bewegungsmelders informiert zu werden könnte so aussehen. Zur Simulation des Bewegungsmelders sind die „Inject“-Nodes „true“ und „false“ eingebaut, welche ein Bewegungsmelder-ist-betätigt-Signal(true) und ein Bewegungsmelder-ist-nicht-betätigt-Signal(false) simulieren. An diese Eingänge könnt Ihr dann einen Bewegunsmelder „anschließen“, dessen Signale dann über HomeKit angezeigt werden.
Außerdem ist dabei noch eine Inject-Node mit dem Namen „requestOptions“. Bei einem klick darauf, werden Euch in der Debug-Leiste alle Eigenschaften dieses HomeKit-Devices angezeigt.
[{"id '9998cf7e.5cf8e', type 'homekit-service', z '5dcffcbc.bae6c4', 'accessoire', a10e8039.50d9c, 'name 'Bewegingsmelder, slecht' , "serviceName":Bewegingssensor","x":740,"y":820,"draden":[["9dcd9414.118448"]]},{"id":18fa3044.4d02d", "type" : "json", "z":5dcffcbc.bae6c4", "name":", "property":payload", "action":", "pretty":false,"x":550," y ":820,"draden":[["9998cf7e.5cf8e"]]},{"id ': 2fea5d63.ae8852 '' type ' template '' z '' 5dcffcbc.bae6c4 '' name phore '', ''field '' payload '', fieldType '' msg '' format '' stuur '' syntax '' snor '' '' template '' 'Beweging gedetecteerd':{{ payload }}}", "output" str "x":400,"y":820,"wires":[["18fa3044.4d02d"]]},{"id":c568f55f.d8e828 " ,"type"inject", "z"5dcffcbc.bae6c4", "name"", "topic"", " repeat":", "crontab" "once":false,"onceDelay":0.1,"x":190,"y":800,"draden":[["2fea5d63.ae8852"] ] },{"id '9dcd9414.118448', type 'debug', z '5dcffcbc.bae6c4', 'name', 'actief':true,'tosidebar':true , "console":false,"tostatus":false,"complete:true","x":930,"y":820,"wires":[]},{"id:46dbd92c.8000e8 " ,"type"inject", "z"5dcffcbc.bae6c4", "name"", "topic"", "payload" "false", " repeat":", "crontab": "eenmaal":false,"eenmaalVertraging":0.1,"x":190,"y":840,"draden":[["2fea5d63.ae8852"] ] },{"id '39aee99f.957496', type 'comment', z '5dcffcbc.bae6c4', name 'Bewegingsmelder als gebeurtenis', 'info', "x ":220,"y":740,"draden":[]},{"id":769255e1.22b44c", "type":json", "z":5dcffcbc.bae6c4", naam" :"","property":payload","action":","pretty":false,"x":550,"y":860,"draden":[["9998cf7e.5cf8e" ]] },{"id 'fdd0e0c1.c5117', type 'template', z '5dcffcbc.bae6c4', name 'options', 'field 'payload', fieldType" :"msg", "format": stuur", syntax "snor", "template": {"foo":bar"}", "output" str, "x" :400 ,"y":860,"draden":[["769255e1.22b44c"]]},{"id '40c3c829.e4f308', type 'inject', 'z':5dcffcbc. bae6c4" ,"name"requestOptions", "topic" ", "payload" "true", "payloadType ", bool", "repeat" , "crontab" , "once ": false,"onceDelay":0.1,"x":220,"y":900,"wires":[["fdd0e0c1.c5117"]]},{"id 'a10e8039.50d9c","type ": "homekit-accessoire", "z" "accessoireName": "Sensoren", "pinCode" 111-11-111 "port" "32304", "manufacturer": "Nerdiy. de" ,"model": standaardmodel", "serialNo": standaard serienummer", "accessoiretype: 10"}]
Damit dieser NodeCode funktioniert müsst Ihr noch das HomeKit-accessory und den Service konfigurieren. Klickt dazu doppelt auf die Node „BewegungsmelderBad“. Dadurch öffnet sich das folgende Menü.
Habt Ihr all diese Daten eingetragen klickt Ihr auf „Add“ und auf „Done“ um diese Einstellung zu übernehmen. Im letzten Abschnitt dieses Artikels wird erklärt wie Ihr die HomeKit-Devices dann in iOS anmeldet.
Verwarmingsthermostaten aanpassen
Hier ziet u een voorbeeld van een knooppuntcode over hoe u bijvoorbeeld de informatie van een verwarmingsthermostaat kunt doorsturen naar een gesimuleerde HomeKit-thermostaat. Er zijn (in dit voorbeeld) twee eigenschappen die op uw iOS-apparaat worden weergegeven. Eén keer de ingestelde doeltemperatuur en de huidige werkelijke temperatuur. Beide waarden kunnen via de inject-nodes worden gesimuleerd. Op dit punt zou u de injectieknooppunten moeten vervangen door de waarden van uw echte verwarmingsthermostaat.
Aan de andere kant worden de waarden die u via de iOS HomeKit-app naar het gesimuleerde HomeKit-apparaat verzendt, via het debug-knooppunt uitgevoerd. Op dit punt kunnen de in te stellen waarden worden doorgestuurd naar de verwarmingsthermostaat.
Außerdem ist dabei auch wieder eine Inject-Node mit dem Namen „requestOptions“ vorhanden. Bei einem klick darauf, werden Euch in der Debug-Leiste alle Eigenschaften dieses HomeKit-Devices angezeigt.
[{"id":b3001d65.5105f", type":comment", z":5dcffcbc.bae6c4", "name": Verwarmingsthermostaten regelen, "info":, "x" : 220,"y":1300,"draden":[]},{"id 'b12f3ad3.c1ef68', 'type 'homekit-service', z '5dcffcbc.bae6c4', 'accessoire " :"39b8cf37.35a27","name "Verwarming", serviceName "Thermostaat", "x":740,"y":1480,"draden":[["3cb1fd5c.fd60c2"]]} , {"id '8d9e79f3.0de618', type 'json', z '5dcffcbc.bae6c4', 'name', 'property', 'payload', 'action' " ,"pretty":false,"x":590,"y":1480,"draden":[["b12f3ad3.c1ef68"]]},{"id":7e9e340b.320a5c", "type": " template", "z":5dcffcbc.bae6c4", "name": instelpunttemperatuur, "field": payload, "fieldType: msg", format: stuur, "syntaxis" :"moustache", "template": {"Doeltemperatuur": {{payload}}}", "output":str", "x":420,"y":1460,"draden":[[" 8d9e79f3.0de618"]]},{"id '3cb1fd5c.fd60c2', 'type': wijzigen ', z':5dcffcbc.bae6c4 ', naam ', 'regels':[{ "t":set", "p":payload","pt"msg", "to":payload.TargetTemperature", "tot":msg"}],"action":" ,"property":,"from":1480,"draden":[["4ca89ee5.5cd2d "]]},{"id '4ca89ee5.5cd2d', type 'debug', z '5dcffcbc.bae6c4', naam ', 'actief':true,'naarzijbalk' :true,"console":false,"tostatus":false,"complete:true","x":1130,"y":1480,"draden":[]},{"id":129c9403 .2c229c", "type":template, "z":5dcffcbc.bae6c4", "name":Is-Temp", "field":payload", "fieldType":msg", format zzlebars","syntax: snor","template":{"CurrentTemperature":{{payload}}}", "output":str","x":420,"y": 1500,"draden":[["8d9e79f3.0de618"]]},{"id":182c1f88.f4e04", "type": injecteren", "z":5dcffcbc.bae6c4", "naam": "","topic":","payload":30";payloadType"num",repeat":", "crontab"": "once":false,"onceDelay": 0.1,"x":230,"y":1600,"draden":[["129c9403.2c229c"]]},{"id '93979569.ae6e68', type 'injecteren', 'bijv. "5dcffcbc.bae6c4", "name" , "topic" , "payload" , "20", "payloadType ", num", "repeat" , "crontab " ","once":false,"onceDelay":0.1,"x":230,"y":1560,"wires":[["129c9403.2c229c"]]},{"id":f2fdf87d.6e9be8 ","type"inject","z"5dcffcbc.bae6c4"name""topic""topic""payload""10""payloadType""num", "repeat":", "crontab": "eenmaal":false,"eenmaalVertraging":0.1,"x":230,"y":1520,"draden":[["129c9403.2c229c"] ]},{"id 'ccdae584.bd2dd8', 'type 'inject', 'z '5dcffcbc.bae6c4 ', 'name', 'topic', 'payload': "30", "payloadType":num", "repeat":", "crontab" ", "eenmaal":false,"eenmaalVertraging":0.1,"x":230,"y":1440, "draden":[["7e9e340b.320a5c"]]},{"id '820780bd.32628', 'type 'inject', 'z '5dcffcbc.bae6c4 ', 'name' ,"topic" ", "payload":20", "payloadType":num", "repeat":", "crontab" ", "once":false,"onceDelay":0.1, "x":230,"y":1400,"draden":[["7e9e340b.320a5c"]]},{"id 'fafe7787.64f6c8', type 'injecteren', 'z': "5dcffcbc.bae6c4", "name":", "topic":", "payload":10", "payloadType":num", "repeat":", "crontab": "once":false,"onceDelay":0.1,"x":230,"y":1360,"wires":[["7e9e340b.320a5c"]]},{"id":78c76a0a.b7b7f4", "type"json", "z":5dcffcbc.bae6c4", "name"", "property":payload, "action":", "pretty":false,"x": 590,"y":1620,"draden":[["b12f3ad3.c1ef68"]]},{"id 'a6b574ca.dc1c98', type 'template', z '5dcffcbc.bae6c4 ","name"options", field "payload", fieldType "msg", format "stuur", syntax "snor", template ", "foo static:bar"}","output:str","x":440,"y":1620,"draden":[["78c76a0a.b7b7f4"]]},{"id":63397e19 .508ff", type "inject", z "5dcffcbc.bae6c4", naam "requestOptions", topic ", "payload" "true", "payloadType" bool","repeat":", "crontab" ", "once":false,"onceDelay":0.1,"x":260,"y":1660,"draden":[["a6b574ca. dc1c98"]]},{"id '39b8cf37.35a27', type 'homekit-accessoire', 'z': ', 'accessoireName', 'Verwarming', 'pinCode': 111-11 -111", "port":32305", "manufacturer":Nerdiy.de", "model": "Standaardmodel", "serialNo: "Standaard serienummer", "accessoireType: 9"}]
Wie beim Bewegungsmelder müsst Ihr auch bei diesem NodeCode das HomeKit-Accessory und den Service konfigurieren. Klickt dazu doppelt auf die Node „Heizung“. Dadurch öffnet sich wieder das folgende Menü.
Temperatuur- en vochtigheidssensoren uitlezen
Dieses NodeCode-Beispiel zeigt wie man einen Luftfeuchtigkeits- und Temperatursensor mit der HomeKit-Node simuliert. Die HomeKit-Node nutzt dabei als „Datenquelle“ die Daten von „openweathermap“. Das heißt es werden die aktuellen Temperaturen des in der openweathermap-Node eingestellten Ortes angezeigt.
Wie bei allen anderen Beispielen ist dabei auch wieder eine Inject-Node mit dem Namen „requestOptions“ vorhanden. Bei einem klick darauf, werden Euch in der Debug-Leiste alle Eigenschaften dieses HomeKit-Devices angezeigt.
[{"id 'cc6c7b40.da9078', type 'homekit-service', z '5dcffcbc.bae6c4', 'accessoire', bd29e027.b0d63, 'name', 'Temperatuur', "serviceName":TemperatuurSensor","x":1130,"y":1100,"draden":[["7a89e1f4.1dc75"]]},{"id":3b22973d.547ac8", "type": "homekit-service", "z"5dcffcbc.bae6c4", "accessoire":2dc17d94.90bc32", "name":Vochtigheid", serviceName: "VochtigheidSensor", "x":1140,"y ":1180,"wires":[["195b33c9.57261c"]]},{"id '7a89e1f4.1dc75', type 'debug', z '5dcffcbc.bae6c4', 'naam " "actief":true,"naarzijbalk":true,"console":false,"naarstatus":false,"complete":true","x":1290,"y":1100," draden":[]},{"id '1c8b89c4.9270b6', type 'json', z '5dcffcbc.bae6c4',name ', 'property ', payload' ,"action":","pretty":false,"x":970,"y":1120,"wires":[["cc6c7b40.da9078"]]},{"id":a3736df8.87e9c ","type"json","z"5dcffcbc.bae6c4"name" "name" "property" "payload" "action" "pretty":false,"x ":970,"y":1160,"draden":[["3b22973d.547ac8"]]},{"id '400e1113.e2f29', type 'template', z '5dcffcbc .bae6c4", "name" ", "field" , payload ", fieldType " msg ", format "stuur", syntax "snor", template ":" CurrentRelativeHumidity:{{payload}}"}","output:str","x":820,"y":1160,"wires":[["a3736df8.87e9c"]]},{" id 'bf9000c2.be6a8', type 'template', z '5dcffcbc.bae6c4', 'name', 'field', payload,'fieldType', msg", "format": stuur", "syntax": snor", "template":{"CurrentTemperature":{{payload}}"}", "output":str", "x":820, "y":1120,"wires":[["1c8b89c4.9270b6"]]},{"id '195b33c9.57261c', type 'debug', z '5dcffcbc.bae6c4', "name": "actief":true,"naarsidebar":true,"console":false,"tostatus":false,"complete":true","x":1290,"y":1180 ,"draden":[]},{"id 'a64825b.273ccd8', 'type': wijzigen ', z': 5dcffcbc.bae6c4 ', 'name ' converteren ', 'regels': [{"t":set", "p":payload", "pt":msg", "to":data.main.temp-273.15", "tot":jsonata"}], "action": "property": "from": "to": "reg":false,"x":620,"y":1120,"draden": [["bf9000c2.be6a8"]]},{"id 'fcbc03d9.26567', 'type 'json', z '5dcffcbc.bae6c4 ', naam ', 'eigendom' :"payload", "action":", "mooi":false,"x":410,"y":1140,"draden":[["a64825b.273ccd8", "553238c1.76cb68"]]} ,{"id '9dbc96a3.21dcf8', type 'inject', 'z':5dcffcbc.bae6c4 ', name', 'topic', 'payload', 'payload' ,"payloadType":date","repeat" "crontab" "once":false,"onceDelay":0.1,"x":200,"y":1080,"draden" :[["2d6b39b3.dc72f6"]]},{"id '553238c1.76cb68', 'type 'wijzigen',z '5dcffcbc.bae6c4', 'name 'converteren', ' regels":[{"t"set"p"payload"pt"msg""to""data.main.humidity""tot"jsonata"}] ,"action":", "property" , "from":, "to":, "reg":false,"x":620,"y":1160,"draden" :[["400e1113.e2f29"]]},{"id '2d6b39b3.dc72f6', 'type': openweerkaart ', z '5dcffcbc.bae6c4 ', 'name', 'wtype vacature”, lon”,”lat”,”city”:Bochum”, “country”:Duitsland”, “taal”:400, "y":1080,"draden":[["fcbc03d9.26567"]]},{"id '66e6d0.bca8793', type 'comment', z '5dcffcbc.bae6c4", "name 'Klimaatsensoren lezen', 'info': 'x':210,'y':1000,'draden':[]},{'id ':648f2c18.d730f4', 'type " :"json", "z":5dcffcbc.bae6c4", "name":", "property":payload", "action":", "pretty":false,"x":970, " y":1200,"draden":[["3b22973d.547ac8"]]},{"id":f5f3fc95.8afe2", "type"template", "z":5dcffcbc.bae6c4", " name 'options', field 'payload', fieldType ' msg ', format 'stuur', 'syntax 'snor', 'template': 'foo': " bar"}","output:str","x":820,"y":1200,"draden":[["648f2c18.d730f4"]]},{"id:4a9292b6.a69abc " ,"type"inject", "z"5dcffcbc.bae6c4", "name"requestOptions", "topic" ", "payload" "true", "payloadType" "bool" , "repeat":", "crontab" , "once":false,"onceDelay":0.1,"x":640,"y":1200,"wires":[["f5f3fc95.8afe2" ] ]},{"id '31aa55d1.30fa6a', type 'json', z '5dcffcbc.bae6c4', 'name', 'property', 'payload', 'action' " :"","mooi":false,"x":970,"y":1080,"draden":[["cc6c7b40.da9078"]]},{"id":d0d837e2.311f88", type phoretemplate","z"5dcffcbc.bae6c4",name"options",field"payload",fieldType"msg",format"stuur", syntax eerder: moustache, template: {"foo: bar"}", output: str", x":820,"y":1080,"draden":[[" 31aa55d1 .30fa6a"]]},{"id 'c13c8c2f.1991c', 'type': injecteren ', z ' 5dcffcbc.bae6c4 ',name 'requestOptions',topic ' " ,"payload":true", "payloadType":bool", "repeat":", "crontab" ", "once":false,"onceDelay":0.1,"x":640, " y":1080,"draden":[["d0d837e2.311f88"]]},{"id 'bd29e027.b0d63', type 'homekit-accessoire', z ': ',' accessoireName "Temperatuur", "pinCode":111-11-111", "port":32300", "manufacturer": "Nerdiy.de", "model": "Standaardmodel", "serialNo": " Standaard serienummer", "accessoireType":10"},{"id":2dc17d94.90bc32", "type": homekit-accessoire", "z": "accessoireName: Vochtigheid" , "pinCode":111-11-111", "port":32301", "manufacturer":Nerdiy.de", "model": "Standaardmodel", "serialNo": "Standaard serienummer", "accessoireType:"10"}]
Wie bei den vorherigen Beispielen müsst Ihr auch bei diesem NodeCode das HomeKit-Accessory und den Service konfigurieren. Klickt dazu doppelt auf die Node „Luftfeuchtigkeit“ bzw. „Temperatur“. Dadurch öffnet sich wieder das folgende Menü.
Controle (Tasmota) lampen
Hier is een voorbeeld van hoe je een lamp met de Tasmota-firmware aan de HomeKit-node kunt koppelen, zodat alle wijzigingen van alle bronnen altijd naar alle ingangsopties worden verzonden. Hierdoor is het mogelijk om de kleur, helderheid of algemene aan/uit instellingen in iOS of in het dashboard of op een andere manier in te stellen en tegelijkertijd wordt ook de huidige status doorgegeven aan alle instelmogelijkheden.
Om deze NodeCode voor u te laten werken, heeft u ook de Sonoff-node nodig en moet u deze dienovereenkomstig configureren (geschikt voor uw Sonoff-apparaat).
[{"id":"b200ae52.6003d","type":"comment","z":"5dcffcbc.bae6c4","name":"Tasmota RGB-LED-Steuerung","info":"","x":220,"y":80,"wires":[]},{"id":"a42e8481.c58778","type":"ui_switch","z":"5dcffcbc.bae6c4","name":"","label":"MiniLichterkette","group":"ca676059.8e72e","order":12,"width":0,"height":0,"passthru":false,"decouple":"true","topic":"","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":820,"y":220,"wires":[["fd8991ee.f7fd1"]]},{"id":"73405495.f1e9cc","type":"homekit-service","z":"5dcffcbc.bae6c4","accessory":"753c6646.f99048","name":"MiniLichterkette","serviceName":"Lightbulb","x":200,"y":160,"wires":[["94a1b366.5c039","9b6599ac.52e878"]]},{"id":"94a1b366.5c039","type":"change","z":"5dcffcbc.bae6c4","name":"convert","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.On","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":160,"wires":[["fd8991ee.f7fd1"]]},{"id":"9e961d23.1c88b","type":"ui_colour_picker","z":"5dcffcbc.bae6c4","name":"","label":"MiniLichterkette","group":"ca676059.8e72e","format":"hsl","outformat":"object","showSwatch":true,"showPicker":true,"showValue":true,"showHue":true,"showAlpha":true,"showLightness":true,"dynOutput":"false","order":25,"width":0,"height":0,"passthru":false,"topic":"","x":200,"y":520,"wires":[["be8d6249.9bab5"]]},{"id":"6c5cc00.0eed54","type":"ui_slider","z":"5dcffcbc.bae6c4","name":"","label":"MiniLichterkette","group":"ca676059.8e72e","order":0,"width":0,"height":0,"passthru":false,"topic":"","min":0,"max":"100","step":1,"x":200,"y":380,"wires":[["2dabaae2.c1e016"]]},{"id":"20784c5.660aab4","type":"template","z":"5dcffcbc.bae6c4","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{"Brightness":"{{payload.l}}","Hue":"{{payload.h}}", "Saturation":"{{payload.s}}", "On": true}","output":"str","x":580,"y":520,"wires":[["e8458a57.465e58"]]},{"id":"e8458a57.465e58","type":"json","z":"5dcffcbc.bae6c4","name":"","property":"payload","action":"","pretty":false,"x":730,"y":520,"wires":[["73405495.f1e9cc"]]},{"id":"3bd94571.32107a","type":"mqtt out","z":"5dcffcbc.bae6c4","name":"Set Hue","topic":"cmnd/MiniLichterkette/HsbColor1","qos":"","retain":"","broker":"aa8ea139.37c07","x":800,"y":280,"wires":[]},{"id":"c8c9c8e5.fccc08","type":"mqtt out","z":"5dcffcbc.bae6c4","name":"Set Saturation","topic":"cmnd/MiniLichterkette/HsbColor2","qos":"","retain":"","broker":"aa8ea139.37c07","x":820,"y":400,"wires":[]},{"id":"be920697.1bc058","type":"mqtt out","z":"5dcffcbc.bae6c4","name":"Set Brightness","topic":"cmnd/MiniLichterkette/HsbColor3","qos":"","retain":"","broker":"aa8ea139.37c07","x":820,"y":340,"wires":[]},{"id":"9b6599ac.52e878","type":"function","z":"5dcffcbc.bae6c4","name":"Split Color Values","func":"if (msg.payload.Hue!==undefined) { msg.payload=msg.payload.Hue; return [ msg, null, null ]; } if (msg.payload.Brightness!==undefined) { msg.payload=msg.payload.Brightness; return [null, msg, null ]; } if (msg.payload.Saturation!==undefined) { msg.payload=msg.payload.Saturation; return [ null, null, msg ]; }","outputs":3,"noerr":0,"x":470,"y":220,"wires":[["3bd94571.32107a"],["be920697.1bc058"],["c8c9c8e5.fccc08"]]},{"id":"15bdce9b.ac1781","type":"mqtt in","z":"5dcffcbc.bae6c4","name":"dimmerState","topic":"stat/MiniLichterkette/RESULT","qos":"2","broker":"aa8ea139.37c07","x":190,"y":440,"wires":[["441ae395.5fbfcc"]]},{"id":"441ae395.5fbfcc","type":"json","z":"5dcffcbc.bae6c4","name":"","property":"payload","action":"","pretty":false,"x":350,"y":440,"wires":[["5918dc5d.eee394"]]},{"id":"5918dc5d.eee394","type":"change","z":"5dcffcbc.bae6c4","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.Dimmer","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":520,"y":440,"wires":[["6c5cc00.0eed54"]]},{"id":"96cbb503.343228","type":"json","z":"5dcffcbc.bae6c4","name":"","property":"payload","action":"","pretty":false,"x":530,"y":380,"wires":[["73405495.f1e9cc"]]},{"id":"2dabaae2.c1e016","type":"template","z":"5dcffcbc.bae6c4","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{"Brightness":"{{payload}}"}","output":"str","x":380,"y":380,"wires":[["96cbb503.343228"]]},{"id":"be8d6249.9bab5","type":"function","z":"5dcffcbc.bae6c4","name":"map","func":"msg.payload.l=msg.payload.l*100; msg.payload.s=msg.payload.s*100; return msg;","outputs":1,"noerr":0,"x":430,"y":520,"wires":[["20784c5.660aab4"]]},{"id":"bf36bff2.3d98f","type":"mqtt in","z":"5dcffcbc.bae6c4","name":"colorState","topic":"stat/MiniLichterkette/RESULT","qos":"2","broker":"aa8ea139.37c07","x":180,"y":580,"wires":[["d85429c0.4501c8","852254eb.6c9668"]]},{"id":"852254eb.6c9668","type":"json","z":"5dcffcbc.bae6c4","name":"","property":"payload","action":"","pretty":false,"x":330,"y":580,"wires":[["be6203d4.c9e66"]]},{"id":"4a52a0ca.93eac","type":"function","z":"5dcffcbc.bae6c4","name":"convert Color","func":"//var input=msg.payload.HSBColor; let values=msg.payload.HSBColor.split(","); msg.payload.h=values[0]; msg.payload.s=values[1]/100; msg.payload.l=values[2]/100; return msg;","outputs":1,"noerr":0,"x":610,"y":580,"wires":[["9e961d23.1c88b"]]},{"id":"be6203d4.c9e66","type":"switch","z":"5dcffcbc.bae6c4","name":"","property":"payload.HSBColor","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","repair":false,"outputs":1,"x":450,"y":580,"wires":[["db3e37fb.97a5f8","4a52a0ca.93eac"]]},{"id":"fd8991ee.f7fd1","type":"Sonoff device","z":"5dcffcbc.bae6c4","mode":"0","broker":"665cb0c4.3e438","device":"MiniLichterkette","name":"","onValue":"ON","offValue":"OFF","cmdPrefix":"cmnd","statPrefix":"stat","telePrefix":"tele","x":810,"y":160,"wires":[["a42e8481.c58778"]]},{"id":"b3771bf1.2acd78","type":"json","z":"5dcffcbc.bae6c4","name":"","property":"payload","action":"","pretty":false,"x":550,"y":120,"wires":[["73405495.f1e9cc"]]},{"id":"5dbdb6ee.9ac9f8","type":"template","z":"5dcffcbc.bae6c4","name":"options","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{"foo":"bar"}","output":"str","x":400,"y":120,"wires":[["b3771bf1.2acd78"]]},{"id":"97278e2f.5d65a","type":"inject","z":"5dcffcbc.bae6c4","name":"requestOptions","topic":"","payload":"true","payloadType":"bool","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":200,"y":120,"wires":[["5dbdb6ee.9ac9f8"]]},{"id":"d85429c0.4501c8","type":"debug","z":"5dcffcbc.bae6c4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":350,"y":640,"wires":[]},{"id":"db3e37fb.97a5f8","type":"debug","z":"5dcffcbc.bae6c4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":590,"y":640,"wires":[]},{"id":"ca676059.8e72e","type":"ui_group","z":"","name":"Mini-Lichterkette","tab":"d651a8eb.fefb38","disp":true,"width":"6","collapse":false},{"id":"753c6646.f99048","type":"homekit-accessory","z":"","accessoryName":"Lampen","pinCode":"111-11-111","port":"32302","manufacturer":"Nerdiy.de","model":"Default Model","serialNo":"Default Serial Number","accessoryType":"5"},{"id":"aa8ea139.37c07","type":"mqtt-broker","z":"","name":"Server-Mqtt","broker":"server.fritz.box","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"665cb0c4.3e438","type":"mqtt-broker","z":"","name":"","broker":"server.fritz.box","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"d651a8eb.fefb38","type":"ui_tab","z":"","name":"Home","icon":"dashboard"}]
Wie bei den vorherigen Beispielen müsst Ihr auch bei diesem NodeCode das HomeKit-Accessory und den Service konfigurieren. Klickt dazu doppelt auf die Node (in diesem Fall)“MiniLichterkette“. Dadurch öffnet sich wieder das folgende Menü.
controle stopcontacten
Dieses Beispiel zeigt Euch wie Ihr eine SmartHome-Steckdose mit der HomeKit-Node simulieren könnt. Dazu wird Hier eine SonoffS26-Steckdose verwendet die (wie auch die Lampe im vorherigen Beispiel) mit der Tasmota-Firmware „bestückt“ ist. Wie Ihr so eine Steckdose mit der Tasmota-Firmware programmiert und über Node-Red steuert ist in dem Artikel Tasmota - Flash Sonoff S26-aansluiting met Tasmota-firmware beschreven.
Wie bei allen anderen Beispielen ist dabei auch wieder eine Inject-Node mit dem Namen „requestOptions“ vorhanden. Bei einem Klick darauf, werden Euch in der Debug-Leiste alle Eigenschaften dieses HomeKit-Devices angezeigt.
[{"id 'd6d0d8e6.785448', type 'comment', z '5dcffcbc.bae6c4', name 'Socket', 'info', 'x':180 ,"y":1800,"draden":[]},{"id"bad38f27.a93b4","type"ui_switch",z"5dcffcbc.bae6c4",name" ,"label"Socket",group":16663fb4.9e351",bestel":20,"breedte":0,"hoogte":0,"doorvoer":false,"decouple":true" ,"topic" ", "style" ", " onvalue "true ", onvalueType " bool ",onicon ", " oncolor ", " offvalue " false","offvalueType <<bool","officon":","offcolor":","x":670,"y":1920,"draden":[["f1118c1c.95804"]] },{"id 'f1118c1c.95804', type 'Sonoff-apparaat', z '5dcffcbc.bae6c4', mode '0 ', broker '1fafbb1c.a2df75', "device":SonoffS26", "name":", "onValue": AAN", "offValue": UIT", "cmdPrefix":cmnd", "statPrefix":stat", "telePrefix" :"tele","x":660,"y":1860,"draden":[["bad38f27.a93b4"]]},{"id"a4cdda.44b67228","type"homekit- service","z '5dcffcbc.bae6c4', 'accessoire': b7e7d023.40f38 ', 'name' stopcontact, 'serviceName', stopcontact, 'x':250,'y':1860 ,"draden":[["307b902a.ca26b"]]},{"id":307b902a.ca26b", "type"wijzigen", z"5dcffcbc.bae6c4", "name" convert","rules":[{"t":set","p"payload","pt"msg", "to"payload.On",tot""msg" }],"action":valse,"x":440,"y":1860," draden":[["f1118c1c.95804"]]},{"id 'fb3c28d1.cb8da8', type 'json',z '5dcffcbc.bae6c4', 'name', "property":payload", "action":", "pretty":false,"x":570,"y":1980,"wires":[["a4cdda.44b67228"]]},{" id '811d7998.a861e8', type 'template', z '5dcffcbc.bae6c4', 'name' opties, 'field', payload, 'fieldType', msg' ,"format"stuur","syntax"snor",template":{"foo"bar"}",output"str",x":420,"y" :1980,"wires":[["fb3c28d1.cb8da8"]]},{"id":6bdad444.d1270c", type": injecteren", "z":5dcffcbc.bae6c4", "naam" :"requestOptions", "topic" ", "payload":true, "payloadType":bool", "repeat":", "crontab" ", "once":false, "onceDelay ":0.1,"x":260,"y":1980,"draden":[["811d7998.a861e8"]]},{"id"16663fb4.9e351", "z":", "name": "licht", "tab": e5c99d4.147226 "bestelling":2,"disp":true,"width":6", "collapse":false },{"id '1fafbb1c.a2df75', type 'mqtt-broker', z ', 'name 'Server-Mqtt', 'broker': server.fritz.box ","port":1883", "clientid": "usetls":false,"compatmode":true,"keepalive":true,"keepalive":true,"geboorteTopic": "geboorteQos":0", "geboortePayload" ", "closeTopic" ", "closeQos" "0", "closePayload" , "willTopic" , "willQos" 0 ","willPayload"},{"id":b7e7d023.40f38", "type": homekit-accessoire", "z":", "accessoireName": stopcontacten, "pinCode": "111-11-111", "port":32303", "manufacturer":Nerdiy.de", "model": "Standaardmodel", "serialNo": "Standaard serienummer", "accessoireType" 7"},{"id 'e5c99d4.147226', type 'ui_tab', z ', 'name', 'Home', icon 'dashboard', 'bestellen': 1}]
Auch hier müsst Ihr (Überraschung 🙂 ) – wie bei den vorherigen Beispielen – das HomeKit-Accessory und den Service konfigurieren. Klickt dazu doppelt auf die Node „Steckdose“. Dadurch öffnet sich wieder das folgende Menü.
Ontdek de apparaatinstellingen en eigenschappen
Bei Einigen Beispielen ist eine Inject-Node mit dem Namen „requestOptions“ vorhanden. Über diese habt Ihr die Möglichkeit die verfügbaren Eigenschaften der jeweiligen HomeKit-Node anzeigen zu lassen. Diese Eigenschaften könnt Ihr dann nutzen um das simulierte HomeKit-Gerät einzustellen. Zum Beispiel gibt es bei der HomeKit-Node welche die „MiniLichterkette“ steuert die Möglichkeit die ColorTermperature zu setzen. Setzt Ihr also die Eigenschaft wird der entsprechende Wert in HomeKit angezeigt.
Instellen op iPhone
Nadat u de gewenste HomeKit-apparaten in NodeRed heeft aangemaakt, kunt u ze nu op het iOS-apparaat registreren. In dit onderdeel wordt u (enigszins) stap voor stap door het registratieproces geleid. Omdat dit soms veel afbeeldingen bevat, worden de volgende stappen samengevat als diavoorstellingen.
vochtigheid
Um die Anmeldung eines Luftfeuchtigkeitssensors zu starten klickt Ihr – wie im vorherigen Schritt angegeben – auf „Add Accessory“.
verwarming thermostaten
Um die Anmeldung des Heizungs-Thermostats zu starten klickt Ihr – wie im vorherigen Schritt – auf „Add Accessory“ und dann auf „Don’t Have a Code or Can’t Scan“.
(Tasmota) lampje
Um die Anmeldung der Lampe zu starten klickt Ihr – wie im vorherigen Schritt – auf „Add Accessory“ und dann auf „Don’t Have a Code or Can’t Scan“.
(Tasmota) stopcontact
Um die Anmeldung der Steckdose zu starten klickt Ihr – wie im vorherigen Schritt – auf „Add Accessory“ und dann auf „Don’t Have a Code or Can’t Scan“.
temperatuursensor
Um die Anmeldung des Temperatursensors zu starten klickt Ihr – wie im vorherigen Schritt – auf „Add Accessory“ und dann auf „Don’t Have a Code or Can’t Scan“.
Bewegingsdetector
Um die Anmeldung des Bewegungsmelders zu starten klickt Ihr – wie im vorherigen Schritt – auf „Add Accessory“ und dann auf „Don’t Have a Code or Can’t Scan“.
Het is je misschien al opgevallen: met deze iOs-node heb je allerlei mogelijkheden. Probeer gewoon iets rond. Als u vragen heeft, kunt u deze achterlaten in de reacties.
Veel plezier met het project
Ik hoop dat alles werkte zoals beschreven. Zo niet, of als je vragen of suggesties hebt, laat het me weten in de commentaren. Ik zal dit dan zo nodig aan het artikel toevoegen.
Ideeën voor nieuwe projecten zijn altijd welkom. 🙂
PS Veel van deze projecten - vooral de hardwareprojecten - kosten veel tijd en geld. Natuurlijk doe ik dit omdat ik het leuk vind, maar als je het cool vindt dat ik de informatie met je deel, dan zou ik blij zijn met een kleine donatie aan het koffiefonds. 🙂
hallo nerdy,
coole site en coole projecten! Ik heb al het een en ander in mijn smart home geïmplementeerd (KNX, bridge naar HomeKit, Node Red etc.) en heb nog veel gepland. Probeer al een tijdje de HomeKit Bridge van Node Red te gebruiken. Ik krijg ook de knooppunten ingesteld en geconfigureerd, zodat ik vervolgens als test een apparaat in de HomeKit-app kan instellen. Helaas is het geheel niet stabiel, valt de verbinding regelmatig weg en start Node Red zichzelf ook regelmatig opnieuw op, dwz iets in de Homekit bridge node veroorzaakt de crash. Heb jij dit probleem ook of heb je een idee wat de oorzaak zou kunnen zijn?
Groetjes Turner
hoi gymnast,
bedankt 🙂
Wat de reden zou kunnen zijn weet ik helaas niet precies. In het verleden had ik echter het probleem dat mijn NodeRed-installatie om de een of andere reden steeds opnieuw opstartte. Om het debuggen een beetje makkelijker te maken, heb ik een stroom gemaakt die het laatste logboek van het NodeRed-proces opslaat na het herstarten van NodeRed. U kunt dus vrij goed zien op welk punt NodeRed crashte en de fout herstellen. 🙂
Informatie hierover vind je hier: https://nerdiy.de/howto-nodered-automatisches-speichern-des-nodered-journals-nach-dem-start-von-nodered-zu-debugging-zwecken/
Hartelijke groeten
Fabian
Hallo Fab,
echt coole site. Ik ben momenteel bezig met de flow voor de verwarmingsthermostaten, ook de import werkte wonderwel. Ik zit nu een beetje vast en heb een paar vragen:
1. Kan ik elke verwarmingsthermostaat gebruiken of moet deze geschikt zijn voor Apple Homkit aangezien ik een Homekit simuleer?
2. Hoe "weet" Node red dat ik een thermostaat heb, moet deze niet op de een of andere manier naar wifi worden overgezet?
3. Heb ik afhankelijk van de thermostaat de juiste brug nodig, of kan dit ook zonder de juiste brug?
Bij voorbaat dank voor uw antwoorden, zoals ik al zei, ik weet niet wat ik nu moet doen.
Misschien kun je me ook gedetailleerde instructies e-mailen over hoe je van begin tot eind met de nieuwe thermostaat om moet gaan.
Ik hoor graag van je.
LG 🙂
Dag Daniel,
1. Dit kan in principe elke verwarmingsthermostaat zijn, ja. Het moet natuurlijk ondersteund worden door NodeRed of op een andere manier aangestuurd kunnen worden. 🙂
2. Afhankelijk van wat voor soort thermostaat je hebt, is deze geïntegreerd via DECT (bij de Fritzbox), zigbee of een andere standaard. Soms heb je ook een geschikte gateway nodig.
3. Als je al een FritzBox hebt, raad ik een van de radiatorthermostaten aan die compatibel is met de FritzBox. Informatie (inclusief hoe deze te integreren) vindt u hier, bijvoorbeeld: https://nerdiy.de/howto-nodered-fritzbox-heizkoerperthermostat-aus-nodered-steuern/
Ik hoop dat dit je zal helpen. Laat het me anders even weten. 🙂
Hartelijke groeten
Fabian