Spisu treści:

Home Assistant Integracja licznika Geigera: 8 kroków
Home Assistant Integracja licznika Geigera: 8 kroków

Wideo: Home Assistant Integracja licznika Geigera: 8 kroków

Wideo: Home Assistant Integracja licznika Geigera: 8 kroków
Wideo: Scentroid's CTAir Continuous Urban Air Quality Monitor Seminar A 12.08.2020 (Subtitled) 2024, Listopad
Anonim
Image
Image
Zasada pracy
Zasada pracy

W tym samouczku pokażę, jak dodać niestandardowe czujniki do HASS (asystenta domowego), a dokładniej licznika geigera, ale proces jest podobny również dla innych czujników.

Będziemy używać płytki NodeMCU, licznika Geigera opartego na arduino i już zainstalowanego asystenta domowego.

Integracja będzie się opierać na serwerze MQTT (publicznym lub prywatnym) i zajmę się tym krok po kroku.

Jeśli nie wiesz, co to jest asystent domowy, odwiedź ich stronę https://www.home-assistant.io/. Jest to dobrze znana platforma automatyki domowej, która jest bardzo dobrze utrzymana i wysoce konfigurowalna.

Dowiesz się o:

- zaawansowana konfiguracja Home Assistant

- NodeMCU (płytka rozwojowa) i jak ją zaprogramować za pomocą Arduino IDE

- OTA (aktualizacje bezprzewodowe) za pomocą Arduino IDE dla płyty NodeMCU

- jak podłączyć urządzenie szeregowe do NodeMCU

- ręczna instalacja serwera MQTT na linuksie (opcjonalnie)

Podstawowe założenia:

- masz włączonego Home Assistant

- wiesz trochę o elektronice

- masz zainstalowane Arduino IDE

Krok 1: Części i narzędzia

Części:

1. Płyta NodeMCU

2. chlebek

3. przewody juper męsko-męskie i męsko-żeńskie

3. kabel usb do micro usb;

4. Licznik Geigera arduino z interfejsem szeregowym

(wyszukaj w serwisie Ebay hasło „arduino geiger couter”)

5. materiał radioaktywny (opcjonalnie mała próbka do badań)

Narzędzia:

1. Środowisko Arduino

2. Zainstalowany asystent domowy

Krok 2: Zasada pracy

Naszym celem jest pokazanie na HomeAssisstat (HASS) odczytów z licznika Geigera. Z jednej strony mamy działający serwer HASS gdzieś może to być raspberry pi lub inne urządzenie, az drugiej strony mamy licznik geigera.

Licznik geigera posiada port szeregowy, jednym z rozwiązań będzie bezpośrednie podłączenie portu szeregowego do RaspberryPi na którym działa HASS.

Oto kilka powodów, dla których może to nie być dobry pomysł:

- nie ma tam fizycznej przestrzeni

- mamy jakieś inne urządzenie na porcie szeregowym

- chcemy dołączyć czujnik środowiskowy, który należy umieścić na zewnątrz zamiast licznika Geigera

Ok, więc zbadamy inną możliwość nawiązania połączenia przez WIFI:

HASS obsługuje odczytywanie danych z czujników i wyświetlanie, że za pośrednictwem serwera MQTT ten rodzaj serwera jest połączeniem typu „lite weight” dla małych urządzeń, jedno urządzenie publikuje wiadomość na „temat”, a drugie słucha na ten temat, aby otrzymać wiadomość. HASS więc posłucha, a my potrzebujemy czegoś, co opublikuje przesłanie.

Nasz czujnik wie tylko, aby rozmawiać przez linię szeregową, więc użyjemy płyty, która może odczytać linię szeregową i która może łączyć się przez WIFI i komunikować się z serwerem MQTT. Tania płyta, która to robi, to NodeMCU.

NodeMCU można zaprogramować za pomocą Arduino IDE. Szkic jest dość prosty, wykonuje następujące czynności:

- łączy się z WIFI

- utrzymuje połączenie MQTT z serwerem i ponawia połączenie w przypadku awarii lub rozłączenia

- nasłuchuje szeregowych danych przychodzących jako szereg liczb całkowitych

- gdy liczba całkowita nadejdzie, wysyła ją przez MQTT do określonego tematu

Krok 3: Złóż urządzenie

Złóż urządzenie
Złóż urządzenie

Będziemy używać płytek stykowych i przewodów, więc jest to dość proste, mamy kilka kroków:

- umieść NodeMCU na płytce prototypowej

- podłączyć rurkę geigera do licznika geigera (uwaga na polaryzację)

- VIN trafia do licznika Geigera +

- GND idzie do licznika Geigera -

- NodeMCU D7 (pin 13) idzie do geiger TX

- NodeMCU D8 (pin 15) idzie do geiger RX

- zasilanie NodeMCU przez micro USB z komputera

Krok 4: Prześlij kod

Prześlij kod
Prześlij kod
Prześlij kod
Prześlij kod
Prześlij kod
Prześlij kod
Prześlij kod
Prześlij kod

Użyjemy Arduino IDE i upewnimy się, że mamy zainstalowaną płytę NodeMCU i zainstalowaną bibliotekę Adafruit_MQTT.

1. Sklonuj repozytorium github: https://github.com/danionescu0/arduino i skopiuj szkic z projects/HASSGeigerIntegration do lokalizacji szkicownika arduino

2. Otwórz Arduino IDE i zainstaluj NodeMCU

- idź do Plik -> Preferencje, w adresach URL Menedżera tablic dodatkowych dodaj https://arduino.esp8266.com/stable/package_esp8266com_index.json jeśli już coś tam masz wstaw przecinkę z przodu i kliknij ok

- z Tools -> Board -> Board Manager wpisz "nodemcu" i wybierz wpis esp8266 od ESP8266 Community i wciśnij install

3. Zainstaluj Adafruit_MQTT

- przejdź do Narzędzia -> Zarządzaj bibliotekami -> wyszukaj "Adafruit_MQTT" i zainstaluj "Bibliotekę Arduino MQTT"

4. Podłącz kabel USB do komputera i skonfiguruj płytkę:

- przejdź do Narzędzia -> Tablica -> wybierz NodeMcu 1.0

- Narzędzia -> Port -> twój port USB

- pozostaw pozostałe ustawienia bez zmian

4. W szkicu zmień swoje dane uwierzytelniające WIFI, aby pasowały do własnych:

#define STASSID "ssid" // Zastąp swoim WIFI SSID

#define STAPSK "pass" // Zastąp swoim hasłem WIFI

5. Prześlij szkic na swoją tablicę, a po przesłaniu zresetuj tablicę za pomocą przycisku

6. Otwórz monitor szeregowy, jeśli wszystko poszło dobrze, powinieneś zobaczyć coś takiego:

Uruchamianie

Adres IP: 192.168.1.168 OTA włączone Łączenie z MQTT… MQTT Połączono! {"promieniowanie": 0,03}..

Krok 5: Skonfiguruj HomeAssistant

Skonfiguruj HomeAssistant
Skonfiguruj HomeAssistant
Skonfiguruj HomeAssistant
Skonfiguruj HomeAssistant

Zakładamy, że masz uruchomioną asystentkę domową. W moim systemie mam HASSOS w wersji 3.12 na RaspberryPi. Jeśli Twoja wersja asystenta domowego jest zbyt stara lub bardzo nowa, niektóre funkcje mogą się różnić. Ten samouczek na pewno działa z wersją 3.12.

Jeśli nie masz zainstalowanego Home Assistant, zapoznaj się z ich oficjalnym przewodnikiem instalacji:

Przed przystąpieniem do instalacji upewnij się, że NodeMCU jest podłączony i publikuje dane.

Ok, tutaj też będziemy mieli kilka kroków do konfiguracji:

1. Zainstaluj "edytor plików", jeśli nie masz go w menu, oto oficjalny samouczek:

2. Edytuj plik "/config/configuration.yaml" i dodaj następujące i zapisz go

- sekcja mqtt, jeśli jeszcze jej nie masz

mqtt:

broker: broker.hivemq.com odkrycie: prawda przedrostek_odkrycia: ha

- sekcja czujników

czujnik:

- platforma: mqtt name: "Promieniowanie" state_topic: "ha/radiation" jednostka_miary: 'uSv' unikalny_id: "radiation" value_template: "{{ value_json.radiation }}"

3. Z Konfiguracja -> Kontrola serwera: naciśnij "Sprawdź konfigurację", sprawdź plik konfiguracyjny yaml pod kątem błędów, a następnie naciśnij "uruchom ponownie" i poczekaj, aż zostanie ponownie uruchomiony

4. Z Przegląd -> Menu w prawym górnym rogu -> Konfiguruj interfejs -> naciśnij przycisk + w prawym dolnym rogu

5. Wybierz "czujnik" z listy -> w polu "entity" wyszukaj "sensor.radiation", w polu nazwy wpisz "Radiation" i kliknij ok, powinno być teraz na stronie głównej

Krok 6: Konfiguracja własnego serwera MQTT [Opcjonalnie]

Porozmawiajmy trochę o MQTT

„MQTT to protokół przesyłania wiadomości typu Client Server do publikowania/subskrypcji. Jest lekki, otwarty, prosty i zaprojektowany tak, aby był łatwy do wdrożenia. Te cechy sprawiają, że jest idealny do użytku w wielu sytuacjach, w tym w środowiskach ograniczonych, takich jak komunikacja w kontekstach Machine to Machine (M2M) i Internet of Things (IoT), gdzie wymagany jest niewielki ślad kodu i/lub przepustowość sieci jest na wagę złota.”

Cytat z oficjalnej specyfikacji MQTT 3.1.1.

Więc w zasadzie możemy opublikować wiadomość gdzieś po jednej stronie, a po drugiej stronie możemy nasłuchiwać tych wiadomości i zrobić coś z danymi. MQTT obsługuje „tematy”, tematy to ciągi znaków, których broker używa do filtrowania komunikatów dla każdego klienta, więc jeśli opublikujemy komunikat w temacie „/radiation”, słuchacz musi zasubskrybować ten sam temat, aby otrzymać wysyłane przez nas komunikaty.

Oto świetny samouczek dotyczący MQTT w szczegółach:

Korzystanie z darmowego serwera Hive ma pewne wady, takie jak:

- każdy, kto słucha Twojego tematu, otrzyma Twoje wiadomości

- jeśli ulegnie uszkodzeniu lub będzie wymagać zapłaty później, nie będziesz mógł z niego skorzystać (chyba że zapłacisz)

- jeśli ktoś, kto publikuje wiadomości na ten sam temat, również otrzymasz jego wiadomości, może publikować niezgodne wiadomości i złamać twoje wykresy HASS

Korzystanie z prywatnego serwera

Jeśli nie chcesz korzystać z publicznego darmowego serwera, masz możliwość skorzystania z prywatnego serwera. Zamierzamy zainstalować Mosquitto MQTT na serwerze ubuntu/debian, takim jak raspberry pi lub komputer.

Mosquitto to serwer, który implementuje protokół MQTT i jest darmowy.

Aby go zainstalować, zaloguj się do swojego raspnerry pi lub innego serwera opartego na debianie i uruchom:

aktualizacja sudo apt

sudo apt install -y mosquitto mosquitto-clients sudo systemctl włącz mosquitto.service

Spowoduje to aktualizację repozytorium, zainstalowanie serwera i klienta Mosquiito oraz umożliwi uruchomienie usługi przy starcie

Aby uzyskać adres IP serwera, wykonaj:

nazwa hosta -I

i wyświetli coś takiego:

192.168.1.52 172.17.0.1 172.18.0.1

Więc mój adres IP to 192.168.1.52, w poniższych poleceniach zastąp go własnym ip

Możesz przetestować serwer MQTT, publikując wiadomość i odbierając ją za pomocą narzędzia konsoli, ponieważ te dwa terminale muszą być otwarte, jeden, który nasłuchuje wiadomości, drugi, który opublikuje wiadomość.

Najpierw w terminalu uruchom to polecenie, aby nasłuchiwać wiadomości na „/jakiś-temat”

mosquitto_sub -h 192.168.1.52 -t /jakiś-temat

Otwórz inny terminal i opublikuj wiadomość na ten temat:

mosquitto_pub -h 192.168.1.52 -t /jakiś-temat -m '{"wilgotność": 74.0}'

W pierwszym terminalu powinieneś zobaczyć wydrukowane ' {"wilgotność": 74.0}'.

Specjalna uwaga:

- ta konfiguracja zakłada, że HASS, Mosquitto i NodeMCU są podłączone do tej samej sieci WIFI i nie ma reguł zapory i mogą się swobodnie komunikować

- serwer Mosquitt MQTT nie ma nazwy użytkownika/hasła, jeśli chcesz ustawić dane uwierzytelniające, sprawdź to: https://www.steves-internet-guide.com/mqtt-username-password-example/ Również musisz skonfigurować poświadczenia w Home Assistant i w szkicu arduino

Krok 7: OTA (aktualizacje OTA) dla NodeMCU

Aktualizacje bezprzewodowe oznaczają, że płyta rozwojowa może być bezprzewodowo flashowana bez konieczności używania fizycznego kabla.

Arduino IDE obsługuje tę funkcjonalność dla serii ESP8266 i niektórych innych płyt:

- wymaga wstępnego flashowania przez kabel USB

- tworzy wirtualny port przez WIFI i jest widoczny tylko z Arduino IDE

- brak dostępnych informacji o debugowaniu szeregowym

- obsługuje ochronę hasłem

Aby włączyć OTA w szkicu ESP8266, najpierw dołącz bibliotekę:

#include "ArduinoOTA.h"

Zdefiniuj również tę stałą hasła szkicu:

#define SKETCHPASS "jakieś_hasło"

W sekcji konfiguracji dodaj te linie:

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

Serial.println("Połączenie nie powiodło się! Ponowne uruchamianie…"); opóźnienie(5000); ESP.restart(); } ArduinoOTA.setPassword(SKETCHPASS); ArduinoOTA.onStart(() { String type; if (ArduinoOTA.getCommand() == U_FLASH) { type = "sketch"; } else { // U_FS type = "filesystem"; } Serial.println("Rozpocznij aktualizację " + typ); }); ArduinoOTA.onEnd(() { Serial.println("\nKoniec"); }); ArduinoOTA.onProgress((postęp bez znaku, całkowita liczba bez znaku) { Serial.printf("Postęp: %u%%\r", (postęp / (łącznie / 100))); }); ArduinoOTA.onError((ota_error_t error) { Serial.printf("Błąd[%u]: ", błąd); if (błąd == OTA_AUTH_ERROR) { Serial.println("Auth Failed"); } else if (błąd == OTA_BEGIN_ERROR) { Serial.println("Rozpoczęcie nie powiodło się"); } else if (błąd == OTA_CONNECT_ERROR) { Serial.println("Połączenie nie powiodło się"); } else if (błąd == OTA_RECEIVE_ERROR) { Serial.println(" Odbiór nie powiódł się"); } else if (błąd == OTA_END_ERROR) { Serial.println("Nieudane zakończenie"); } }); ArduinoOTA.początek(); Serial.print("adres IP: "); Serial.println(WiFi.localIP());

A w sekcji pętli dodaj tę linię:

ArduinoOTA.handle();

Po załadowaniu początkowego kodu po uruchomieniu płyty powinieneś zobaczyć w Arduino IDE w sekcji Narzędzia->Port dwa typy portów:

Porty szeregowe: /dev/ttyUSB0 (na przykład)

Porty sieciowe: esp8266-xxxxx w 192.168.1.xxx

Teraz możesz wybrać port sieciowy i wgrać pilota szkicu, zostaniesz poproszony o hasło szkicu (to, które zdefiniowałeś w stałej powyżej)

Krok 8: Wnioski, przyszła praca

Ten samouczek można łatwo zmodyfikować, aby wysyłać dane o innych typach czujników:

- jeśli twój czujnik jest bezpośrednio obsługiwany przez NodeMCU za pośrednictwem biblioteki, po prostu połącz dane z czujnika i bezpośrednio prześlij je przez MQTT

- jeśli biblioteka czujników nie działa z NodeMCU, ale jest tylko dla Arduino, prześlij swój kod do arduino, wyślij wartość przez linię szeregową i odczytaj ją w NodeMCU i wciśnij (tak jak zrobiliśmy z licznikiem geigera)

Możemy go nawet zmodyfikować, aby wysyłać dane z wielu czujników, na przykład:

- podłącz swoje czujniki do NodeMCU

- dane odpytywania z każdego czujnika

- dla każdego czujnika opublikuj dane na inny temat

- w HASS zdefiniuj wiele czujników (tak jak zrobiliśmy to z geigerem), które będą słuchać różnych tematów

Zalecana: