Mündəricat:
2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-13 06:56
İkinci Ible üçün bağlı məktub qutumla bağlı işlərimi sizə izah edəcəyəm.
Bu təlimatı oxuduqdan sonra (+ bir çoxu) və poçt qutum evimin yaxınlığında olmadığından, poçt qutumu Domoticz serverimə bağlamaq üçün Açıq Yaşıl Enerjinin əsərlərindən mənə ilham vermək istədim.
Məqsədlər
- Məktublar gələndə Telegramdan xəbərdar olun;
- Bir bağlama gələndə Telegramdan xəbərdar olun;
- Məktubların / bağlamaların alındığını yoxlayın.
Mənim əsas məhdudiyyətim
Poçt qutusu evdən nisbətən uzaqdır və heç nəyə güc vermək üçün ona elektrik kabelini çəkmək mümkün deyildi.
Başqa bir həll tapmalı oldum: günəş enerjisi yaxşı bir həll idi!
BOM
- Raspberry Pi (MQTT və Domoticz hissələrinə ev sahibliyi etmək - burada təsvir olunmamışdır)
- Telegram Bot hesabı
- Lolin D1 mini (və ya Wemos …)
- Plug-In Vida Terminal Blok Konnektoru
- TP4056 Lityum Batareya Şarj Kartı
- 6V 2W Fotovoltaik Günəş Paneli
- Li-Ion 18650 batareya
- Li-Ion batareya tutacağı
- PCB DIY Lehimləmə Mis Prototipi Çaplı Devre Kartı
- Analog Servo SG90
- 3 Qamışlı keçid (biri məktublar üçün, biri bağlama üçün, biri də ödəmə üçün)
- Maqnitlər
- Bəzi tellər
- Taxta sandıq: Heç bir 3D printer almadığım üçün, elektronik hissələri qəbul etmək üçün taxtalı kiçik evimi anladım …
- Ehtiyat Ethernet kabeli
-
RJ45 Ethernet Bağlayıcı Kəsmə Kartı
- J-B Qaynaq
- Bəzi bilyalı rulmanlar
- Vintlər, qoz -fındıq, yuyucular
Addım 1: Qlobal Şema
Gözəl rəsmlər uzun danışıqlardan daha yaxşıdır;-)
Ancaq MQTT, Domoticz və Telegram haqqında bir neçə açıqlama həmişə xoş gəlir!
MQTT (Message Queuing Telemetry Transport), IoT (əşyalar interneti) dünyasındakı cihazlar və digər sistemlər arasında məlumat göndərmək üçün istifadə olunan bir mesajlaşma protokoludur.
Çox təfərrüata girmədən onun işi müştərilərin serverə qoşulması prinsipinə əsaslanır. MQTT -də müştərilərə Abunəçi və ya Nəşriyyat, serverə isə Broker deyilir.
Bu Təlimat kitabında, yalnız bir naşirdən istifadə edirəm, Lolin poçt qutusuna bağlanır: məktub qutusuna quraşdırılmış qamış kontaktları vasitəsilə məktublar və bağlamalar aşkar edildikdə (Shematic -də 1 -ci addım), MQTT mesajını WIFI üzərindən Brokerə göndərir (Addım 2)).
Broker hissəsi Raspberry Pi üzərində quraşdırılmış Mosquitto tərəfindən hazırlanır (Addım 3).
Domoticz haqqında:
Mənbə səhifəsində təsvir edildiyi kimi, Domoticz, müxtəlif cihazları idarə etməyə və müxtəlif protokollardan giriş almağa imkan verən "ev avtomatlaşdırma sistemidir": MQTT dəstəklənən protokollardan biridir …
Məlumat ona çatan kimi (Adım 4) hadisələri təyin edə bilərsiniz: Məktub qutusu vəziyyətində bir Telegram bildirişi göndərməyi seçdim (Addım 5).
Nəhayət, telefonumda Telegram müştəri konfiqurasiya edildi (və həyat yoldaşım da! - Addım 6): son məqsədə çatıldı …
Addım 2: Şematik / Kablolama
Analog haqqında oxunan bir söz:
Hər şeydən əvvəl, bəzi araşdırmalardan sonra gördüm ki, Lolin mini D1 (köhnə Wemos kimi), A0 pin üçün gərginlik bölücü qurdu (R1 üçün 220KΩ və R2 üçün 100KΩ - əlaqəli məlumat cədvəlinin sağında baxın), 3,2 Volt maksimum analog giriş gərginliyi kimi.
Batareyadan maksimum çıxış gərginliyi 4, 2v (şarj lövhəsi ilə məhdudlaşır) və nəzəri olaraq maksimum giriş gərginliyi aralığını artırmaq üçün yalnız xarici bir rezistor (R1 ilə birlikdə) əlavə etməlisiniz. Sonra, R1 ilə 100K seriyasını əlavə etsəniz, bu nəticəni əldə edəcəksiniz:
Vin * R1/(R1+R2) = Vout
4, 2 * 320K/(320K+100K) = 3, 2
Dövrümdə dəyərini tənzimləməyi seçdim, buna görə də dövrəmdə tənzimlənən bir rezistor istifadə etməyi üstün tutdum: bəlkə sizin üçün faydasız olacaq, amma vəziyyətimdə dəyərini təxminən 10KΩ olaraq təyin etdim. Domoticzdə tutarlı bir dəyər …
Qeyd edək ki, A0 pininin 10 bit qətnaməsi var: bu, eskizinizdə analoq oxunuşunuzun 0 ilə 1024 arasında bir dəyər qaytaracağını bildirir.
Bir faiz dəyərini Domoticzə göndərmək istədiyim üçün analoji oxu nəticəsini 10, 24 -ə bölmək məcburiyyətindəyəm.
Addım 3: Güc İdarəetməsi
Əlbəttə ki, məktub qutusunun muxtar olmasını istəyirəm. Məqsədimə çatmaq üçün bu elementlərdən istifadə edirəm:
- Li-Ion 18650 4000mAh batareya;
- 6V / 2W gücündə olan günəş paneli;
- TP4056 Lityum Batareya şarj lövhəsi.
Ən uyğun günəş panelini seçmək üçün bu nümunə də daxil olmaqla bəzi nümunələrə nəzər saldım: bu nümunədə 5.5V / 0.66W gücündə günəş paneli istifadə olunur və yəqin ki, bu məqsəd üçün kifayətdir. Mənim vəziyyətimdə və ESP8266 gün ərzində AÇIK qalmalı olduğu üçün evin üzünü günəşdən uzaq tutmaq üçün servo mühərriki idarə etməli olduğu üçün daha güclü bir günəş paneli modeli seçdim (6V / 2W) - Bu da mənə imkan verir qaranlıq qış dövrlərini və buludlu günləri gözləmək;-)
Həm də enerji xərclərini maksimum dərəcədə azaltmaq üçün aşağıdakı ssenariləri seçdim:
- poçtalyonun yalnız səhər 7 -dən axşam 8 -ə qədər keçdiyini bilən ESP, gecənin qalan hissəsində DeepSleep -ə yerləşdirilir;
- Fakt şənbə günorta və bazar ertəsi səhərləri arasında keçmir: ESP də bu müddət ərzində DeepSleep rejiminə keçir.
- Səhər 7 -dən axşam 8 -ə qədər olan müddətdə və enerji istehlakını azaltmaq üçün sadəcə ESP -nin şəbəkə interfeysini söndürürəm: şəbəkə yalnız bir bağlama və ya məktub gəldikdə yenidən işə salınır, məlumatı göndərmək üçün kifayət qədər vaxt Domoticz. I dərhal xəbərdarlığa ehtiyac yoxdur və şəbəkə interfeysini yenidən başlatmaq üçün lazım olan bir neçə saniyə zərərli deyil!
Lolin üçün istifadə etdiyim fərqli rejimlərdə istehlak haqqında bəzi dəyərlər - məlumat cədvəlinə baxın, p18:
- Normal rejimdə (RF işləyərkən), enerji istehlakı 170mA -a qədər arta bilər! Poçt qutum evimdən təxminən 50 metr aralıda olduğu üçün (və WIFI siqnalının həddində …) güman edirəm ki, əlaqəni qorumaq üçün istifadə olunan güc maksimum həddədir …
- Modem-yuxuda enerji istehlakı 15mA-ya düşür. Ancaq məlumat cədvəlində gördüyünüz kimi, ESP "məlumat ötürülmədən bir Wi-Fi bağlantısı saxladığı üçün" modemi tamamilə dayandırmadı.
- Dərin yuxuda güc 20uA-ya düşür.
WiFi -nin lazımsız olaraq aktiv qalmadığından əmin olmaq üçün onu aşağıdakı əmrlərlə söndürməyi üstün tutdum. Bir çox gecikmə () zənginə diqqət yetirin … Onsuz ESP çökür:
WiFi.disconnect ();
gecikmə (1000); WiFi rejimi (WIFI_OFF); gecikmə (1000); WiFi.forceSleepBegin (); gecikmə (1);
Ümumiyyətlə, bir neçə gün işlədikdən sonra işlədiyi görünür və xüsusən də düzgün yüklənir:
- bu, evi günəşə doğru yerləşdirmək üçün hər saat servomotoru işə salmağa imkan verir;
- Batareyanın doldurulma səviyyəsini Domoticz -ə göndərmək üçün hər saat şəbəkə interfeysini yenidən aktivləşdirməyimə icazə verə bilərəm.
Addım 4: Mıknatısların və Qamış Kontaktlarının Qurulması
Həmişə olduğu kimi, Proxxonumdan istifadə edərək qamışın yerini bir ağac parçasına düzəltdim.
Qamış kontaktını çuxuruna düzəltmək üçün bir az J-B qaynağı istifadə etdim.
Paket və çıxış üçün bir az lent parçası, bir az dəmir mişar və məqsədə çatılır!
Məktub qutumun üstünlüyü, maqnitlərin yerləşdirilməsini asanlaşdıran metal olmasıdır ki, qamış kontaktları ilə düzgün qarşılıqlı əlaqə qursun.
Addım 5: Kiçik Evimə qoşulun
Məktub qutusundan evə olan qamış kontaktlarına gedən kabeli asanlıqla bağlaya və ayıra bilmək üçün Ethernet bağlayıcıdan istifadə etməyi seçdim.
Bu modeli istifadə edə bilərsiniz və ya mənim kimi çekmecemde asılan köhnə bir Arduino Ethernet qalxanı istifadə edə bilərsiniz: Əziyyət çəkmədi, mişar qarşısında cəsarətli idi, ölümü tez idi ^^
Bu Arduino Ethernet qalxanı haqqında bir neçə kəlmə: 8 ayrı sürücünün olmasını gözləməyin … Kabellər qalxanın içərisində 2 ilə birləşdirilir … Çox uzun müddət məni dəli etdi !!!
Addım 6: Evdə…
Batareya tutucusunu, servoyu və RJ45 dişli konnektorunu düzəltmək üçün kifayət qədər yer.
Addım 7: Turntable qoyun…
Məqsəd onu günəşə üz tutmaqdır …
Dönmə qabiliyyətinə icazə vermək üçün, bir qoz -fındıq və iki bilyalı rulmanla, ox kimi uzun bir vida istifadə etdim …
İndiyə qədər SG90 servosundan istifadə edirdim (fırlanma anı: 4.8v -da 1.8 kq/sm).
Evi (və bir neçə qramını) çevirmək kifayətdir. Digər tərəfdən, plastik dişlilərinin uzun müddətdir ki, bölgəmdə olan külək küləklərinə davamlı olduğuna əmin deyiləm.
Başqa birini (MG995 fırlanma anı: 4.8v -da 9.4 kq/sm) sifariş verdim, çox da bahalı deyil, metal dişlilərlə.
Aldığım zaman etməli olduğum növbəti iş olacaq: Gəlişini mənə bildirmək üçün əlaqəli poçt qutusuna güvənirəm!
Addım 8: Bəzi testlər
Bir neçə qeyd:
Bu eskiz, servonun mövqeyini idarə etməyimə icazə vermək üçün gün ərzində saat dəyişikliyini təqlid etmək üçündür.
- SG90 ilə: əlavə ehtiyac yoxdur, batareya nəzarətçisindən gələn OUT gərginliyi ilə işləyə bilər.
-
Ancaq MG 995 ilə:
- Ümumi fırlanma bucağı eyni deyil (daha geniş): Onu azaltmaq üçün əlavə bir funksiyadan istifadə etməli oldum (Servo_Delta ()).
- Servo üçün kifayət qədər gərginlik təmin etmək üçün DC/DC addımına ehtiyac var… davam etmək…
/*
- SG90 ilə TEST: əlavə ehtiyac yoxdur, batareya nəzarətçisindən gələn Çıxış gərginliyi ilə işləyə bilər - MG 995 ÜÇÜN: - Servo_Delta () funksiyasından istifadə edin … - Servoya kifayət qədər gərginlik təmin etmək üçün DC/DC addımına ehtiyacınız var … davamı: */ #incolle bool Logs = doğru; Servo xidməti; #define PIN_SERVO D2 // servo mövqeyi: 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 köhnə; int pos; int i; 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"); myservo.attach (PIN_SERVO); for (int index = Arr_Servo_Pos [(sizeof (Arr_Servo_Pos) / sizeof (Arr_Servo_Pos [0])) -1]; index 7 && = Arr_Servo_Pos [i-7]; index-) {if (Logs) Serial.println (indeks); if (Logs) Serial.print ("Düzəliş edilmiş dəyər:"); əgər (Qeydlər) Serial.println (Servo_Delta (indeks)); gecikmə (200); //myservo.write(Servo_Delta(index)); myservo.write (indeks); } gecikmə (15); myservo.write (Arr_Servo_Pos [i-7]); // datach myservo.detach (); }}} gecikmə (2000); }} int Servo_Delta (int dəyəri) {int Temp_val; Temp_val = (dəyər*0,80) +9; qaytar Temp_val; }
Addım 9: Kiçik Ev
Daha əvvəl dediyim kimi, heç bir 3D printer almadım. Buna görə köhnə tərəvəz sandığından istifadə etmək qərarına gəldim …
Bəlkə də uzun müddət davam etməyəcək, amma o vaxta qədər başqa bir həll yolunu (və ya 3D printer sahibi olan bir dostu) nəzərdən keçirməyə vaxtım olardı: ağacı qorumaq üçün hər yerə çoxlu lak əlavə etdim …
"Yaraşıqlı pərdələri" görə bilərsiniz … Arvadınızdan iş görməsini istədiyiniz zaman belə olur ^^
Addım 10: Eskiz
Davam edir… Amma sabit görünür
Hələ də kod üzərində işləyirəm: bu qəti bir versiya olmadığından şərhləriniz / məsləhətləriniz xoş gəlir;-)
Bəzi qeydlər:
- Kodda çox gecikmələr var (), xüsusən başlanğıc şəbəkəsini dayandırarkən Lolinin çox qəzaya uğramaması üçün …
- Günəş azimutunu əldə etmək üçün asan və etibarlı bir yol tapa bilmədim: buna görə də servo dəyərini müşahidə etdiyim funksiyaya görə təyin etdim … Bunu əldə etmək üçün yaxşı (və sadə) bir yolunuz var, maraqlanıram! burada oxumaq üçün bir yol, hətta bir onlayn API -yə üstünlük versəm də, tarixə, saata və coğrafi mövqeyə görə mənə azimut verir …
- Yuxu texnikası haqqında: Lolin 32 bitlik Tensilica Prosessoru olduğundan, 32 bitlik işarəsiz tam ədəd üçün maksimum dəyəri 4294967295… sonra dərin yuxu aralığına maksimum 71 dəqiqə verir. Bu səbəbdən, təxminən 60 dəqiqə ərzində dəfələrlə yuxuya gedirəm.
Redaktə - 10.08.2018:
Servoda, xüsusən də (), ayrılmadan () əvvəl və hər dəfə Lolin deepSleep -dən () oyananda bir çox sarsıntı hərəkətləri olduğunu kəşf etdim.
Bir az daha çox məlumat cədvəli öyrənərkən iki şeyi başa düşdüm:
- Lolin məlumat cədvəlində D4 çıxışı artıq BUILTIN_LED ilə bağlıdır …
- ESP8266ex məlumat cədvəlində, D4 çıxışının UART 1/U 1 TXD (Universal Asenkron Alıcı Verici) kimi istifadə edildiyini öyrənirik. Bu UART1 -in günlüyü çap etmək üçün istifadə edildiyi də göstərilmişdir.
Bu məlumatları oxuyaraq, D4 çıxışının, xüsusən də servo motor idarə etmək üçün yaxşı bir fikir olmadığını başa düşdüm!
Beləliklə, indi servomotoru idarə etmək üçün istifadə olunan çıxış D2 -dir, aşağıdakı kod müvafiq olaraq yeniləndi.
//****************************************
Tarixin yaranma tarixi: 08/Tarix mise en: 08/Versiya: 0.9.4 Versiya IDE Arduino: 1.8.6 Yükləmə sürəti: 921600 Yüklə: "LOLIN (WEMOS) D1 R2 & mini" Carte fizik işçisi: LOLIN (WEMOS) D1 R2 & mini (https://www.amazon.fr/gp/product/B01ELFAF1S/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1) Pin Fonksiyonu ESP-8266 Pin İstifadəsi lokal ------- -------------------------------------------------- ------------------------------------ TX TXD TXD RX RXD RXD A0 Analog giriş, maksimum 3.3V giriş A0 Gərginlik D0 IO GPIO16 Connecté à RST (dərin yuxuya tökün) D1 IO, SCL GPIO5 D2 IO, SDA GPIO4 Servo mateur D3 IO, 10k Pull-up GPIO0 D4 IO, 10k pull-up, BUILTIN_LED GPIO2 D5 IO, SCK GPIO14 Reed D6 IO, MISO GPIO12 Reed lettre D7 IO, MOSI GPIO13 Reed colis D8 IO, 10k aşağı, SS GPIO15 G Ground GND 5V 5V-3V3 3.3V 3.3V RST Reset RST Connecté à D0.yuxu) ***************************************/ # #bool Günlükləri daxil et = doğru; // wifi quruluşu char* ssid = "LOL"; const char* parol = "LOL"; IPAddress ip (192, 168, 000, 000); IPAddress dns (192, 168, 000, 000); IP ünvanı ünvanı (192, 168, 000, 000); IPAddress alt şəbəkəsi (255, 255, 000, 000); WiFi müştəri; // Servo #include #define PIN_SERVO D2 Servo myservo; // servo mövqeyi: 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}; // Reeds #PIN_SWITCH_OUT D5 baytını təyin edin Old_Switch_State_OUT; bayt Switch_State_OUT; #PIN_SWITCH_IN_PARCEL D6 bayt Old_Switch_State_IN_PARCEL təyin edin; bayt Switch_State_IN_PARCEL; #PIN_SWITCH_IN_LETTER D7 baytını təyin edin Old_Switch_State_IN_LETTER; bayt Switch_State_IN_LETTER; imzasız uzun keçid PressTime; const imzasız uzun DEBOUCE_TIME = 200; // Analog #define PIN_ANALOG A0 // MQTT #inc char const* MQTT_Server_IP = "Sizin MQTT ünvanınız"; const int MQTT_Server_Port =; int IDX_Letter_Box =; int IDX_Parcel_Box =; int IDX_Letter_Box_Battery =; PubSubClient ClientMQTT (müştəri); char MQTT_Message_Buff [70]; String MQTT_Pub_String; // Gərginlik float vcc; // NTP #vaxta daxil deyil; int Old_Time = 0; int Int_Heures = 0; int Int_Minutes = 0; int Int_Sleep_Duration = 63; void setup () {Serial.begin (115200); şəbəkə (doğru); pinModu (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); pinModu (PIN_SWITCH_IN_PARCEL, INPUT_PULLUP); Old_Switch_State_IN_PARCEL = digitalRead (PIN_SWITCH_IN_PARCEL); SendBatteryLevel (); şəbəkə (yanlış); // NTP set tnow = time (nullptr); Int_Heures = String (ctime (& tnow)). Alt sətir (11, 13).toInt (); Int_Minutes = String (ctime (& tnow)). Alt sətir (14, 16).toInt (); // Gecə üçün dərin yuxu (! ((Int_Heures> = 7) && (Int_Heures <= 20))) {Serial.print ("Sleep pour la nuit ("); Serial.print (Int_Sleep_Duration - Int_Minutes); Serial. println ("dəqiqə")); yuxu (Int_Sleep_Duration - Int_Minutes); }} void loop () {// NTP set tnow = time (nullptr); Int_Heures = String (ctime (& tnow)). Alt sətir (11, 13).toInt (); Int_Minutes = String (ctime (& tnow)). Alt sətir (14, 16).toInt (); //Serial.println(String(ctime(&tnow))); //Serial.println ("Heure:" + String (ctime (& tnow)). Alt sətir (11, 13)); //Serial.println (String (ctime (& tnow)). Alt sətir (11, 13).toInt ()); // Servo idarəetmə əgər (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 (indeks); gecikmə (200); myservo.write (indeks); } gecikmə (15); myservo.write (Arr_Servo_Pos [Int_Heures-7]); // myservo.detach () ayırdığınızda sarsıntı hərəkətlərinin qarşısını almaq üçün yenidən son dəyəri yazın; } şəbəkə (doğru); SendBatteryLevel (); şəbəkə (yanlış); }}} // Şənbə günündən sonra 13h sonra yuxuya gedərsə ((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 ("minutes)"); yuxu (Int_Sleep_Duration - Int_Minutes); } // Bazar günü əgər dərin yuxu (String (vaxt) Serial.print (Int_Sleep_Duration - Int_Minutes); əgər (Logs) Serial.println ("dəqiqə)"); yuxu (Int_Sleep_Duration - Int_Minutes); } // Qamış idarəçiliyi Switch_State_OUT = digitalRead (PIN_SWITCH_OUT); if (Switch_State_OUT! = Old_Switch_State_OUT) {if (millis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = millis (); əgər (Switch_State_OUT == YÜKSEK) {Serial.println ("kurye əlaqəsi!"); şəbəkə (doğru); gecikmə (5000); MQTT_Pubilsh (IDX_Letter_Box, 0, "0"); gecikmə (5000); MQTT_Pubilsh (IDX_Parcel_Box, 0, "0"); gecikmə (5000); şəbəkə (yanlış); }} 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 (); əgər (Switch_State_IN_LETTER == YÜKSEK) {Serial.println ("kuryer gəlib!"); şəbəkə (doğru); gecikmə (5000); MQTT_Pubilsh (IDX_Letter_Box, 1, "Courrier"); gecikmə (5000); şəbəkə (yanlış); }} 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é!"); şəbəkə (doğru); gecikmə (5000); MQTT_Pubilsh (IDX_Parcel_Box, 1, "Colis"); gecikmə (5000); şəbəkə (yanlış); }} Old_Switch_State_IN_PARCEL = Switch_State_IN_PARCEL; }} etibarsız SendBatteryLevel () {gecikmə (5000); vcc = analogRead (PIN_ANALOG) /10.24; if (Qeydlər) Serial.println ("\ tTension aidiyyəti:" + String (vcc, 0)); MQTT_Pubilsh (IDX_Letter_Box_Battery, 0, String (vcc, 0)); gecikmə (5000); } boş yuxu (int Min_Duration) {ESP.deepSleep (Min_Duration * 60e6); } boş şəbəkə (bool UpDown) {if (UpDown) {Serial.print ("Şəbəkə başlanğıcı"); WiFi.forceSleepWake (); gecikmə (1); // init WIFI WiFi.config (ip, dns, ağ geçidi, alt şəbəkə); WiFi.begin (ssid, parol); while (WiFi.status ()! = WL_CONNECTED) {gecikmə (500); Serial.print ("."); } gecikmə (5000); Serial.println ("."); Serial.print ("\ tConnected - IP ünvanı:"); Serial.println (WiFi.localIP ()); // init MQTT ClientMQTT.setServer (MQTT_Server_IP, MQTT_Server_Port); // 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 (vaxt (nullptr)) <= 100000) {Serial.print ("."); Gecikmə (100);} Serial.println (".");} Başqa {Serial.println ("Şəbəkə dayandır."); WiFi.disconnect (); gecikmə (1000); WiFi.mode (WIFI_OFF); gecikmə (1000); WiFi.forceSleepBegin (); gecikmə (1);}} void reconnect () {while (! ClientMQTT.connected ()) {Serial.print (" / tMQTT bağlantısı sınanır… "); // Bağlanmağa cəhd edin (ClientMQTT.connect (" ESP8266ClientBAL ")) {Serial.println (" bağlı ");} başqa {Serial.print (" uğursuz, rc = "); Serial.print (ClientMQTT.state ()); Serial.println ("5 saniyədə yenidən cəhd edin"); // Yenidən sınamadan əvvəl 5 saniyə gözləyin (5000);}}} boş MQTT_Pubilsh (int Int_IDX, int N_Value, String S_Value) {if (! ClientMQTT.connected ()) reconnect (); vcc = analogRead (PIN_ANALOG) /10.24; Serial.println ("\ MQTT -ə məlumat göndər …"); MQTT_Pub_String = "{" idx / ":" + String (Int_IDX) + ", \" Battery / ":" + String (vcc, 0) + ", \" nvalue / ":" + N_Dəyəri + ", \" dəyər / ": \" " + S_Dəyəri +" / "}"; MQTT_Pub_String.toCharArray (MQTT_Message_Buff, MQTT_Pub_String.length ()+1); ClientMQTT.publish ("domoticz/in", MQTT_Message_Buff); ClientMQTT.disconnect (); }
Addım 11: Domoticz
Domoticz -də:
Ümumi istifadə üçün:
-
İki "Dummy (Heç bir şey etmir, virtual açarlar üçün istifadə et") yaradın:
- Məktublar üçün ilk…
- Bağlama üçün ikinci…
- Hər biri üçün bildirişləri fərdiləşdirin;
- Əlbəttə ki, Tegegram tokeninizi qurmalısınız.
İsteğe bağlı:
Batareyanın doldurulma səviyyəsinə nəzarət etmək üçün "Kommunal sensoru" əlavə edə bilərsiniz.
İpuçları: burada bir çox pulsuz xüsusi nişanlar tapa bilərsiniz …
Addım 12: Nəticə
Ümid edirəm bu Təlimat sizə kömək edəcək:
- əlaqəli məktub qutunuzu özünüz etmək istəməyiniz;
- və ya sadəcə layihələriniz üçün bəzi fikirlər vermək üçün!
Təkmilləşdirmə üçün fikirləriniz varsa, dinləyirəm!
PS: İngilis dilim üçün üzr istəyirəm, Google tərcüməsi mənə çox kömək edir, amma yəqin ki mükəmməl deyil;-)