
Joseph Goodman
0
859
23
Inteligentní napájecí zásuvky jsou nejjednodušší cestou k automatizaci vašeho domu, ale za přibližně 40 $ za soket Wi-Fi nebo ZWave pravděpodobně nebudete kupovat více než několik.
Možná už máte nějaké levné zásuvky založené na RF - ten typ, který přichází s jejich vlastním dálkovým ovládáním, a na zadní straně jsou některé voliče kanálů a ID. Bohužel na trhu neexistují žádné chytré domácí uzly Bitva o chytré domácí uzly: Co je tam a co se děje? Battle of the Smart Home Hubs: Co je tam a co se děje? které s nimi pracují. Nebylo by skvělé, kdybyste je nějakým způsobem propojili s vaším inteligentním domácím systémem pro kutily? No, ve skutečnosti - docela snadno - s částkami kolem 10 $.
S trochou více práce můžete také integrovat nějaký další zakázkový vzdálený hardware založený na RF, jako je tato obrazovka kina rozpočtu.
Co potřebuješ:
- Deska ESP8266 NodeMCU v12E dev (na přesném modelu nezáleží, v1 nebo v3 by mělo být také v pořádku). Důvod, proč používáme desku NodeMCU, je ten, že chceme snadné připojení Wi-Fi později. Odkaz je pro balíček 2, který vyjde na 7 $ každý.
- Balíček vysílače a přijímače 433 MHz (přibližně 3 $).
- Knihovny RCSwitch a MQTT a náš kód - vše k dispozici ke stažení z Githubu.
- Server MQTT, místní nebo vzdálený.
- Některé RF řízené zásuvky běžící v pásmu 433 mHz (mělo by se říci na dálkovém ovládání). Koupil jsem si dolu od Maplin jako balíček 3 za asi 20 liber (25,89 $).
Pokud jste poprvé programovali desku NodeMCU, budete si ji muset stáhnout za plugin Arduino: postupujte podle první části našeho úvodního průvodce Arduino Killer Seznamte se s Arduino Killer: ESP8266 Seznamte se s Arduino Killer: ESP8266 Co kdybych vám řekl, že existuje Arduino-kompatibilní dev deska s vestavěným Wi-Fi za méně než 10 $? No, je. pro čip NodeMCU / ESP8266. Budete také potřebovat Ovladače CH430. Podepsané ovladače macOS CH430 najdete zde nebo Windows zde.
Použil jsem v1.6.5 Arduina, protože cokoli vyšší přináší více problémů, než to řeší. Downgrade, pokud jste tak již neučinili.
Než budete pokračovat, budu předpokládat základní úroveň znalostí o programování Arduino Programování Arduino pro začátečníky: Výukový program pro projektanty řízení semaforu Arduino Programování pro začátečníky: Projektový projekt pro řízení semaforu Sestavení ovladače pro řízení semaforu Arduino vám pomůže rozvinout základní dovednosti kódování ! Začínáme. a že máte nastavení NodeMCU ve správci desky a dokážete správně nahrát nějaký demo kód. Knihovny obsažené v našem stahování byste také měli přidat do svého Arduino / knihovny složku.
Pokud již máte Knihovna PubSubClient nebo MQTT, zálohovat a odstraňovat - ten, který jsem do stahování zahrnul, je jediný, kde jsem mohl spolehlivě přijímat zprávy na NodeMCU, a zkusil jsem mnoho!
RF sniffing (volitelné)
Tento krok není nutný, pokud chcete ovládat pouze zásuvky DIP-switch nebo plug selector plug - ty jsou podporovány po vybalení a bude třeba provést minimální úpravu kódu (to je ale zajímavé udělat nejdřív, nicméně, Rozumím tomu, co se děje v zákulisí).
Pokud máte jiné RF dálkové ovladače, které byste chtěli zkusit přidat, musíte nejprve “čichat” vysílané kódy RF. Za tímto účelem nahrajte ReceiveDemo_Advanced skica z Nabídka -> Příklady -> RCSwitch a změňte následující řádek z 0
mySwitch.enableReceive (0); // Přijímač při přerušení 0 => to je pin # 2
na 2.
mySwitch.enableReceive (2); // Přijímač na GPIO 2 / D4.
Zapojte modul přijímače následujícím způsobem. Při pohledu na přední stranu přijímací desky (je to delší ze dvou, vysílač je čtvercový) - strana se zapnutými komponenty:
- Zcela vpravo je GND. Připojte se k GND na desce NodeMCU.
- Zcela vlevo je VCC. Připojte se k VIN na desce NodeMCU.
- Signál je uprostřed dvou kolíků. Připojte jeden k D4 na NodeMCU (jsou spolu spojeny, takže na tom nezáleží).
Nyní nahrajte upravené ReceiveDemo_Advanced, a když je hotovo, otevřete sériový monitor a začněte stisknout tlačítka na dálkovém ovladači. Po stisknutí tlačítka zkopírujte desetinné číslo (včetně délky bitu), délku pulzu a protokol.
Poté, co jsem to udělal, jsem zjistil, že se používá obrazovka projektoru
- SCREEN UP: Přijato 8694273 / 24bit; Délka pulsu: 355 nebo 356; Protokol: 1
- SCREEN DOWN: Přijato 8694276 / 24bit; Délka pulsu: 355 nebo 356; Protokol: 1
Pokračujte na tolik tlačítek, kolik potřebujete.
Testování vysílače
Dále se pokusíme poslat kódy pomocí vysílače. Připojte modul vysílače (čtvercový) následujícím způsobem. Buďte opatrní: označení těchto kolíků je nebezpečné.
Kolík VCC je ve skutečnosti uprostřed, ne na levé straně. Zničil jsem jeden modul v procesu vymýšlení. Ta věc říká “ATAD” je ve skutečnosti “DATA”, hlaskovano pozpatku. Data opět přejdou do D4, VCC do VIN a GND do GND (vyjměte modul přijímače, již jej již nepotřebujete).
Načíst Příklady -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, a znovu změňte datový pin:
mySwitch.enableTransmit (10);
na
mySwitch.enableTransmit (2);
V knihovně je zahrnuto několik příkladů a to, co pro vás bude fungovat, bude záviset na přesném typu přepínače, který máte. Typ A (dip přepínače) a B (číselníky nebo posuvníky) jsou nejčastější - viz obrázky na stránce RCSwitch. U typu B je zapnutí a vypnutí zásuvky stejně jednoduché jako:
mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);
kde 1 je ID kanálu (horní číselník) a 4 je ID soketu (spodní číselník). Ty byly napsány římskými číslicemi na mých zásuvkách. Lze tedy oslovit maximálně 16 jednotlivých soketů, i když více soketů může používat stejnou adresu, pokud máte více zařízení, která se mají zapnout najednou.
Obrazovka mého projektoru však byla trochu jiná - použila jinou délku pulsu. Abychom je mohli ovládat, fungovalo následující. Poznámka: můžete také definovat jiný protokol, pokud to váš dálkový ovladač potřebuje, ALE Ujistěte se, že definujete protokol PŘED délkou pulzu. Při změně protokolu je délka pulsu přepsána.
// Všimněte si, že moje obrazovka ve skutečnosti vyžaduje stisknutí dvou tlačítek (ne dlouhého stisknutí, ale dvou fyzických stisknutí), takže trochu zpožďuji a poté posílám stejný signál znovu void screenUp () mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (desetinné číslo, počet bitů) zpoždění (2000); mySwitch.send (8694273,24); void screenDown () mySwitch.setPulseLength (358); mySwitch.send (8694276,24); zpoždění (2000); mySwitch.send (8694276,24);
Než přejdete k dalšímu kroku, vyzkoušejte nejprve všechny své kódy.
Ovládání přes MQTT
Otevřete náčrtek, který jste stáhli z Githubu mqtt_rcswitch.ino, a začněte úpravou síťového SSID a hesla pro váš domov. Poté změňte název kanálu, pokud si přejete, a nastavte server MQTT. Pokud na vaší instalaci OpenHAB ještě nemáte spuštěný server MQTT, přečtěte si část 2 naší příručky pro začátečníky OpenHAB. Příručka pro začátečníky OpenHAB, část 2: ZWave, MQTT, pravidla a mapování Příručka pro začátečníky, OpenHAB, část 2: ZWave, MQTT, pravidla a mapování OpenHAB, software pro domácí automatizaci s otevřeným zdrojovým kódem, výrazně převyšuje možnosti ostatních systémů domácí automatizace na trhu - nastavení však není snadné. Ve skutečnosti to může být naprosto frustrující. . Mějte na paměti, že můj kód je určen pro zásuvky typu B (otočný přepínač), i když jej můžete snadno upravit i pro přepínače DIP.
Nejdůležitější součástí kódu je zpráva přijata() funkce, která reaguje na příchozí MQTT příkazy. V této funkci nejprve kontrolujeme hlavní klíčové slovo - vybral jsem “přepínač” a “obrazovka”. V případě “přepínač”, poté analyzujeme ID kanálu a ID konektoru; pak zkontrolujte příkaz užitečného obsahu.
void messageReceived (téma String, užitečné zatížení řetězce, char * bytes, unsigned int length) if (topic.indexOf ("switch")> = 0) // ovládání přepínače, analyzuje kanál a připojuje ID int channel = getValue ( téma, '/', 3) .toInt (); int plug = getValue (téma, '/', 4) .toInt (); if (payload == "on") mySwitch.switchOn (kanál, plug); else mySwitch.switchOff (channel, plug); else if (topic.indexOf ("screen")> = 0) // ovládání obrazovky if (payload == "up") screenUp (); else if (payload == "down") screenDown (); / * přidejte další, pokud chcete poslouchat další příkazy (nebo jednoduše upravte výše uvedený příkaz, pokud nechcete obrazovku) * /
Ve výchozím nastavení fungují následující příkazy MQTT:
obývací pokoj / ovládání / spínač / X / Y (kde X je kanál a Y je ID konektoru; tělo zprávy je zapnuto nebo vypnuto)
obývací pokoj / ovládání / obrazovka (s tělem zprávy nahoru nebo dolů)
Před přidáním do OpenHAB otestujte svá zařízení pomocí příkazového řádku nebo klienta GUI MQTT.
Přidání do OpenHAB
Jako poslední krok musíme v OpenHAB vytvořit pouze některé položky pro tyto přepínače. Prozatím jsem definoval následující položky, ale měli byste být schopni zjistit, jak přidat další:
/ * RF433mHz zařízení * / Switch CinemaScreen "Screen" (Cinema) mqtt = "> [broker: obývací pokoj / control / screen: příkaz: ON: down],> [broker: livingroom / control / screen: command: OFF: up ] " Switch Switch41" Switch41 "(Cinema) mqtt ="> [makléř: obývací pokoj / control / switch / 4/1: příkaz: ON: on],> [makléř: obývací pokoj / control / switch / 4/1: příkaz: OFF: off] " Switch Switch42" Switch42 "(Cinema) mqtt ="> [broker: obývací pokoj / control / switch / 4/2: příkaz: ON: on],> [broker: livingroom / control / switch / 4/2: příkaz: OFF: off] "
Nyní byste měli být schopni ovládat vaše RF zařízení z OpenHAB! Jedna věc, kterou mě příjemně překvapilo, byl dosah - jediný uzel dokázal pokrýt většinu mého domu. Můžete samozřejmě přidat další uzel, poslouchající stejný kanál, který jednoduše opakuje stejné příkazy, pokud potřebujete další pokrytí.
Jediným omezením, které je třeba mít na paměti, je to, že samotné sokety nemohou hlásit svůj stav, takže pokud používáte původní dálkový ovladač, nemusí být ovládání zdířky v OpenHAB přesně odráženo. Držte se pouze rozhraní OpenHAB a měli byste být v pořádku.
Dotazy nebo problémy? Zeptejte se v komentářích a udělám vše, co bude v mých silách. Pokud chcete vylepšit můj kód, můžete odeslat žádost o vyžádání.