
Michael Cain
0
2372
42
Pametne utičnice najjednostavniji su način automatizacije vašeg doma, ali za otprilike 40 USD za Wi-Fi ili ZWave utičnicu vjerojatno nećete kupiti više od nekoliko.
Možda već imate neke jeftine utičnice utemeljene na RF-u - vrste koje dolaze s vlastitim prilagođenim daljinskim upravljačem, a na poleđini su neki selektori kanala i ID-a. Nažalost, na tržištu nema pametnih kućnih čvorišta Battle of the Smart Home Hubs: Što je tamo i što dolazi? Battle of the Smart Home Hubs: Što je tamo i što dolazi? koji rade s onima. Ne bi li bilo sjajno kada biste ih nekako mogli povezati u svoj uradi sam pametni dom? Pa možete - prilično lako u stvari - s oko 10 dolara u dijelovima.
Uz malo više posla možete integrirati i neki drugi ugovorni udaljeni hardver utemeljen na RF-u, poput ovog budžetskog kina.
Što trebaš:
- ESP8266 Dev ploča NodeMCU v12E (točan model nije važan, v1 ili v3 također bi trebali biti u redu). Razlog zašto koristimo ploču NodeMCU je taj što kasnije želimo laganu Wi-Fi vezu. Poveznica je za paket od 2 dolara, koji može izdvojiti po 7 USD svaki.
- Paket od 433Mhz odašiljača i prijemnika (oko 3 USD).
- RCSwitch i MQTT knjižnice, i naš kod - svi su dostupni za preuzimanje s Githuba.
- MQTT poslužitelj, lokalni ili daljinski.
- Neke RF upravljačke utičnice rade na frekvencijskom opsegu 433 mHz (treba reći na daljinskom upravljaču). Kupio sam mine od Maplina u paketu od 3 za oko £ 20 (25.89 $).
Ako vam je prvi put da programirate ploču NodeMCU, za nju ćete trebati preuzeti Arduino dodatke: slijedite prvi dio našeg uvodnog vodiča za Arduino ubojicu Upoznajte Arduino ubojicu: ESP8266 Upoznajte Arduino ubojicu: ESP8266 Što ako ja rekao vam je da postoji Arvino kompatibilna dev ploča s ugrađenim Wi-Fi-jem za manje od 10 dolara? Pa, postoji. za čip NodeMCU / ESP8266. Trebat će vam i CH430 vozača. Ovdje možete pronaći potpisane upravljačke programe za macOS CH430 ili Windows ovdje.
Koristio sam v1.6.5 Arduino-a jer bilo što veće unosi više problema nego što rješava. Ponižite verziju ako već niste.
Prije nego što nastavite, pretpostavit ću osnovnu razinu znanja o Arduino programiranju. Arduino programiranje za početnike: Projektor kontrolera semafora Vodič za programiranje Arduino za početnike: Projektni kontroler semafora Vodič za izgradnju Arduino semafora pomaže vam razviti osnovne vještine kodiranja ! Počeli smo. , te da imate postavku NodeMCU u upravitelju ploča i možete ispravno prenijeti neki demo kod. Trebali biste u svoju knjižnicu dodati i biblioteke uključene u naše preuzimanje Arduino / knjižnice mapa.
Ako imate postojeću PubSubClient ili MQTT biblioteka, napravite sigurnosnu kopiju i uklonite je - onaj koji sam uključio u preuzimanje je jedini na kojem sam mogao pouzdano primati poruke na NodeMCU, a pokušao sam puno!
RF Njuškanje (neobavezno)
Ovaj korak nije potreban ako želite samo upravljati utičnicama za odabir DIP-sklopke ili birače - one su podržane izvan okvira, a bit će potrebne minimalne izmjene koda (ovo je ipak zanimljivo prvo napraviti, no, zato ' Shvatit ću što se događa iza kulisa).
Ako imate druge daljinske upravljače koje želite pokušati dodati, prvo morate “njuškati” RF kodovi koji se prenose. Da biste to učinili, učitajte ReceiveDemo_Advanced skica iz Izbornik -> Primjeri -> RCSwitch mapu, a sljedeći redak promijenite iz 0
mySwitch.enableReceive (0); // Prijemnik na prekidu 0 => to je pin # 2
do 2.
mySwitch.enableReceive (2); // Prijemnik na GPIO 2 / D4.
Priključite modul prijamnika na sljedeći način. Gledajući prednju ploču prijamnika (dulja je od dva, odašiljač je kvadratna) - strana sa komponentama na:
- Krajnje desno je GND. Spojite se na GND na ploči NodeMCU.
- Krajnje lijevo je VCC. Spojite se na VIN na ploči NodeMCU.
- Srednja dva igle su signal. Spojite bilo jedan na D4 na NodeMCU (povezani su, tako da nije važno koji).
Sada prenesite modificirane ReceiveDemo_Advanced, i kad to učinite, otvorite serijski monitor i počnite pritiskati gumbe na daljinskim upravljačima. Kad pritisnete gumb, kopirajte decimalni zapis (uključujući bitnu duljinu), dužinu pulsa i protokol.
Nakon što sam to učinio, otkrio sam da se moj ekran projektora koristi
- ZASLON: Primljeno 8694273 / 24bit; Duljina impulsa: 355 ili 356; Protokol: 1
- ZASLON DOLJE: Primljeno 8694276 / 24bit; Duljina impulsa: 355 ili 356; Protokol: 1
Nastavite onoliko gumba koliko vam treba.
Ispitivanje odašiljača
Potom ćemo pokušati poslati kodove pomoću predajnika. Spojite modul odašiljača (četvrtasti) na sljedeći način. Budite oprezni: označavanje na ovim iglama je grozno.
VCC pin je zapravo u sredini, a ne na lijevoj strani. Uništio sam jedan modul u procesu otkrivanja ovoga. Ono što kaže “ATAD” zapravo je “PODACI”, pisano unatrag. Ponovo, podaci idu u D4, VCC u VIN, a GND u GND (uklonite prijemnički modul, više vam nisu potrebni).
Učitajte Primjeri -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, i opet, promijenite podatkovni pin:
mySwitch.enableTransmit (10);
do
mySwitch.enableTransmit (2);
Napominjemo da su u biblioteku uključeni razni primjeri, a koji od vas radi ovisit će o točnoj vrsti prekidača koji imate. Najčešći su tip A (dip prekidači) i B (kotačići ili klizači) - pogledajte slike na stranici RCSwitch. Za tip B uključivanje i isključivanje utičnice je jednostavno kao:
mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);
gdje je 1 ID kanala (gornji kotačić), a 4 je ID utičnice (donji kotačić). To su bile napisane rimskim brojevima na mojim utičnicama. Stoga se može adresirati maksimalno 16 pojedinačnih utičnica, iako više utičnica može koristiti istu adresu ako imate više uređaja za uključivanje odjednom.
No, ekran mog projektora bio je malo drugačiji - koristio je različitu duljinu pulsa. Dakle, da bi radili s njima, funkcioniralo je sljedeće. Napominjemo da možete definirati i drugi protokol ako vaš daljinski upravljač treba, ali obavezno definirajte protokol PRIJE duljine impulsa. Duljina impulsa prepisuje se prilikom promjene protokola.
// Imajte na umu da moj ekran zapravo zahtijeva dvije pritiske tipke (ne dugo pritiskanje, ali dvije fizičke pritiske), pa odgađam malo, a zatim opet šaljem isti signal nevažećim screenUp () mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (decimalni kod, broj bita) kašnjenje (2000); mySwitch.send (8694273,24); void screenDown () mySwitch.setPulseLength (358); mySwitch.send (8694276,24); kašnjenja (2000); mySwitch.send (8694276,24);
Prvo testirajte sve svoje kodove prije nego što pređete na sljedeći korak.
Kontrola putem MQTT-a
Otvorite skicu koju ste preuzeli s imena Github mqtt_rcswitch.ino, a započnite izmjenom mrežnog SSID-a i lozinke za vaš dom. Zatim, ako želite, promijenite naziv kanala i postavite MQTT poslužitelj. Ako već nemate instaliran MQTT poslužitelj na vašoj instalaciji OpenHAB, pročitajte 2. dio našeg vodiča za početnike OpenHAB-a OpenHAB vodič za početnike 2. dio: ZWave, MQTT, pravila i grafikoni OpenHAB vodič za početnike 2. dio: ZWave, MQTT, pravila i grafikoni OpenHAB, softver otvorenog koda za automatizaciju domova, daleko nadmašuje mogućnosti ostalih sustava za automatizaciju kućanstava na tržištu - ali nije lako postaviti to. U stvari, to može biti ravno frustrirajuće. , Imajte na umu da je moj kod dizajniran za utičnice tipa B (rotacijska sklopka), iako biste ga lako mogli promijeniti i za DIP sklopke.
Najvažniji dio koda je messageReceived () funkcija koja reagira na dolazne MQTT naredbe. U ovoj funkciji prvo provjeravamo glavnu ključnu riječ - koju sam odabrao “prekidač” i “zaslon”. U slučaju “prekidač”, zatim raščlanimo ID kanala i utikača; zatim provjerite tijelo korisnog opterećenja za naredbu.
void messageReceived (String topic, String korisni teret, char * bytes, nedodijeljena dužina int) if (topic.indexOf ("switch")> = 0) // prekidač za upravljanje, raščlanjivanje kanala i dodavanje id int channel = getValue ( tema '/', 3) .toInt (); int plug = getValue (tema, '/', 4) .toInt (); if (payload == "on") mySwitch.switchOn (kanal, utikač); else mySwitch.switchOff (kanal, utikač); else if (topic.indexOf ("ekran")> = 0) // kontrola zaslona if (payload == "up") screenUp (); else if (payload == "dolje") screenDown (); / * dodajte još jednu ako želite poslušati dodatne naredbe (ili samo izmijenite gornju ako ne želite zaslon) * /
Tada prema zadanom djeluju sljedeće naredbe MQTT:
dnevna soba / kontrola / prekidač / X / Y (gdje je X kanal, a Y je ID utikača; s tijelom poruke uključeno ili isključeno)
dnevna soba / kontrola / zaslon (s tijelom poruke gore ili dolje)
Upotrijebite naredbeni redak ili GUI MQTT klijent za testiranje uređaja prije dodavanja u OpenHAB.
Dodavanje u OpenHAB
Kao posljednji korak, trebamo samo stvoriti neke stavke za ove sklopke u OpenHAB-u. Za sada sam definirao sljedeće stavke, ali trebali biste biti u mogućnosti odrediti kako dodati više:
/ * RF433mHz uređaji * / Switch CinemaScreen "Zaslon" (kino) mqtt = "> [broker: dnevni boravak / kontrola / zaslon: naredba: UKLJUČEN: dolje],> [posrednik: dnevni boravak / kontrola / zaslon: naredba: OFF: gore ] " Prekidač prekidača41" Prekidač41 "(Kino) mqtt ="> [broker: dnevni boravak / kontrola / sklopka / 4/1: naredba: UKLJUČEN: uključen],> [broker: dnevni boravak / kontrola / sklopka / 4/1: naredba: OFF: isključeno] " Prekidač prekidača42" Prekidač42 "(Kino) mqtt ="> [broker: dnevni boravak / kontrola / prekidač / 4/2: naredba: UKLJUČENO: uključeno],> [posrednik: dnevni boravak / kontrola / prekidač / 4/2: naredba: oFF: off] "
Sada biste mogli upravljati svojim RF uređajima s OpenHAB-a! Jedna me stvar ugodno iznenadila bio je domet - jedan čvor uspio je pokriti veći dio moje kuće. Naravno da možete dodati još jedan čvor, slušajući isti kanal, koji jednostavno ponavlja iste naredbe, ako vam je potrebna daljnja pokrivenost.
Jedino ograničenje koje treba imati na umu je da same utičnice ne mogu prijaviti svoj status, tako da ako koristite originalni daljinski upravljač, upravljanje statusom utičnice možda se neće tačno odražavati u OpenHAB-u. Držite se samo OpenHAB sučelja i trebali biste biti u redu.
Pitanja ili problemi? Zatražite u komentarima, a ja ću dati sve od sebe da pomognem. Ako želite poboljšati moj kod, slobodno pošaljite zahtjev za povlačenje.