Πίνακας περιεχομένων:

Home Assistant Geiger Counter Integration: 8 βήματα
Home Assistant Geiger Counter Integration: 8 βήματα

Βίντεο: Home Assistant Geiger Counter Integration: 8 βήματα

Βίντεο: Home Assistant Geiger Counter Integration: 8 βήματα
Βίντεο: Home assistant geiger counter integration 2024, Δεκέμβριος
Anonim
Image
Image
Αρχή Εργασίας
Αρχή Εργασίας

Σε αυτό το σεμινάριο θα δείξω πώς μπορείτε να προσθέσετε προσαρμοσμένους αισθητήρες στο HASS (οικιακός βοηθός) πιο συγκεκριμένα σε έναν μετρητή geiger, αλλά η διαδικασία είναι παρόμοια και για άλλους αισθητήρες.

Θα χρησιμοποιήσουμε τον πίνακα NodeMCU, έναν μετρητή geiger με βάση το arduino και έναν ήδη εγκατεστημένο βοηθό στο σπίτι.

Η ενσωμάτωση θα βασίζεται σε έναν διακομιστή MQTT (δημόσιο ή ιδιωτικό) και θα σας πάω βήμα προς βήμα με αυτό.

Σε περίπτωση που δεν γνωρίζετε τι είναι το σπίτι-βοηθός, επισκεφθείτε τη σελίδα τους https://www.home-assistant.io/. Είναι μια πολύ γνωστή πλατφόρμα αυτοματισμού σπιτιού που είναι πολύ καλά συντηρημένη και εξαιρετικά προσαρμόσιμη.

Θα μάθετε για:

- προηγμένη διαμόρφωση για το Home Assistant

- NodeMCU (πίνακας ανάπτυξης) και πώς να το προγραμματίσετε με το Arduino IDE

- OTA (ενημερώσεις μέσω αέρα) χρησιμοποιώντας το Arduino IDE για την πλακέτα NodeMCU

- πώς να συνδέσετε μια σειριακή συσκευή στο NodeMCU

- χειροκίνητη εγκατάσταση διακομιστή MQTT σε linux (προαιρετικό)

Βασικές υποθέσεις:

- έχετε το Home Assistant σε λειτουργία

- γνωρίζετε λίγο για τα ηλεκτρονικά

- έχετε εγκαταστήσει το Arduino IDE

Βήμα 1: Μέρη και εργαλεία

Μέρη:

1. Πίνακας NodeMCU

2. breadbord

3. αρσενικά-αρσενικά και αρσενικά-θηλυκά καλώδια

3. καλώδιο usb σε micro usb

4. μετρητής arduino geiger με σειριακή διεπαφή

(ψάξτε στο Ebay για "arduino geiger couter")

5. ραδιενεργό υλικό (προαιρετικά ένα μικρό δείγμα δοκιμής)

Εργαλεία:

1. Arduino IDE

2. Τοποθετήθηκε το Home Assistant

Βήμα 2: Αρχή της εργασίας

Στόχος μας είναι να δείξουμε στο HomeAssistat (HASS) τις αναγνώσεις από τον μετρητή geiger. Από τη μία πλευρά έχουμε έναν διακομιστή HASS που λειτουργεί και λειτουργεί κάπου μπορεί να είναι ένα βατόμουρο pi ή άλλη συσκευή και στην άλλη πλευρά έχουμε τον μετρητή geiger.

Ο μετρητής geiger έχει σειριακή θύρα, μία λύση θα είναι να συνδέσετε απευθείας τη σειριακή θύρα στο RaspberryPi στο οποίο λειτουργεί το HASS.

Μερικοί λόγοι για τους οποίους μπορεί να μην είναι μια καλή ιδέα:

- δεν υπάρχει φυσικός χώρος εκεί

- έχουμε κάποια άλλη συσκευή στη σειριακή θύρα

- θέλουμε να τοποθετήσουμε έναν περιβαλλοντικό αισθητήρα που πρέπει να τοποθετηθεί έξω αντί του μετρητή geiger

Εντάξει, θα διερευνήσουμε μια άλλη δυνατότητα σύνδεσης μέσω WIFI:

Το HASS υποστηρίζει την ανάγνωση δεδομένων αισθητήρα και την εμφάνιση ότι μέσω διακομιστή MQTT, αυτός ο τύπος διακομιστή είναι μια σύνδεση ελαφρού βάρους για μικρές συσκευές, μια συσκευή δημοσιεύει ένα μήνυμα σε ένα "θέμα" και η άλλη ακούει σε αυτό το θέμα για να λάβει το μήνυμα. Έτσι το HASS θα ακούσει και χρειαζόμαστε κάτι που θα δημοσιεύσει το μήνυμα.

Ο αισθητήρας μας ξέρει μόνο να μιλά μέσω της σειριακής γραμμής, οπότε θα χρησιμοποιήσουμε έναν πίνακα που μπορεί να διαβάσει μια σειριακή γραμμή και που μπορεί να συνδεθεί μέσω WIFI και να μιλήσει με τον διακομιστή MQTT. Ένας φθηνός πίνακας που το κάνει αυτό είναι το NodeMCU.

Το NodeMCU μπορεί να προγραμματιστεί με Arduino IDE. Το σκίτσο είναι αρκετά απλό, κάνει τα εξής:

- συνδέεται με WIFI

- διατηρεί μια σύνδεση MQTT με τον διακομιστή και επαναλαμβάνει τη σύνδεση όταν αποτύχει ή αποσυνδεθεί

- ακούει σειριακά εισερχόμενα δεδομένα ως μια σειρά ακεραίων

- μόλις φτάσει ένας ακέραιος, τον στέλνει μέσω MQTT σε ένα συγκεκριμένο θέμα

Βήμα 3: Συναρμολογήστε τη συσκευή

Συναρμολογήστε τη συσκευή
Συναρμολογήστε τη συσκευή

Θα χρησιμοποιήσουμε σανίδες και καλώδια, οπότε είναι αρκετά απλό, έχουμε μερικά βήματα:

- βάλτε το NodeMCU στο breadboard

- συνδέστε τον σωλήνα geiger στον μετρητή geiger (προσέξτε την πολικότητα)

- Το VIN πηγαίνει στον μετρητή geiger +

- GND πηγαίνει στο μετρητή geiger -

- Το NodeMCU D7 (pin 13) πηγαίνει στο geiger TX

- Το NodeMCU D8 (pin 15) πηγαίνει στο geiger RX

- τροφοδοτήστε το NodeMCU μέσω micro USB από τον υπολογιστή

Βήμα 4: Ανεβάστε τον κώδικα

Ανεβάστε τον Κώδικα
Ανεβάστε τον Κώδικα
Ανεβάστε τον Κώδικα
Ανεβάστε τον Κώδικα
Ανεβάστε τον Κώδικα
Ανεβάστε τον Κώδικα
Ανεβάστε τον Κώδικα
Ανεβάστε τον Κώδικα

Θα χρησιμοποιήσουμε το Arduino IDE και θα βεβαιωθούμε ότι έχουμε εγκατεστημένο τον πίνακα NodeMCU και την βιβλιοθήκη Adafruit_MQTT.

1. Κλωνοποιήστε το αποθετήριο github: https://github.com/danionescu0/arduino και αντιγράψτε το σκίτσο από έργα/HASSGeigerIntegration στη θέση του arduino sketchbook

2. Ανοίξτε το Arduino IDE και εγκαταστήστε το NodeMCU

- μεταβείτε στο Αρχείο -> Προτιμήσεις, στις διευθύνσεις διευθύνσεων πρόσθετων πινάκων προσθέστε https://arduino.esp8266.com/stable/package_esp8266com_index.json εάν έχετε ήδη κάτι εκεί, βάλτε ένα κώμα μπροστά και κάντε κλικ στο κουμπί ok

-από το Tools -> Board -> Board Manager πληκτρολογήστε "nodemcu" και επιλέξτε την καταχώρηση esp8266 από ESP8266 Community και πατήστε install

3. Εγκαταστήστε το Adafruit_MQTT

-μεταβείτε στα Εργαλεία -> Διαχείριση βιβλιοθηκών -> αναζητήστε "Adafruit_MQTT" και εγκαταστήστε τη "βιβλιοθήκη Arduino MQTT"

4. Συνδέστε το καλώδιο USB στον υπολογιστή σας και διαμορφώστε την πλακέτα:

-μεταβείτε στο Εργαλεία -> Πίνακας -> επιλέξτε NodeMcu 1.0

-Εργαλεία -> Θύρα -> θύρα USB

- αφήστε τις άλλες ρυθμίσεις αμετάβλητες

4. Στο σκίτσο αλλάξτε τα διαπιστευτήριά σας WIFI ώστε να ταιριάζουν με τα δικά σας:

#define STASSID "ssid" // Αντικαταστήστε με το WIFI SSID

#define STAPSK "pass" // Αντικαταστήστε με τον κωδικό πρόσβασής σας WIFI

5. Ανεβάστε το σκίτσο στον πίνακα και μετά τη μεταφόρτωση επαναφέρετε τον πίνακα από το κουμπί

6. Ανοίξτε τη σειριακή οθόνη, αν όλα έχουν πάει καλά θα πρέπει να δείτε κάποια έξοδο όπως αυτή:

Εκκίνηση

Διεύθυνση IP: 192.168.1.168 OTA ενεργοποιημένη Σύνδεση σε MQTT… MQTT Συνδέθηκε! {"ακτινοβολία": 0,03}..

Βήμα 5: Διαμόρφωση HomeAssistant

Διαμόρφωση HomeAssistant
Διαμόρφωση HomeAssistant
Διαμόρφωση HomeAssistant
Διαμόρφωση HomeAssistant

Θα υποθέσουμε ότι έχετε έναν βοηθό στο σπίτι σε λειτουργία. Στο σύστημά μου έχω HASSOS έκδοση 3.12 σε ένα RaspberryPi. Εάν η έκδοση του βοηθού σπιτιού σας είναι πολύ παλιά ή πολύ νέα, ορισμένες λειτουργίες ενδέχεται να διαφέρουν. Αυτό το σεμινάριο λειτουργεί σίγουρα με την έκδοση 3.12.

Εάν δεν έχετε εγκαταστήσει το Home Assistant, ανατρέξτε στον επίσημο οδηγό εγκατάστασης:

Πριν προχωρήσετε με την εγκατάσταση, βεβαιωθείτε ότι το NodeMCU είναι συνδεδεμένο και ότι δημοσιεύει δεδομένα.

Εντάξει, θα έχουμε μια σειρά βημάτων και εδώ για τη διαμόρφωση:

1. Εγκαταστήστε το "πρόγραμμα επεξεργασίας αρχείων" εάν δεν το έχετε στο μενού, εδώ είναι το επίσημο σεμινάριο:

2. Επεξεργαστείτε το αρχείο "/config/configuration.yaml" και προσθέστε τα παρακάτω και αποθηκεύστε το

- το τμήμα mqtt αν δεν το έχετε ήδη

mqtt:

μεσίτης: broker.hivemq.com ανακάλυψη: αληθινή ανακάλυψη_πρόθεμα: χα

- το τμήμα των αισθητήρων

αισθητήρας:

- πλατφόρμα: mqtt όνομα: "Ακτινοβολία" state_topic: "ha/radiation" unit_of_measurement: 'uSv' unique_id: "ακτινοβολία" value_template: "{{value_json.radiation}}"

3. Από Διαμόρφωση -> Στοιχεία ελέγχου διακομιστή: πατήστε "Έλεγχος διαμόρφωσης", ελέγξτε το αρχείο διαμόρφωσης yaml για σφάλματα και, στη συνέχεια, πατήστε "επανεκκίνηση" και περιμένετε μέχρι να γίνει επανεκκίνηση

4. Από την Επισκόπηση -> Μενού πάνω δεξιά γωνία -> Διαμόρφωση διεπαφής χρήστη -> πατήστε το κουμπί + από κάτω δεξιά

5. Επιλέξτε "αισθητήρας" από τη λίστα -> στο πεδίο "οντότητα" αναζητήστε "sensor.radiation", στο πεδίο ονόματος γράψτε "Radiation" και κάντε κλικ στο ok, θα πρέπει να βρίσκεται στην κύρια σελίδα τώρα

Βήμα 6: Διαμόρφωση του δικού σας διακομιστή MQTT [Προαιρετικό]

Ας συζητήσουμε λίγο για το MQTT

"Το MQTT είναι ένας διακομιστής πελάτη που δημοσιεύει/εγγραφεί πρωτόκολλο μεταφοράς μηνυμάτων. Είναι ελαφρύ, ανοιχτό, απλό και σχεδιασμένο έτσι ώστε να είναι εύκολο στην εφαρμογή. Αυτά τα χαρακτηριστικά το καθιστούν ιδανικό για χρήση σε πολλές καταστάσεις, συμπεριλαμβανομένων περιορισμένων περιβαλλόντων, όπως για επικοινωνία σε περιβάλλον Machine to Machine (M2M) και Internet of Things (IoT), όπου απαιτείται ένα μικρό αποτύπωμα κώδικα και/ή εύρος ζώνης δικτύου."

Παραπομπή από την επίσημη προδιαγραφή MQTT 3.1.1.

Ουσιαστικά μπορούμε να δημοσιεύσουμε ένα μήνυμα κάπου στη μία πλευρά και στην άλλη πλευρά μπορούμε να ακούσουμε αυτά τα μηνύματα και να κάνουμε κάτι με τα δεδομένα. Το MQTT υποστηρίζει "θέματα", τα θέματα είναι χορδές που χρησιμοποιεί ο μεσίτης για να φιλτράρει μηνύματα για κάθε πελάτη, οπότε αν δημοσιεύσουμε ένα μήνυμα στο θέμα "/ακτινοβολία", ένας ακροατής πρέπει να εγγραφεί στο ίδιο θέμα για να λάβει τα μηνύματα που στέλνουμε.

Εδώ είναι ένα εξαιρετικό σεμινάριο για το MQTT λεπτομερώς:

Χρησιμοποιώντας τον δωρεάν διακομιστή κυψέλης υπάρχουν ορισμένα μειονεκτήματα όπως:

- όποιος ακούει το θέμα σας θα λάβει τα μηνύματά σας

- εάν μειωθεί ή απαιτήσει πληρωμή αργότερα, δεν θα μπορείτε να το χρησιμοποιήσετε (εκτός εάν πληρώσετε)

- αν κάποιος που δημοσιεύει μηνύματα στο ίδιο θέμα θα λάβετε και εσείς τα μηνύματά του, μπορεί να δημοσιεύσει μη συμβατά μηνύματα και να σπάσει τα γραφήματα HASS σας

Χρήση ιδιωτικού διακομιστή

Εάν δεν θέλετε να χρησιμοποιήσετε τον δημόσιο δωρεάν διακομιστή, έχετε την επιλογή ενός ιδιωτικού διακομιστή. Θα εγκαταστήσουμε το Mosquitto MQTT σε διακομιστή ubuntu / debian, όπως βατόμουρο pi ή υπολογιστή.

Το Mosquitto είναι ένας διακομιστής που εφαρμόζει πρωτόκολλο MQTT και είναι δωρεάν.

Για να το εγκαταστήσετε, συνδεθείτε στο raspnerry pi ή σε άλλο διακομιστή που βασίζεται σε debian και εκτελέστε:

sudo apt ενημέρωση

sudo apt install -y mosquitto mosquitto -clients sudo systemctl ενεργοποίηση mosquitto.service

Αυτό θα ενημερώσει το αποθετήριο, θα εγκαταστήσει διακομιστή και πελάτη κουνουπιών και θα του επιτρέψει να εκτελεστεί μια υπηρεσία κατά την εκκίνηση

Για να εκτελέσετε το ip διακομιστή να εκτελεστεί:

όνομα κεντρικού υπολογιστή -I

και θα βγάλει κάτι σαν:

192.168.1.52 172.17.0.1 172.18.0.1

Οπότε το ip μου είναι 192.168.1.52, στις παρακάτω εντολές αντικαταστήστε το με το δικό σας ip

Μπορείτε να δοκιμάσετε τον διακομιστή MQTT δημοσιεύοντας ένα μήνυμα και λαμβάνοντάς το με το εργαλείο κονσόλας, για αυτό πρέπει να ανοίξουν δύο τερματικά ένα που ακούει ένα μήνυμα, ένα που θα δημοσιεύσει το μήνυμα.

Πρώτα σε ένα τερματικό εκτελέστε αυτήν την εντολή για να ακούσετε ένα μήνυμα στο "/some-topic"

mosquitto_sub -h 192.168.1.52 -t /some -topic

Ανοίξτε ένα άλλο τερματικό και δημοσιεύστε ένα μήνυμα σε αυτό το θέμα:

mosquitto_pub -h 192.168.1.52 -t /some -topic -m '{"υγρασία": 74.0}'

Στον πρώτο τερματικό θα πρέπει να δείτε την ένδειξη "{" υγρασία ": 74.0}".

Ιδιαίτερη προσοχή:

- αυτή η ρύθμιση προϋποθέτει ότι τα HASS, Mosquitto και NodeMCU είναι συνδεδεμένα στο ίδιο δίκτυο WIFI και δεν υπάρχουν κανόνες τείχους προστασίας και μπορούν να επικοινωνούν ελεύθερα

-ο διακομιστής Mosquitt MQTT δεν έχει όνομα χρήστη/κωδικό πρόσβασης, αν θέλετε να ρυθμίσετε τα διαπιστευτήρια ελέγξτε το: https://www.steves-internet-guide.com/mqtt-username-password-example/ Επίσης θα χρειαστεί να διαμορφώσετε τα διαπιστευτήρια στο Home Assistant και στο σκίτσο arduino

Βήμα 7: OTA (Over the Air Updates) για το NodeMCU

Οι ενημερώσεις μέσω του αέρα σημαίνουν ότι ο πίνακας ανάπτυξης μπορεί να αναβοσβήνει ασύρματα χωρίς την ανάγκη φυσικού καλωδίου.

Το Arduino IDE υποστηρίζει αυτήν τη λειτουργικότητα για τη σειρά ESP8266 και ορισμένους άλλους πίνακες:

- απαιτεί αρχικό φλας μέσω του καλωδίου USB

- δημιουργεί μια εικονική θύρα μέσω WIFI και είναι ορατή μόνο από το Arduino IDE

- δεν υπάρχουν διαθέσιμες πληροφορίες εντοπισμού σφαλμάτων

- υποστηρίζει προστασία με κωδικό πρόσβασης

Για να ενεργοποιήσετε το OTA σε ένα σκίτσο ESP8266, πρώτα συμπεριλάβετε τη βιβλιοθήκη:

#include "ArduinoOTA.h"

Ορίστε επίσης αυτήν τη σταθερά κωδικού πρόσβασης σκίτσου:

#define SKETCHPASS "some_password"

Στην ενότητα εγκατάστασης προσθέστε αυτές τις γραμμές:

ενώ (WiFi.waitForConnectResult ()! = WL_CONNECTED) {

Serial.println ("Η σύνδεση απέτυχε! Επανεκκίνηση …"); καθυστέρηση (5000)? ESP.restart (); } ArduinoOTA.setPassword (SKETCHPASS); ArduinoOTA.onStart ( () {String type; if (ArduinoOTA.getCommand () == U_FLASH) {type = "sketch";} else {// U_FS type = "filesystem";} Serial.println ("Έναρξη ενημέρωσης " + τύπος);}); ArduinoOTA.onEnd ( () {Serial.println ("\ nΤέλος");}); ArduinoOTA.onProgress ( (χωρίς υπογραφή int πρόοδος, χωρίς υπογραφή int σύνολο) {Serial.printf ("Πρόοδος:%u %% / r", (πρόοδος / (σύνολο / 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 ("Η έναρξη απέτυχε");} αλλιώς εάν (σφάλμα == OTA_CONNECT_ERROR) {Serial.println ("Η σύνδεση απέτυχε");} αλλιώς εάν (σφάλμα == OTA_RECEIVE_ERROR) {Serial.println (" Η λήψη απέτυχε ");} else if (error == OTA_END_ERROR) {Serial.println (" End Failed ");}}); ArduinoOTA.begin (); Serial.print ("Διεύθυνση IP:"); Serial.println (WiFi.localIP ());

Και στην ενότητα βρόχου προσθέστε αυτήν τη γραμμή:

ArduinoOTA.handle ();

Μετά την αρχική μεταφόρτωση του κώδικα μετά την εκκίνηση του πίνακα, θα πρέπει να δείτε στο Arduino IDE στην ενότητα Εργαλεία-> Θύρα δύο τύπους θυρών:

Σειριακές θύρες: /dev /ttyUSB0 (για παράδειγμα)

Θύρες δικτύου: esp8266-xxxxx στα 192.168.1.xxx

Τώρα μπορείτε να επιλέξετε τη θύρα δικτύου και να ανεβάσετε το τηλεχειριστήριο σκίτσων, θα σας ζητηθεί ο κωδικός πρόσβασης σκίτσου (αυτός που έχετε ορίσει σε μια σταθερά παραπάνω)

Βήμα 8: Συμπεράσματα, Μελλοντική εργασία

Αυτό το σεμινάριο μπορεί εύκολα να τροποποιηθεί για την αποστολή δεδομένων σχετικά με άλλους τύπους αισθητήρων:

- εάν ο αισθητήρας σας υποστηρίζεται απευθείας από το NodeMCU μέσω βιβλιοθήκης, απλώς συγκεντρώστε δεδομένα από τον αισθητήρα και σπρώξτε τα απευθείας μέσω MQTT

- εάν η βιβλιοθήκη αισθητήρων δεν λειτουργεί με το NodeMCU αλλά είναι μόνο για το Arduino, τότε ανεβάστε τον κωδικό σας στο arduino, εξάγετε την τιμή μέσω της σειριακής γραμμής και διαβάστε τον στο NodeMCU και σπρώξτε τον (όπως κάναμε με τον μετρητή geiger)

Μπορούμε ακόμη και να το τροποποιήσουμε για να στείλουμε δεδομένα από πολλούς αισθητήρες όπως:

- συνδέστε τους αισθητήρες σας στο NodeMCU

- δεδομένα δημοσκόπησης από κάθε αισθητήρα

- για κάθε έναν από τους αισθητήρες δημοσιεύστε τα δεδομένα σε διαφορετικό θέμα

- στο HASS ορίστε πολλαπλούς αισθητήρες (όπως κάναμε με το geiger) που θα ακούσουν διαφορετικά θέματα

Συνιστάται: