Inhaltsverzeichnis:
- Schritt 1: Globales Schema
- Schritt 2: Schaltplan / Verkabelung
- Schritt 3: Energieverwaltung
- Schritt 4: Installieren von Magneten und Reeds-Kontakten
- Schritt 5: Verbinden Sie sich mit meinem kleinen Haus
- Schritt 6: Im Haus …
- Schritt 7: Lassen Sie es Plattenspieler …
- Schritt 8: Einige Tests
- Schritt 9: Das kleine Haus
- Schritt 10: Die Skizze
- Schritt 11: Domoticz
- Schritt 12: Fazit
Video: Angeschlossener Briefkasten solarbetrieben - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:20
Für mein zweites Ible beschreibe ich euch meine Arbeiten zu meinem angeschlossenen Briefkasten.
Nachdem ich dieses Instructable (+ viele andere) gelesen hatte und mein Briefkasten nicht in der Nähe meines Hauses ist, wollte ich mich von den Werken von Open Green Energy inspirieren, um meinen Briefkasten mit meinem Domoticz-Server zu verbinden.
Ziele
- Lassen Sie sich per Telegram benachrichtigen, wenn Briefe eingehen;
- Lassen Sie sich per Telegram benachrichtigen, wenn ein Paket ankommt;
- Prüfen Sie, ob die Briefe / Pakete abgeholt wurden.
Meine Haupteinschränkung
Der Briefkasten ist relativ weit vom Haus entfernt, und es war unmöglich, ein elektrisches Kabel dorthin zu ziehen, um etwas mit Strom zu versorgen.
Ich musste eine andere Lösung finden: Solarstrom war eine gute Lösung!
Die Stückliste
- Raspberry Pi (um MQTT- und Domoticz-Teile zu hosten - hier nicht beschrieben)
- Ein Telegram Bot-Konto
- Lolin D1 mini (oder Wemos …)
- Einsteckbarer Schraubklemmenblock-Steckverbinder
- TP4056 Lithium-Akku-Ladeplatine
- 6V 2W Photovoltaik-Solarmodul
- Li-Ion 18650 Akku
- Li-Ion-Akkuhalter
- PCB DIY Löten Kupfer Prototyp Leiterplatte
- Analog-Servo SG90
- 3 Reedschalter (einer für Briefe, einer für Paket und einer für die Kasse)
- Magnete
- Einige Drähte
- Holzkiste: Da ich keinen 3D-Drucker bekommen habe, habe ich mein eigenes Häuschen mit Holz gebaut, um Elektronikteile aufzunehmen …
- Ersatz-Ethernet-Kabel
-
RJ45-Ethernet-Anschluss-Breakout-Board
- J-B Schweißen
- Einige Kugellager
- Schrauben, Muttern, Unterlegscheiben
Schritt 1: Globales Schema
Schöne Zeichnungen sind immer besser als lange Reden;-)
Aber ein paar Erläuterungen zu MQTT, Domoticz und Telegram sind immer willkommen!
MQTT (Message Queuing Telemetry Transport) ist ein Messaging-Protokoll, das zum Senden von Daten zwischen Geräten und anderen Systemen in der Welt des IoT (Internet der Dinge) verwendet wird.
Ohne zu sehr ins Detail zu gehen, basiert seine Funktionsweise auf dem Prinzip, dass sich Clients mit einem Server verbinden. In MQTT werden Clients als Abonnent oder Verleger bezeichnet, und der Server wird als Broker bezeichnet.
In diesem Instructable verwende ich nur einen Herausgeber, den Lolin, der mit meinem Briefkasten verdrahtet ist: Wenn Briefe oder Pakete über die im Briefkasten installierten Reed-Kontakte erkannt werden (Schritt 1 in Schema), senden Sie eine MQTT-Nachricht über WIFI an den Broker (Schritt 2).).
Der Broker-Teil wird von Mosquitto erledigt, das auf dem Raspberry Pi installiert ist (Schritt 3).
Über Domoticz:
Wie auf der Quellseite beschrieben, ist Domoticz ein "Hausautomationssystem", mit dem Sie verschiedene Geräte steuern und Eingaben von verschiedenen Protokollen erhalten können: MQTT ist eines der unterstützten Protokolle …
Sobald Informationen bei ihm eintreffen (Schritt 4), können Sie Ereignisse definieren: Beim Briefkasten habe ich mich dafür entschieden, eine Telegrammbenachrichtigung zu senden (Schritt 5).
Schließlich ist der Telegram-Client auf meinem Telefon konfiguriert (und auch auf dem meiner Frau! - Schritt 6): Das Endziel ist erreicht…
Schritt 2: Schaltplan / Verkabelung
Ein Wort zum analogen lesen:
Zuallererst bemerkte ich nach einigen Recherchen, dass Lolin mini D1 (wie der alte Wemos) einen eingebauten Spannungsteiler für Pin A0 hat (in Anbetracht von 220KΩ für R1 und 100KΩ für R2 - siehe rechts im verlinkten Datenblatt), der 3,2 Volt ermöglicht als maximale analoge Eingangsspannung.
Wenn man bedenkt, dass die maximale Ausgangsspannung der Batterie 4, 2 V (begrenzt durch die Ladeplatine) beträgt, müssen Sie theoretisch nur einen externen Widerstand (in Reihe mit R1) hinzufügen, um den maximalen Eingangsspannungsbereich zu erhöhen. Wenn Sie dann 100K in Reihe mit R1 hinzufügen, erhalten Sie dieses Ergebnis:
Vin * R1/(R1+R2) = Vout
4, 2 * 320K/(320K+100K) = 3, 2
In meiner Schaltung habe ich mich dafür entschieden, ihren Wert einstellen zu können, deshalb habe ich es vorgezogen, einen einstellbaren Widerstand in meiner Schaltung zu verwenden: Vielleicht ist er für Sie nutzlos, aber in meiner Situation habe ich seinen Wert auf etwa 10KΩ eingestellt ein kohärenter Wert in Domoticz …
Beachten Sie, dass der A0-Pin eine Auflösung von 10 Bit hat: Dies bedeutet, dass Ihr analoger Messwert in Ihrer Skizze einen Wert zwischen 0 und 1024 zurückgibt.
Da ich einen Prozentwert an Domoticz senden möchte, muss ich das analoge Leseergebnis durch 10, 24 teilen.
Schritt 3: Energieverwaltung
Natürlich möchte ich, dass der Briefkasten autonom ist. Um mein Ziel zu erreichen, verwende ich diese Elemente:
- ein Li-Ion 18650 Akku mit 4000mAh;
- ein Solarpanel, das 6V / 2W liefern kann;
- eine TP4056 Lithium-Batterie-Ladeplatine.
Um das am besten geeignete Solarpanel auszuwählen, habe ich mir einige Beispiele angesehen, darunter dieses: In diesem Beispiel wird ein 5,5V / 0,66W Solarpanel verwendet, das für diesen Zweck wahrscheinlich ausreichend ist. In meinem Fall und da der ESP8266 tagsüber eingeschaltet bleiben muss und einen Servomotor betreiben muss, um das Haus der Sonne zugewandt zu halten, habe ich mich für ein leistungsstärkeres Solarmodulmodell (6V / 2W) entschieden - es ermöglicht mir auch um dunkle Winterperioden und bewölkte Tage zu antizipieren;-)
Außerdem und um den Energieverbrauch maximal zu reduzieren, habe ich folgende Szenarien gewählt:
- in dem Wissen, dass der Postbote nur zwischen 7 und 20 Uhr vorbeikommt, wird ESP den Rest der Nacht in DeepSleep versetzt;
- Der Faktor vergeht nicht zwischen Samstagmittag und Montagmorgen: Das ESP wird während dieser Zeit auch in den DeepSleep-Modus versetzt.
- Für den Zeitraum zwischen 7 und 20 Uhr und um den Stromverbrauch zu reduzieren, deaktiviere ich einfach die Netzwerkschnittstelle des ESP: Netzwerk wird nur bei Ankunft eines Pakets oder eines Briefes neu gestartet, gerade genug Zeit, um die Informationen zu senden Domoticz. I muss nicht sofort gewarnt werden und die wenigen zusätzlichen Sekunden, die zum Neustart der Netzwerkschnittstelle erforderlich sind, sind nicht schädlich!
Einige Werte zum Verbrauch in verschiedenen Modi, die ich für den Lolin verwende - siehe Datenblatt, Seite 18:
- Im Normalmodus (bei HF-Betrieb) kann der Stromverbrauch auf 170mA ansteigen! Da mein Briefkasten etwa 50 Meter von meinem Haus entfernt ist (und an der Grenze des WIFI-Signals …), vermute ich, dass die Leistung, die zur Aufrechterhaltung der Verbindung verwendet wird, maximal ist …
- Im Modem-Sleep sinkt der Stromverbrauch auf 15mA. Aber wie Sie im Datenblatt sehen können, hat es das Modem nicht vollständig gestoppt, da der ESP "eine Wi-Fi-Verbindung ohne Datenübertragung aufrechterhält".
- Im Tiefschlaf sinkt die Leistung auf 20uA.
Um sicher zu gehen, dass das WLAN nicht unnötig aktiv bleibt, habe ich es lieber mit den folgenden Befehlen deaktiviert. Beachten Sie die vielen delay()-Aufrufe … Ohne sie stürzt der ESP ab:
WiFi.disconnect();
Verzögerung (1000); WiFi.mode (WIFI_OFF); Verzögerung (1000); WiFi.forceSleepBegin(); Verzögerung(1);
Insgesamt scheint es nach mehreren Betriebstagen zu funktionieren und vor allem richtig zu laden:
- Dadurch kann ich den Servomotor jede Stunde laufen lassen, um das Haus zur Sonne zu positionieren;
- Ich kann mir auch erlauben, die Netzwerkschnittstelle stündlich zu reaktivieren, um den Akkuladestand an Domoticz zu senden.
Schritt 4: Installieren von Magneten und Reeds-Kontakten
Wie üblich habe ich mit meinem Proxxon die Stelle des Reeds in ein Stück Holz geformt.
Um den Reedkontakt in seinem Loch zu befestigen, habe ich ein wenig J-B-Schweißnaht verwendet.
Für das Paket und die Ausgabe ein Stück Klebeband, ein wenig Bügelsäge, und das Ziel ist erreicht !
Der Vorteil meines Briefkastens ist, dass er aus Metall ist, was die Positionierung von Magneten erleichtert, damit er richtig mit Reed-Kontakten zusammenwirkt.
Schritt 5: Verbinden Sie sich mit meinem kleinen Haus
Um das Kabel, das zu den Reedkontakten vom Briefkasten zum Haus führt, einfach anschließen und trennen zu können, habe ich mich für einen Ethernet-Anschluss entschieden.
Sie können dieses Modell verwenden oder, wie ich, ein altes Arduino-Ethernet-Shield verwenden, das in meinen Schubladen hängt: Er hat nicht gelitten, er war tapfer vor der Säge, sein Tod war schnell ^^
Nur ein Wort zu diesem Arduino-Ethernet-Shield: Erwarten Sie nicht, 8 separate Treiber zu haben … Kabel werden zu 2 innerhalb des Shields gepaart … Es hat mich zu lange in den Wahnsinn getrieben !!!
Schritt 6: Im Haus …
Gerade genug Platz, um den Batteriehalter zu befestigen, das Servo und die RJ45-Buchse einzustellen.
Schritt 7: Lassen Sie es Plattenspieler …
Das Ziel ist es, der Sonne zugewandt zu bleiben …
Um die Drehbarkeit zu ermöglichen, habe ich eine lange Schraube als Achse verwendet, mit einigen Muttern und zwei Kugellagern …
Bisher habe ich SG90 Servo verwendet (Drehmoment: 1,8kg/cm bei 4,8v).
Um das Haus (und seine wenigen Gramm) zu drehen, reicht es aus. Andererseits bin ich mir nicht sicher, ob seine Kunststoffzahnräder den häufigen Windböen, die es in meiner Region gibt, lange standhalten.
Ich habe noch einen bestellt (MG995 Drehmoment: 9,4 kg/cm bei 4,8 V), auch nicht sehr teuer, aber mit Metallzahnrädern.
Wenn ich es erhalten habe, ist es das nächste: Ich verlasse mich auf meinen angeschlossenen Briefkasten, um mich über seine Ankunft zu informieren!
Schritt 8: Einige Tests
Ein paar Anmerkungen:
Diese Skizze dient nur dazu, Stundenänderungen während des Tages zu emulieren, damit ich die Position des Servos steuern kann.
- Mit SG90: keine zusätzlichen Notwendigkeiten, es kann mit der OUT-Spannung des Batteriecontrollers arbeiten.
-
Aber mit MG 995:
- Der Gesamtdrehwinkel ist nicht gleich (breiter): Ich musste eine zusätzliche Funktion verwenden, um ihn zu reduzieren (Servo_Delta()).
- Benötigen Sie einen DC/DC-Step-Up, um dem Servo genügend Spannung zuzuführen … Fortsetzung folgt …
/*
- TEST mit SG90: keine zusätzlichen Notwendigkeiten, es kann mit der OUT-Spannung vom Batteriecontroller arbeiten - FÜR MG 995: - Verwenden Sie die Servo_Delta()-Funktion … - Benötigen Sie einen DC/DC-Schritt, um dem Servo genügend Spannung zuzuführen … Fortsetzung folgt: */ #include bool Logs = true; Servo-Myservo; #define PIN_SERVO D2 // Servoposition für: 7h, 8h, 9h, 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h, 18h, 19h, 20h, 21h //int Arr_Servo_Pos = {177, 173, 163, 148, 133, 118, 100, 80, 61, 41, 28, 15, 2, 2, 2}; int Arr_Servo_Pos = {180, 175, 165, 150, 135, 120, 102, 82, 63, 43, 30, 15, 0, 0, 0}; int alt; int-Position; int ich; Void setup () { Serial.begin (115200); aufrechtzuerhalten. Void Schleife () { for (i = 7; i <= 22; i ++) { alt=i; if (i == 7) {if (Logs) Serial.println ("Positionne le servo pour 7 Heure"); myservo.attach(PIN_SERVO); for(int index = Arr_Servo_Pos[(sizeof(Arr_Servo_Pos) / sizeof(Arr_Servo_Pos[0])) -1]; index 7 && i = Arr_Servo_Pos[i-7]; index--){ if (Logs) Serial.println (Index); if (Protokolle) Serial.print ("Angepasster Wert: "); if (Protokolle) Serial.println (Servo_Delta (Index)); Verzögerung (200); //myservo.write(Servo_Delta(index)); myservo.write(index); } Verzögerung (15); myservo.write(Arr_Servo_Pos[i-7]); // Schreibe den letzten Wert erneut, um ruckartige Bewegungen zu vermeiden, wenn datach myservo.detach(); } } } Verzögerung (2000); }} int Servo_Delta (int value) {int Temp_val; Temp_val = (Wert*0,80)+9; Temp_val zurückgeben; }
Schritt 9: Das kleine Haus
Wie ich schon sagte, habe ich keinen 3D-Drucker bekommen. Also entscheide ich mich für eine alte Gemüsekiste …
Vielleicht hält es kein langes Wetter, aber bis dahin hätte ich Zeit, über eine andere Lösung nachzudenken (oder einen Freund, der einen 3D-Drucker besitzt): Um das Holz zu schützen, habe ich überall viel Lack aufgetragen …
Man sieht die „hübschen Vorhänge“… Das passiert, wenn man seine Frau um den Job bittet ^^
Schritt 10: Die Skizze
In Bearbeitung … Scheint aber stabil zu sein
Ich arbeite noch am Code: Da dies keine endgültige Version ist, sind Ihre Kommentare / Ratschläge willkommen;-)
Einige Anmerkungen:
- Es gibt viele Verzögerungen () im Code: Dies soll viele Abstürze des Lolin vermeiden, insbesondere beim Stoppen eines Startnetzwerks …
- Ich habe keinen einfachen und zuverlässigen Weg gefunden, den Sonnenazimut zu erhalten: Deshalb habe ich den Servowert in Abhängigkeit von dem, was ich beobachtet habe, festgelegt … Wenn Sie einen guten (und einfachen) Weg haben, um ihn zu erhalten, bin ich interessiert !Vielleicht ein Track zum Studieren hier, auch wenn ich eine Online-API bevorzuge, gibt mir den Azimut direkt nach Datum, Stunde und geografischer Position …
- Zur Schlaftechnik: Da der Lolin ein 32-Bit-Tensilica-Prozessor ist, beträgt sein Maximalwert für eine 32-Bit-Ganzzahl ohne Vorzeichen 4294967295 … dann sind es maximal 71 Minuten für das Tiefschlafintervall. Deshalb mache ich das Schlafen l'ESP oft für etwa 60 Minuten …
BEARBEITEN - 08.10.2018:
Ich habe festgestellt, dass das Servo viele ruckartige Bewegungen hat, insbesondere vor dem Attach (), detach () und jedes Mal, wenn der Lolin von deepSleep () aufwacht.
Während ich ein bisschen mehr Datenblätter studierte, wurden mir zwei Dinge klar:
- Auf dem Lolin-Datenblatt ist der D4-Ausgang bereits mit der BUILTIN_LED verbunden …
- Auf dem ESP8266ex-Datenblatt erfahren wir, dass der D4-Ausgang als UART 1 / U 1 TXD (Universal Asynchronous Receiver Transmitter) verwendet wird. Es ist auch angegeben, dass dieser UART1 zum Drucken des Protokolls verwendet wird.
Beim Lesen dieser Informationen wurde mir klar, dass der D4-Ausgang keine gute Idee war, insbesondere um einen Servomotor zu verwalten!
Der zur Steuerung des Servomotors verwendete Ausgang ist jetzt D2, der folgende Code wurde entsprechend aktualisiert.
//****************************************
Erstellungsdatum: 08/Date mise en prod: 08/Version: 0.9.4 Version IDE Arduino: 1.8.6 Upload-Geschwindigkeit: 921600 Type de carte dans l'IDE: "LOLIN(WEMOS) D1 R2 & mini" Carte physique Employee: LOLIN(WEMOS) D1 R2 & mini (https://www.amazon.fr/gp/product/B01ELFAF1S/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1) Pin-Funktion ESP-8266 Pin-Nutzungsgebietsschema ------- -------------------------------------------------- ------------------------------------ TX TXD TXD RX RXD RXD A0 Analoger Eingang, max. 3,3 V Eingang A0 Spannungsversorgung D0 IO GPIO16 Connecté à RST (pour le deep.sleep) D1 IO, SCL GPIO5 D2 IO, SDA GPIO4 Servomotor D3 IO, 10k Pull-up GPIO0 D4 IO, 10k pull-up, BUILTIN D_5 GP. IO2, SCK GPIO14 Reed relève D6 IO, MISO GPIO12 Reed lettre D7 IO, MOSI GPIO13 Reed colis D8 IO, 10k Pulldown, SS GPIO15 G Masse GND 5V 5V – 3V3 3.3V 3.3V RST Reset RST Connecté à D0 (pour le deep.sleep) ****************************************/ #include bool Logs = true; // WLAN const char* ssid = "LOL"; const char* Passwort = "LOL"; IP-Adresse IP(192, 168, 000, 000); IPAddress-DNS(192, 168, 000, 000); IPAddress-Gateway(192, 168, 000, 000); IPAddress-Subnetz (255, 255, 000, 000); WiFiClient-Client; // Servo #include #define PIN_SERVO D2 Servo myservo; // Servoposition für: 7h, 8h, 9h, 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h, 18h, 19h, 20h, 21h int Arr_Servo_Pos = {179, 175, 165, 150, 135, 120, 102, 82, 63, 43, 30, 15, 1, 1, 1}; // Blätter #define PIN_SWITCH_OUT D5 Byte Old_Switch_State_OUT; Byte Switch_State_OUT; #define PIN_SWITCH_IN_PARCEL D6 Byte Old_Switch_State_IN_PARCEL; Byte Switch_State_IN_PARCEL; #define PIN_SWITCH_IN_LETTER D7-Byte Old_Switch_State_IN_LETTER; Byte Switch_State_IN_LETTER; lange switchPressTime ohne Vorzeichen; const unsigned long DEBOUCE_TIME = 200; // Analog #define PIN_ANALOG A0 // MQTT #include const char* MQTT_Server_IP = "Ihre MQTT-Adresse"; const int MQTT_Server_Port =; int IDX_Letter_Box =; int IDX_Parcel_Box =; int IDX_Letter_Box_Battery =; PubSubClient ClientMQTT(Client); char MQTT_Message_Buff[70]; Zeichenfolge MQTT_Pub_String; // Spannungsschwimmer vcc; // NTP #include time_t tnow; int Alte_Zeit = 0; int Int_Heures = 0; int Int_Minutes = 0; int Int_Sleep_Duration = 63; Void setup () {Serial.begin (115200); Netzwerk (wahr); pinMode (PIN_SWITCH_OUT, INPUT_PULLUP); Old_Switch_State_OUT = digitalRead (PIN_SWITCH_OUT); pinMode (PIN_SWITCH_IN_LETTER, INPUT_PULLUP); Old_Switch_State_IN_LETTER = digitalRead (PIN_SWITCH_IN_LETTER); pinMode (PIN_SWITCH_IN_PARCEL, INPUT_PULLUP); Old_Switch_State_IN_PARCEL = digitalRead (PIN_SWITCH_IN_PARCEL); SendBatteryLevel(); Netzwerk (falsch); // NTP set tnow = time(nullptr); Int_Heures = String(ctime(&tnow)).substring(11, 13).toInt(); Int_Minutes = String(ctime(&tnow)).substring(14, 16).toInt(); // Tiefschlaf für die Nacht if (! ((Int_Heures >= 7) && (Int_Heures <= 20))) {Serial.print ("Sleep pour la nuit ("); Serial.print (Int_Sleep_Duration - Int_Minutes); Serial. println("Minuten)"); sleep(Int_Sleep_Duration - Int_Minutes); aufrechtzuerhalten. aufrechtzuerhalten. Void Schleife () {// NTP set tnow = time (nullptr); Int_Heures = String(ctime(&tnow)).substring(11, 13).toInt(); Int_Minutes = String(ctime(&tnow)).substring(14, 16).toInt(); //Seriell.println(String(ctime(&tnow))); //Serial.println ("Heure: " + String(ctime(&tnow)).substring(11, 13)); //Serial.println (String(ctime(&tnow)).substring(11, 13).toInt()); // Servomanagement if (Old_Time != Int_Heures){ Old_Time = Int_Heures; if (Int_Heures == 7) {if (Logs) Serial.println ("Positionne le servo pour 7 Heure"); myservo.attach(PIN_SERVO); for(int index = Arr_Servo_Pos[(sizeof(Arr_Servo_Pos) / sizeof(Arr_Servo_Pos[0])) -1]; index 7 && Int_Heures = Arr_Servo_Pos[Int_Heures-7]; index--){ if (Logs) Serial.println (Index); Verzögerung (200); myservo.write(index); } Verzögerung (15); myservo.write(Arr_Servo_Pos[Int_Heures-7]); // Schreibe den letzten Wert erneut, um ruckartige Bewegungen beim Trennen zu vermeiden myservo.detach(); } Netzwerk (wahr); SendBatteryLevel(); Netzwerk (falsch); aufrechtzuerhalten. "Sleep pour le samedi Après Midi ("); if (Logs) Serial.print (Int_Sleep_Duration - Int_Minutes); if (Logs) Serial.println ("minutes)"); sleep(Int_Sleep_Duration - Int_Minutes); } // Deepsleep if Sunday if (String (ctime (&tnow)). substring (0, 3) == "Sun") { if (Logs) Serial.print ("Sleep pour le dimanche ("); if (Logs) Serial.print (Int_Sleep_Duration - Int_Minutes); if (Logs) Serial.println ("Minuten)"); sleep(Int_Sleep_Duration - Int_Minutes); } // Reeds-Management Switch_State_OUT = digitalRead (PIN_SWITCH_OUT); if (Switch_State_OUT != Old_Switch_State_OUT){ if (millis () - switchPressTime >= DEBOUCE_TIME) { switchPressTime = millis (); if (Switch_State_OUT == HIGH) {Serial.println ("Courrier relevé!"); Netzwerk (wahr); Verzögerung (5000); MQTT_Pubilsh(IDX_Letter_Box, 0, "0"); Verzögerung (5000); MQTT_Pubilsh(IDX_Parcel_Box, 0, "0"); Verzögerung (5000); Netzwerk (falsch); } } Old_Switch_State_OUT = Switch_State_OUT; } Switch_State_IN_LETTER = digitalRead (PIN_SWITCH_IN_LETTER); if (Switch_State_IN_LETTER != Old_Switch_State_IN_LETTER){ if (millis () - switchPressTime >= DEBOUCE_TIME){ switchPressTime = millis (); if (Switch_State_IN_LETTER == HIGH) {Serial.println ("Courrier arrivé!"); Netzwerk (wahr); Verzögerung (5000); MQTT_Pubilsh(IDX_Letter_Box, 1, "Kurier"); Verzögerung (5000); Netzwerk (falsch); } } Old_Switch_State_IN_LETTER = Switch_State_IN_LETTER; } Switch_State_IN_PARCEL = digitalRead (PIN_SWITCH_IN_PARCEL); if (Switch_State_IN_PARCEL != Old_Switch_State_IN_PARCEL){ if (millis () - switchPressTime >= DEBOUCE_TIME){ switchPressTime = millis (); if (Switch_State_IN_PARCEL == HIGH) {Serial.println ("colis arrivé!"); Netzwerk (wahr); Verzögerung (5000); MQTT_Pubilsh(IDX_Parcel_Box, 1, "Colis"); Verzögerung (5000); Netzwerk (falsch); } } Old_Switch_State_IN_PARCEL = Switch_State_IN_PARCEL; aufrechtzuerhalten. aufrechtzuerhalten. Void SendBatteryLevel () { Verzögerung (5000); vcc = analogRead (PIN_ANALOG)/10,24; if (Logs) Serial.println ("\tTension relevée: " + String(vcc, 0)); MQTT_Pubilsh(IDX_Letter_Box_Battery, 0, String(vcc, 0)); Verzögerung (5000); aufrechtzuerhalten. Void sleep (int Min_Duration) { ESP.deepSleep (Min_Duration * 60e6); aufrechtzuerhalten. Void network (bool UpDown) { if (UpDown) { Serial.print ("Netzwerkstart"); WiFi.forceSleepWake(); Verzögerung(1); // init WIFI WiFi.config (IP, DNS, Gateway, Subnetz); WiFi.begin(ssid, Passwort); Während (WiFi.status () != WL_CONNECTED) { Verzögerung (500); Serial.print("."); } Verzögerung (5000); Serial.println("."); Serial.print("\tConnected - IP-Adresse: "); Serial.println (WiFi.localIP()); // init MQTT ClientMQTT.setServer(MQTT_Server_IP, MQTT_Server_Port); // Init NTP Serial.print("\tTime Synch."); configTime(0, 0, "fr.pool.ntp.org"); setenv("TZ", "CET-1CEST, M3.5.0, M10.5.0/3", 0); while(time(nullptr) <= 100000) {Serial.print("."); delay(100);} Serial.println("."); } else {Serial.println("Netzwerkstopp."); WiFi.disconnect(); delay(1000); WiFi.mode(WIFI_OFF); delay(1000); WiFi.forceSleepBegin(); delay(1);}} void reconnect() { while (!ClientMQTT.connected()) {Serial.print(" \tAttempting MQTT connection…"); // Versuch eine Verbindung herzustellen if (ClientMQTT.connect("ESP8266ClientBAL")) { Serial.println("connected"); } else { Serial.print("failed, rc="); Serial.print(ClientMQTT.state()); Serial.println("versuchen Sie es erneut in 5 Sekunden"); // Warten Sie 5 Sekunden, bevor Sie es erneut versuchen delay(5000); } } } void MQTT_Pubilsh(int Int_IDX, int N_Value, String S_Value) { if (!ClientMQTT.connected()) reconnect(); vcc = analogRead(PIN_ANALOG)/10.24; Serial.println("\tSend info to MQTT …"); MQTT_Pub_String = "{ "idx\": " + String (Int_IDX) + ", \"Battery\": " + String(vcc, 0) +", \"nvalue\": " + N_Value +", \"svalue \": \"" + S_Value + "\"}"; MQTT_Pub_String.toCharArray(MQTT_Message_Buff, MQTT_Pub_String.length()+1); ClientMQTT.publish("domoticz/in", MQTT_Message_Buff); ClientMQTT.disconnect(); }
Schritt 11: Domoticz
In Domoticz:
Für den allgemeinen Gebrauch:
-
Erstellen Sie zwei "Dummy (Tut nichts, für virtuelle Switches verwenden)":
- Der erste für Buchstaben …
- Die zweite für Paket …
- Personalisieren Sie für jeden von ihnen Benachrichtigungen;
- Natürlich müssen Sie Ihr Tegegram-Token einrichten.
Optional:
Sie können einen "Utility-Sensor" hinzufügen, um den Ladezustand Ihres Akkus zu überwachen.
Tipps: Hier finden Sie viele kostenlose benutzerdefinierte Symbole …
Schritt 12: Fazit
Hoffe, dass dieses Instructable Ihnen hilft:
- ob Sie Ihren eigenen angeschlossenen Briefkasten erstellen möchten;
- oder einfach nur um Ihnen Ideen für Ihre Projekte zu geben!
Wenn Sie Verbesserungsvorschläge haben, höre ich zu!
PS: Entschuldigung für mein Englisch, die Google-Übersetzung hilft mir sehr, ist aber wahrscheinlich nicht perfekt;-)