Inhoudsopgave:

Aangesloten brievenbus op zonne-energie - Ajarnpa
Aangesloten brievenbus op zonne-energie - Ajarnpa

Video: Aangesloten brievenbus op zonne-energie - Ajarnpa

Video: Aangesloten brievenbus op zonne-energie - Ajarnpa
Video: Ziek door isolatie met purschuim: 'Van duurzaamheid naar alles kwijt' 2024, Juli-
Anonim
Verbonden brievenbus op zonne-energie
Verbonden brievenbus op zonne-energie
Verbonden brievenbus op zonne-energie
Verbonden brievenbus op zonne-energie

Voor mijn tweede Ible beschrijf ik mijn werken over mijn aangesloten brievenbus.

Na het lezen van deze Instructable (+ vele andere), en omdat mijn brievenbus niet in de buurt van mijn huis is, wilde ik me inspireren door de werken van Open Green Energy om mijn brievenbus te verbinden met mijn Domoticz-server.

doelen

  • Laat je informeren door Telegram wanneer er brieven binnenkomen;
  • Laat je informeren door Telegram wanneer er een pakket aankomt;
  • Controleer of de brieven/pakketten zijn afgehaald.

Mijn belangrijkste beperking:

De brievenbus staat relatief ver van het huis en het was onmogelijk om er een elektriciteitskabel naar toe te trekken om iets van stroom te voorzien.

Ik moest op zoek naar een andere oplossing: zonne-energie was een goede oplossing!

de stuklijst

  • Raspberry Pi (om MQTT- en Domoticz-onderdelen te hosten - hier niet beschreven)
  • Een Telegram Bot-account
  • Lolin D1 mini (of Wemos …)
  • Plug-in schroefklemmenblokconnector
  • TP4056 oplaadkaart voor lithiumbatterijen
  • 6V 2W fotovoltaïsch zonnepaneel
  • Li-Ion 18650 batterij
  • Li-Ion batterijhouder
  • PCB DIY solderen koperen prototype printplaat
  • Analoge servo SG90
  • 3 reed-schakelaars (één voor brieven, één voor pakket en één voor afrekenen)
  • Magneten
  • Sommige draden
  • Houten kist: Omdat ik geen 3D-printer kreeg, realiseerde ik me mijn eigen huisje met hout om elektronica-onderdelen te ontvangen …
  • Reserve Ethernet-kabel
  • RJ45 Ethernet-connector breakout-kaart

  • JB Weld
  • Sommige kogellagers
  • Schroeven, moeren, ringen

Stap 1: Globaal schema

Globaal schema
Globaal schema
Globaal schema
Globaal schema

Mooie tekeningen zijn altijd beter dan lange toespraken;-)

Maar een paar toelichtingen over MQTT, Domoticz en Telegram zijn altijd welkom!

MQTT (Message Queuing Telemetry Transport), is een berichtenprotocol dat wordt gebruikt om gegevens te verzenden tussen apparaten en andere systemen in de wereld van het IoT (Internet of things).

Zonder al te veel in details te treden, is de werking ervan gebaseerd op het principe van clients die verbinding maken met een server. In MQTT worden clients Subscriber of Publisher genoemd en de server Broker.

In deze Instructable gebruik ik slechts één uitgever, de Lolin die is aangesloten op mijn brievenbus: wanneer brieven of pakketten worden gedetecteerd via de reed-contacten die in de brievenbus zijn geïnstalleerd (stap 1 in shematic), verzendt deze een MQTT-bericht via WIFI naar de makelaar (stap 2).

Het Broker-gedeelte wordt gedaan door Mosquitto, die op de Raspberry Pi is geïnstalleerd (stap 3).

Over Domoticz:

Zoals beschreven op de bronpagina, is Domoticz een "domoticasysteem", waarmee u verschillende apparaten kunt bedienen en invoer kunt ontvangen van verschillende protocollen: MQTT is een van de ondersteunde protocollen …

Zodra informatie hem bereikt (stap 4), kun je gebeurtenissen definiëren: In het geval van de brievenbus heb ik ervoor gekozen om een Telegram-melding te sturen (stap 5).

Eindelijk is de Telegram-client geconfigureerd op mijn telefoon (en die van mijn vrouw ook! - Stap 6): het einddoel is bereikt…

Stap 2: Shematic / bedrading

Schematisch / Bedrading
Schematisch / Bedrading
Schematisch / Bedrading
Schematisch / Bedrading
Schematisch / Bedrading
Schematisch / Bedrading
Schematisch / Bedrading
Schematisch / Bedrading

Een woord over de analoge lezen:

Allereerst merkte ik na wat onderzoek dat Lolin mini D1 (zoals de oude Wemos), een spanningsdeler voor pin A0 heeft ingebouwd (gezien 220KΩ voor R1 en 100KΩ voor R2 - zie rechts van de gekoppelde datasheet), waardoor 3,2 Volt mogelijk is als maximale analoge ingangsspanning.

Aangezien de maximale uitgangsspanning van de batterij 4, 2v is (beperkt door het laadbord), en theoretisch gezien hoeft u alleen een externe weerstand toe te voegen (in serie met R1) om het maximale ingangsspanningsbereik te vergroten. Als u vervolgens 100K in serie met R1 toevoegt, krijgt u dit resultaat:

Vin * R1/(R1+R2) = Vout

4, 2 * 320K/(320K+100K) = 3, 2

In mijn circuit heb ik ervoor gekozen om de waarde ervan aan te passen, daarom heb ik er de voorkeur aan gegeven een instelbare weerstand in mijn circuit te gebruiken: misschien is het nutteloos voor u, maar in mijn situatie heb ik de waarde ingesteld op ongeveer 10KΩ om te hebben een coherente waarde in Domoticz …

Merk op dat de A0-pin een resolutie van 10 bits heeft: dit betekent dat in uw schets uw analoge uitlezing een waarde tussen 0 en 1024 zal retourneren.

Omdat ik een procentuele waarde naar Domoticz wil sturen, moet ik het analoge leesresultaat delen door 10, 24.

Stap 3: Energiebeheer

Energiebeheer
Energiebeheer
Energiebeheer
Energiebeheer

Ik wil natuurlijk dat de brievenbus autonoom is. Om mijn doel te bereiken, gebruik ik deze elementen:

  • een Li-Ion 18650 batterij van 4000mAh;
  • een zonnepaneel dat 6V/2W kan leveren;
  • een TP4056 oplaadbord voor lithiumbatterijen.

Om het meest geschikte zonnepaneel te kiezen, heb ik enkele voorbeelden bekeken, waaronder deze: in dit voorbeeld is een 5.5V / 0.66W zonnepaneel gebruikt, en dit is waarschijnlijk voldoende voor het doel. In mijn geval, en omdat de ESP8266 overdag AAN moet blijven en een servomotor moet kunnen laten draaien om het huis naar de zon te houden, heb ik gekozen voor een krachtiger zonnepaneelmodel (6V / 2W) - Het stelt me ook in staat om te anticiperen op donkere winterperiodes en bewolkte dagen;-)

Ook, en om het energieverbruik tot een maximum te beperken, heb ik de volgende scenario's geselecteerd:

  • wetende dat de postbode pas tussen 7.00 en 20.00 uur langskomt, wordt ESP de rest van de nacht in DeepSleep geplaatst;
  • De factor gaat niet over tussen zaterdagmiddag en maandagochtend: ook de ESP wordt in deze periode in de DeepSleep-modus gezet.
  • Voor de periode tussen 7 en 20 uur, en om het stroomverbruik te verminderen, schakel ik gewoon de netwerkinterface van de ESP uit: het netwerk wordt pas opnieuw opgestart bij de aankomst van een pakket of een brief, net genoeg tijd om de informatie naar Domoticz. Ik hoef niet onmiddellijk gewaarschuwd te worden en de paar extra seconden die nodig zijn om de netwerkinterface opnieuw op te starten, zijn niet schadelijk!

Enige waarde over het verbruik in verschillende modi die ik gebruik voor de Lolin - kijk naar de datasheet, p18:

  • In de normale modus (met RF werkend), kan het stroomverbruik oplopen tot 170mA! Aangezien mijn brievenbus ongeveer 50 meter van mijn huis is (en aan de limiet van het wifi-signaal …)
  • In Modem-slaap zakt het stroomverbruik naar 15mA. Maar zoals u in de datasheet kunt zien, heeft het de modem niet volledig gestopt, omdat de ESP "een wifi-verbinding onderhoudt zonder gegevensoverdracht".
  • In diepe slaap zakt het vermogen naar 20uA.

Om er zeker van te zijn dat de wifi niet onnodig actief blijft, schakelde ik hem liever uit met de volgende commando's. Let op de vele delay() call … Zonder hen crasht de ESP:

WiFi.verbinding verbreken();

vertraging (1000); WiFi.modus (WIFI_OFF); vertraging (1000); WiFi.forceSleepBegin(); vertraging(1);

Over het algemeen lijkt het na enkele dagen gebruik te werken en vooral om correct te laden:

  • hierdoor kan ik elk uur de servomotor laten draaien om het huis naar de zon te richten;
  • Ik kan mezelf ook toestaan om elk uur de netwerkinterface opnieuw te activeren om het laadniveau van de batterij naar Domoticz te sturen.

Stap 4: Magneten en rietcontacten installeren

Magneten en rietcontacten installeren
Magneten en rietcontacten installeren
Magneten en rietcontacten installeren
Magneten en rietcontacten installeren
Magneten en rietcontacten installeren
Magneten en rietcontacten installeren

Zoals gewoonlijk heb ik mijn Proxxon gebruikt om de plaats van het riet in een stuk hout vorm te geven.

Om het reed-contact in het gat te bevestigen, heb ik een klein beetje J-B-las gebruikt.

Voor het pakket en de uitvoer, een stukje tape, een beetje ijzerzaag, en het doel is bereikt!

Het voordeel van mijn brievenbus is dat hij van metaal is, wat het positioneren van magneten vergemakkelijkt, zodat deze goed samenwerkt met tongcontacten.

Stap 5: Maak verbinding met My Little House

Maak verbinding met Mijn kleine huis
Maak verbinding met Mijn kleine huis
Maak verbinding met Mijn kleine huis
Maak verbinding met Mijn kleine huis

Om de kabel die naar de reed-contacten van de brievenbus naar het huis gaat makkelijk aan en uit te kunnen trekken, heb ik gekozen voor een Ethernet-connector.

Je kunt dit model gebruiken of, zoals ik, een oud Arduino Ethernet-schild gebruiken dat in mijn lades hangt: hij heeft niet geleden, hij was dapper voor de zaag, zijn dood was snel ^^

Gewoon een woord over dit Arduino Ethernet-schild: verwacht niet dat je 8 afzonderlijke stuurprogramma's hebt … Kabels zijn gekoppeld aan 2 in het schild … Ik werd er te lang gek van !!!

Stap 6: In het huis …

In het huis …
In het huis …
In het huis …
In het huis …

Net genoeg plaats om de batterijhouder te bevestigen, de servo in te stellen en de RJ45-vrouwelijke connector.

Stap 7: Laat het draaitafel …

Laat het draaitafel…
Laat het draaitafel…
Laat het draaitafel…
Laat het draaitafel…
Laat het draaitafel…
Laat het draaitafel…
Laat het draaitafel…
Laat het draaitafel…

Het doel is om het gezicht naar de zon te houden …

Om het vermogen om draaibaar te maken, gebruikte ik een lange schroef als as, met wat moeren en twee kogellagers …

Tot nu toe gebruikte ik SG90-servo (koppel: 1,8 kg / cm bij 4,8 v).

Om het huis (en zijn paar gram) te draaien is genoeg. Aan de andere kant weet ik niet zeker of de plastic tandwielen lange tijd bestand zijn tegen de frequente windstoten die er in mijn regio zijn.

Ik heb er nog een besteld (MG995 koppel: 9,4kg/cm bij 4,8v), ook niet erg duur, maar met metalen tandwielen.

Het zal het volgende zijn wat ik moet doen als ik het heb ontvangen: ik vertrouw op mijn aangesloten brievenbus om me op de hoogte te stellen van zijn komst!

Stap 8: Enkele tests

Image
Image

Een paar opmerkingen:

Deze schets is alleen bedoeld om veranderingen van uren gedurende de dag na te bootsen, zodat ik de positie van de servo kan regelen.

  • Met SG90: geen extra behoeften, het kan werken met de OUT-spanning die van de batterijcontroller komt.
  • Maar met MG 995:

    • De totale rotatiehoek is niet hetzelfde (breder): ik moest een extra functie gebruiken om deze te verkleinen (Servo_Delta()).
    • DC/DC nodig Step up om voldoende spanning aan de servo te leveren … wordt vervolgd …

/*

- TEST met SG90: geen extra behoeften, het kan werken met de OUT-spanning afkomstig van de batterijcontroller - VOOR MG 995: - gebruik de functie Servo_Delta() … - Een DC/DC-stap nodig om voldoende spanning aan de servo te leveren … om wordt vervolgd: */ #include bool Logs = true; Servo-mijnservo; #define PIN_SERVO D2 // servopositie voor: 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 oud; int. pos; int ik; void setup() { Serial.begin(115200); } void loop() { for(i = 7; i <= 22; i++){ old = i; if (i == 7){ if (Logs) Serial.println ("Positionne le servo pour 7 Heure"); mijnservo.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 (inhoudsopgave); if (Logs) Serial.print ("Aangepaste waarde: "); if (Logboeken) Serial.println(Servo_Delta(index)); vertraging (200); //mijnservo.write(Servo_Delta(index)); mijnservo.write(index); } vertraging(15); mijnservo.write(Arr_Servo_Pos[i-7]); // schrijf opnieuw de laatste waarde om schokkerige bewegingen te voorkomen wanneer datach myservo.detach(); } } } vertraging (2000); } } int Servo_Delta(int waarde){ int Temp_val; Temp_val = (waarde*0,80)+9; retourneer Temp_val; }

Stap 9: Het kleine huis

Het kleine huis
Het kleine huis
Het kleine huis
Het kleine huis
Het kleine huis
Het kleine huis

Zoals ik al eerder vertelde, kreeg ik geen 3D-printer. Dus besluit ik om oude groentekrat te gebruiken…

Misschien zal het niet lang meer duren, maar tegen die tijd zou ik tijd hebben om een andere oplossing te overwegen (of een vriend die een 3D-printer bezit): om het hout te beschermen, heb ik overal veel vernis aangebracht …

Je kunt de "mooie gordijnen" zien … Dat gebeurt er als je je vrouw vraagt om het werk te doen ^^

Stap 10: De schets

In uitvoering … Maar lijkt stabiel te zijn

Ik werk nog aan de code: aangezien dit geen definitieve versie is, zijn uw opmerkingen/adviezen welkom;-)

Enkele opmerkingen:

  • Het zijn veel vertragingen() in de code: dit is om veel crashes van de Lolin te voorkomen, vooral bij het stoppen van een startend netwerk …
  • Ik heb geen gemakkelijke en betrouwbare manier gevonden om de azimut van de zon te krijgen: daarom heb ik de servowaarde aangepast in functie van wat ik heb waargenomen … Ik heb een goede (en eenvoudige) manier om het te krijgen, ik ben geïnteresseerd! Misschien een track om hier te studeren, zelfs als ik de voorkeur geef aan een online API, geeft me de azimut direct op basis van de datum, het uur en de geografische positie …
  • Over de slaaptechniek: aangezien de Lolin een 32-bits Tensilica-processor is, is de maximale waarde voor een 32-bits geheel getal zonder teken 4294967295 … dan geeft het ongeveer 71 minuten voor het diepe slaapinterval. Daarom maak ik slapende l'ESP vele malen gedurende ongeveer 60 minuten …

BEWERKEN - 2018-10-08:

Ik ontdekte dat de servo veel schokkerige bewegingen heeft, vooral voor de bijlage (), detach() en elke keer dat de Lolin wakker wordt uit deepSleep().

Terwijl ik wat meer datasheets bestudeerde, realiseerde ik me twee dingen:

  • Op de Lolin-datasheet is de D4-uitgang al verbonden met de BUILTIN_LED …
  • Op de ESP8266ex-datasheet leren we dat de D4-uitgang wordt gebruikt als UART 1/U 1 TXD (Universal Asynchronous Receiver Transmitter). Er is ook aangegeven dat deze UART1 wordt gebruikt voor het afdrukken van logbestanden.

Door deze informatie te lezen, realiseerde ik me dat de D4-uitgang geen goed idee was, vooral niet om een servomotor te beheren!

Dus nu is de output die wordt gebruikt om de servomotor te besturen D2, de onderstaande code is dienovereenkomstig bijgewerkt.

//****************************************

Datum aanmaak: 08/Date mise en prod: 08/Versie: 0.9.4 Versie IDE Arduino: 1.8.6 Upload snelheid: 921600 Type kaart dans l'IDE: "LOLIN(WEMOS) D1 R2 & mini" Carte fysiek werknemer: LOLIN(WEMOS) D1 R2 & mini (https://www.amazon.fr/gp/product/B01ELFAF1S/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1) Pin Functie ESP-8266 Pin Gebruik locale ------- -------------------------------------------------- ------------------------------------ TX TXD TXD RX RXD RXD A0 Analoge ingang, max 3.3V ingang A0 Spanningsvoorziening 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_LED GPIO2 D5 IO, SCK GPIO14 Rietrelève D6 IO, MISO GPIO12 Rietletter D7 IO, MOSI GPIO13 Reed colis D8 IO, 10k pull-down, SS GPIO15 G Massa GND 5V 5V – 3V3 3.3V 3.3V RST Reset RST Connecté à D0.sleep) ************************************/ #include bool Logs = true; // wifi const char* ssid = "LOL"; const char* wachtwoord = "LOL"; IP-adres ip(192, 168, 000, 000); IP-adres dns(192, 168, 000, 000); IPAddress-gateway (192, 168, 000, 000); IPAddress-subnet (255, 255, 000, 000); WiFiClient-client; // Servo #include #define PIN_SERVO D2 Servo myservo; // servopositie voor: 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}; // Rieten #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_PAARCEL; #define PIN_SWITCH_IN_LETTER D7 byte Old_Switch_State_IN_LETTER; byte Switch_State_IN_LETTER; ongetekende lange switch PressTime; const unsigned long DEBOUCE_TIME = 200; // Analoog #define PIN_ANALOG A0 // MQTT #include const char* MQTT_Server_IP = "Uw MQTT-adres"; 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]; Tekenreeks MQTT_Pub_String; // Spanning vlotter vcc; // NTP #include time_t tnow; int Old_Time = 0; int Int_Heures = 0; int Int_Minuten = 0; int Int_Sleep_Duration = 63; void setup(){ Serial.begin(115200); netwerk (waar); 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 = digitaal lezen (PIN_SWITCH_IN_LETTER); pinMode (PIN_SWITCH_IN_PARCEL, INPUT_PULLUP); Old_Switch_State_IN_PARCEL = digitalRead (PIN_SWITCH_IN_PARCEL); SendBatteryLevel(); netwerk (false); // NTP set tnow = tijd (nullptr); Int_Heures = String(ctime(&tnow)).substring(11, 13).toInt(); Int_Minutes = String(ctime(&tnow)).substring(14, 16).toInt(); // Diepe slaap voor de nacht if(!((Int_Heures >= 7) && (Int_Heures <= 20))){ Serial.print("Sleep pour la nuit ("); Serial.print(Int_Sleep_Duration - Int_Minutes); Serial. println("minuten)"); slaap (Int_Sleep_Duration - Int_Minuten); } } void loop () { // NTP set tnow = time (nullptr); Int_Heures = String(ctime(&tnow)).substring(11, 13).toInt(); Int_Minutes = String(ctime(&tnow)).substring(14, 16).toInt(); //Serial.println(String(ctime(&tnow))); //Serial.println ("Heure: " + String(ctime(&tnow)).substring(11, 13)); //Serial.println (String(ctime(&tnow)).substring(11, 13).toInt()); // Servobeheer als (Old_Time! = Int_Heures) { Old_Time = Int_Heures; if (Int_Heures == 7){ if (Logs) Serial.println ("Positionne le servo pour 7 Heure"); mijnservo.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 (inhoudsopgave); vertraging (200); mijnservo.write(index); } vertraging(15); mijnservo.write(Arr_Servo_Pos[Int_Heures-7]); // schrijf opnieuw de laatste waarde om schokkerige bewegingen te voorkomen wanneer myservo.detach(); } netwerk (waar); SendBatteryLevel(); netwerk (false); } } } // Deepsleep if zaterdag na 13h if((String(ctime(&tnow)).substring(0, 3) == "Sat") && (Int_Heures >= 13)){ if (Logs) Serial.print("Sleep pour le samedi aprés midi ("); if (Logs) Serial.print(Int_Sleep_Duration - Int_Minutes); if (Logs) Serial.println(" minuten)"); slaap (Int_Sleep_Duration - Int_Minuten); } // 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)"); slaap (Int_Sleep_Duration - Int_Minuten); } // Reeds-beheer 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 == HOOG){ Serial.println ("courrier relevé!"); netwerk (waar); vertraging (5000); MQTT_Pubilsh(IDX_Letter_Box, 0, "0"); vertraging (5000); MQTT_Pubilsh(IDX_Parcel_Box, 0, "0"); vertraging (5000); netwerk (false); } } 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 == HOOG){ Serial.println ("koer arriveert!"); netwerk (waar); vertraging (5000); MQTT_Pubilsh(IDX_Letter_Box, 1, "Koerier"); vertraging (5000); netwerk (false); } } 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 == HOOG){ Serial.println ("colis arriveert!"); netwerk (waar); vertraging (5000); MQTT_Pubilsh(IDX_Parcel_Box, 1, "Colis"); vertraging (5000); netwerk (false); } } Old_Switch_State_IN_PARCEL = Switch_State_IN_PARCEL; } } ongeldig SendBatteryLevel(){ vertraging (5000); vcc = analoog lezen (PIN_ANALOG)/10.24; if (Logs) Serial.println ("\tTension relevée: " + String(vcc, 0)); MQTT_Pubilsh(IDX_Letter_Box_Battery, 0, String (vcc, 0)); vertraging (5000); } void sleep (int Min_Duration) { ESP.deepSleep (Min_Duration * 60e6); } void network(bool UpDown){ if (UpDown){ Serial.print("Network start"); WiFi.forceSleepWake(); vertraging(1); // init WIFI WiFi.config (ip, dns, gateway, subnet); WiFi.begin(ssid, wachtwoord); while (WiFi.status() != WL_CONNECTED) {vertraging (500); Serieel.print("."); } vertraging (5000); Serieel.println("."); Serial.print("\tVerbonden - IP-adres: "); 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("Netwerkstop."); WiFi.disconnect(); delay(1000); WiFi.mode(WIFI_OFF); delay(1000); WiFi.forceSleepBegin(); delay(1); } } void reconnect() { while (!ClientMQTT.connected()) { Serial.print(" \tProberen MQTT-verbinding…"); // Poging om verbinding te maken if (ClientMQTT.connect("ESP8266ClientBAL")) { Serial.println("connected"); } else { Serial.print("failed, rc="); Serial.print(ClientMQTT.state()); Serial.println("probeer het over 5 seconden opnieuw"); // Wacht 5 seconden voordat u het opnieuw probeert vertraging (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) + ", \"Batterij\": " + 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(); }

Stap 11: Domotica

Domotica
Domotica
Domotica
Domotica
Domotica
Domotica

Bij Domoticz:

Voor algemeen gebruik:

  • Maak twee "Dummy (doet niets, gebruik voor virtuele switches)":

    1. De eerste voor letters…
    2. De tweede voor pakket…
  • Personaliseer voor elk van hen meldingen;
  • Natuurlijk moet je je Tegegram-token instellen.

Optioneel:

U kunt een "Utility-sensor" toevoegen om toezicht te houden op het laadniveau van uw batterij.

Tips: hier vind je heel wat gratis aangepaste iconen …

Stap 12: Conclusie

Conclusie
Conclusie
Conclusie
Conclusie

Ik hoop dat dit Instructable je zal helpen:

  • of u uw eigen aangesloten brievenbus wilt maken;
  • of gewoon om u wat ideeën te geven voor uw projecten!

Als je ideeën hebt voor verbeteringen, ik luister!

PS: sorry voor mijn Engels, Google-vertaling helpt me veel, maar is waarschijnlijk niet perfect;-)

Aanbevolen: