Na wat gelezen te hebben over Node-RED en MQTT  met Domoticz  hier een eenvoudige stap voor stap uitleg.

Omdat er op internet niet zo heel veel te vinden is in het Nederlands besloot ik zelf maar een stap voor stap uitleg te starten over MQTT, Domoticz en Node-RED. Her en der kom ik wel wat info tegen maar hoe te beginnen was toch een raadsel. Zelf heb ik een Raspberry Pi in de meterkast die mijn slimme meter uitleest en waarop ik Domoticz draai om mijn apparaten in huis te kunnen bedienen en uit te lezen. Het onderwerp Node RED en MQTT in combinatie met mijn Domoticz leek mij een interessant onderwerp waarover ik meer wilde en wil weten. Ik begin hieraan zonder enige voorkennis en probeer zelf stap voor stap de mogelijkheden uit die ik vervolgens hier met anderen ga delen die net als ik ook net beginnen met MQTT en Domoticz. Mijn ontdekkingen , opgedane kennis en vorderingen kun je dan ook op deze pagina vinden. Ik begin bij het eerste begin en zien wel waar we terecht komen in de zoektocht naar de mogelijkheden.

Ook heb ik een Domoticz Forum waar ik mijn hobby en kennis over Domoticz graag met anderen deel, zoals b.v. het maken van eigen bedienings schermen voor Domoticz. Ook het onderwerp MQTT en Domoticz hoort daarbij.

Vind je dit een interessant onderwerp waarover je vragen en of opmerkingen hebt, ga dan bij voorkeur naar mijn forum om daar je vragen te stellen en discussies te voeren over dit onderwerp !

Ga naar het Forum.


MQTT en DOMOTICZ stap voor stap.......

04-05-2020 Het startpunt voor mij zelf is een Raspberry Pi 3b+ met daarop de laatste versie os Buster genaamd en de laatste bijgewerkte versie van Domoticz . Als je net als ik de versie Buster draait kun je volstaan met onderstaande instrukties. Heb je een oudere versie draaien zoek dan even op hoe je de benodigde repositories kunt installeren.

sudo apt udpate

en

sudo apt install mosquitto -y

Dat is alles wat nodig is om Mosquitto op Buster te installeren.

Om te kijken of de broker werkt kun je het beste testen met 2 terminals. Open 2 terminals en hernoem de eerste terminal Subscribe en noem de tweede terminal Publish. De terminals kun je bovenin een naam geven en dat is wel zo makkelijk om niet in de war te raken. In de terminal Subscribe geef je nu het volgende commando.... Verander naar je eigen ip adres !

mosquitto_sub -h 192.168.0.22 -v -t "home/#"

Er zal nog niets verder gebeuren maar je hebt in het venster Subscribe nu opgegeven dat er geluisterd moet worden naar alles wat met home verstuurd wordt door het commando wat we gaan geven in het venster Publish. Als we nu in de terminal Publish het volgende commando invoeren zul je zien dat het venster Subscribe het gestuurde commmando ook weergeeft.

mosquitto_pub -h 192.168.0.22 -t "home/temperature" -m "21"

Vergeet ook hier niet je eigen ip adres neer te zetten.

Je weet nu dat de broker de commandos doorgeeft van apparaten die iets willen verzenden Publish , en dat andere apparaten die op het commando geabboneerd zijn weer kunnen ontvangen Subscribe.

De Broker (de server die de commandos verstuurd en ontvangt) werkt dus. Dit hebben we nu dus getest op 2 terminal vensters maar dat kan dus via elk apparaat wat verbonden is of communiceert met de broker. Een pc, arduino, een Pi zero, of wat dan ook binnen je eigen netwerk, maar ook beveiligd via b.v. internet. Deze apparaten hebben dan wel een client software nodig om te communiceren met de broker.

 

Het volgende dat je kunt doen als je nog geen apparaten hebt in je Domoticz is een dummy switch aanmaken. Ga hiervoor naar hardware en maak een dummy switch aan.

Noem deze switch.. Test Switch en kies bij type voor Switch (schakelaar). Deze gemaakte switch kun je nu terugvinden in je lijst apparaten.

Je kunt nu een terminal venster openen en daar met het volgende commando aangeven dat je alle veranderingen van je apparatuur wilt ontvangen door te subscriben.

mosquitto_sub -h 192.168.0.22 -v -t "#"

Verander wel weer even in je eigen ip adres !

Als je nu de switch gaat bedienen via je Domoticz zul je zien dat dit in het terminal venster wordt getoond ! Heb je al meer apparaten dan zie je daarvan ook de veranderingen in je terminal venster als je deze via Domoticz gaat schakelen.

Ook op andere apparaten waar je een MQTT client op draait kun je nu subscriben bij de broker op je Raspberry en alle veranderingen zien. Ook verzonden opdrachten worden door de broker ontvangen zodat je ook je apparaten vanuit die client kan schakelen in je netwerk , of met een goede beveiliging waar ook ter wereld via internet ! Als volgende ga ik de switch nu schakelen door een publish commando in een terminal venster te zetten en uit te voeren.

Pas je eigen ip van de broker weer aan en gebruik het juiste idx te vinden bij je apparaten.

Met het onderstaande commando zet je de testswitch aan.

mosquitto_pub -h 192.168.2.10 -t "domoticz/in" -m '{ "idx" :115 , "nvalue" : 1}'

en met het volgende commando zet je de testswitch weer uit.

mosquitto_pub -h 192.168.2.10 -t "domoticz/in" -m '{ "idx" :115 , "nvalue" : 0}'

Ook dat werkt 🙂

Als volgende heb ik geprobeerd om een bestaande switch te bedienen met de commandos hierboven....

Echter reageert de switch zelf dan wel maar niet hetgeen wat door de switch bediend wordt ! Dus in mijn geval wilde ik dus een buitenlamp schakelen door daarvan het juiste idx aan of uit te zetten. De schakelaar reageert daar dan wel op in Domoticz maar hetgeen geschakeld moet worden dus niet ! Mijn schakelaar die ik bedien geeft normaal een z wave commando als ik de buitenlamp wil schakelen, maar ontdanks dat de schakelaar wel reageert op het gegeven commando en aangeeft dat de lamp aanstaat, blijft de lamp uit. Waarschijnlijk heb ik daarvoor de rechtstreekse commandos nodig die de zwave schakelt i.p.v alleen de schakelaar zelf te veranderen in aan of uit.

Deze commandos weet ik nog niet dus gebruik nu een tussen oplossing die wel werkt. Later volgt een betere manier om wel rechtstreeks te schakelen.

In blocky geef ik aan dat als de testswitch veranderd in aan of uit dat dan ook de buitenlamp daarop moet schakelen. Dat werkt wel 🙂 Maar natuurlijk zijn daar de rechtstreekse commandos voor om dat te doen maar dat moet ik nog verder onderzoeken. Na de zwave schakelaar met het juiste commando te schakelen zal de switch dit dan ook aangeven.


05-05-2020 Nu ik de Broker op de Raspberry heb draaien ga ik eens kijken wat ik met Node-RED kan doen.
Als je vanaf een apparaat of computer naar je Node-RED gaat op de Raspberry geef je het ip adres op van je Raspberry met daarachter de gebruikte poort, in mijn geval is dat ......
http://192.168.2.10:1880
Node Red opent als het goed is met een scherm wat een beetje weg heeft van het blocky script maar is wat mogelijkheden veel uitgebreider.

Als je geen verbinding krijgt met Node-RED dan draait het nog niet op je Raspberry. Ga dan naar je beginpagina en daarin zie je bovenin ergens staan programmeren met daaronder Node-RED.

Klik daarop en een venster opent waarin de Node-RED wordt gestart.

Met het commando

sudo systemctl enable nodered.service

kun je ervoor zorgen dat dit elke keer automatisch wordt gestart bij het opstarten van je Raspberry. Je kunt dan vanaf elke computer je Node-RED benaderen door bovenstaande adres in je browser te zetten met je eigen Raspberry ip natuurlijk en standaard poort 1880 mits je dat niet hebt veranderd.

Nu je op de node-Red pagina bent kun je je eerste testjes gaan doen. Ook voor mij zelf is dit nog allemaal nieuw en onbekend. Het eerste wat ik probeerde was een inject naar de pagina te slepen en daarna een button met payload. Verbind de 2 blokken met elkaar en trek een lijntje tussen de 2 blokken.

Druk daarna op deploy. Dit moet steeds gebeuren als je iets hebt veranderd. Rechtsboven zie je rechts van het i symbool een vakje waar debug messages op staat als je met de muis erboven staat. Klik daarop.

Alles wat er nu gebeurt als je het script of beter gezegt de flow start komt nu rechts in beeld. Standaard staat het eerste blok wat je neerzette op timestamp ofwel een code met de tijd.

Klik je nu links in het vakje van de eerste blok dan zie je de uitkomst rechts verschijnen. In dit geval de timestamp. Zie onder....

We gaan er nu nog een blokje inject bijzetten en verbinden ook dat blok met een lijntje met het blokje rechts payload. Dubbelklik nu op het nieuw geplaatste blokje en verander bij payload naar de optie string. Zet daar nu neer b.v. Hallo wereld.

Vergeet niet nu weer deploy te klikken. Test dan de linkse blokken door op de linkerkant op de blokjes (nodes) te klikken. De eerste geeft nu de timestamp als resultaat en de 2e geeft Hallo wereld als resultaat.

Dit zijn zeer simpele voorbeelden van hoe het een beetje werkt en net als voor mij zelf als ook voor vele anderen die er mee willen beginnen toch een welkom inzicht. Ook ik weet nog maar heel weinig over de mogelijkheden en hoe alles werkt dus probeer ik ook maar stap voor stap verder te komen.

Nu we al een Broker hebben draaien is het misschien interessant om te zien of we de info en commandos misschien uit kunnen lezen in Node -RED.

Sleep het blokje MQTT in naar het scherm en zet deze onder de andere 2 blauwe blokken. Verbind ook dit blok met het blok rechts met een lijn. Dubbelklik dit blok en een venster verschijnt. Geef bij server een naam b.v. MQTTbroker en vul bij server localhost in. Klik op Done en vul daarna bij topic een hekje in #

Dit betekent dat er naar elke topic wordt geluisterd die door Domoticz wordt verzonden. Klik weer op Done. Vergeet weer niet op deploy te klikken.

Nu zal rechts elk commando wat verzonden wordt door Domoticz bij het schakelen van apparaten en ook sensor waarden e.d. getoond worden.


Maar hoe kunnen we onze apparaten bedienen ?

Natuurlijk willen we onze apparaten die we in Domoticz hebben ook kunnen bedienen via mqtt ! We beginnen met een schoon leeg veld om het overzichtelijk te houden. Je kunt als je wilt de blokken die in Node-RED NODES genoemd worden verwijderen door met de muis een gebied te selecteren en tegelijk op delete te drukken. Ook kun je dit veld bewaren en een nieuw leeg veld beginnen.

Klik op het plus teken + rechtsboven om een nieuw leeg veld te beginnen. Een nieuw veld (venster) opent met de naam flow . Als je op de naam bovenin dubbelklikt kun je de flow (dat venster) een andere naam geven. Noem het voor deze flow b.v. Bedienen.

Omdat we de broker al hebben draaien en ook al ingesteld hebben dat Node-RED automatisch moet opstarten als de Raspberry opstart, hoeven we daar niet meer naar om te kijken.

Sleep een NODE met de naam MQTT out naar het scherm en zet die ergens aan de rechterkant neer. Dubbelklik op de Node en we gaan daar kijken of de instellingen goed staan. Bij naam vullen we b.v. MQTTbroker in en server zetten we localhost. de poort is 1880. Klik op Done.

We gaan nu 2 keer de node inject plaatsen links op het scherm onder elkaar. Dubbelklik op de bovenste en geef het de naam b.v. lamp aan Bij payload kies je voor JSON en vult daar de volgende code in.

{"command":"switchlight","idx":77,"switchcmd":"On"}

Pas je eigen IDX hier aan, van een testswitch of een andere te schakelen switch die je al hebt. Klik op Done. De tweede daaronder noemen we b.v. lamp uit , kies weer voor JSON en vul de volgende code in.

{"command":"switchlight","idx":77,"switchcmd":"Off"}

Verbind de beide nodes met de node MQTTbroker en klik op deploy.

Als alles goed is gegaan kun je nu de schakelaar of lamp met de ene node aanzetten en met de ander weer uit.

Het is altijd handig om te kunnen zien wat er aan opdrachten worden verstuurd dus zetten we daarvoor weer een Node payload neer rechts in het venster. Verbind de 2 nodes die we gemaakt hebben nu ook met de node payload en je ziet weer de instructies die worden verzonden zoals we al eerder gebruikt hebben. Zie hieronder....

Natuurlijk kun je ook meerdere flows combineren. zoals met de eerder gemaakte NODES.


Vind je dit een interessant onderwerp waarover je vragen en of opmerkingen hebt, ga dan bij voorkeur naar mijn forum om daar je vragen te stellen en discussies te voeren over dit onderwerp !

Ga naar het Forum.