Oglas
Pametne utičnice najjednostavniji su način automatizacije vašeg doma, ali za otprilike 40 USD za utičnicu koja se temelji na Wi-Fi ili ZWave malo je vjerojatno da ćete kupiti više od nekoliko.
Međutim, možda već imate neke jeftine utičnice zasnovane 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, nema ih pametne kućne centre na tržištu Battle of the Smart Home Hubs: Što je tamo i što dolazi? Čitaj više 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 ugovoriti udaljeni hardver utemeljen na RF-u, kao što je ovaj proračunski kino ekran.
Što trebaš:
- ESP8266 NodeMCU v12E ploča za razvoj (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 želimo kasnije jednostavnu Wi-Fi vezu. Poveznica je za paket od 2, koji izdvaja po 7 dolara svaki.
- Paket od 433Mhz odašiljač i prijemnik (oko 3 USD).
- RCSwitch i MQTT knjižnice, a naš kod - sve dostupno za preuzimanje s Githuba.
- MQTT poslužitelj, lokalni ili daljinski.
- Neke RF upravljačke utičnice rade na 433 mHz (treba reći na daljinskom upravljaču). Ja sam kupio 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 Uvodni vodič Arduino Killer Upoznajte Arduino ubojicu: ESP8266Što ako vam kažem da postoji Arduino kompatibilna ploča s ugrađenim Wi-Fi-jem za manje od 10 dolara? Pa, postoji. Čitaj više za čip NodeMCU / ESP8266. Također će vam trebati CH430 vozača. Možeš naći ovdje potpisani vozači macOS CH430, ili Ovdje su prozori.
Koristio sam v1.6.5 Arduinoa jer bilo što veće unosi više problema nego što rješava. Ponižite unazad ako već niste.
Prije nego što nastavite, pretpostavit ću osnovnu razinu znanja Arduino programiranje Arduino programiranje za početnike: Vodič za upravljanje semaforimaIzgradnja regulatora semafora Arduino pomaže vam razviti osnovne vještine kodiranja! Počeli smo. Čitaj više , 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 mapu.
Ako imate postojeću PubSubClient ili MQTT biblioteka, izradite sigurnosnu kopiju i uklonite je - onaj koji sam uključio u preuzimanje je jedini na kojem mogu pouzdano primati poruke na NodeMCU i pokušao sam puno!
RF Njuškalo (neobavezno)
Ovaj korak nije potreban ako želite samo upravljati utičnicama DIP-prekidača ili utikača za biranje - one su podržane izvan okvira, i bit će potrebna minimalna izmjena koda (to je ipak najprije zanimljivo za napraviti, tako da ćete shvatiti što se događa iza scene).
Ako imate druge RF daljince koje želite pokušati dodati, prvo ćete "njuškati" RF kodove 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 stranu prijemničke ploče (dulje je od ove dvije, odašiljač je četvrtast) - 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. Jedno ili D4 povežite na NodeMCU (povezani su, tako da nema veze koji).
Sada prenesite modificirane ReceiveDemo_Advancedi 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 impulsa 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" je zapravo "PODACI", zapisano unatrag. Opet 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 primjeru uključeni razni primjeri, a koji od vas radi ovisit će o točnoj vrsti prekidača koji imate. Najčešći su tipovi 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 zaslon zapravo zahtijeva DVIJE tipke (ne dugo pritiskanje, ali dvije fizičke pritišće), pa odgađam malo, a zatim opet šaljem isti signal praznini 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šnjenje (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 MQTT poslužitelj na instalaciji OpenHAB, pročitajte dio 2 našeg vodiča za početnike OpenHAB-a OpenHAB vodič za početnike 2. dio: ZWave, MQTT, pravila i grafikoniOpenHAB, softver otvorenog koda za automatizaciju kuća, daleko nadmašuje mogućnosti drugih sustava za automatizaciju kućnih automata na tržištu - ali nije lako postaviti to. U stvari, to može biti ravno frustrirajuće. Čitaj viš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č - odabrao sam "preklopnik" i "ekran". U slučaju „prekidača“, tada raščlanimo ID kanala i utikača; zatim provjerite tijelo korisnog opterećenja za naredbu.
void messageReceived (String topic, Niz korisnog opterećenja, char * bajtova, dužina bez znaka int) {if (topic.indexOf ("prekidač")> = 0) {// prekidač za kontrolu, raščlanjivanje kanala i povezivanje id int kanala = 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 / sklopka / X / Y (gdje je X kanal, a Y je ID utikača; s uključenim ili isključenim tijelom poruke)
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. Zasad sam definirao sljedeće stavke, ali trebali biste moći shvatiti kako dodati još:
/ * RF433mHz uređaji * / Prebacite CinemaScreen "ekran" (kino) {mqtt = "> [broker: dnevni boravak / kontrola / zaslon: naredba: UKLJUČEN: dolje],> [broker: dnevni boravak / kontrola / zaslon: naredba: OFF: gore]"} Switch Switch41 "Switch41" (Cinema) {mqtt = "> [broker: dnevni boravak / kontrola / prekidač / 4/1: naredba: ON: uključeno],> [broker: dnevni boravak / kontrola / prekidač / 4/1: naredba: OFF: isključeno] "} Switch Switch42 "Switch42" (Cinema) {mqtt = "> [broker: dnevni boravak / kontrola / prekidač / 4/2: naredba: ON: uključeno],> [broker: dnevni boravak / kontrola / prekidač / 4/2: naredba: OFF: isključeno] "}
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, pa ako niste Upotrijebite izvorni daljinski upravljač, a ne kontrolira se status utičnice unutar OpenHAB. Držite se samo OpenHAB sučelja i trebali biste biti u redu.
Pitanja ili problemi? Traži u komentarima i potrudit ću se da pomognem. Ako želite poboljšati moj kod, slobodno pošaljite zahtjev za povlačenje.
James je diplomirao iz umjetne inteligencije i certificiran je CompTIA A + i Network +. Vodeći je programer MakeUseOf-a, a svoje slobodno vrijeme provodi igrajući VR paintball i boardgames. Gradio je računala još od djeteta.