Inhoudsopgave:

Home Assistant Geigerteller-integratie: 8 stappen
Home Assistant Geigerteller-integratie: 8 stappen

Video: Home Assistant Geigerteller-integratie: 8 stappen

Video: Home Assistant Geigerteller-integratie: 8 stappen
Video: Home Assistant. Урок 9.4 ADD-ON - Xiaomi Gateway 3, интеграция в zigbee2mqtt 2024, November
Anonim
Image
Image
Principe van werk
Principe van werk

In deze tutorial laat ik zien hoe je aangepaste sensoren kunt toevoegen aan HASS (thuisassistent), meer specifiek een geigerteller, maar het proces is ook vergelijkbaar voor andere sensoren.

We gebruiken het NodeMCU-bord, een op Arduino gebaseerde geigerteller en een reeds geïnstalleerde thuisassistent.

De integratie zal gebaseerd zijn op een MQTT-server (openbaar of privé) en ik ga je hierin stap voor stap meenemen.

Als je niet weet wat home-assistant is, bezoek dan hun pagina https://www.home-assistant.io/. Het is een bekend domotica-platform dat zeer goed wordt onderhouden en in hoge mate aanpasbaar is.

Je leert over:

- geavanceerde configuratie voor Home Assistant

- NodeMCU (ontwikkelbord) en hoe het te programmeren met de Arduino IDE

- OTA (over-the-air updates) met behulp van de Arduino IDE voor het NodeMCU-bord

- hoe een serieel apparaat op de NodeMCU aan te sluiten

- handmatig een MQTT-server installeren op linux (optioneel)

Basisaannames:

- je hebt Home Assistant in gebruik

- je weet een beetje over elektronica

- je hebt Arduino IDE geïnstalleerd

Stap 1: Onderdelen en gereedschappen

Onderdelen:

1. NodeMCU-bord

2. breadbord

3. mannelijk-mannelijk en mannelijk-vrouwelijk juper-draden

3. usb naar micro usb-kabel

4. arduino geigerteller met seriële interface

(zoek op Ebay naar "arduino geiger couter")

5. radioactief materiaal (optioneel een klein testmonster)

Gereedschap:

1. Arduino-IDE

2. Home Assistant geïnstalleerd

Stap 2: Werkprincipe

Ons doel is om op HomeAssistat (HASS) de meetwaarden van de geigerteller te tonen. Aan de ene kant hebben we een HASS-server in gebruik, ergens kan het een raspberry pi of een ander apparaat zijn en aan de andere kant hebben we de geigerteller.

De geigerteller heeft een seriële poort, een oplossing zal zijn om de seriële poort rechtstreeks aan te sluiten op de RaspberryPi waarop de HASS draait.

Enkele redenen waarom het misschien geen goed idee is:

- er is daar geen fysieke ruimte

- we hebben een ander apparaat op de seriële poort

- we willen een omgevingssensor bevestigen die buiten moet worden geplaatst in plaats van de geigerteller

Oké, dus we gaan een andere mogelijkheid onderzoeken om de verbinding via WIFI te maken:

De HASS ondersteunt het lezen van sensorgegevens en weergeven dat via een MQTT-server, dit soort server is een lichtgewicht verbinding voor kleine apparaten, het ene apparaat publiceert een bericht over een "onderwerp" de andere luistert over dat onderwerp om het bericht te ontvangen. Dus HASS zal luisteren, en we hebben iets nodig dat de boodschap publiceert.

Onze sensor weet alleen over de seriële lijn te praten, dus we gebruiken een bord dat een seriële lijn kan lezen en die verbinding kan maken via WIFI en kan praten met de MQTT-server. Een goedkoop bord dat dit doet is de NodeMCU.

De NodeMCU kan worden geprogrammeerd met Arduino IDE. De schets is vrij eenvoudig, hij doet het volgende:

- maakt verbinding met WIFI

- onderhoudt een MQTT-verbinding met de server en probeert de verbinding opnieuw wanneer deze mislukt of verbroken wordt

- luistert naar seriële binnenkomende gegevens als een reeks gehele getallen

- zodra een geheel getal arriveert, stuurt het het via MQTT naar een specifiek onderwerp

Stap 3: Monteer het apparaat

Monteer het apparaat
Monteer het apparaat

We zullen breadboards en draden gebruiken, dus het is vrij eenvoudig, we hebben een paar stappen:

- plaats de NodeMCU op het breadboard

- sluit de geigerbuis aan op de geigerteller (let op polariteit)

- VIN gaat naar geigerteller +

- GND gaat naar geigerteller -

- NodeMCU D7 (pin 13) gaat naar geiger TX

- NodeMCU D8 (pin 15) gaat naar geiger RX

- Power NodeMCU via micro-USB vanaf de computer

Stap 4: Upload de code

Upload de code
Upload de code
Upload de code
Upload de code
Upload de code
Upload de code
Upload de code
Upload de code

We gaan Arduino IDE gebruiken en we zullen ervoor zorgen dat het NodeMCU-bord is geïnstalleerd en de Adafruit_MQTT-bibliotheek is geïnstalleerd.

1. Kloon de github-repository: https://github.com/danionescu0/arduino en kopieer de schets van projects/HASSGeigerIntegration naar uw Arduino-schetsboeklocatie

2. Open Arduino IDE en installeer NodeMCU

- ga naar Bestand -> Voorkeuren, voeg in de URL's van de Additionele Boards Manager https://arduino.esp8266.com/stable/package_esp8266com_index.json toe als je daar al iets hebt, plaats een coma vooraan en klik op ok

- van Tools -> Board -> Board Manager typ "nodemcu" en selecteer het item esp8266 door ESP8266 Community en druk op installeren

3. Installeer Adafruit_MQTT

- ga naar Extra -> Bibliotheken beheren -> zoek "Adafruit_MQTT" en installeer "Arduino MQTT-bibliotheek"

4. Sluit de USB-kabel aan op uw computer en configureer het bord:

- ga naar Extra -> Bord -> selecteer NodeMcu 1.0

- Extra -> Poort -> uw USB-poort

- laat de overige instellingen ongewijzigd

4. Wijzig in de schets uw WIFI-inloggegevens zodat deze overeenkomen met die van u:

#define STASSID "ssid" // Vervang door uw WIFI SSID

#define STAPSK "pass" // Vervang door uw WIFI-wachtwoord

5. Upload de schets naar je bord en reset na het uploaden het bord met de knop

6. Open de seriële monitor, als alles goed is gegaan, zou je wat output als volgt moeten zien:

Opstarten

IP-adres: 192.168.1.168 OTA ingeschakeld Verbinding maken met MQTT… MQTT verbonden! {"straling": 0.03}..

Stap 5: HomeAssistant configureren

HomeAssistant configureren
HomeAssistant configureren
HomeAssistant configureren
HomeAssistant configureren

We gaan ervan uit dat je de thuisassistent in gebruik hebt. Op mijn systeem heb ik HASSOS versie 3.12 op een RaspberryPi. Als uw versie van Home Assistant te oud of erg nieuw is, kunnen sommige functies verschillen. Deze tutorial werkt zeker met versie 3.12.

Als je Home Assistant niet hebt geïnstalleerd, bekijk dan hun officiële installatiehandleiding:

Voordat u doorgaat met de installatie, moet u ervoor zorgen dat de NodeMCU is aangesloten en dat deze gegevens publiceert.

Ok, we hebben hier ook een reeks stappen voor de configuratie:

1. Installeer "bestandseditor" als je het niet in het menu hebt, hier is de officiële tutorial:

2. Bewerk het bestand "/config/configuration.yaml", voeg het volgende toe en sla het op

- de mqtt-sectie als je die nog niet hebt

mqtt:

broker: broker.hivemq.com discovery: true discovery_prefix: ha

- het gedeelte sensoren

sensor:

- platform: mqtt naam: "Straling" state_topic: "ha/straling" unit_of_measurement: 'uSv' unique_id: "straling" value_template: "{{ value_json.radiation }}"

3. Vanuit Configuratie -> Serverbesturing: druk op "Configuratie controleren", controleer het yaml-configuratiebestand op fouten en druk vervolgens op "opnieuw opstarten" en wacht tot het opnieuw is opgestart

4. Vanuit Overzicht -> Menu rechterbovenhoek -> UI configureren -> druk op de knop + rechtsonder

5. Selecteer "sensor" in de lijst -> zoek in het veld "entity" naar "sensor.radiation", in het naamveld schrijf "Radiation" en klik op ok, het zou nu op de hoofdpagina moeten staan

Stap 6: Uw eigen MQTT-server configureren [optioneel]

Laten we het even hebben over MQTT

“MQTT is een Client Server-protocol voor het publiceren/abonneren van berichtentransport. Het is licht van gewicht, open, eenvoudig en zo ontworpen dat het gemakkelijk te implementeren is. Deze kenmerken maken het ideaal voor gebruik in veel situaties, inclusief beperkte omgevingen zoals voor communicatie in Machine to Machine (M2M) en Internet of Things (IoT)-contexten waar een kleine codevoetafdruk vereist is en/of netwerkbandbreedte van groot belang is.”

Citaat uit de officiële MQTT 3.1.1-specificatie.

Dus eigenlijk kunnen we ergens aan de ene kant een bericht publiceren en aan de andere kant kunnen we naar die berichten luisteren en iets met de gegevens doen. MQTT ondersteunt "onderwerpen", onderwerpen zijn strings die de makelaar gebruikt om berichten voor elke klant te filteren, dus als we een bericht publiceren naar het onderwerp "/straling", moet een luisteraar zich abonneren op hetzelfde onderwerp om de berichten te krijgen die we verzenden.

Hier is een geweldige tutorial over MQTT in detail:

Bij het gebruik van de gratis Hive-server zijn er enkele nadelen, zoals:

- iedereen die naar je onderwerp luistert, ontvangt je berichten

- als het uitvalt of later moet worden betaald, kunt u het niet gebruiken (tenzij u betaalt)

- als iemand die berichten publiceert over hetzelfde onderwerp, jij ook hun berichten ontvangt, kunnen ze incompatibele berichten publiceren en je HASS-grafieken breken

Een privéserver gebruiken

Als u de openbare gratis server niet wilt gebruiken, heeft u de mogelijkheid van een privéserver. We gaan de Mosquitto MQTT installeren op een ubuntu / debian-server zoals een raspberry pi of computer.

Mosquitto is een server die het MQTT-protocol implementeert en het is gratis.

Om het te installeren logt u in op uw raspnerry pi of een andere op Debian gebaseerde server en voert u het volgende uit:

sudo apt update

sudo apt install -y mosquitto mosquitto-clients sudo systemctl activeer mosquitto.service

Hiermee wordt de repository bijgewerkt, de mosquiito-server en -client geïnstalleerd en wordt het een service die bij het opstarten wordt uitgevoerd

Om het server-ip uit te voeren:

hostnaam -I

en het zal iets opleveren als:

192.168.1.52 172.17.0.1 172.18.0.1

Dus mijn ip is 192.168.1.52, vervang het in de onderstaande commando's door je eigen ip

U kunt de MQTT-server testen door een bericht te publiceren en te ontvangen met de consoletool, hiervoor moeten twee terminals worden geopend, een die naar een bericht luistert, een die het bericht publiceert.

Voer eerst in een terminal deze opdracht uit om te luisteren naar een bericht over "/some-topic"

mosquitto_sub -h 192.168.1.52 -t /some-topic

Open een andere terminal en publiceer een bericht naar dat onderwerp:

mosquitto_pub -h 192.168.1.52 -t /some-topic -m '{"vochtigheid": 74.0}'

In de eerste terminal zou u ' {"humidity": 74.0}' moeten zien afgedrukt.

Speciale aandacht:

- deze opstelling gaat ervan uit dat HASS, Mosquitto en NodeMCU zijn verbonden met hetzelfde WIFI-netwerk en dat er geen firewallregels zijn en dat ze vrij kunnen communiceren

- de Mosquitt MQTT-server heeft geen gebruikersnaam/wachtwoord, als u referenties wilt instellen, kijk dan eens op: https://www.steves-internet-guide.com/mqtt-username-password-example/ U moet ook configureren de inloggegevens in Home Assistant en in de Arduino-schets

Stap 7: OTA (Over the Air Updates) voor de NodeMCU

Over-the-air updates betekent dat het ontwikkelbord draadloos kan worden geflitst zonder dat er een fysieke kabel nodig is.

Arduino IDE ondersteunt deze functionaliteit voor de ESP8266-serie en enkele andere boards:

- vereist een eerste flits via de USB-kabel

- creëert een virtuele poort via WIFI en is alleen zichtbaar vanaf Arduino IDE

- er is geen seriële foutopsporingsinformatie beschikbaar

- ondersteunt bescherming met wachtwoord

Om OTA in een ESP8266-schets in te schakelen, moet u eerst de bibliotheek opnemen:

#include "ArduinoOTA.h"

Definieer ook deze schetswachtwoordconstante:

#define SKETCHPASS "some_password"

Voeg in de setup-sectie deze regels toe:

while (WiFi.waitForConnectResult() != WL_CONNECTED) {

Serial.println("Verbinding mislukt! Opnieuw opstarten…"); vertraging (5000); ESP.herstart(); } ArduinoOTA.setPassword (SKETCHPASS); ArduinoOTA.onStart(() { String type; if (ArduinoOTA.getCommand() == U_FLASH) { type = "sketch"; } else { // U_FS type = "bestandssysteem";} Serial.println("Start updaten " + typ); }); ArduinoOTA.onEnd(() { Serial.println("\nEnd"); }); ArduinoOTA.onProgress((unsigned int progress, unsigned int totaal) { Serial.printf("Progress: %u%%\r", (progress / (total / 100))); }); ArduinoOTA.onError((ota_error_t error) { Serial.printf("Fout[%u]: ", error); if (error == OTA_AUTH_ERROR) { Serial.println("Auth Failed"); } else if (fout == OTA_BEGIN_ERROR) {Serial.println("Begin mislukt"); } else if (fout == OTA_CONNECT_ERROR) {Serial.println("Verbinding mislukt"); } else if (fout == OTA_RECEIVE_ERROR) {Serial.println(" Ontvangen mislukt"); } else if (fout == OTA_END_ERROR) { Serial.println ("Einde mislukt"); } }); ArduinoOTA.begin(); Serial.print("IP-adres: "); Serial.println(WiFi.localIP());

En voeg in de lussectie deze regel toe:

ArduinoOTA.handle();

Na je eerste code-upload nadat het bord is opgestart, zou je in de Arduino IDE in de sectie Tools->Poort twee soorten poorten moeten zien:

Seriële poorten: /dev/ttyUSB0 (bijvoorbeeld)

Netwerkpoorten: esp8266-xxxxx op 192.168.1.xxx

Nu kunt u de netwerkpoort selecteren en de schets-afstandsbediening uploaden, u wordt gevraagd om het schetswachtwoord (degene die u hierboven in een constante hebt gedefinieerd)

Stap 8: Conclusies, toekomstig werk

Deze tutorial kan eenvoudig worden aangepast om gegevens over andere typen sensoren te verzenden:

- als uw sensor rechtstreeks door NodeMCU wordt ondersteund via een bibliotheek, verzamelt u gewoon gegevens van de sensor en duwt u deze rechtstreeks door MQTT

- als de sensorbibliotheek niet werkt met NodeMCU maar alleen voor Arduino, upload dan je code naar de Arduino, voer de waarde uit via de seriële lijn en lees deze in de NodeMCU en druk erop (net zoals we deden met de geigerteller)

We kunnen het zelfs aanpassen om gegevens van meerdere sensoren te verzenden, zoals:

- sluit uw sensoren aan op de NodeMCU

- pollgegevens van elke sensor

- publiceer voor elk van de sensoren de gegevens naar een ander onderwerp

- definieer in de HASS meerdere sensoren (zoals we deden met de geiger) die naar verschillende onderwerpen zullen luisteren

Aanbevolen: