Inhaltsverzeichnis:

Home Assistant Geigerzähler-Integration - Gunook
Home Assistant Geigerzähler-Integration - Gunook

Video: Home Assistant Geigerzähler-Integration - Gunook

Video: Home Assistant Geigerzähler-Integration - Gunook
Video: Radiation Geiger counter DIY sensor in Home Assistant 2024, Juli
Anonim
Image
Image
Arbeitsprinzip
Arbeitsprinzip

In diesem Tutorial werde ich zeigen, wie Sie HASS (Home Assistant) benutzerdefinierte Sensoren hinzufügen, genauer gesagt einen Geigerzähler, aber der Vorgang ist auch für andere Sensoren ähnlich.

Wir verwenden das NodeMCU-Board, einen arduino-basierten Geigerzähler und einen bereits installierten Heimassistenten.

Die Integration basiert auf einem MQTT-Server (öffentlich oder privat) und ich werde Sie dabei Schritt für Schritt begleiten.

Falls Sie nicht wissen, was Home-Assistant ist, besuchen Sie bitte deren Seite https://www.home-assistant.io/. Es ist eine bekannte Heimautomatisierungsplattform, die sehr gut gewartet und hochgradig anpassbar ist.

Sie werden lernen über:

- erweiterte Konfiguration für Home Assistant

- NodeMCU (Entwicklungsboard) und wie man es mit der Arduino IDE programmiert

- OTA (Over-the-Air-Updates) mit der Arduino-IDE für das NodeMCU-Board

- wie man ein serielles Gerät an die NodeMCU anschließt

- Manuelle Installation eines MQTT-Servers unter Linux (optional)

Grundannahmen:

- Sie haben Home Assistant aktiv

- du kennst dich ein bisschen mit Elektronik aus

- Sie haben Arduino IDE installiert

Schritt 1: Teile und Werkzeuge

Teile:

1. NodeMCU-Platine

2. Brot

3. männlich-männliche und männlich-weibliche Juperdrähte

3. USB-zu-Micro-USB-Kabel

4. Arduino-Geigerzähler mit serieller Schnittstelle

(Suche Ebay nach "arduino geiger couter")

5. radioaktives Material (optional eine kleine Testprobe)

Werkzeuge:

1. Arduino-IDE

2. Home Assistant installiert

Schritt 2: Arbeitsprinzip

Unser Ziel ist es, die Messwerte des Geigerzählers auf dem HomeAssistat (HASS) anzuzeigen. Auf der einen Seite haben wir einen HASS-Server, der irgendwo läuft, es kann ein Himbeer-Pi oder ein anderes Gerät sein und auf der anderen Seite haben wir den Geigerzähler.

Der Geigerzähler hat einen seriellen Port, eine Lösung besteht darin, den seriellen Port direkt an den RaspberryPi anzuschließen, auf dem der HASS läuft.

Einige Gründe, warum es möglicherweise keine gute Idee ist:

- es gibt dort keinen physischen Raum

- wir haben ein anderes Gerät an der seriellen Schnittstelle

- wir wollen einen Umweltsensor anbringen, der anstelle des Geigerzählers draußen platziert werden sollte

Ok, also werden wir eine andere Möglichkeit erkunden, um die Verbindung über WIFI herzustellen:

Der HASS unterstützt das Lesen von Sensordaten und die Anzeige, dass diese Art von Server über einen MQTT-Server eine leichte Verbindung für kleine Geräte ist. Ein Gerät veröffentlicht eine Nachricht zu einem "Thema", das andere hört auf dieses Thema, um die Nachricht zu empfangen. HASS wird also zuhören, und wir brauchen etwas, das die Nachricht veröffentlicht.

Unser Sensor kann nur über die serielle Leitung kommunizieren, daher verwenden wir ein Board, das eine serielle Leitung lesen und über WIFI eine Verbindung herstellen und mit dem MQTT-Server kommunizieren kann. Ein billiges Board, das dies tut, ist die NodeMCU.

Die NodeMCU kann mit Arduino IDE programmiert werden. Die Skizze ist ziemlich einfach, sie macht Folgendes:

- verbindet sich mit WIFI

- behält eine MQTT-Verbindung mit dem Server bei und versucht die Verbindung erneut, wenn sie fehlschlägt oder getrennt wird

- hört serielle eingehende Daten als Reihe von ganzen Zahlen ab

- Sobald eine Ganzzahl ankommt, wird sie über MQTT an ein bestimmtes Thema gesendet

Schritt 3: Bauen Sie das Gerät zusammen

Bauen Sie das Gerät zusammen
Bauen Sie das Gerät zusammen

Wir werden Steckbretter und Drähte verwenden, also ist es ziemlich einfach, wir haben ein paar Schritte:

- Legen Sie die NodeMCU auf das Steckbrett

- Geigerschlauch an Geigerzähler anschließen (Polarität beachten)

- VIN geht an Geigerzähler +

- GND geht an Geigerzähler -

- NodeMCU D7 (Pin 13) geht an Geiger TX

- NodeMCU D8 (Pin 15) geht an Geiger RX

- NodeMCU über Micro-USB vom Computer mit Strom versorgen

Schritt 4: Laden Sie den Code hoch

Laden Sie den Code hoch
Laden Sie den Code hoch
Laden Sie den Code hoch
Laden Sie den Code hoch
Laden Sie den Code hoch
Laden Sie den Code hoch
Laden Sie den Code hoch
Laden Sie den Code hoch

Wir werden Arduino IDE verwenden und sicherstellen, dass das NodeMCU-Board installiert und die Adafruit_MQTT-Bibliothek installiert ist.

1. Klonen Sie das Github-Repository: https://github.com/danionescu0/arduino und kopieren Sie die Skizze von projects/HASSGeigerIntegration in Ihren Arduino-Skizzenbuchspeicherort

2. Öffnen Sie die Arduino IDE und installieren Sie NodeMCU

- Gehen Sie zu Datei -> Einstellungen, fügen Sie in den URLs des zusätzlichen Boards-Managers https://arduino.esp8266.com/stable/package_esp8266com_index.json hinzu, wenn Sie dort bereits etwas haben, setzen Sie ein Komma voran und klicken Sie auf ok

- Geben Sie in Tools -> Board -> Board Manager "nodemcu" ein und wählen Sie den Eintrag esp8266 von ESP8266 Community, und drücken Sie auf Installieren

3. Installieren Sie Adafruit_MQTT

- gehe zu Tools -> Manage Libraries -> suche "Adafruit_MQTT" und installiere "Arduino MQTT Library"

4. Stecken Sie das USB-Kabel in Ihren Computer und konfigurieren Sie das Board:

- gehen Sie zu Tools -> Board -> wählen Sie NodeMcu 1.0

- Extras -> Port -> Ihr USB-Port

- lassen Sie die anderen Einstellungen unverändert

4. Ändern Sie in der Skizze Ihre WIFI-Anmeldeinformationen so, dass sie Ihren eigenen entsprechen:

#define STASSID "ssid" // Ersetze durch deine WIFI SSID

#define STAPSK "pass" // Durch dein WIFI-Passwort ersetzen

5. Laden Sie die Skizze auf Ihr Board hoch und setzen Sie das Board nach dem Hochladen über den Button zurück

6. Öffnen Sie den seriellen Monitor. Wenn alles gut gegangen ist, sollten Sie eine Ausgabe wie diese sehen:

Booten

IP-Adresse: 192.168.1.168 OTA aktiviert Connecting to MQTT… MQTT Connected! {"Strahlung": 0,03}..

Schritt 5: HomeAssistant konfigurieren

HomeAssistant konfigurieren
HomeAssistant konfigurieren
HomeAssistant konfigurieren
HomeAssistant konfigurieren

Wir gehen davon aus, dass Sie einen Home Assistant eingerichtet haben. Auf meinem System habe ich HASSOS Version 3.12 auf einem RaspberryPi. Wenn Ihre Version von Home Assistant zu alt oder sehr neu ist, können einige Funktionen abweichen. Dieses Tutorial funktioniert sicher mit Version 3.12.

Wenn Home Assistant nicht installiert ist, sehen Sie sich die offizielle Installationsanleitung an:

Bevor Sie mit der Installation fortfahren, stellen Sie sicher, dass die NodeMCU angeschlossen ist und Daten veröffentlicht.

Ok, wir haben auch hier eine Reihe von Schritten für die Konfiguration:

1. Installieren Sie den "Dateieditor", wenn Sie ihn nicht im Menü haben, hier ist das offizielle Tutorial:

2. Bearbeiten Sie die Datei "/config/configuration.yaml" und fügen Sie Folgendes hinzu und speichern Sie es

- die mqtt-Sektion, wenn Sie sie noch nicht haben

mqtt:

Broker: Broker.hivemq.com Discovery: true Discovery_Präfix: ha

- der Sensorbereich

Sensor:

- Plattform: mqtt Name: "Strahlung" state_topic: "ha/Strahlung" Maßeinheit: 'uSv' unique_id: "Strahlung" value_template: "{{ value_json.radiation }}"

3. Unter Konfiguration -> Serversteuerung: Drücken Sie auf "Konfiguration prüfen", um die yaml-Konfigurationsdatei auf Fehler zu überprüfen, und drücken Sie dann auf "Neustart" und warten Sie, bis sie neu gestartet wird

4. Von Übersicht -> Menü in der oberen rechten Ecke -> Benutzeroberfläche konfigurieren -> drücken Sie die + Taste von unten rechts

5. „Sensor“aus der Liste auswählen -> im Feld „Entity“nach „sensor.radiation“suchen, im Namensfeld „Radiation“schreiben und auf OK klicken, es sollte jetzt auf der Hauptseite sein

Schritt 6: Konfigurieren Ihres eigenen MQTT-Servers [Optional]

Lassen Sie uns ein wenig über MQTT diskutieren

„MQTT ist ein Client Server Publish/Subscribe-Messaging-Transportprotokoll. Es ist leicht, offen, einfach und so konzipiert, dass es einfach zu implementieren ist. Diese Eigenschaften machen es ideal für den Einsatz in vielen Situationen, einschließlich eingeschränkter Umgebungen, wie z.”

Zitat aus der offiziellen MQTT 3.1.1-Spezifikation.

Im Grunde können wir also auf der einen Seite irgendwo eine Nachricht veröffentlichen und auf der anderen Seite können wir auf diese Nachrichten hören und etwas mit den Daten machen. MQTT unterstützt "topics", Topics sind Strings, die der Broker verwendet, um Nachrichten für jeden Client zu filtern.

Hier ist ein tolles Tutorial zu MQTT im Detail:

Die Verwendung des kostenlosen Hive-Servers hat einige Nachteile wie:

- Jeder, der Ihr Thema hört, erhält Ihre Nachrichten

- wenn es ausfällt oder später eine Zahlung erfordert, können Sie es nicht verwenden (es sei denn, Sie bezahlen)

- Wenn jemand, der Nachrichten zu demselben Thema veröffentlicht, auch seine Nachrichten erhält, kann er inkompatible Nachrichten veröffentlichen und Ihre HASS-Graphen beschädigen

Verwendung eines privaten Servers

Wenn Sie den öffentlichen kostenlosen Server nicht verwenden möchten, haben Sie die Möglichkeit eines privaten Servers. Wir werden das Mosquitto MQTT auf einem Ubuntu / Debian-Server wie einem Raspberry Pi oder Computer installieren.

Mosquitto ist ein Server, der das MQTT-Protokoll implementiert und kostenlos ist.

Um es zu installieren, melden Sie sich bei Ihrem raspnerry pi oder einem anderen Debian-basierten Server an und führen Sie Folgendes aus:

sudo apt-Update

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

Dadurch wird das Repository aktualisiert, der Mosquiito-Server und -Client installiert und ein Dienst aktiviert, der beim Start ausgeführt werden kann

Um die Server-IP zu erhalten, führen Sie Folgendes aus:

Hostname -I

und es wird etwas ausgeben wie:

192.168.1.52 172.17.0.1 172.18.0.1

Meine IP ist also 192.168.1.52, in den folgenden Befehlen ersetzen Sie sie durch Ihre eigene IP

Sie können den MQTT-Server testen, indem Sie eine Nachricht veröffentlichen und mit dem Konsolentool empfangen. Dazu müssen zwei Terminals geöffnet werden, eines, das auf eine Nachricht wartet, eines, das die Nachricht veröffentlicht.

Führen Sie zuerst in einem Terminal diesen Befehl aus, um auf eine Nachricht auf "/some-topic" zu warten

mosquitto_sub -h 192.168.1.52 -t /some-topic

Öffnen Sie ein anderes Terminal und veröffentlichen Sie eine Nachricht zu diesem Thema:

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

Im ersten Terminal sollten Sie ' {"humidity": 74.0}' ausgedruckt sehen.

Besondere Aufmerksamkeit:

- Dieses Setup setzt voraus, dass HASS, Mosquitto und NodeMCU mit demselben WIFI-Netzwerk verbunden sind und es keine Firewall-Regeln gibt und sie frei kommunizieren können

- der Mosquitt MQTT-Server hat keinen Benutzernamen/Passwort, wenn Sie Anmeldeinformationen einrichten möchten, überprüfen Sie dies: https://www.steves-internet-guide.com/mqtt-username-password-example/ Sie müssen auch konfigurieren die Anmeldeinformationen in Home Assistant und in der Arduino-Skizze

Schritt 7: OTA (Over the Air Updates) für die NodeMCU

Over-the-Air-Updates bedeuten, dass das Entwicklungsboard drahtlos geflasht werden kann, ohne dass ein physisches Kabel erforderlich ist.

Arduino IDE unterstützt diese Funktionalität für die ESP8266-Serie und einige andere Boards:

- erfordert initiales Flashen über das USB-Kabel

- erstellt einen virtuellen Port über WIFI und ist nur von Arduino IDE sichtbar

- Es sind keine seriellen Debug-Informationen verfügbar

- unterstützt den Schutz mit Passwort

Um OTA in einer ESP8266-Skizze zu aktivieren, schließen Sie zuerst die Bibliothek ein:

#include "ArduinoOTA.h"

Definieren Sie auch diese Sketch-Passwort-Konstante:

#define SKETCHPASS "some_password"

Fügen Sie im Setup-Abschnitt diese Zeilen hinzu:

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

Serial.println ("Verbindung fehlgeschlagen! Neustart …"); Verzögerung (5000); ESP.restart(); } ArduinoOTA.setPassword (SKETCHPASS); ArduinoOTA.onStart(() { String type; if (ArduinoOTA.getCommand() == U_FLASH) { type = "sketch"; } else { // U_FS type = "filesystem"; } Serial.println("Update starten " + Typ); }); 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 error) { Serial.printf("Error[%u]:", error); if (error == OTA_AUTH_ERROR) { Serial.println("Auth Failed"); } else if (error == OTA_BEGIN_ERROR) { Serial.println ("Begin Failed"); } else if (error == OTA_CONNECT_ERROR) { Serial.println ("Connect Failed"); } else if (error == OTA_RECEIVE_ERROR) { Serial.println (" Empfangen fehlgeschlagen"); } else if (Fehler == OTA_END_ERROR) { Serial.println ("Ende fehlgeschlagen"); } }); ArduinoOTA.begin(); Serial.print ("IP-Adresse: "); Serial.println (WiFi.localIP());

Und im Loop-Abschnitt fügen Sie diese Zeile hinzu:

ArduinoOTA.handle();

Nach Ihrem ersten Code-Upload nach dem Hochfahren des Boards sollten Sie in der Arduino-IDE im Abschnitt Tools->Port zwei Arten von Ports sehen:

Serielle Ports: /dev/ttyUSB0 (zum Beispiel)

Netzwerkports: esp8266-xxxxx unter 192.168.1.xxx

Jetzt können Sie den Netzwerkport auswählen und die Sketch-Fernbedienung hochladen. Sie werden nach dem Sketch-Passwort gefragt (das Sie oben in einer Konstante definiert haben).

Schritt 8: Schlussfolgerungen, zukünftige Arbeit

Dieses Tutorial kann leicht geändert werden, um Daten über andere Arten von Sensoren zu senden:

- Wenn Ihr Sensor direkt von NodeMCU über eine Bibliothek unterstützt wird, bündeln Sie einfach Daten vom Sensor und übertragen Sie sie direkt über MQTT

- Wenn die Sensorbibliothek nicht mit NodeMCU funktioniert, sondern nur für Arduino ist, laden Sie Ihren Code auf das Arduino hoch, geben Sie den Wert über die serielle Leitung aus und lesen Sie ihn in der NodeMCU ein und drücken Sie ihn (genau wie beim Geigerzähler)

Wir können es sogar ändern, um Daten von mehreren Sensoren wie folgt zu senden:

- Verbinden Sie Ihre Sensoren mit der NodeMCU

- Daten von jedem Sensor abfragen

- für jeden der Sensoren die Daten zu einem anderen Thema veröffentlichen

- Definiere im HASS mehrere Sensoren (wie wir es beim Geiger getan haben), die auf verschiedene Themen hören

Empfohlen: