Kazalo:

Integracija Geigerjevega števca za domačega pomočnika: 8 korakov
Integracija Geigerjevega števca za domačega pomočnika: 8 korakov

Video: Integracija Geigerjevega števca za domačega pomočnika: 8 korakov

Video: Integracija Geigerjevega števca za domačega pomočnika: 8 korakov
Video: как сбросить счетчик коммунальных услуг домашний помощник 2024, November
Anonim
Image
Image
Načelo dela
Načelo dela

V tej vadnici bom pokazal, kako lahko HASS (domači pomočnik) dodate senzorje po meri, natančneje gejgerov števec, vendar je postopek podoben tudi za druge senzorje.

Uporabljali bomo ploščo NodeMCU, geigerjev števec na osnovi arduina in že nameščenega domačega pomočnika.

Integracija bo temeljila na strežniku MQTT (javnem ali zasebnem) in s tem vas bom popeljal korak za korakom.

Če ne veste, kaj je domači pomočnik, obiščite njihovo stran https://www.home-assistant.io/. To je dobro znana platforma za avtomatizacijo doma, ki je zelo dobro vzdrževana in zelo prilagodljiva.

Spoznali boste:

- napredna konfiguracija za domačega pomočnika

- NodeMCU (razvojna plošča) in kako ga programirati z Arduino IDE

- OTA (brezžične posodobitve) z uporabo Arduino IDE za ploščo NodeMCU

- kako priključiti serijsko napravo na NodeMCU

- ročna namestitev strežnika MQTT na Linux (neobvezno)

Osnovne predpostavke:

- imate domačega pomočnika in deluje

- veste nekaj o elektroniki

- imate nameščen Arduino IDE

Korak: Deli in orodja

Deli:

1. Plošča NodeMCU

2. kruh

3. moški-moški in moško-ženski juper žice

3. kabel USB na mikro usb

4. arduino geigerjev števec s serijskim vmesnikom

(na Ebayu poiščite "arduino geiger couter")

5. radioaktivni material (po izbiri majhen preskusni vzorec)

Orodja:

1. Arduino IDE

2. Nameščen Home Assistant

2. korak: Načelo dela

Naš cilj je na HomeAssistatu (HASS) prikazati odčitke iz gejgerjevega števca. Na eni strani imamo strežnik HASS, ki deluje in nekje deluje, morda je to malina pi ali druga naprava, na drugi strani pa imamo geigerjev števec.

Geigerjev števec ima serijska vrata, ena od rešitev bo, da serijska vrata priključite neposredno na RaspberryPi, na katerem deluje HASS.

Nekaj razlogov, zakaj to morda ni dobro:

- tam ni fizičnega prostora

- imamo nekaj drugih naprav na serijskih vratih

- želimo pritrditi okoljski senzor, ki bi ga morali namestiti zunaj Geigerjevega števca

V redu, zato bomo raziskali drugo možnost vzpostavitve povezave prek WIFI:

HASS podpira branje senzorskih podatkov in prikaz tega strežnika prek strežnika MQTT, ki je povezava z majhno težo za majhne naprave. Ena naprava objavi sporočilo na "temo", druga posluša na to temo, da jo prejme. Tako bo HASS prisluhnil in potrebujemo nekaj, kar bo objavilo sporočilo.

Naš senzor se lahko pogovarja samo po serijski liniji, zato bomo uporabili ploščo, ki lahko bere serijsko linijo in se lahko poveže prek WIFI in se pogovarja s strežnikom MQTT. Poceni plošča, ki to počne, je NodeMCU.

NodeMCU je mogoče programirati z Arduino IDE. Skica je precej preprosta, naredi pa naslednje:

- poveže se z WIFI

- vzdržuje povezavo MQTT s strežnikom in znova vzpostavi povezavo, če ni uspela ali prekinjena

- posluša serijske vhodne podatke kot vrsto celih števil

- ko pride celo število, ga pošlje prek MQTT na določeno temo

3. korak: Sestavite napravo

Sestavite napravo
Sestavite napravo

Uporabljali bomo plošče in žice, zato je dokaj preprosto, imamo nekaj korakov:

- postavite NodeMCU na mizo

- Geigerjevo cev priključite na Geigerjev števec (pazite na polarnost)

- VIN gre na geigerjev števec +

- GND goest to geiger counter -

- NodeMCU D7 (pin 13) gre na Geiger TX

- NodeMCU D8 (pin 15) gre na geiger RX

- napajanje NodeMCU prek mikro USB iz računalnika

4. korak: Naložite kodo

Naložite kodo
Naložite kodo
Naložite kodo
Naložite kodo
Naložite kodo
Naložite kodo
Naložite kodo
Naložite kodo

Uporabljali bomo Arduino IDE in poskrbeli, da imamo nameščeno ploščo NodeMCU in knjižnico Adafruit_MQTT.

1. Klonirajte repozitorij github: https://github.com/danionescu0/arduino in kopirajte skico iz projektov/HASSGeigerIntegration na vašo lokacijo skicirk arduino

2. Odprite Arduino IDE in namestite NodeMCU

- pojdite na Datoteka -> Nastavitve, v URL -jih Dodatnih upraviteljev plošč dodajte https://arduino.esp8266.com/stable/package_esp8266com_index.json, če že imate kaj, postavite komo spredaj in kliknite V redu

-iz Orodja -> Plošča -> Upravitelj odbora vnesite "nodemcu" in izberite vnos esp8266 skupnosti ESP8266 ter pritisnite namestitev

3. Namestite Adafruit_MQTT

-pojdite na Orodja -> Upravljanje knjižnic -> poiščite »Adafruit_MQTT« in namestite »Knjižnico Arduino MQTT«

4. Priključite kabel USB v računalnik in konfigurirajte ploščo:

-pojdite na Orodja -> Plošča -> izberite NodeMcu 1.0

-Orodja -> Vrata -> vrata USB

- ostale nastavitve pustite nespremenjene

4. V skici spremenite poverilnice za WIFI tako, da ustrezajo vašim:

#define STASSID "ssid" // Zamenjajte z vašim WIDI SSID

#define STAPSK "pass" // Zamenjajte z geslom za WIFI

5. Naložite skico na svojo ploščo in po nalaganju ponastavite ploščo s tipke

6. Odprite serijski monitor, če je vse v redu, bi morali videti takšen izhod:

Zagon

Naslov IP: 192.168.1.168 OTA omogočeno Povezovanje z MQTT… MQTT Povezano! {"sevanje": 0,03}..

5. korak: Konfigurirajte HomeAssistant

Konfigurirajte HomeAssistant
Konfigurirajte HomeAssistant
Konfigurirajte HomeAssistant
Konfigurirajte HomeAssistant

Predvidevali bomo, da imate domačega pomočnika. V sistemu imam HASSOS različice 3.12 na RaspberryPi. Če je vaša različica domačega pomočnika prestara ali zelo nova, se lahko nekatere funkcije razlikujejo. Ta vadnica zagotovo deluje z različico 3.12.

Če nimate nameščenega domačega pomočnika, si oglejte njegov uradni vodnik za namestitev:

Preden nadaljujete z namestitvijo, se prepričajte, da je NodeMCU priključen in da objavlja podatke.

V redu, tukaj bomo imeli tudi nekaj korakov za konfiguracijo:

1. Namestite "urejevalnik datotek", če ga nimate v meniju, tukaj je uradna vadnica:

2. Uredite datoteko "/config/configuration.yaml" in dodajte to ter jo shranite

- razdelek mqtt, če ga še nimate

mqtt:

posrednik: broker.hivemq.com odkritje: pravo odkritje_preiskave: ha

- odsek senzorjev

senzor:

- platforma: ime mqtt: "sevanje" stanje_teme: "ha/sevanje" enota_mer_merenja: 'uSv' edinstven_id: "sevanje" vrednost_predloga: "{{value_json.radiation}}"

3. V konfiguraciji -> Nadzor strežnika: pritisnite "Preveri konfiguracijo", preverite, ali je v konfiguracijski datoteki yaml napake, nato pritisnite "znova zaženi" in počakajte, da se znova zažene

4. V razdelku Pregled -> zgornji desni kotni meni -> Konfiguriraj uporabniški vmesnik -> pritisnite gumb + v spodnjem desnem kotu

5. S seznama izberite "sensor" -> v polju "entity" poiščite "sensor.radiation", v polje z imenom napišite "Radiation" in kliknite v redu, zdaj bi moralo biti na glavni strani

6. korak: Konfiguriranje lastnega strežnika MQTT [izbirno]

Pogovorimo se malo o MQTT

MQTT je protokol za prenos sporočil za objavo/naročanje strežnika odjemalcev. Je lahek, odprt, preprost in zasnovan tako, da ga je enostavno izvajati. Zaradi teh lastnosti je idealen za uporabo v številnih situacijah, vključno z omejenimi okolji, na primer za komunikacijo v kontekstu med stroji (M2M) in internetom stvari (IoT), kjer je potreben majhen odtis kode in/ali je pasovna širina omrežja na prvem mestu.”

Citiranje iz uradne specifikacije MQTT 3.1.1.

Tako lahko v bistvu objavimo sporočilo nekje na eni strani, na drugi strani pa lahko poslušamo ta sporočila in naredimo nekaj s podatki. MQTT podpirajo "teme", teme so nizovi, ki jih posrednik uporablja za filtriranje sporočil za vsako stranko, zato se mora poslušalec naročiti na isto temo, če želi prejeti sporočila, ki jih pošiljamo.

Tukaj je podroben odličen vodič o MQTT:

Uporaba brezplačnega strežnika za panj ima nekaj pomanjkljivosti, kot so:

- vsak, ki posluša vašo temo, bo prejel vaša sporočila

- če se zniža ali pozneje zahteva plačilo, ga ne boste mogli uporabiti (razen če plačate)

- če kdo, ki objavi sporočila na isto temo, prejmete tudi njihova sporočila, lahko objavi nezdružljiva sporočila in razbije vaše grafikone HASS

Uporaba zasebnega strežnika

Če ne želite uporabljati javnega brezplačnega strežnika, imate možnost zasebnega strežnika. Mosquitto MQTT bomo namestili na strežnik ubuntu / debian, kot je malina pi ali računalnik.

Mosquitto je strežnik, ki uporablja protokol MQTT in je brezplačen.

Če ga želite namestiti, se prijavite v svoj raspnerry pi ali drug strežnik, ki temelji na debianu, in zaženite:

sudo apt posodobitev

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

To bo posodobilo repozitorij, namestilo strežnik in odjemalca Mosquiito in omogočilo storitev, ki se bo izvajala ob zagonu

Če želite ip strežnika izvesti:

ime gostitelja -I

in bo prikazal nekaj takega:

192.168.1.52 172.17.0.1 172.18.0.1

Moj ip je torej 192.168.1.52, v spodnjih ukazih ga zamenjajte z lastnim

Strežnik MQTT lahko preizkusite tako, da objavite sporočilo in ga sprejmete s konzolnim orodjem, za ta dva terminala morate odpreti enega, ki posluša sporočilo, enega, ki bo sporočilo objavil.

Najprej v terminalu zaženite ta ukaz in poslušajte sporočilo o "/some-topic"

mosquitto_sub -h 192.168.1.52 -t /nekaj tem

Odprite drug terminal in objavite sporočilo na to temo:

mosquitto_pub -h 192.168.1.52 -t /some -topic -m '{"vlažnost": 74.0}'

V prvem terminalu bi morali natisniti "{" vlažnost ": 74.0}".

Posebna pozornost:

- ta nastavitev predvideva, da so HASS, Mosquitto in NodeMCU povezani v isto omrežje WIFI in da ni pravil za požarni zid in da lahko prosto komunicirajo

-strežnik Mosquitt MQTT nima uporabniškega imena/gesla. Če želite nastaviti poverilnice, preverite to: https://www.steves-internet-guide.com/mqtt-username-password-example/ Prav tako bi morali konfigurirati poverilnice v domačem pomočniku in skici arduino

7. korak: OTA (Over the Air Updates) za NodeMCU

Brezžične posodobitve pomenijo, da lahko razvojno ploščo brezžično utripate brez potrebe po fizičnem kablu.

Arduino IDE podpira to funkcionalnost za serijo ESP8266 in nekatere druge plošče:

- zahteva začetno bliskavico prek kabla USB

- ustvari navidezna vrata prek WIFI in so vidna samo iz Arduino IDE

- ni na voljo podatkov o odpravljanju napak v seriji

- podpira zaščito z geslom

Če želite omogočiti OTA v skici ESP8266, najprej vključite knjižnico:

#include "ArduinoOTA.h"

Določite tudi to konstantno geslo za skico:

#define SKETCHPASS "some_password"

V razdelku za nastavitev dodajte te vrstice:

medtem ko (WiFi.waitForConnectResult ()! = WL_CONNECTED) {

Serial.println ("Povezava ni uspela! Ponovni zagon …"); zamuda (5000); ESP.restart (); } ArduinoOTA.setPassword (SKETCHPASS); ArduinoOTA.onStart ( () {Vrsta niza; if (ArduinoOTA.getCommand () == U_FLASH) {type = "sketch";} else {// U_FS type = "datotečni sistem";} Serial.println ("Začni posodabljanje " + tip);}); ArduinoOTA.onEnd ( () {Serial.println ("\ nEnd");}); ArduinoOTA. ArduinoOTA.onError ( (ota_error_t error) {Serial.printf ("Error [%u]:", error); if (error == OTA_AUTH_ERROR) {Serial.println ("Auth Failed");} else if (error == OTA_BEGIN_ERROR) {Serial.println ("Začetek ni uspel");} drugače če (napaka == OTA_CONNECT_ERROR) {Serial.println ("Povezava ni uspela");} else if (error == OTA_RECEIVE_ERROR) {Serial.println (" Receive Failed ");} else if (error == OTA_END_ERROR) {Serial.println (" End Failed ");}}); ArduinoOTA.begin (); Serial.print ("IP naslov:"); Serial.println (WiFi.localIP ());

In v razdelku zanke dodajte to vrstico:

ArduinoOTA.handle ();

Po prvem nalaganju kode po zagonu plošče bi morali v Arduino IDE v razdelku Orodja-> Vrata videti dve vrsti vrat:

Zaporedna vrata: /dev /ttyUSB0 (na primer)

Omrežna vrata: esp8266-xxxxx na 192.168.1.xxx

Zdaj lahko izberete omrežna vrata in naložite daljinski upravljalnik skice, pozvani boste k vnosu gesla za skico (tistega, ki ste ga definirali v zgornji konstanti)

8. korak: Zaključki, prihodnje delo

To vadnico lahko preprosto spremenite za pošiljanje podatkov o drugih vrstah senzorjev:

- če NodeMCU neposredno podpira vaš senzor prek knjižnice, samo združite podatke s senzorja in jih neposredno potisnite skozi MQTT

- če knjižnica senzorjev ne deluje z NodeMCU, ampak je samo za Arduino, nato naložite svojo kodo v arduino, vrednost vnesite skozi serijsko vrstico in jo preberite v NodeMCU ter jo potisnite (tako kot smo to storili z gejgerjevim števcem)

Lahko ga celo spremenimo za pošiljanje podatkov iz več senzorjev, na primer:

- povežite svoje senzorje z NodeMCU

- podatki ankete za vsak senzor

- za vsak senzor objavite podatke na drugo temo

- v sistemu HASS določite več senzorjev (kot smo to storili pri geigerju), ki bodo poslušali različne teme

Priporočena: