Innholdsfortegnelse:

Hjemmeassistent Geiger Counter Integration: 8 trinn
Hjemmeassistent Geiger Counter Integration: 8 trinn

Video: Hjemmeassistent Geiger Counter Integration: 8 trinn

Video: Hjemmeassistent Geiger Counter Integration: 8 trinn
Video: Торий 2024, Juli
Anonim
Image
Image
Arbeidsprinsipp
Arbeidsprinsipp

I denne opplæringen skal jeg vise hvordan du legger til egendefinerte sensorer til HASS (hjemmeassistent) nærmere bestemt en geigerteller, men prosessen er lik for andre sensorer også.

Vi bruker NodeMCU -kortet, en arduino -basert geigerteller og en allerede installert hjemmeassistent.

Integrasjonen vil være basert på en MQTT -server (offentlig eller privat), og jeg skal ta deg trinn for trinn med dette.

Hvis du ikke vet hva som er hjemmeassistent, kan du besøke siden deres https://www.home-assistant.io/. Det er en velkjent hjemmeautomatiseringsplattform som er veldig godt vedlikeholdt og svært tilpassbar.

Du lærer om:

- avansert konfigurasjon for Home Assistant

- NodeMCU (utviklingstavle) og hvordan du programmerer det med Arduino IDE

- OTA (over the air -oppdateringer) ved hjelp av Arduino IDE for NodeMCU -kortet

- hvordan koble en seriell enhet til NodeMCU

- manuell installering av en MQTT -server på linux (valgfritt)

Grunnleggende forutsetninger:

- du har Home Assistant i gang

- du kan litt om elektronikk

- du har Arduino IDE installert

Trinn 1: Deler og verktøy

Deler:

1. NodeMCU -kort

2. brødbord

3. hann-hann og mann-hunn-juper-ledninger

3. USB til mikro USB kabel

4. arduino geigerteller med serielt grensesnitt

(søk på Ebay etter "arduino geiger couter")

5. radioaktivt materiale (valgfri en liten testprøve)

Verktøy:

1. Arduino IDE

2. Hjemmeassistent installert

Trinn 2: Arbeidsprinsipp

Målet vårt er å vise på HomeAssistat (HASS) avlesningene fra geigertelleren. På den ene siden har vi en HASS -server som er i gang et sted, det kan være en bringebærpi eller annen enhet, og på den andre siden har vi geigertelleren.

Geigertelleren har en seriell port, en løsning vil være å koble den serielle porten direkte til RaspberryPi som HASS kjører på.

Noen grunner til at det ikke er en god ide:

- det er ingen fysisk plass der

- vi har en annen enhet på serieporten

- vi ønsker å feste en miljøsensor som skal plasseres utenfor i stedet for geigertelleren

Ok, så vi skal utforske en annen mulighet for å gjøre tilkoblingen gjennom WIFI:

HASS støtter lesing av sensordata og viser at gjennom en MQTT -server er denne typen server en lett vektforbindelse for små enheter, en enhet publiserer en melding om et "emne", den andre lytter om det emnet for å motta meldingen. Så HASS vil lytte, og vi trenger noe som vil publisere meldingen.

Sensoren vår vet bare å snakke over den serielle linjen, så vi bruker et kort som kan lese en seriell linje og som kan koble til over WIFI og snakke med MQTT -serveren. Et billig brett som gjør dette er NodeMCU.

NodeMCU kan programmeres med Arduino IDE. Skissen er ganske enkel, den gjør følgende:

- kobles til WIFI

- opprettholder en MQTT -tilkobling med serveren og prøver tilkoblingen på nytt når den mislykkes eller kobles fra

- lytter til innkommende serielle data som en rekke heltall

- når et heltall kommer, sender det det gjennom MQTT til et bestemt emne

Trinn 3: Sett sammen enheten

Sett sammen enheten
Sett sammen enheten

Vi bruker brødbrett og ledninger, så det er ganske enkelt, vi har noen få trinn:

- legg NodeMCU på brødbrettet

- koble geigerrøret til geigertelleren (se opp for polaritet)

- VIN går til geiger counter +

- GND går til geigerteller -

- NodeMCU D7 (pin 13) går til geiger TX

- NodeMCU D8 (pin 15) går til geiger RX

- strøm NodeMCU via mikro -USB fra datamaskinen

Trinn 4: Last opp koden

Last opp koden
Last opp koden
Last opp koden
Last opp koden
Last opp koden
Last opp koden
Last opp koden
Last opp koden

Vi skal bruke Arduino IDE, og vi vil sørge for at vi har NodeMCU -kortet installert og Adafruit_MQTT -biblioteket installert.

1. Klon github -depotet: https://github.com/danionescu0/arduino og kopier skissen fra prosjekter/HASSGeigerIntegration til din arduino -skissebokplassering

2. Åpne Arduino IDE og installer NodeMCU

- gå til Fil -> Preferanser, i tilleggsstyrene for URL -adresser legger du til https://arduino.esp8266.com/stable/package_esp8266com_index.json hvis du allerede har noe der, legger du koma foran og klikker ok

-fra Tools -> Board -> Board Manager skriv "nodemcu" og velg oppføringen esp8266 av ESP8266 Community, og trykk installer

3. Installer Adafruit_MQTT

-gå til Verktøy -> Administrer biblioteker -> søk "Adafruit_MQTT" og installer "Arduino MQTT bibliotek"

4. Koble til USB -kabelen i datamaskinen og konfigurer kortet:

-gå til Verktøy -> Brett -> velg NodeMcu 1.0

-Verktøy -> Port -> USB -porten

- la de andre innstillingene være uendret

4. Endre WIFI -legitimasjonen din i skissen for å matche din egen:

#define STASSID "ssid" // Erstatt med WIFI SSID

#define STAPSK "pass" // Erstatt med WIFI -passordet ditt

5. Last opp skissen til brettet ditt, og etter opplastingen tilbakestill brettet fra knappen

6. Åpne den serielle skjermen. Hvis alt har gått bra, bør du se noe output som dette:

Oppstart

IP -adresse: 192.168.1.168 OTA aktivert Kobler til MQTT … MQTT tilkoblet! {"stråling": 0,03}..

Trinn 5: Konfigurer HomeAssistant

Konfigurer HomeAssistant
Konfigurer HomeAssistant
Konfigurer HomeAssistant
Konfigurer HomeAssistant

Vi kommer til å anta at du har hjemmeassistent i gang. På systemet mitt har jeg HASSOS versjon 3.12 på en RaspberryPi. Hvis din versjon av hjemmeassistent er for gammel eller veldig ny, kan noen funksjoner variere. Denne opplæringen fungerer sikkert med 3.12 -versjonen.

Hvis du ikke har Home Assistant installert, kan du sjekke den offisielle installasjonsveiledningen:

Kontroller at NodeMCU er plugget og publiserer data før du fortsetter med installasjonen.

Ok, vi vil også ha en rekke trinn her for konfigurasjonen:

1. Installer "fileditor" hvis du ikke har den i menyen, her er den offisielle opplæringen:

2. Rediger "/config/configuration.yaml" -filen, legg til følgende og lagre den

- mqtt -delen hvis du ikke allerede har den

mqtt:

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

- sensordelen

sensor:

- plattform: mqtt navn: "Stråling" state_topic: "ha/stråling" enhet_for_måling: 'uSv' unik_id: "stråling" verdi_templat: "{{value_json.radiation}}"

3. Fra Konfigurasjon -> Serverkontroller: Trykk på "Kontroller konfigurasjon", kontroller Yamal -konfigurasjonsfilen for feil, og trykk deretter "Start på nytt" og vent til den er startet på nytt

4. Fra Oversikt -> Meny øverst til høyre -> Konfigurer brukergrensesnitt -> trykk på + -knappen nederst til høyre

5. Velg "sensor" fra listen -> i "enhet" -feltet søk etter "sensor.radiation", i navnefeltet skriv "Stråling" og klikk ok, det skal være på hovedsiden nå

Trinn 6: Konfigurering av din egen MQTT -server [valgfritt]

La oss diskutere litt om MQTT

“MQTT er en klienttjener -publiserings-/abonnementsmeldingstransportprotokoll. Den er lett, åpen, enkel og designet for å være enkel å implementere. Disse egenskapene gjør den ideell for bruk i mange situasjoner, inkludert begrensede miljøer som for kommunikasjon i Machine to Machine (M2M) og Internet of Things (IoT) sammenhenger der det kreves et lite kodefotavtrykk og/eller nettverksbåndbredde.”

Sitat fra den offisielle MQTT 3.1.1 -spesifikasjonen.

Så i utgangspunktet kan vi publisere en melding et sted på den ene siden, og på den andre siden kan vi lytte etter disse meldingene og gjøre noe med dataene. MQTT støtter "emner", emner er strenger som megleren bruker til å filtrere meldinger for hver klient, så hvis vi publiserer en melding til "/stråling" -emne, må en lytter abonnere på det samme emnet for å få meldingene vi sender.

Her er en flott opplæring om MQTT i detalj:

Ved å bruke gratis bikube -server er det noen ulemper som:

- alle som lytter til emnet ditt, vil motta meldingene dine

- hvis den går ned eller krever betaling senere, vil du ikke kunne bruke den (med mindre du betaler)

- hvis noen som publiserer meldinger til det samme emnet, vil du også motta meldingene sine, kan de publisere inkompatible meldinger og bryte HASS -grafene dine

Bruker en privat server

Hvis du ikke vil bruke den offentlige gratis serveren, har du muligheten til en privat server. Vi skal installere Mosquitto MQTT på en ubuntu / debian server som en bringebær pi eller datamaskin.

Mosquitto er en server som implementerer MQTT -protokollen, og den er gratis.

For å installere det logger du på raspnerry pi eller annen debianbasert server og kjører:

sudo apt oppdatering

sudo apt install -y mygg mosquitto -klienter sudo systemctl aktiver mosquitto.service

Dette vil oppdatere depotet, installere myggserver og klient og gjøre det mulig å kjøre en tjeneste ved oppstart

For å få serveren ip kjøre:

vertsnavn -I

og det kommer ut noe som:

192.168.1.52 172.17.0.1 172.18.0.1

Så min ip er 192.168.1.52, i kommandoene nedenfor erstatt den med din egen ip

Du kan teste MQTT -serveren ved å publisere en melding og motta den med konsollverktøyet, for disse to terminalene må åpnes, en som lytter etter en melding, en som vil publisere meldingen.

Først i en terminal, kjør denne kommandoen for å lytte etter en melding om "/some-topic"

mosquitto_sub -h 192.168.1.52 -t /some -topic

Åpne en annen terminal og publiser en melding til emnet:

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

I den første terminalen bør du se "{" fuktighet ": 74.0}" skrevet ut.

Spesiell oppmerksomhet:

- dette oppsettet forutsetter at HASS, Mosquitto og NodeMCU er koblet til det samme WIFI -nettverket og det er ingen brannmurregler og de kan kommunisere fritt

-Mosquitt MQTT-serveren har ikke noe brukernavn/passord. Hvis du vil konfigurere legitimasjon, sjekk dette: https://www.steves-internet-guide.com/mqtt-username-password-example/ Du må også konfigurere legitimasjonen i Home Assistant og i arduino -skissen

Trinn 7: OTA (Over the Air Updates) for NodeMCU

Over the air -oppdateringer betyr at utviklingskortet kan blinkes trådløst uten behov for en fysisk kabel.

Arduino IDE støtter denne funksjonaliteten for ESP8266 -serien og noen andre brett:

- krever innledende blits over USB -kabelen

- oppretter en virtuell port over WIFI, og den er bare synlig fra Arduino IDE

- ingen seriell feilsøkingsinformasjon er tilgjengelig

- støtter beskyttelse med passord

For å aktivere OTA i en ESP8266 -skisse må du først inkludere biblioteket:

#inkludere "ArduinoOTA.h"

Definer også denne skisse -passordkonstanten:

#define SKETCHPASS "some_password"

Legg til disse linjene i oppsettseksjonen:

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

Serial.println ("Tilkoblingen mislyktes! Omstart …"); forsinkelse (5000); ESP.start (); } ArduinoOTA.setPassword (SKETCHPASS); ArduinoOTA.onStart ( () {String type; if (ArduinoOTA.getCommand () == U_FLASH) {type = "sketch";} else {// U_FS type = "filesystem";} Serial.println ("Start oppdatering " + type);}); ArduinoOTA.onEnd ( () {Serial.println ("\ nEnd");}); ArduinoOTA.onProgress ( (unsigned int progress, unsigned int total) {Serial.printf ("Progress:%u %% / r", (progress / (total / 100)));}); ArduinoOTA.onError ( (ota_error_t feil) {Serial.printf ("Feil [%u]:", feil); hvis (feil == OTA_AUTH_ERROR) {Serial.println ("Auth mislyktes");} ellers hvis (feil == OTA_BEGIN_ERROR) {Serial.println ("Start mislyktes");} annet hvis (error == OTA_CONNECT_ERROR) {Serial.println ("Koble til mislyktes");} ellers hvis (feil == OTA_RECEIVE_ERROR) {Serial.println (" Motta mislyktes ");} ellers hvis (feil == OTA_END_ERROR) {Serial.println (" Slutt mislyktes ");}}); ArduinoOTA.begin (); Serial.print ("IP -adresse:"); Serial.println (WiFi.localIP ());

Og i sløyfedelen legger du til denne linjen:

ArduinoOTA.handle ();

Etter den første opplastingen av koden etter at brettet har startet opp, bør du se to typer porter i Arduino IDE i Verktøy-> Port-delen:

Serielle porter: /dev /ttyUSB0 (for eksempel)

Nettverksporter: esp8266-xxxxx på 192.168.1.xxx

Nå kan du velge nettverksport og laste opp skisse -fjernkontrollen. Du blir bedt om skisse -passordet (det du har definert i en konstant ovenfor)

Trinn 8: Konklusjoner, fremtidig arbeid

Denne opplæringen kan enkelt endres for å sende data om andre typer sensorer:

- hvis sensoren din støttes direkte av NodeMCU gjennom et bibliotek, er det bare å samle data fra sensoren og skyve den direkte gjennom MQTT

- hvis sensorbiblioteket ikke fungerer med NodeMCU, men det er bare for Arduino, last deretter opp koden til arduinoen, send ut verdien gjennom serielinjen og les den i NodeMCU og skyv den (akkurat som vi gjorde med geigertelleren)

Vi kan til og med endre den for å sende data fra flere sensorer slik:

- koble sensorene dine til NodeMCU

- avstemningsdata fra hver sensor

- for hver av sensorene publisere dataene til et annet emne

- i HASS definere flere sensorer (som vi gjorde med geiger) som vil lytte til forskjellige emner

Anbefalt: