HowTo: FHEM – MQTT-apparaten maken

In het artikel RaspberryPi – Installeer MQTT Server op de RaspberryPi Ik schreef wat over MQTT en legde uit hoe je je eigen MQTT-server op de RaspberryPi installeert.

Om ook een MQTT-server van FHEM te kunnen gebruiken, moet u nog enkele FHEM-modules installeren. Hoe dit werkt en waar je op moet letten heb ik beschreven in het volgende artikel.


Veiligheidsinstructies

Ik weet dat de volgende tips altijd vervelend zijn en onnodig lijken. Maar helaas hebben veel mensen die "beter" wisten al ogen, vingers of andere zaken verloren of zich door onvoorzichtigheid verwond. In vergelijking daarmee is een verlies van gegevens nauwelijks het vermelden waard, maar zelfs die kunnen heel vervelend zijn. Neem daarom vijf minuten de tijd om de veiligheidsinstructies te lezen. Want zelfs het coolste project is geen letsel of andere problemen waard.
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 webwinkel of aanbieder. De prijs verandert niet voor jou. Als u uw aankopen doet via deze links, steunt u Nerdiy.de om in de toekomst nog meer nuttige projecten te kunnen aanbieden. 🙂 


Eisen

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.

In de volgende drie artikelen wordt beschreven wat er moet gebeuren om de RaspberryPi voor te bereiden:
RaspberryPi - Instellingen voor Nerdiys!
RaspberryPi – De eerste configuratie!
RaspberryPi - De RaspberryPi besturen via SSH
Uw eigen slimme huis – installatie en toegang tot FHEM
Mosquitto op de Raspberry – Installeer MQTT Server op de RaspberryPi

Benodigd gereedschap:
-Nee-

Benodigde materialen:

In de volgende lijst vindt u alle onderdelen die u nodig heeft om dit artikel te implementeren.


Log in op de RaspberryPi via SSH

Om te beginnen moet je eerst inloggen op de Rasp Pi met Putty via SSH. Hoe je dit doet staat in het artikel RaspberryPi - Bedien de RaspberryPi via SSH beschreven.

Na het invoeren van uw gebruikersnaam en wachtwoord kunt u de eerste opdrachten invoeren.

Pakketbeheer updaten

Het pakketbeheer in Linux is een "centrale plek" van waaruit verschillende softwarepakketten kunnen worden geïnstalleerd. Om dit betrouwbaar te laten werken, moeten de lijsten en bronnen van het pakketbeheer worden bijgewerkt voor elke installatie van nieuwe pakketten.

Om de update van het pakketbeheer te starten, moet u de volgende opdracht invoeren.
sudo apt-get update && sudo apt-get upgrade
Afhankelijk van hoe lang geleden uw laatste update van het pakketbeheer was, kan dit proces nu even duren. De lijsten die naar de afzonderlijke pakketbronnen verwijzen, worden eerst bijgewerkt.
Daarna worden de pakketten zelf bijgewerkt. Aangezien extra geheugen bezet is, wordt u opnieuw om uw toestemming gevraagd. Je moet dit bevestigen met een "J" en "Enter".
Zodra de update is voltooid, ziet u een korte samenvatting van de duur en omvang van de update.

Installeer Perl MQTT-pakketten

Om ervoor te zorgen dat FHEM met de MQTT-server kan communiceren, moeten twee Perl-pakketten worden geïnstalleerd.

U moet inloggen op de Rasp Pi met Putty en de volgende opdracht invoeren.
sudo apt-get install libmodule-pluggable-perl && sudo cpan install Net::MQTT:Simple && sudo cpan install Net::MQTT:Constanten
U bevestigt de waarschuwing dat dit extra opslagruimte in beslag neemt met een "J" en "Enter".

De vraag "Wilt u zoveel mogelijk automatisch configureren?" [ja]” bevestigt u met “ja” en voert u in.
De installatie van de twee pakketten kostte me ongeveer vijf minuten. Genoeg tijd dus om nog een kop koffie te halen. 🙂


MQTT-clients maken

Om in de volgende stap een verbinding met een MQTT-apparaat tot stand te kunnen brengen, moet eerst een MQTT-client worden aangemaakt. Dit slaat de informatie op die nodig is om later verbinding te maken met de MQTT-server.

Voer hiervoor de volgende opdracht in de opdrachtprompt van uw FHEM-instantie in.
definieer mqttClient MQTT 192.168.0.1:1883

De opdracht om een MQTT-client te maken komt overeen met het volgende "define name-of-mqtt-client MQTT host-or-ip-of-mqtt-server:port-of-server". Dus als uw MQTT-server het IP-adres "192.168.0.1" en poort 1883 heeft (wat overeenkomt met de standaardpoort voor MQTT), is de opdracht om de MQTT-client te maken "define mqttClient MQTT 192.168.0.1:1883". Natuurlijk kan elke andere naam worden gebruikt voor "mqttClient".

Klik nu linksboven op "Config opslaan" en start uw FHEM-server opnieuw op met behulp van het volgende commando.
afsluiten opnieuw opstarten

Nadat de server opnieuw is opgestart, bent u klaar om nieuwe MQTT-bridges en -apparaten te maken.

Weergave van de nieuw gemaakte MQTT-client. Hier kunt u zien of er een verbinding met de MQTT-server tot stand kon worden gebracht. U krijgt ook meer informatie over de verbinding met de MQTT-server te zien.
Om ervoor te zorgen dat de aangebrachte wijzigingen worden geaccepteerd en permanent worden opgeslagen, moet u niet vergeten op "Configuratie opslaan" te klikken. Hierdoor worden de gewijzigde instellingen permanent opgeslagen in het configuratiebestand.

Instellen van de MQTT-bridge met als voorbeeld een MAX!-verwarmingsthermostaat

In dit voorbeeld maken we een MQTT-brug. Zoals de naam al doet vermoeden, verbindt de MQTT-bridge iets met elkaar. In dit geval de MAX!-verwarmingsthermostaat met de MQTT-wereld. Deze koppeling werkt in principe volgens hetzelfde schema met alle reeds geïnstalleerde sensoren of actuatoren. In het geval van de MAX! De verwarmingsthermostaat werkt met het volgende commando.

De structuur van het commando is als volgt: "definieer naam-van-de-mqtt-brug MQTT_BRIDGE naam-van-de-sensor-of-actuator". In het geval van de MAX! Dus voor een verwarmingsthermostaat met de naam MAX_15504f is de opdracht als volgt.
defineHeatingWorkroomMqtt MQTT_BRIDGE MAX_15504f

Hierdoor wordt de module "HeizungArbeitszimmerMqtt" van het type "MQTT_BRIDGE" gemaakt en gekoppeld aan de bestaande module "MAX_15504f".

De gemaakte MQTT_BRIDGE bevindt zich nu in de kamer "Ongesorteerd". Ga naar deze kamer en open de gedetailleerde weergave van de gemaakte MQTT-brug.
In de detailweergave ziet u nu alle informatie over de aangemaakte MQTT-bridge. Voordat de MQTT-bridge echter gegevens van de MAX!-verwarmingsthermostaat kan koppelen aan de MQTT-wereld, moet deze eerst weten welke uitlezing van de verwarmingsthermostaat aan welk MQTT-onderwerp moet worden gekoppeld.

Hiervoor is er het attribuut "publishReading_XYZ". Dit zorgt ervoor dat de MQTT-bridge automatisch alle updates over de lezing "XYZ" doorstuurt naar het opgegeven onderwerp.

Voer dus de volgende opdracht in de opdrachtprompt van uw FHEM-instantie in om elke update van de "temperatuur" -meting automatisch door te sturen naar het onderwerp "verwarming/werkkamer/temperatuur".
attr HeizArbeitszimmerMqtt publishReading_temperature heizung/Arbeitszimmer/temperature

Zorg ervoor dat "publishReading" en "temperatuur" (de uitlezing van de radiatorthermostaat (of een andere sensor/actuator)) met een onderliggend streepje moeten worden verbonden. Dit resulteert in "publishReading_temperature".
Voor de lezing "Batterij" zou het geheel er zo uitzien.

attr HeizArbeitszimmerMqtt publishReading_battery heizung/Arbeitszimmer/battery
Deze koppeling van lees- en MQTT-onderwerpen werkt echter ook andersom. Om ervoor te zorgen dat waarden die naar een MQTT-onderwerp worden verzonden automatisch worden ingevoerd in een uitlezing van de verwarmingsthermostaat, moet u het volgende kenmerk instellen.
attr HeizArbeitszimmerMqtt subscribeSet_desiredTemperature heizung/Arbeitszimmer/desiredTemperature

Hierdoor wordt het onderwerp "verwarming/werkkamer/gewensteTemperatuur" geabonneerd en wordt elke binnenkomende waarde automatisch ingevoerd in de "gewensteTemperatuur"-uitlezing. Zo kunt u via MQTT-bericht de gewenste temperatuur van de verwarmingsthermostaat regelen.

De gedetailleerde weergave van uw MQTT-bridge zou er nu zo uit moeten zien. U kunt alle gekoppelde lees/MQTT-onderwerpcombinaties zien onder Attributen. Vergeet niet om deze configuratiewijziging op te slaan door op "Config opslaan" te klikken.

De ingestelde MQTT-brug testen

Een manier om de pas gemaakte MQTT-brug te testen, wordt hier beschreven.

Hiervoor heb ik in NodeRed een mini MQTT-viewer gemaakt die je de waarden voor de ingestelde onderwerpen laat zien "verwarming/studie/temperatuur" en "verwarming/studie/batterij" worden verzonden. Je hebt ook de mogelijkheid om aan het onderwerp te koppelen "verwarming/studie/gewensteTemperatuur" om de waarde 25 te verzenden. Hierdoor staat, als alles goed werkt, de gekoppelde radiatorthermostaat op 25°C.

Eerst controleren we of de ontvangst en overdracht van ontvangen waarden via MQTT werkt. Schakel hiervoor naar de kamer "MAX" en vervolgens naar de detailweergave van de betreffende verwarmingsthermostaat.
Scroll in de detailweergave naar beneden tot je de meting ziet...

... vindt "gewenste temperatuur". Dit is de uitlezing die we gebruiken bij de configuratie van de MQTT-brug met het MQTT-onderwerp "verwarming/studie/gewensteTemperatuur" hebben gekoppeld. De huidige waarde van de meting en het tijdstip van de laatste update worden hier ook weergegeven.

Als je nu in de zelfgebouwde MQTT-viewer op de inject-node klikt, stuur je de waarde 25 naar de topic "verwarming/studie/gewensteTemperatuur". Dit zou nu ook de waarde van uw verwarmingsthermostaat moeten updaten naar de waarde 25. Bovendien wordt de tijd van de laatste update ingesteld op de huidige tijd.

Om de tegenovergestelde manier te testen - d.w.z. de publicatie van een gewijzigde meetwaarde over een MQTT-onderwerp - is het voldoende om naar de bovenkant van de gedetailleerde weergave van de MAX!-verwarmingsthermostaat te scrollen. Daar verander je de gewenste temperatuur van je verwarmingsthermostaat zoals afgebeeld.

Dit activeert automatisch een update van de "batterij" -lezing. Door de MQTT-bridge te koppelen aan het onderwerp "verwarming/studie/batterij" de waarde ervan wordt dan naar wens gepubliceerd via de topic en is dan zichtbaar via de geconfigureerde debug node in je NodeRed omgeving.

Een MQTT-apparaat maken met een temperatuursensor als voorbeeld

Een andere mogelijkheid van de MQTT-module is het maken van MQTT-apparaten. Dit omvat alle sensoren of apparaten die hun meetwaarden rechtstreeks via MQTT verzenden. Om deze waarden vast te leggen en samen te vatten in een virtuele sensor, moet u een MQTT-apparaat maken.

In dit voorbeeld hebben we een temperatuursensor in ons netwerk die met regelmatige tussenpozen de gemeten temperatuurwaarde verstuurt via het MQTT-onderwerp "Omgevingsgegevens/kelder/Temp". Om dit vast te leggen wordt er eerst een MQTT device aangemaakt met het volgende commando.

definieer kellerSensor MQTT_DEVICE
Het commando is weer als volgt samengesteld: "define Name-des-Mqtt-Device MQTT_DEVICE". Aangezien we in dit voorbeeld een temperatuursensor integreren die zich in de kelder bevindt, noemen we de MQTT_DEVICE "kellerSensor. Het volledige commando om het MQTT_Device aan te maken is daarom "Environment data/cellar/Temp".
Nadat je het MQTT_Device hebt gemaakt, vind je het in de kamer "Ongesorteerd". U kunt hiermee ook de weergegeven detailweergave openen.

Voordat dit MQTT_Device nu waarden kan weergeven, moet het natuurlijk eerst worden gekoppeld aan het gewenste MQTT-onderwerp. In dit voorbeeld willen we alle inkomende waarden op het MQTT-onderwerp "Umweltdaten/keller/Temp" weergeven in het aangemaakte MQTT-apparaat.

Om dit te doen, moet u het volgende attribuut instellen:

attr kellerSensor subscribeReading_Temp Omgevingsgegevens/keller/Temp

Hierdoor wordt de uitlezing "Temp" aangemaakt in het aangemaakte MQTT_Device "kellerSensor" en gekoppeld aan het geabonneerde onderwerp "Umweltdaten/keller/Temp".

De meetwaarde “Temp” verschijnt nu ook in de meetwaardenweergave met de huidige of laatst ontvangen waarde en de datum van de laatste update.

Om het beeld een beetje mooier te maken, kunt u het volgende attribuut gebruiken om aan te geven dat een "°C" moet worden toegevoegd aan de waarde van de afgelezen Temp.

attr kellerSensorstatusFormat Temp °C
Voer hiervoor het commando "attr kellerSensor stateFormat Temp °C" in de opdrachtregel van uw FHEM-instantie in.
Hierdoor wordt de actuele temperatuur van de "kellerSensor" nu ook voorzien van een "°C" en is direct duidelijk dat dit een temperatuurwaarde is.

Verdere informatie

https://wiki.fhem.de/wiki/MQTT_Einf%C3%BChrung


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 ook altijd welkom 🙂

P.S. Veel van deze projecten - vooral de hardwareprojecten - kosten veel tijd en geld. Natuurlijk doe ik het omdat ik het leuk vind, maar als je het cool vindt dat ik de info erover met je deel, zou ik een kleine donatie aan het koffiefonds op prijs stellen 🙂 .

Koop Me a Coffee op ko-fi.com       

Ein Kommentar

  1. Hallo Fab
    Heel erg bedankt voor alle informatie die je hier beschikbaar hebt gesteld. Ik heb vele jaren bij de thuisassistent doorgebracht en helemaal geen tijd bij FHEM, die ik nu gebruik om te proberen mijn FHT-verwarmingsapparaten beter onder controle te krijgen. Als ik FHEM kan laten communiceren met een bestaande MQTT-server, zou dat mijn droom zijn.

    Ik heb FHEM draaiend op Raspian OS in een docker-container, de installatie verliep volgens uw advies zonder fouten - maar wanneer ik de commando's probeer in te voeren via de FHEM-webfrontend, krijg ik Kan module MQTT_BRIDGE niet laden of Kan module MQTT_CLIENT niet laden, waardoor ik denk je dat ik er een puinhoop van heb gemaakt door de perl/mqtt niet vanuit de docker-container te installeren of dat ik niet iets binnen FHEM heb gedaan om de nieuwe MQTT-mogelijkheid op te roepen?

    Met vriendelijke groeten

    Nick

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert