Inhoudsopgave:

MQTT en wifi-aangedreven mailboxvlag - Ajarnpa
MQTT en wifi-aangedreven mailboxvlag - Ajarnpa

Video: MQTT en wifi-aangedreven mailboxvlag - Ajarnpa

Video: MQTT en wifi-aangedreven mailboxvlag - Ajarnpa
Video: Zigbee Ethernet шлюз Zigstar Lilyzig с поддержкой Power over Ethernet, ставим второй zigbee2mqtt 2024, Juli-
Anonim
MQTT en wifi-aangedreven mailboxvlag
MQTT en wifi-aangedreven mailboxvlag

Let op: bijgewerkt met nieuwe firmware, een schema en tips voor een programmeur

Een paar jaar ben ik begonnen aan mijn eigen domotica-project. Het begon met het bouwen van een servergestuurde 433 MHz-zender gebouwd met een Arduino om veel goedkope op PT2262 gebaseerde externe schakelaars te schakelen. Later heb ik een op Arduino gebaseerde ontvanger voor mijn weerstation toegevoegd, het stuurcontact van mijn EV-oplader aangesloten, enzovoort. De zaken raakten steeds meer met elkaar verweven (en gecompliceerd!). Dus besloot ik een paar maanden geleden om alles te standaardiseren op basis van MQTT voor messaging, Node-RED voor automatisering (beide draaien op een enkele Raspberry Pi B+) en MariaDb voor logging (draaien op mijn Synology NAS). Later heb ik de MQTT-broker (Mosquitto) en Node-RED ook naar de NAS verplaatst.

Dit instructable beschrijft een dwaas voor de lol project dat mijn op straat gemonteerde brievenbus in deze thuisinfrastructuur aansluit. Het idee is dat als iemand de op het hek gemonteerde brievenbus ongeveer 10 meter van de voordeur opent, dit mij op mijn telefoon en mogelijk andere apparaten signaleert.

Stap 1: Overzicht, vereisten en onderdelen

Overzicht

Op hoog niveau moet de mailbox, wanneer deze wordt geopend, een uniek MQTT-bericht naar de makelaar sturen, zodat abonnees op dat onderwerp worden geïnformeerd. Node-RED is ook geabonneerd en doet wat automatisering, in dit geval een e-mail en/of een pushbericht naar mijn telefoon sturen.

De mailbox moet op batterijen werken en minimaal een jaar meegaan, en wel via mijn wifi-netwerk. Omdat het activeren van een microcontroller en verbinding maken met een wifi-netwerk enkele seconden kan duren, kon ik de activeringsschakelaar niet gebruiken om de stroom uit te schakelen. In plaats daarvan zou de verwerker zijn werk moeten kunnen afmaken nadat het deksel van de brievenbus al is gesloten.

Vereisten

Ik neem aan dat je een bescheiden soldeervaardigheid hebt, een beetje met de Arduino IDE hebt gewerkt en de ESP8266-kaarten hebt geïnstalleerd met behulp van de Boards Manager. U hebt ook een 3,3 volt USB Serial-adapter nodig om de microcontroller te programmeren.

Ik neem ook aan dat je een MQTT-broker en een Node-RED-server hebt draaien. Zo niet, dan zijn er veel instructies op internet, maar ik zou adviseren om de luie route te nemen en het uitstekende installatiescript van Peter Scargill te gebruiken als je dit op een Pi of Ubuntu wilt uitvoeren, of de afbeelding van Andreas Spiess voor de Pi Zero W (links in de beschrijving van die video), wat u een paar uur bespaart bij het kijken naar draaiende installatiescripts. Als alternatief kunt u de firmware rechtstreeks een e-mail laten verzenden, maar u verliest veel flexibiliteit als u dit doet.

Onderdelen

  • 1 gesloten, 3 AA-batterijdoos
  • 2 AA-batterijen
  • 1 ESP8266-module. Voor dit project gebruikte ik een ESP-01
  • 1 microschakelaar
  • 1 47K weerstand
  • 1 4M7 weerstand
  • 1 2.2uF condensator
  • 1 dunne plastic buis. ik heb een pen gebruikt
  • 1 dikke, lange lucifer of lollystokje. Het moet gemakkelijk in de plastic buis passen en bewegen

Stap 2: Hardware: de doos, schakelaar en bedrading

Hardware: de doos, schakelaar en bedrading
Hardware: de doos, schakelaar en bedrading
Hardware: de doos, schakelaar en bedrading
Hardware: de doos, schakelaar en bedrading
Hardware: de doos, schakelaar en bedrading
Hardware: de doos, schakelaar en bedrading

Ik begon met een oude accubak van een ter ziele gegane kerstversiering. Het is ontworpen voor drie AA-batterijen. Omdat de ESP8266 mooi op 3 volt loopt, zou ik twee batterijen kunnen gebruiken en de derde positie voor de microcontroller. Merk op hoe de doos een klein extra compartiment had dat ik kon gebruiken voor de activeringsschakelaar. Ik heb een veelgebruikt type schakelaar gebruikt dat op de foto's wordt getoond, maar verwijderde de veer die hem in de aan- of uit-stand vergrendelt. Ik heb twee dunne draden aan de NC-contacten gesoldeerd en in de doos gelijmd met een klein druppeltje superlijm.

Vervolgens boorde ik een gat in de bovenklep, passend bij een plastic buisje uit een balpen. Het gat is precies uitgelijnd met de schakelaar en geleidt een plunjer gemaakt van een dikke lucifer.

Ten slotte heb ik nog twee draden aan de batterijcontacten gesoldeerd en alle vier de draden naar de positie van de derde batterij geleid, waar de microcontroller zou komen.

Stap 3: Hardware: de ESP-01

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

Gezien de wifi-eis schreeuwt het hele project ESP8266. Deze kleine wifi-controller is het favoriete werkpaard van de knutselgemeenschap geworden als een module die voor minder dan 2,50 euro kan worden gekocht en die een volledige wifi- en TCP/IP-stack integreert, met meer dan genoeg capaciteit om je eigen programma's te draaien. De Arduino IDE (of Atom met de PlatformIO-plug-in) ondersteunt de ESP8266 volledig.

Ik zou meestal een ESP-12F nemen, maar ik had een klein ESP-01-bordje liggen dat perfect was voor de klus en mooi in de accubak past. Het enige probleem is dat het behoorlijk ingewikkeld is om firmware in de ESP-01 te flashen. Daarover meer in de volgende stap. Er is één wijziging die moet worden aangebracht: u moet de rode voedings-LED van het bord verwijderen, omdat deze continu 3mA trekt. Als de LED is verwijderd, gebruikt de module slechts enkele tientallen uA in de diepe slaapmodus, waardoor hij meer dan een jaar meegaat op twee hoogwaardige AA-batterijen.

Het bleek dat ik twee strips van 4-pins vrouwelijke headers kon gebruiken en de paar extra componenten in vrije vorm kon solderen, zodat ik de ESP-01 kon verwijderen om de firmware te updaten, terwijl hij nog in het derde batterijcompartiment zou passen.

Het is erg belangrijk om de ESP correct te bedraden. Gebruik het bovenstaande spiekbriefje om het als volgt aan te sluiten.

  1. Batterij plus naar Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) en een 47K-weerstand.
  2. Batterij min naar GND (A1) en één draad van de schakelaar.
  3. De andere draad van de schakelaar naar een 100nF condensator en een 4M7 weerstand.
  4. De open uiteinden van beide weerstanden en de condensator naar RST (C2).
  5. TXD (A2) kan losgekoppeld blijven.

Bewerken: ik moest de ESP-01 vervangen omdat ik een domme fout maakte en hem vernietigde. Bleek dat tot mijn verbazing de nieuwe ESP-01 niet resette met de originele 100nF condensator. Het heeft waarschijnlijk een iets ander ontwerp. Ik heb hem vervangen door een 2.2 uF en nu werkt het weer

Als je klaar bent, kan alles in de doos worden gemonteerd, maar wacht even, eerst moeten we de module programmeren.

Stap 4: Programmeren van de ESP-01

Programmeren van de ESP-01
Programmeren van de ESP-01
Programmeren van de ESP-01
Programmeren van de ESP-01
Programmeren van de ESP-01
Programmeren van de ESP-01

Om de firmware op je ESP-01 te flashen, kun je een kleine rig bouwen of een (bijna) complete programmer kopen voor ongeveer 1 euro.

Hardwarematige programmering

Bouw een kleine rig met weer twee vrouwelijke headers voor de ESP-01. U hebt ook een seriële USB-module nodig die 3,3 volt kan leveren. Merk op dat de ESP8266-chip niet 5 volt gehard is, dus een fout hier kan uw module doden. Hoe dan ook, gebruik opnieuw het spiekbriefje en bedraad je rig als volgt:

  1. 3.3V van de USBSerial-module naar Vcc, CH_PD, RST en GPIO2.
  2. GND van de USBSerial-module naar GND en GPIO0.
  3. TXD van de USBSerial-module naar RXD.
  4. RDX van de USBSerial-module naar TXD.

Pre-build programmeur

Hoe leuk het ook is om je eigen spullen te bouwen, de luiere benadering is om een ESP-01-naar-serieel interface te krijgen van je favoriete veilingsite, zie de afbeelding hierboven. Dit is veel gemakkelijker, compacter en betrouwbaarder dan een rig. Sommige hiervan zijn echter geen programmeurs, maar seriële interfaces. U dient een draadbrug te solderen tussen GND (pin A1) en GPIO0 (pin C1) aan de achterzijde van de interface, zie de tweede foto. Merk op dat de ESP-01 moet worden aangesloten met de antenne naar de USB-stekker gericht, niet andersom!

Let op: ze bestaan ook met een schakelaar, zie derde foto, erg mooi.

Laad de firmware

Uitgaande van een Arduino IDE van 1.8.3 of hoger, selecteer Tools > Board en selecteer het board dat je hebt. Voor een ESP-01 zoals ik gebruikte, kies "Generic ESP8266 Module" en stel de volgende opties in (dit zouden alle standaardinstellingen moeten zijn):

  1. Flitsmodus: DIO
  2. Flitsfrequentie: 40MHz
  3. CPU-frequentie: 80 MHz
  4. Flash grootte: 512KB (64KB SPIFFS) Let op: als je een zwart ESP-01 board gebruikt, kies dan 1MB (64KB SPIFFS)
  5. Foutopsporingspoort: Uitgeschakeld
  6. Foutopsporingsniveau: Geen
  7. Reset methode: ck
  8. Uploadsnelheid 115200
  9. Poort: selecteer de poort die is aangesloten op uw seriële USB-interface. Voor mijn Ubuntu-pc was dat /dev/ttyUSB0

Sluit de rig / programmer aan, laad de Sketch die je hier kunt vinden https://gitlab.com/jeroenmeijer/Mailbox.git. Geef uw WiFi- en MQTT-brokerreferenties en uw IP-configuratie op in config.h en kies Uploaden.

Stap 5: Alles in elkaar zetten

Alles in elkaar zetten
Alles in elkaar zetten

Ik boorde een gat voor de plastic buis in het binnendeksel van mijn brievenbus, zo dicht mogelijk bij het scharnier, en verlijmde vervolgens de batterijdoos aan de onderkant van dat deksel. Vervolgens gebruikte ik een dikke lucifer als zuiger. Ik gebruikte een knipsel om de lucifer op lengte te knippen, zodat de schakelaar zou openen als het buitenste deksel gesloten was. Ik heb de connectiviteit gecontroleerd door het deksel te openen tijdens het uitvoeren van mosquitto_sub om MQTT-berichten te controleren (vervang mqttbroker, gebruiker en wachtwoord door uw MQTT-configuratie):

$ mosquitto_sub -h mqttbroker -v -t "stat/#" -u gebruiker -P wachtwoord

Ongeveer zes seconden nadat het buitenste deksel is geopend, wordt het volgende MQTT-bericht gepubliceerd. De tijd wordt gebruikt om de microcontroller te wekken en de wifi- en brokerverbinding tot stand te brengen.

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

Gedurende deze tijd gebruikte de microcontroller ongeveer 70 mA. Als het klaar is, gaat het in diepe slaap en in mijn geval gebruikte het minder dan 20uA. "flap" is altijd waar, "vcc" geeft aan dat de batterijspanning in mV en "prev" 0 moet zijn. Als het 1 of 2 is, betekent dit dat de mailbox niet eerder een bericht kon verzenden, ofwel omdat het geen verbinding kon maken met de WiFi, of omdat het geen verbinding kon maken met de MQTT-makelaar. "RSSI" is de sterkte van het wifi-signaal. Beide zijn erg handig om problemen te diagnosticeren.

Het is een goed idee om de batterijspanning een paar dagen in de gaten te houden om er zeker van te zijn dat het apparaat werkt zoals bedoeld en de batterij om de een of andere reden niet leegraakt.

De firmware kan zichzelf ook via de ether (OTA) bijwerken, maar dat valt iets buiten het bestek van deze instructable. Voor de geïnteresseerden, de OTA-configuratie staat ook in config.h.

Stap 6: Node-RED gebruiken om op het MQTT-bericht te reageren

Node-RED gebruiken om op het MQTT-bericht te reageren
Node-RED gebruiken om op het MQTT-bericht te reageren

Ten slotte heb ik een eenvoudige stroom gemaakt in Node-RED. Het eerste knooppunt abonneert zich op het onderwerp van de mailbox (stat/postbox/trigger). Wanneer een bericht wordt ontvangen, maakt het tweede knooppunt een e-mail *). Het laatste knooppunt stuurt het naar mijn gmail-adres, met gmail als SMTP-server. Mijn telefoon waarschuwt me dan als er nieuwe e-mail is.

Ik heb de Node-RED-stroom toegevoegd aan een gitlab-fragment, zodat je het in je Node-RED-stromen kunt importeren.

Natuurlijk kun je wat meer nodes toevoegen, bijvoorbeeld om de mailbox-gebeurtenissen in MariaDb of SqlLite te loggen, of extra alarmen te creëren wanneer de batterijspanning onder de 2,7 volt komt.

Veel post-hunting!

*) Zie volgende pagina, ik gebruik nu PushBullet in plaats van e-mail.

Stap 7: Nadenken

Er is altijd het gevoel dat dingen beter hadden gekund.

Schakelaar

Ik had liever een (super)magneet en een reedcontact gebruikt in plaats van de wat onhandige plunjeraanpak. Er waren twee redenen. Een daarvan is dat ik dit op geen enkele manier kon laten werken met het contact dat werd gesloten toen de doos werd geopend, en als het altijd gesloten was, zou er altijd een kleine stroom vloeien. Achteraf gezien zou de minder dan 1uA die door de 4M7-weerstand vloeit geen groot probleem zijn geweest in termen van levensduur van de batterij. De andere was een meer praktische. Ik verzon dit project op zaterdag en schreef de software, bouwde het allemaal op zondag van wat er lag. Ik had gewoon geen reed-contact in de junkbox.

Opmerking: zoals diy_bloke opmerkte, hebben reedcontacten de neiging om plakkerig te worden als ze lange tijd worden gemagnetiseerd, dus misschien was de plunjer helemaal niet zo'n slecht idee. We zullen zien. *)

Bericht bij legen

De mailbox verstuurt ook een bericht bij het legen ervan. Dit is niet erg, maar met meer mensen in huis die de waarschuwing krijgen, kan je in een lus terechtkomen die de mailbox controleert en zijn hele doel tart! Er zijn een paar manieren om dit te omzeilen, zoals controleren of het binnendeksel is opgetild, en zo ja, stuur dan geen bericht. Of installeer in plaats van de dekselschakelaar een detector aan de onderkant van de brievenbus. Of een kleine resetknop die moet worden ingedrukt bij het legen. Alles zou de zaken echter compliceren en waarschijnlijk de betrouwbaarheid verslechteren.

Berichten

Het verzenden van e-mail is een vrij effectieve maar grove manier om de waarschuwing te verspreiden. Een elegantere manier zou een telefoon-app zijn, maar ik heb geen Android MQTT-dashboard-app gevonden die kan worden geconfigureerd om een besturingssysteemwaarschuwing te activeren wanneer een bepaald bericht wordt ontvangen. Als er een in de buurt is, voeg dan toe aan de opmerkingen. **)

*) Na meer dan een jaar in gebruik blijkt dat het lollystokje dat ik heb gebruikt, in feite hard opgerold papier, de neiging heeft om korter te worden onder de constante druk van de schakelveer. Na wat probleemoplossing heb ik het vervangen door een houten stok.

**) Ik gebruik PushBullet nu voor pushberichten, los van het MQTT-dashboard. Een kleine Node-RED lage interface naar de API is hier te vinden. Zorg ervoor dat u het toegangstoken in node "Prepare for pushbullet" en uw e-mailadres voor fallback-doeleinden in node "Retry" invoert.

Aanbevolen: