Inhaltsverzeichnis:

MQTT und Wifi Powered Mailbox Flag - Gunook
MQTT und Wifi Powered Mailbox Flag - Gunook

Video: MQTT und Wifi Powered Mailbox Flag - Gunook

Video: MQTT und Wifi Powered Mailbox Flag - Gunook
Video: IoT Mailbox Guard for Home Assistant. Defends Against Parcel Thefts! 2024, Juli
Anonim
MQTT und Wifi Powered Mailbox Flag
MQTT und Wifi Powered Mailbox Flag

Hinweis: aktualisiert mit neuer Firmware, einem Schaltplan und Tipps für einen Programmierer

Ein paar Jahre begann ich mit meinem eigenen Hausautomationsprojekt. Es begann mit dem Bau eines servergesteuerten 433 MHz-Senders mit einem Arduino, um viele billige PT2262-basierte Fernschalter zu schalten. Später habe ich einen Arduino-basierten Empfänger für meine Wetterstation hinzugefügt, den Steuerkontakt meines EV-Ladegeräts angeschlossen usw. Die Dinge wurden immer mehr miteinander verflochten (und komplizierter!). Also habe ich vor ein paar Monaten beschlossen, alles basierend auf MQTT für Messaging, Node-RED für die Automatisierung (beide laufen auf einem einzigen Raspberry Pi B+) und MariaDb für die Protokollierung (läuft auf meinem Synology NAS) zu standardisieren. Später habe ich auch den MQTT-Broker (Mosquitto) und Node-RED auf das NAS umgezogen.

Dieses anweisbare beschreibt ein dummes zum Spaßprojekt, das meinen auf der Straße montierten Briefkasten in dieser Heiminfrastruktur einhängt. Die Idee ist, dass wenn jemand den umzäunten Briefkasten etwa 10 Meter von der Haustür entfernt öffnet, es mir auf meinem Telefon und möglicherweise anderen Geräten signalisiert.

Schritt 1: Gliederung, Voraussetzungen und Teile

Umriss

Auf einer hohen Ebene sollte die Mailbox beim Öffnen eine eindeutige MQTT-Nachricht an den Broker senden, damit die Abonnenten dieses Themas informiert werden. Node-RED abonniert auch und führt einige Automatisierungen durch, in diesem Fall sendet es eine E-Mail und/oder eine Push-Nachricht an mein Telefon.

Die Mailbox sollte mit Batterien betrieben werden und mindestens ein Jahr laufen, und zwar über mein WiFi-Netzwerk. Da das Aufwecken eines Mikrocontrollers und das Verbinden mit einem WiFi-Netzwerk mehrere Sekunden dauern kann, konnte ich den Aktivierungsschalter nicht verwenden, um den Strom zu unterbrechen. Stattdessen sollte es dem Verarbeiter erlaubt sein, seine Arbeit zu beenden, nachdem der Deckel des Briefkastens bereits geschlossen ist.

Voraussetzungen

Ich gehe davon aus, dass Sie über bescheidene Lötkenntnisse verfügen, ein wenig mit der Arduino IDE gearbeitet und die ESP8266-Boards mit dem Boards Manager installiert haben. Sie benötigen außerdem einen 3,3-Volt-USB-Seriell-Adapter, um den Mikrocontroller zu programmieren.

Ich gehe auch davon aus, dass Sie einen MQTT-Broker und einen Node-RED-Server laufen haben. Wenn nicht, gibt es viele Anweisungen im Internet, aber ich würde empfehlen, den faulen Weg zu gehen und das hervorragende Installationsskript von Peter Scargill zu verwenden, wenn Sie dies auf einem Pi oder Ubuntu ausführen möchten, oder verwenden Sie das Image von Andreas Spiess für den Pi Zero W (Links in der Beschreibung dieses Videos), wodurch Sie ein paar Stunden lang die laufenden Installationsskripte sehen müssen. Alternativ können Sie die Firmware direkt eine E-Mail senden lassen, aber Sie verlieren dabei viel Flexibilität.

Teile

  • 1 geschlossener, 3 AA-Batteriekasten
  • 2 AA-Batterien
  • 1 ESP8266-Modul. Für dieses Projekt habe ich einen ESP-01 verwendet
  • 1 Mikroschalter
  • 1 47K Widerstand
  • 1 4M7 Widerstand
  • 1 2,2 uF Kondensator
  • 1 dünnes Plastikrohr. Ich habe einen Stift benutzt
  • 1 dickes, langes Streichholz oder Lutscher. Es sollte leicht in das Kunststoffrohr passen und sich bewegen

Schritt 2: Hardware: Box, Schalter und Verkabelung

Hardware: Box, Schalter und Verkabelung
Hardware: Box, Schalter und Verkabelung
Hardware: Box, Schalter und Verkabelung
Hardware: Box, Schalter und Verkabelung
Hardware: Box, Schalter und Verkabelung
Hardware: Box, Schalter und Verkabelung

Angefangen habe ich mit einem alten Batteriekasten aus einer nicht mehr existierenden Weihnachtsdekoration. Es ist für drei Batterien der Größe AA ausgelegt. Da der ESP8266 gut mit 3 Volt läuft, könnte ich zwei Batterien verwenden und die dritte Position für den Mikrocontroller verwenden. Beachten Sie, dass die Box ein kleines zusätzliches Fach hatte, das ich für den Aktivierungsschalter verwenden konnte. Ich habe einen sehr gebräuchlichen Schaltertyp verwendet, der in den Bildern gezeigt wird, aber die Feder entfernt, die ihn in der Ein- oder Aus-Position verriegelt. Ich lötete zwei dünne Drähte an die NC-Kontakte und klebte sie mit einem winzigen Tropfen Sekundenkleber in die Box.

Als nächstes bohrte ich ein Loch in die obere Abdeckung, das zu einem Plastikrohr aus einem Kugelschreiber passte. Das Loch fluchtet genau mit dem Schalter und führt einen Kolben aus einem dicken Streichholz.

Schließlich lötete ich zwei weitere Drähte an die Batteriekontakte und führte alle vier Drähte an die Position der dritten Batterie, wo der Mikrocontroller sein sollte.

Schritt 3: Hardware: das ESP-01

Hardware: ESP-01
Hardware: ESP-01
Hardware: ESP-01
Hardware: ESP-01
Hardware: ESP-01
Hardware: ESP-01

Angesichts der WLAN-Anforderung schreit das gesamte Projekt ESP8266. Dieser kleine WLAN-Controller hat sich als unter 2,50 Euro zu erwerbendes Modul zum bevorzugten Arbeitstier der Bastler-Community entwickelt und integriert einen kompletten WLAN- und TCP/IP-Stack, mit mehr als genug Kapazität, um eigene Programme auszuführen. Die Arduino IDE (oder Atom mit dem PlatformIO-Plugin) unterstützt den ESP8266 vollständig.

Normalerweise würde ich einen ESP-12F nehmen, aber ich hatte ein winziges ESP-01-Board herumgelegt, das perfekt für den Job war und gut in den Batteriekasten passt. Das einzige Problem ist, dass es ziemlich kompliziert ist, die Firmware im ESP-01 zu flashen. Mehr dazu im nächsten Schritt. Es gibt eine Änderung: Sie müssen die rote Power-LED von der Platine entfernen, da sie kontinuierlich 3 mA zieht. Wenn die LED entfernt ist, verbraucht das Modul im Deepsleep-Modus nur ein paar Dutzend uA, wodurch es mit zwei hochwertigen AA-Batterien über ein Jahr hält.

Es stellte sich heraus, dass ich zwei Streifen von 4-poligen Buchsenleisten verwenden und die wenigen zusätzlichen Komponenten in freier Form anlöten konnte, damit ich das ESP-01 entfernen konnte, um die Firmware zu aktualisieren, während es noch in das dritte Batteriefach passte.

Es ist sehr wichtig, das ESP richtig zu verkabeln. Verdrahten Sie es mit dem obigen Spickzettel wie folgt.

  1. Batterieplus an Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) und ein 47K Widerstand.
  2. Batterie-Minus an GND (A1) und eine Ader des Schalters.
  3. Der andere Draht des Schalters zu einem 100nF-Kondensator und einem 4M7-Widerstand.
  4. Die offenen Enden beider Widerstände und des Kondensators an RST (C2).
  5. TXD (A2) kann unbeschaltet bleiben.

Bearbeiten: Ich musste das ESP-01 ersetzen, weil ich einen dummen Fehler gemacht und es zerstört habe. Es stellte sich zu meiner Überraschung heraus, dass der neue ESP-01 nicht mit dem ursprünglichen 100nF-Kondensator zurückgesetzt wurde. Es hat wahrscheinlich ein etwas anderes Design. Ich habe es durch ein 2,2 uF ersetzt und jetzt funktioniert es wieder

Wenn Sie fertig sind, kann alles in der Box montiert werden, aber warten Sie, zuerst müssen wir das Modul programmieren.

Schritt 4: Programmierung des ESP-01

Programmierung des ESP-01
Programmierung des ESP-01
Programmierung des ESP-01
Programmierung des ESP-01
Programmierung des ESP-01
Programmierung des ESP-01

Um die Firmware auf Ihrem ESP-01 zu flashen, können Sie entweder ein kleines Rig bauen oder einen (fast) kompletten Programmierer für ca. 1 Euro kaufen.

Hardware-Rig programmieren

Baue ein kleines Rig mit wieder zwei Buchsenleisten für das ESP-01. Außerdem benötigen Sie ein USB-Seriell-Modul, das 3,3 Volt bereitstellen kann. Beachten Sie, dass der ESP8266-Chip nicht 5 Volt gehärtet ist, so dass ein Fehler hier Ihr Modul zerstören könnte. Wie auch immer, wieder mit dem Spickzettel, verdrahten Sie Ihr Rig wie folgt:

  1. 3.3V vom USBSerial-Modul an Vcc, CH_PD, RST und GPIO2.
  2. GND des USBSerial-Moduls auf GND und GPIO0.
  3. TXD des USBSerial-Moduls an RXD.
  4. RDX des USBSerial-Moduls zu TXD.

Vorgefertigter Programmierer

So viel Spaß es auch macht, eigene Sachen zu bauen, der faulere Ansatz besteht darin, eine ESP-01-zu-Seriell-Schnittstelle von Ihrer bevorzugten Auktionsseite zu erhalten, siehe Bild oben. Das ist viel einfacher, kompakter und zuverlässiger als ein Rig. Einige davon sind jedoch keine Programmierer, sondern nur serielle Schnittstellen. Sie müssen eine Drahtbrücke zwischen GND (Pin A1) und GPIO0 (Pin C1) auf der Rückseite der Schnittstelle löten, siehe zweites Bild. Beachten Sie, dass das ESP-01 mit der Antenne in Richtung USB-Stecker eingesteckt werden sollte, nicht umgekehrt!

Hinweis: es gibt sie auch mit Schalter, siehe drittes Bild, sehr schön.

Laden Sie die Firmware

Angenommen, eine Arduino IDE von 1.8.3 oder höher, wählen Sie Tools > Board und wählen Sie das Board aus, das Sie haben. Wählen Sie für ein ESP-01, wie ich es verwendet habe, "Generic ESP8266 Module" und stellen Sie die folgenden Optionen ein (dies sollten alle Standardeinstellungen sein):

  1. Blitzmodus: DIO
  2. Blitzfrequenz: 40MHz
  3. CPU-Frequenz: 80MHz
  4. Flash-Größe: 512 KB (64 KB SPIFFS) Hinweis: Wenn Sie ein schwarzes ESP-01-Board verwenden, wählen Sie 1 MB (64 KB SPIFFS)
  5. Debug-Port: Deaktiviert
  6. Debug-Level: Keine
  7. Reset-Methode: ck
  8. Upload-Geschwindigkeit 115200
  9. Port: Wählen Sie den Port aus, der mit Ihrer seriellen USB-Schnittstelle verbunden ist. Für meinen Ubuntu-PC war das /dev/ttyUSB0

Schließen Sie das Rig / Programmer an, laden Sie die Skizze, die Sie hier finden https://gitlab.com/jeroenmeijer/Mailbox.git. Geben Sie Ihre WLAN- und MQTT-Broker-Anmeldeinformationen sowie Ihre IP-Konfiguration in config.h ein und wählen Sie Upload.

Schritt 5: Alles zusammenbauen

Alles zusammenbauen
Alles zusammenbauen

Ich bohrte ein Loch für das Plastikrohr in den inneren Deckel meines Briefkastens, so nah wie möglich am Scharnier, dann klebte ich den Batteriekasten an der Unterseite dieses Deckels heiß an. Als nächstes benutzte ich ein dickes Streichholz als Kolben. Ich benutzte eine Schere, um das Streichholz auf Länge zu schneiden, damit sich der Schalter öffnen würde, wenn der äußere Deckel geschlossen war. Ich habe die Konnektivität überprüft, indem ich den Deckel geöffnet habe, während ich mosquitto_sub ausgeführt habe, um MQTT-Nachrichten zu überwachen (ersetzen Sie mqttbroker, Benutzer und Passwort durch Ihre MQTT-Konfiguration):

$ mosquitto_sub -h mqttbroker -v -t "stat/#" -u Benutzer -P Passwort

Ungefähr sechs Sekunden nach dem Öffnen des Außendeckels wird die folgende MQTT-Nachricht veröffentlicht. Die Zeit wird verwendet, um den Mikrocontroller aufzuwecken und die WLAN- und Broker-Verbindung herzustellen.

stat/mailbox/trigger {"vcc":3050, "flap":true, "prev":0, "RSSI":29, "version": "005"}

Während dieser Zeit verbrauchte der Mikrocontroller ca. 70mA. Wenn es fertig ist, geht es in den Tiefschlaf und in meinem Fall hat es weniger als 20uA verbraucht. "flap" ist immer wahr, "vcc" gibt die Batteriespannung in mV an und "prev" sollte 0 sein. Wenn es 1 oder 2 ist, bedeutet dies, dass die Mailbox früher keine Nachricht senden konnte, weil sie auch keine Verbindung herstellen konnte das WLAN, oder weil es keine Verbindung zum MQTT-Broker herstellen konnte. "RSSI" ist die Stärke des WiFi-Signals. Beide sind sehr praktisch, um Probleme zu diagnostizieren.

Es ist eine gute Idee, die Batteriespannung einige Tage lang zu überwachen, um sicherzustellen, dass das Gerät wie vorgesehen funktioniert und die Batterie nicht aus irgendeinem Grund entlädt.

Die Firmware ist auch in der Lage, sich selbst über die Luft (OTA) zu aktualisieren, aber das geht ein wenig über den Rahmen dieser Anleitung hinaus. Für Interessierte befindet sich die OTA-Konfiguration auch in config.h.

Schritt 6: Verwenden von Node-RED, um auf die MQTT-Nachricht zu reagieren

Verwenden von Node-RED, um auf die MQTT-Nachricht zu reagieren
Verwenden von Node-RED, um auf die MQTT-Nachricht zu reagieren

Schließlich habe ich in Node-RED einen einfachen Flow erstellt. Der erste Knoten abonniert das Thema der Mailbox (stat/postbox/trigger). Beim Empfang einer Nachricht formatiert der zweite Knoten eine E-Mail *). Der letzte Knoten sendet es an meine Google Mail-Adresse und verwendet Google Mail als SMTP-Server. Mein Telefon benachrichtigt mich dann über neue E-Mails.

Ich habe den Node-RED-Flow zu einem Gitlab-Snippet hinzugefügt, damit Sie ihn in Ihre Node-RED-Flows importieren können.

Natürlich können Sie weitere Knoten hinzufügen, um beispielsweise die Mailbox-Ereignisse in MariaDb oder SqlLite zu protokollieren oder zusätzliche Alarme zu erstellen, wenn die Batteriespannung unter 2,7 Volt sinkt.

Viel Spaß bei der Post-Jagd!

*) Siehe nächste Seite, ich verwende jetzt PushBullet anstelle von E-Mail.

Schritt 7: Nachdenken

Man hat immer das Gefühl, dass man die Dinge besser hätte machen können.

Schalter

Ich hätte lieber einen (Super-)Magneten und einen Reedkontakt verwendet als den etwas ungeschickten Kolbenansatz. Es gab zwei Gründe. Erstens konnte ich dies nicht zum Laufen bringen, wenn sich der Kontakt beim Öffnen der Box schloss, und wenn sie immer geschlossen war, floss immer ein kleiner Strom. Im Nachhinein wären die weniger als 1uA, die durch den 4M7-Widerstand fließen, in Bezug auf die Batterielebensdauer keine große Sache. Das andere war praktischer. Ich habe dieses Projekt am Samstag gemacht und die Software geschrieben, am Sonntag alles aus dem gebaut, was herumlag. Ich hatte einfach keinen Reedkontakt in der Trödelkiste.

Hinweis: Wie diy_bloke kommentierte, neigen Reedkontakte dazu, bei längerer Magnetisierung klebrig zu werden, daher war der Kolben vielleicht gar keine so schlechte Idee. Wir werden sehen. *)

Meldung beim Entleeren

Die Mailbox sendet auch beim Leeren eine Nachricht. Das ist keine große Sache, aber wenn mehr Leute im Haus die Warnung erhalten, könnte man in einer Schleife enden, die den Briefkasten überprüft, der seinem ganzen Zweck widerspricht! Es gibt einige Möglichkeiten, dies zu umgehen, z. B. überprüfen, ob der Innendeckel angehoben ist, und senden Sie in diesem Fall keine Nachricht. Oder installieren Sie anstelle des Deckelschalters einen Detektor am Boden des Briefkastens. Oder eine kleine Reset-Taste, die beim Entleeren gedrückt werden muss. All dies würde jedoch die Dinge verkomplizieren und wahrscheinlich die Zuverlässigkeit verschlechtern.

Nachrichten

Das Versenden von E-Mails ist eine ziemlich effektive, aber grobe Art, die Warnung herauszugeben. Ein eleganterer Weg wäre eine Telefon-App, aber ich habe keine Android-MQTT-Dashboard-App gefunden, die so konfiguriert werden kann, dass sie beim Empfang einer bestimmten Nachricht eine Betriebssystemwarnung auslöst. Wenn es einen in der Nähe gibt, fügen Sie bitte den Kommentaren hinzu. **)

*) Nach über einem Jahr im Betrieb stellt sich heraus, dass der von mir verwendete Lutscherstab, im Wesentlichen hart gerolltes Papier, dazu neigt, sich unter dem ständigen Druck der Schaltfeder zu verkürzen. Nach einiger Fehlersuche habe ich es durch einen Holzstab ersetzt.

**) Ich verwende PushBullet jetzt für Push-Nachrichten, getrennt vom MQTT-Dashboard. Eine winzige Node-RED-Low-Schnittstelle zur API finden Sie hier. Stellen Sie sicher, dass Sie das Zugriffstoken im Knoten "Prepare for pushbullet" und Ihre E-Mail-Adresse für Fallback-Zwecke im Knoten "Retry" angeben.

Empfohlen: