Turinys:

Namų asistento Geigerio skaitiklio integravimas: 8 žingsniai
Namų asistento Geigerio skaitiklio integravimas: 8 žingsniai

Video: Namų asistento Geigerio skaitiklio integravimas: 8 žingsniai

Video: Namų asistento Geigerio skaitiklio integravimas: 8 žingsniai
Video: Statybų Asistentas - namų remontas, apdailos darbai 2024, Lapkritis
Anonim
Image
Image
Darbo principas
Darbo principas

Šioje pamokoje aš parodysiu, kaip galite pridėti pasirinktinius jutiklius prie HASS (namų asistentas), tiksliau, geigerio skaitiklio, tačiau procesas yra panašus ir kitiems jutikliams.

Mes naudosime „NodeMCU“plokštę, „arduino“pagrįstą geigerio skaitiklį ir jau įdiegtą namų asistentą.

Integracija bus pagrįsta MQTT serveriu (viešu ar privačiu), ir aš jums padėsiu žingsnis po žingsnio.

Jei nežinote, kas yra namų asistentas, apsilankykite jų puslapyje https://www.home-assistant.io/. Tai gerai žinoma namų automatikos platforma, kuri yra labai gerai prižiūrima ir labai pritaikoma.

Jūs sužinosite apie:

- išplėstinė namų asistento konfigūracija

- „NodeMCU“(kūrimo lenta) ir kaip ją užprogramuoti naudojant „Arduino IDE“

- OTA (atnaujinimai per orą) naudojant „Arduino IDE“, skirtą „NodeMCU“plokštei

- kaip prijungti nuoseklųjį įrenginį prie „NodeMCU“

- rankiniu būdu įdiegti MQTT serverį „Linux“(neprivaloma)

Pagrindinės prielaidos:

- turite paleisti namų asistentą

- tu šiek tiek žinai apie elektroniką

- turite įdiegtą „Arduino IDE“

1 žingsnis: dalys ir įrankiai

Dalys:

1. „NodeMCU“plokštė

2. duonkepė

3. vyriškos lyties ir vyriškos lyties laidai

3. USB -micro USB kabelis

4. arduino geiger skaitiklis su nuoseklia sąsaja

(„Ebay“ieškokite „arduino geiger couter“)

5. radioaktyviosios medžiagos (pasirinktinai nedidelis bandinys)

Įrankiai:

1. „Arduino IDE“

2. Įdiegtas namų asistentas

2 žingsnis: darbo principas

Mūsų tikslas yra „HomeAssistat“(HASS) parodyti geigerio skaitiklio rodmenis. Vienoje pusėje veikia ir veikia kažkur HASS serveris, tai gali būti aviečių pi ar kitas įrenginys, o kitoje pusėje yra geigerio skaitiklis.

Geigerio skaitiklis turi nuoseklųjį prievadą, vienas iš sprendimų bus tiesiogiai prijungti nuoseklųjį prievadą prie RaspberryPi, kuriame veikia HASS.

Keletas priežasčių, kodėl tai gali būti ne gera idėja:

- ten nėra fizinės erdvės

- serijiniame prievade turime kokį nors kitą įrenginį

- norime pritvirtinti aplinkos jutiklį, kuris turėtų būti pastatytas lauke, o ne geigerio skaitiklis

Gerai, todėl išnagrinėsime kitą galimybę užmegzti ryšį per WIFI:

HASS palaiko jutiklių duomenų skaitymą ir parodo, kad per MQTT serverį tokio tipo serveris yra mažo svorio įrenginys, skirtas mažiems įrenginiams, vienas įrenginys paskelbia pranešimą „tema“, kitas klausosi tos temos, kad gautų pranešimą. Taigi HASS išklausys ir mums reikia kažko, kas paskelbs pranešimą.

Mūsų jutiklis žino tik kalbėti per nuosekliąją liniją, todėl naudosime plokštę, kuri gali nuskaityti nuosekliąją liniją ir kuri gali prisijungti per WIFI ir kalbėtis su MQTT serveriu. Pigi plokštė, kuri tai daro, yra „NodeMCU“.

„NodeMCU“galima užprogramuoti naudojant „Arduino IDE“. Eskizas yra gana paprastas, jis atlieka šiuos veiksmus:

- jungiasi prie WIFI

- palaiko MQTT ryšį su serveriu ir iš naujo bando prisijungti, kai nepavyksta arba atsijungia

- klausosi gaunamų serijinių duomenų kaip sveikųjų skaičių serijos

- Kai sveikas skaičius atvyksta, jis siunčia jį per MQTT į konkrečią temą

3 žingsnis: Surinkite įrenginį

Surinkite prietaisą
Surinkite prietaisą

Mes naudosime duonos lentas ir laidus, todėl tai gana paprasta, turime atlikti kelis veiksmus:

- padėkite „NodeMCU“ant duonos lentos

- prijunkite geigerio vamzdelį prie geigerio skaitiklio (saugokitės poliškumo)

- VIN eina į geigerio skaitiklį +

- GND eina į geigerio skaitiklį -

- „NodeMCU D7“(13 kaištis) eina į „Geiger TX“

- „NodeMCU D8“(15 kaištis) eina į „Geiger RX“

- maitinkite „NodeMCU“per kompiuterio mikro USB

4 veiksmas: įkelkite kodą

Įkelkite kodą
Įkelkite kodą
Įkelkite kodą
Įkelkite kodą
Įkelkite kodą
Įkelkite kodą
Įkelkite kodą
Įkelkite kodą

Mes naudosime „Arduino IDE“ir įsitikinsime, kad įdiegta „NodeMCU“plokštė ir įdiegta „Adafruit_MQTT“biblioteka.

1. Klonuokite „Github“saugyklą: https://github.com/danionescu0/arduino ir nukopijuokite eskizą iš projektų/HASSGeigerIntegration į savo arduino eskizų knygos vietą

2. Atidarykite „Arduino IDE“ir įdiekite „NodeMCU“

- eikite į Failas -> Nuostatos, papildomų lentų tvarkytuvės URL adresuose pridėkite https://arduino.esp8266.com/stable/package_esp8266com_index.json, jei jau turite ką nors, įdėkite komą į priekį ir spustelėkite gerai

-iš Tools -> Board -> Board Manager įveskite „nodemcu“ir pasirinkite ESP8266 Community įrašą esp8266 ir paspauskite install

3. Įdiekite „Adafruit_MQTT“

-eikite į Įrankiai -> Tvarkyti bibliotekas -> ieškokite „Adafruit_MQTT“ir įdiekite „Arduino MQTT biblioteka“

4. Prijunkite USB kabelį prie kompiuterio ir sukonfigūruokite plokštę:

-eikite į Įrankiai -> Lenta -> pasirinkite „NodeMcu 1.0“

-Įrankiai -> Prievadas -> jūsų USB prievadas

- palikite kitus nustatymus nepakeistus

4. Eskize pakeiskite savo WIFI prisijungimo duomenis, kad jie atitiktų jūsų:

#define STASSID "ssid" // Pakeiskite savo WIFI SSID

#define STAPSK "pass" // Pakeiskite savo WIFI slaptažodžiu

5. Įkelkite eskizą į savo lentą ir po įkėlimo iš naujo nustatykite lentą iš mygtuko

6. Atidarykite nuoseklųjį monitorių, jei viskas gerai, turėtumėte pamatyti tokią išvestį:

Paleidimas

IP adresas: 192.168.1.168 Įjungta OTA Prisijungimas prie MQTT … MQTT prijungtas! {„spinduliuotė“: 0,03}..

5 veiksmas: sukonfigūruokite „HomeAssistant“

„HomeAssistant“konfigūravimas
„HomeAssistant“konfigūravimas
„HomeAssistant“konfigūravimas
„HomeAssistant“konfigūravimas

Darysime prielaidą, kad turite namų asistentą ir jis veikia. Mano sistemoje turiu RaspberryPi HASSOS 3.12 versiją. Jei jūsų namų asistento versija yra per sena arba labai nauja, kai kurios funkcijos gali skirtis. Ši pamoka tikrai veikia su 3.12 versija.

Jei jūsų namuose nėra įdiegtas asistentas, peržiūrėkite jų oficialų diegimo vadovą:

Prieš pradėdami diegti, įsitikinkite, kad „NodeMCU“yra prijungtas ir skelbia duomenis.

Gerai, čia taip pat atliksime keletą konfigūracijos veiksmų:

1. Įdiekite „failų redaktorių“, jei jo neturite meniu, čia yra oficiali pamoka:

2. Redaguokite „/config/configuration.yaml“failą, pridėkite toliau nurodytą ir išsaugokite

- „mqtt“skyrius, jei jo dar neturite

mqtt:

brokeris: broker.hivemq.com atradimas: tikras atradimas_prefiksas: ha

- jutiklių skyrius

jutiklis:

- platforma: mqtt name: "Radiation" state_topic: "ha/spinduliuotė" unit_of_measurement: 'uSv' unique_id: "spinduliuotė" value_template: "{{value_json.radiation}}"

3. Iš konfigūracijos -> serverio valdikliai: paspauskite „Tikrinti konfigūraciją“, kad patikrintumėte „yaml“konfigūracijos failą, ar nėra klaidų, tada paspauskite „iš naujo“ir palaukite, kol jis bus paleistas iš naujo

4. Iš apžvalgos -> Viršutinio dešiniojo kampo meniu -> Konfigūruoti vartotojo sąsają -> paspauskite + mygtuką apačioje dešinėje

5. Iš sąrašo pasirinkite „jutiklis“-> lauke „objektas“ieškokite „sensor.radiation“, pavadinimo lauke įrašykite „Radiation“ir spustelėkite „OK“, dabar jis turėtų būti pagrindiniame puslapyje

6 veiksmas: savo MQTT serverio konfigūravimas [neprivaloma]

Pakalbėkime šiek tiek apie MQTT

„MQTT yra klientų serverio skelbimo/prenumeratos pranešimų perdavimo protokolas. Jis yra lengvas, atviras, paprastas ir suprojektuotas taip, kad jį būtų lengva įgyvendinti. Dėl šių savybių jis idealiai tinka naudoti daugelyje situacijų, įskaitant suvaržytą aplinką, pvz., Komunikaciją mašinų ir mašinų (M2M) ir daiktų interneto (daiktų interneto) kontekstuose, kur reikalingas nedidelis kodo pėdsakas ir (arba) tinklo pralaidumas. “

Citata iš oficialios MQTT 3.1.1 specifikacijos.

Taigi iš esmės mes galime paskelbti pranešimą kažkur vienoje pusėje, o kitoje pusėje galime klausytis tų pranešimų ir ką nors padaryti su duomenimis. MQTT palaiko „temas“, temos yra eilutės, kurias brokeris naudoja filtruodamas kiekvieno kliento pranešimus, taigi, jei paskelbsime pranešimą „/radiacijos“tema, klausytojas turi užsiprenumeruoti tą pačią temą, kad gautų siunčiamus pranešimus.

Čia yra puiki pamoka apie MQTT išsamiai:

Naudojant nemokamą avilio serverį yra keletas trūkumų, tokių kaip:

- visi, klausantys jūsų temos, gaus jūsų žinutes

- jei jis sumažės arba reikės sumokėti vėliau, negalėsite juo naudotis (nebent sumokėsite)

- jei kas nors, skelbiantis tos pačios temos pranešimus, gausite ir jūs, jie gali paskelbti nesuderinamus pranešimus ir sulaužyti jūsų HASS grafikus

Naudojant privatų serverį

Jei nenorite naudotis viešuoju nemokamu serveriu, galite pasirinkti privatų serverį. Mes ketiname įdiegti „Mosquitto MQTT“„Ubuntu“/ „debian“serveryje, pavyzdžiui, „aviečių pi“ar kompiuteryje.

„Mosquitto“yra nemokamas serveris, įgyvendinantis MQTT protokolą.

Norėdami jį įdiegti, prisijunkite prie savo „raspnerry pi“ar kito „Debian“serverio ir paleiskite:

sudo apt atnaujinimas

sudo apt install -y mosquitto mosquitto -customers sudo systemctl įgalina mosquitto.service

Tai atnaujins saugyklą, įdiegs uodų serverį ir klientą ir įgalins paslaugą paleisti paleidžiant

Norėdami gauti serverio ip vykdymą:

pagrindinio kompiuterio vardas -aš

ir jis išves kažką panašaus:

192.168.1.52 172.17.0.1 172.18.0.1

Taigi mano ip yra 192.168.1.52, žemiau pateiktose komandose pakeiskite jį savo IP

Galite išbandyti MQTT serverį paskelbdami pranešimą ir gavę jį naudodami konsolės įrankį, nes šiems dviem terminalams turi būti atidarytas tas, kuris klausosi pranešimo, o kitas - skelbimas.

Pirmiausia terminale paleiskite šią komandą, kad išklausytumėte pranešimą „/some-topic“

mosquitto_sub -h 192.168.1.52 -t /some -topic

Atidarykite kitą terminalą ir paskelbkite pranešimą ta tema:

mosquitto_pub -h 192.168.1.52 -t /some -topic -m '{"drėgmė": 74.0}'

Pirmame terminale turėtumėte pamatyti atspausdintą „{" drėgmė ": 74.0} '.

Ypatingas dėmesys:

- ši sąranka daro prielaidą, kad HASS, Mosquitto ir NodeMCU yra prijungti prie to paties WIFI tinklo ir nėra ugniasienės taisyklių ir jie gali laisvai bendrauti

-„Mosquitt MQTT“serveryje nėra vartotojo vardo/slaptažodžio, jei norite nustatyti kredencialus, patikrinkite tai: https://www.steves-internet-guide.com/mqtt-username-password-example/ Taip pat turėsite sukonfigūruoti „Home Assistant“ir „arduino“eskizo įgaliojimai

7 veiksmas: „NodeMCU“OTA (atnaujinimas per orą)

Atnaujinimai per orą reiškia, kad kūrimo plokštę galima sumontuoti belaidžiu būdu, nereikalaujant fizinio kabelio.

„Arduino IDE“palaiko šią ESP8266 serijos ir kai kurių kitų plokščių funkciją:

- reikalinga pradinė blykstė per USB kabelį

- sukuria virtualų prievadą per WIFI ir jis matomas tik iš „Arduino IDE“

- nėra serijos derinimo informacijos

- palaiko apsaugą slaptažodžiu

Norėdami įjungti OTA ESP8266 eskize, pirmiausia įtraukite biblioteką:

#įtraukti „ArduinoOTA.h“

Taip pat apibrėžkite šią eskizo slaptažodžio konstantą:

#define SKETCHPASS "some_password"

Sąrankos skiltyje pridėkite šias eilutes:

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

Serial.println ("Nepavyko prisijungti! Perkraunama …"); vėlavimas (5000); ESP.restart (); } ArduinoOTA.setPassword (SKETCHPASS); ArduinoOTA.onStart ( () {Stygos tipas; if (ArduinoOTA.getCommand () == U_FLASH) {type = "sketch";} else {// U_FS type = "filesystem";} Serial.println ("Pradėti atnaujinti " + tipas);}); ArduinoOTA.onEnd ( () {Serial.println ("\ nPabaigos");}); ArduinoOTA.onProgress ( (nepasirašyta int pažanga, nepasirašyta int viso) {Serial.printf ("Progress:%u %% / r", (progress / (total / 100)));}); ArduinoOTA.onError ( (ota_error_t klaida) {Serial.printf („Klaida [%u]:“, klaida); if (error == OTA_AUTH_ERROR) {Serial.println („Auth Failed“);} else if (error == OTA_BEGIN_ERROR) {Serial.println ("Pradėti nepavyko");} else if (error == OTA_CONNECT_ERROR) {Serial.println ("Nepavyko prisijungti");} else if (error == OTA_RECEIVE_ERROR) {Serial.println (" Gauti nepavyko ");} else if (error == OTA_END_ERROR) {Serial.println (" Pabaiga nepavyko ");}}); ArduinoOTA.begin (); Serial.print („IP adresas:“); Serial.println (WiFi.localIP ());

Ir kilpos skyriuje pridėkite šią eilutę:

„ArduinoOTA.handle“();

Įkėlus pradinį kodą po to, kai lenta paleidžiama, „Arduino IDE“skiltyje Įrankiai-> Uostas turėtumėte pamatyti dviejų tipų prievadus:

Serijiniai prievadai: /dev /ttyUSB0 (pavyzdžiui)

Tinklo prievadai: esp8266-xxxxx, 192.168.1.xxx

Dabar galite pasirinkti tinklo prievadą ir įkelti eskizo nuotolinio valdymo pultą, būsite paraginti įvesti eskizo slaptažodį (tą, kurį apibrėžėte aukščiau esančioje konstantoje)

8 žingsnis: Išvados, būsimas darbas

Ši pamoka gali būti lengvai pakeista, kad būtų galima siųsti duomenis apie kitų tipų jutiklius:

- jei jūsų jutiklį tiesiogiai palaiko „NodeMCU“per biblioteką, tiesiog surinkite jutiklio duomenis ir tiesiogiai stumkite juos per MQTT

- jei jutiklių biblioteka neveikia su „NodeMCU“, bet skirta tik „Arduino“, įkelkite savo kodą į „arduino“, išveskite vertę per serijinę liniją ir perskaitykite ją „NodeMCU“ir paspauskite (kaip ir su geigerio skaitikliu)

Mes netgi galime jį pakeisti, kad būtų siunčiami duomenys iš kelių jutiklių:

- prijunkite jutiklius prie „NodeMCU“

- apklausos duomenys iš kiekvieno jutiklio

- kiekvieno jutiklio duomenys skelbiami skirtinga tema

- HASS apibrėžkite kelis jutiklius (kaip tai darėme su geigeriu), kurie klausysis skirtingų temų

Rekomenduojamas: