Oglas

Pametne vtičnice so najpreprostejši način za avtomatizacijo vašega doma, vendar pri približno 40 dolarjih za vtičnico, ki temelji na omrežju Wi-Fi ali ZWave, verjetno ne boste kupili več kot nekaj.

Morda že imate nekaj poceni vtičnic, ki temeljijo na RF - takšne, ki so priložene z lastnim daljinskim upravljalnikom, na zadnji strani pa so nekateri izbirniki kanalov in ID-jev. Žal jih ni pametnih domačih središč na trgu Battle of Pametna vozlišča: Kaj je tam in kaj prihaja? Preberi več ki delajo s tistimi. Ali ne bi bilo čudovito, če bi jih lahko nekako povezali v svoj sistem pametnega doma »naredi sam«? No, v resnici lahko - z okoli 10 dolarji v delih.

Z malo več dela lahko vključite tudi kakšno drugo po meri RF-oddaljeno strojno opremo, kot je ta proračunski kino zaslon.

Kaj rabiš:

  • ESP8266 plošča za razvijanje NodeMCU v12E (natančen model ni pomemben, tudi v1 ali v3 bi moral biti v redu). Razlog, da uporabljamo ploščo NodeMCU, je, ker želimo enostavno povezavo Wi-Fi pozneje. Povezava je za paket 2, ki se obnese po 7 dolarjev.
  • instagram viewer
  • Paket 433Mhz oddajnik in sprejemnik (približno 3 USD).
  • RCSwitch in MQTT knjižnice in naša koda - vse na voljo za prenos z Github-a.
  • MQTT, lokalni ali oddaljeni strežnik.
  • Nekatere vtičnice z nadzorom RF delujejo v pasu 433 mHz (na daljinskem upravljalniku naj piše). Rudnik sem kupil od Maplina kot paket 3 za približno 20 funtov (25,89 USD).

Če ste prvič programirali ploščo NodeMCU, boste morali zanjo naložiti vtičnike Arduino: sledite skupaj s prvim delom našega Arduino Killer uvodni vodnik Spoznajte Arduino morilca: ESP8266Kaj pa, če bi vam rekel, da obstaja arduino združljiva razvijalna plošča z vgrajenim Wi-Fi za manj kot 10 dolarjev? No, obstaja. Preberi več za čip NodeMCU / ESP8266 Prav tako boste potrebovali CH430 voznikov. Lahko najdeš tukaj podpisani gonilniki macOS CH430ali Windows tukaj.

Uporabil sem v1.6.5 Arduinoja, ker kaj višjega povzroči več težav, kot jih reši. Ponižajte, če še niste.

Preden nadaljujete, bom prevzel osnovno raven znanja o Arduino programiranje Programiranje Arduino za začetnike: Navodila za upravljanje semaforja za semaforjeIzdelava krmilnika semaforja Arduino vam pomaga razviti osnovne veščine kodiranja! Začnimo. Preberi več in da imate nastavitev NodeMCU v upravitelju plošče in lahko pravilno naložite nekaj demo kode. Prav tako bi morali dodati svoje knjižnice, ki so vključene v naš prenos Arduino / knjižnice mapo.

Če imate obstoječega PubSubClient ali knjižnica MQTT, varnostno kopijo in odstranitev - tisti, ki sem ga vključil v prenos, je edini, kjer sem lahko zanesljivo prejemal sporočila v NodeMCU, in poskusil veliko!

RF sniffing (izbirno)

Ta korak ni potreben, če želite samo nadzorovati vtičnice DIP-stikala ali izbirne vtičnice - podprte so izven polja, in potrebna bo minimalna sprememba kode (to je še vedno zanimivo najprej, tako da boste razumeli, kaj se dogaja za prizori).

Če imate druge daljinske upravljalnike, ki jih želite poskusiti dodati, morate najprej "nanjušiti" RF kode, ki se prenašajo. To naredite tako, da naložite ReceiveDemo_Advanced skica iz Meni -> Primeri -> RCSwitch mapo in spremenite naslednjo vrstico iz 0

mySwitch.enableReceive (0); // Sprejemnik ob prekinitvi 0 => to je pin # 2

do 2.

mySwitch.enableReceive (2); // Sprejemnik na GPIO 2 / D4.

Sprejemni modul povežite na naslednji način. Če pogledamo na sprednjo stran sprejemne plošče (daljša je od obeh, je oddajnik oglat) - stran s sestavnimi deli:

  • Skrajno desno je BND. Povežite se z GND na plošči NodeMCU.
  • Skrajno levo je VCC. Povežite se z VIN na plošči NodeMCU.
  • Srednja dva zatiča sta signal. Na NodeMCU bodisi enega povežite z D4 (povezani so skupaj, tako da ni pomembno, kateri).
433 ožičenje-1

Zdaj naložite spremenjeno ReceiveDemo_AdvancedKo končate, odprite serijski monitor in začnite pritiskati gumbe na daljinskih upravljalnikih. Ko pritisnete gumb, izpišite decimalno številko (vključno z dolžino bita), dolžino impulza in protokolom.

zaslon RF vohanje

Po tem sem ugotovil, da je moj ekran projektorja uporabljen

  • SCREEN UP: Prejeto 8694273 / 24bit; Dolžina impulza: 355 ali 356; Protokol: 1
  • ZASLON DOL: prejel 8694276 / 24bit;Dolžina impulza: 355 ali 356; Protokol: 1

Nadaljujte za toliko gumbov, kot jih potrebujete.

Testiranje oddajnika

Nato bomo poskušali poslati kode s pomočjo oddajnika. Povežite oddajni modul (kvadratni) na naslednji način. Bodite previdni: označevanje na teh zatičih je grozno.

Zatič VCC je dejansko na sredini, ne na levi strani. Uničila sem en modul, ko sem to ugotovila. Ta stvar, ki pravi "ATAD", je v resnici "PODATKI", zapisani nazaj. Ponovno podatki gredo v D4, VCC v VIN in GND v GND (odstranite sprejemni modul, ne potrebujete več).

433 ožičenje-2

Naloži gor Primeri -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitchesin znova spremenite podatkovni zatič:

mySwitch.enableTransmit (10);

do

mySwitch.enableTransmit (2);

Upoštevajte, da je v knjižnico vključenih več primerov in kateri od njih deluje, bo odvisno od natančne vrste stikala. Najpogostejša sta tipa A (dip stikala) in B (številčnice ali drsniki) - glejte slike na strani RCSwitch. Za tip B je vklop in izklop vtičnice tako preprost kot:

mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);

kjer je 1 ID kanala (zgornji klic), 4 pa ID vtičnice (spodnji gumb). Te so bile napisane z rimskimi številkami na mojih vtičnicah. Zato je mogoče nasloviti največ 16 posameznih vtičnic, čeprav več vtičnic lahko uporablja isti naslov, če imate več naprav za vklop hkrati.

Vendar je bil moj zaslon projektorja nekoliko drugačen - uporabljal je drugačno dolžino impulza. Torej, da bi upravljali s temi, je delovalo naslednje. Upoštevajte, da lahko določite tudi drug protokol, če ga potrebuje daljinski upravljalnik, vendar preverite, ali določite protokol PRED dolžino impulza. Dolžina impulza se pri spremembi protokola prepiše.

// Upoštevajte, da moj zaslon dejansko potrebuje DVA pritiska na gumb (ne dolg pritisk, ampak dva fizična pritisne), zato malo odložim, nato pa isti signal znova pošljem razveljavi screenUp () { mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (decimalna koda, število bitov) zamuda (2000); mySwitch.send (8694273,24); } void screenDown () {mySwitch.setPulseLength (358); mySwitch.send (8694276,24); zamuda (2000); mySwitch.send (8694276,24); }

Najprej preverite, ali vse kode delujejo, preden nadaljujete na naslednji korak.

Nadzor prek MQTT

Odprite skico, ki ste jo prenesli z imenom Github mqtt_rcswitch.inoin začnite s spreminjanjem omrežnega SSID-ja in gesla za vaš dom. Nato po želji spremenite ime kanala in nastavite strežnik MQTT. Če še nimate nameščenega strežnika MQTT na namestitvi OpenHAB, preberite 2. del priročnika za začetnike OpenHAB-a OpenHAB Vodnik za začetnike 2. del: ZWave, MQTT, Pravila in grafikoniOpenHAB, odprtokodna programska oprema za domačo avtomatizacijo, daleč presega zmogljivosti drugih sistemov za domačo avtomatizacijo na trgu - vendar jih ni enostavno postaviti. V resnici je lahko naravnost frustrirajoče. Preberi več . Upoštevajte, da je moja koda zasnovana za vtičnice tipa B (vrtljivo stikalo), čeprav bi jo lahko enostavno prilagodili tudi za DIP stikala.

Najpomembnejši del kode je messageReceived () funkcija, ki se odziva na dohodne ukaze MQTT. V tej funkciji najprej preverimo glavno ključno besedo - izbral sem "stikalo" in "zaslon". V primeru "stikala" nato razčlenimo ID kanala in vtiča; nato preverite telo koristnosti.

void messageReceived (String topic, String payload, char * bytes, nepodpisana int dolžina) {if (topic.indexOf ("stikalo")> = 0) {// stikalo za nadzor, razčleni kanal in priklopi id int kanal = getValue (tema, '/', 3) .toInt (); int plug = getValue (tema, '/', 4) .toInt (); if (payload == "on") {mySwitch.switchOn (kanal, vtič); } else {mySwitch.switchOff (kanal, vtič); }} else if (topic.indexOf ("zaslon")> = 0) {// nadzor zaslona, ​​če (payload == "up") {screenUp (); } else if (payload == "down") {screenDown (); }} / * dodajte še enega, če tukaj poslušate več ukazov (ali preprosto spremenite zgornjega, če ne želite zaslona) * / }

Nato privzeto delujejo naslednji ukazi MQTT:

dnevna soba / nadzor / stikalo / X / Y (kjer je X kanal, in Y je ID vtikača; z vklopljenim ali izklopljenim telesom sporočila)
dnevna soba / nadzor / zaslon (s telesom sporočila navzgor ali navzdol)

Z ukazno vrstico ali odjemalcem GUI MQTT preizkusite svoje naprave, preden dodate v OpenHAB.

Dodajanje v OpenHAB

Kot zadnji korak moramo samo ustvariti nekaj elementov za ta stikala v OpenHAB-u. Zaenkrat sem določil naslednje elemente, vendar bi morali imeti možnost, da dodate več:

/ * RF433mHz naprave * / Preklopite CinemaScreen "zaslon" (kino) {mqtt = "> [posrednik: dnevna soba / nadzor / zaslon: ukaz: ON: navzdol],> [posrednik: dnevna soba / nadzor / zaslon: ukaz: OFF: up]"} Stikalo stikala41 "Switch41" (kino) {mqtt = "> [posrednik: dnevna soba / krmiljenje / stikalo / 4/1: ukaz: VKLOP: on],> [posrednik: dnevna soba / krmiljenje / stikalo / 4/1: ukaz: OFF: izklopljeno] "} Stikalo stikala42 "Switch42" (kino) {mqtt = "> [posrednik: dnevna soba / krmiljenje / stikalo / 4/2: ukaz: VKLOP: on],> [posrednik: dnevna soba / krmiljenje / stikalo / 4/2: ukaz: OFF: izklopljeno] "}

Zdaj bi morali imeti možnost nadzora RF naprav od OpenHAB-a! Mene je prijetno presenetil domet - eno vozlišče je lahko pokrivalo večino moje hiše. Seveda lahko dodate še eno vozlišče in poslušate isti kanal, ki preprosto ponovi iste ukaze, če potrebujete nadaljnjo pokritost.

Edina omejitev, ki jo je treba upoštevati, je, da vtičnice same ne morejo prijaviti svojega statusa, torej če ste vi uporabite originalni daljinski upravljalnik, krmiljenje stanja vtičnice v njem morda ne bo natančno prikazano OpenHAB. Držite se samo vmesnika OpenHAB in morali bi biti v redu.

Vprašanja ali težave? Poiščite stran v komentarjih in po svojih najboljših močeh si bom pomagal. Če želite izboljšati mojo kodo, pošljite zahtevo za vleko.

James ima doktorat iz področja umetne inteligence in ima certifikat CompTIA A + in Network +. Je vodilni razvijalec MakeUseOf in svoj prosti čas preživlja z igranjem VR paintball in družabnih iger. Z računalniki gradi že od malih nog.