Advertentie
Slimme stopcontacten zijn de eenvoudigste manier om uw huis te automatiseren, maar met ongeveer $ 40 per stuk voor een op wifi of ZWave gebaseerd stopcontact, zult u waarschijnlijk niet meer dan een paar kopen.
Je hebt misschien al een aantal goedkope op RF gebaseerde stopcontacten - het soort dat wordt geleverd met hun eigen aangepaste afstandsbediening en heeft een aantal kanaal- en ID-selectors op de achterkant. Helaas zijn er geen smart home hubs op de markt Battle of the Smart Home Hubs: wat is er en wat komt eraan? Lees verder die daarmee werken. Zou het niet geweldig zijn als je die op de een of andere manier zou kunnen koppelen aan je doe-het-zelf smart home-systeem? Welnu, je kunt - eigenlijk heel gemakkelijk - met ongeveer $ 10 aan onderdelen.
Met wat meer werk kun je ook een aantal andere op maat gemaakte RF-gebaseerde externe hardware integreren, zoals dit budget bioscoopscherm.
Wat je nodig hebt:
- ESP8266 NodeMCU v12E dev board (het exacte model maakt niet uit, v1 of v3 zou ook goed moeten zijn). De reden dat we een NodeMCU-bord gebruiken, is omdat we later de gemakkelijke wifi-verbinding willen. De link is voor een pakket van 2, wat neerkomt op $ 7 per stuk.
- Pakket van 433Mhz zender en ontvanger (ongeveer $ 3).
- RCSwitch- en MQTT-bibliotheken en onze code - allemaal beschikbaar om te downloaden van Github.
- Een MQTT-server, lokaal of extern.
- Sommige RF-gestuurde stopcontacten werken op een 433 MHz-band (dit zou op de afstandsbediening moeten staan). Ik kocht de mijne van Maplin als een pakket van 3 voor ongeveer £ 20 ($ 25,89).
Als dit de eerste keer is dat u het NodeMCU-bord programmeert, moet u de Arduino-plug-ins ervoor downloaden: volg het eerste deel van onze Inleidende gids voor Arduino Killer Maak kennis met de Arduino Killer: ESP8266Wat als ik je vertelde dat er een Arduino-compatibel dev-bord is met ingebouwd Wi-Fi voor minder dan $ 10? Nou, dat is er. Lees verder voor de NodeMCU / ESP8266-chip. Je hebt ook nodig CH430-stuurprogramma's. U kunt vinden ondertekende macOS CH430-stuurprogramma's hier, of Windows hier.
Ik heb v1.6.5 van de Arduino gebruikt omdat iets hogers meer problemen veroorzaakt dan het oplost. Downgraden als je dat nog niet hebt gedaan.
Voordat je verdergaat, ga ik uit van een basiskennis over Arduino programmeren Arduino Programming for Beginners: Traffic Light Controller Project TutorialHet bouwen van een Arduino verkeerslichtcontroller helpt je bij het ontwikkelen van basiscoderingsvaardigheden! We helpen je op weg. Lees verder , en dat je je NodeMCU setup hebt in de board manager, en in staat bent om correct een demo code te uploaden. Je zou ook de bibliotheken die in onze download zijn opgenomen aan je moeten hebben toegevoegd Arduino / bibliotheken map.
Als je een bestaande hebt PubSubClient of MQTT-bibliotheek, maak een back-up en verwijder het - degene die ik heb opgenomen in de download is de enige waar ik betrouwbaar berichten op NodeMCU kon ontvangen, en ik probeerde het veel!
RF Sniffing (optioneel)
Deze stap is niet nodig als u alleen DIP-switch- of dial-selector-stopcontacten wilt bedienen - deze worden standaard ondersteund en minimale codewijziging is nodig (dit is echter nog steeds interessant om eerst te doen, zodat u begrijpt wat er achter de schermen gebeurt) scènes).
Als u andere RF-afstandsbedieningen heeft die u wilt proberen toe te voegen, moet u eerst de verzonden RF-codes 'ruiken'. Laad hiervoor de ReceiveDemo_Advanced schets van de Menu -> Voorbeelden -> RCSwitch map en wijzig de volgende regel van 0
mySwitch.enableReceive (0); // Ontvanger bij onderbreking 0 => dat is pin # 2
tot 2.
mySwitch.enableReceive (2); // Ontvanger op GPIO 2 / D4.
Sluit de ontvangermodule als volgt aan. Kijkend naar de voorkant van het ontvangerbord (het is de langste van de twee, de zender is vierkant) - de kant met de componenten erop:
- Uiterst rechts is GND. Maak verbinding met GND op het NodeMCU-bord.
- Uiterst links is VCC. Maak verbinding met VIN op het NodeMCU-bord.
- De middelste twee pinnen zijn het signaal. Sluit een van beide aan op D4 op de NodeMCU (ze zijn met elkaar verbonden, dus het maakt niet uit welke).

Upload nu het gewijzigde ReceiveDemo_Advanceden als het klaar is, opent u de seriële monitor en drukt u op de knoppen op uw afstandsbedieningen. Kopieer de decimaal (inclusief bitlengte), pulslengte en protocol wanneer u op een knop drukt.

Nadat ik dit had gedaan, merkte ik dat mijn projectorscherm aan het gebruiken was
- SCREEN UP: Ontvangen 8694273 / 24bit; Pulslengte: 355 of 356; Protocol: 1
- SCREEN DOWN: Ontvangen 8694276 / 24bit;Pulslengte: 355 of 356; Protocol: 1
Ga door voor zoveel knoppen als je nodig hebt.
De zender testen
Vervolgens gaan we proberen codes te verzenden met de zender. Bedraad de zendermodule (de vierkante) als volgt. Wees voorzichtig: de labels op deze pinnen zijn afschuwelijk.
De VCC-pin zit eigenlijk in het midden, niet aan de linkerkant. Ik heb een module vernietigd in het proces om dit uit te zoeken. Het ding dat "ATAD" zegt, is eigenlijk "DATA", achterstevoren gespeld. Nogmaals, de gegevens gaan naar D4, VCC naar VIN en GND naar GND (verwijder de ontvangermodule, je hebt deze niet meer nodig).

Laad de Voorbeelden -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitchesen verander nogmaals de gegevenspin:
mySwitch.enableTransmit (10);
naar
mySwitch.enableTransmit (2);
Let op, er zijn verschillende voorbeelden opgenomen in de bibliotheek en welke voor u werkt, hangt af van het exacte type schakelaar dat u heeft. Type A (dip-schakelaars) en B (wijzerplaten of schuifregelaars) zijn de meest voorkomende - raadpleeg de afbeeldingen op de RCSwitch-pagina. Voor type B is het in- en uitschakelen van een stopcontact zo eenvoudig als:
mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);
waarbij 1 de kanaal-ID is (de bovenste draaiknop) en 4 de socket-ID (de onderste draaiknop). Deze stonden in Romeinse cijfers op mijn stopcontacten. Er kunnen daarom maximaal 16 individuele stopcontacten worden geadresseerd, hoewel meerdere stopcontacten hetzelfde adres kunnen gebruiken als u meerdere apparaten tegelijk wilt inschakelen.
Mijn projectorscherm was echter een beetje anders - het gebruikte een andere pulslengte. Dus om die te bedienen, werkte het volgende. Merk op dat u ook een ander protocol kunt definiëren als uw afstandsbediening dit nodig heeft, MAAR zorg ervoor dat u het protocol definieert VOOR de pulslengte. De pulslengte wordt bij het wijzigen van het protocol overschreven.
// Merk op dat mijn scherm eigenlijk TWEE knopdrukken vereist (niet lang indrukken, maar twee fysieke drukt op), dus ik vertraag een beetje en verzend hetzelfde signaal opnieuw ongeldig screenUp () { mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (decimale code, aantal bits) vertraging (2000); mySwitch.send (8694273,24); } leegte screenDown () {mySwitch.setPulseLength (358); mySwitch.send (8694276,24); vertraging (2000); mySwitch.send (8694276,24); }
Test eerst of al uw codes werken voordat u doorgaat naar de volgende stap.
Besturing via MQTT
Open de schets die je hebt gedownload van Github genaamd mqtt_rcswitch.inoen begin met het wijzigen van de netwerk-SSID en het wachtwoord voor uw huis. Wijzig vervolgens desgewenst de kanaalnaam en stel de MQTT-server in. Als je nog geen MQTT-server hebt op je OpenHAB-installatie, lees deel 2 van onze OpenHAB-beginnershandleiding OpenHAB-beginnershandleiding deel 2: ZWave, MQTT, regels en grafiekenOpenHAB, de open source software voor huisautomatisering, overtreft ver de mogelijkheden van andere huisautomatiseringssystemen op de markt - maar het is niet eenvoudig om te installeren. Het kan zelfs ronduit frustrerend zijn. Lees verder . Merk op dat mijn code is ontworpen voor stopcontacten van type B (draaischakelaar), hoewel u deze ook gemakkelijk kunt wijzigen voor DIP-schakelaars.
Het belangrijkste onderdeel van de code is de bericht ontvangen() functie, die reageert op inkomende MQTT-opdrachten. In deze functie controleren we eerst het belangrijkste zoekwoord: ik heb 'schakelaar' en 'scherm' gekozen. In het geval van "switch", ontleden we dan het kanaal en plug ID; controleer dan de payload body voor de opdracht.
void messageReceived (String topic, String payload, char * bytes, unsigned int length) {if (topic.indexOf ("switch")> = 0) {// schakelbediening, ontleed het kanaal en sluit id int channel = getValue aan (onderwerp, '/', 3). naar Int (); int plug = getValue (topic, '/', 4) .toInt (); if (payload == "on") {mySwitch.switchOn (kanaal, plug); } anders {mySwitch.switchOff (kanaal, plug); }} anders if (topic.indexOf ("screen")> = 0) {// schermcontrole if (payload == "up") {screenUp (); } else if (payload == "down") {screenDown (); }} / * voeg nog een ander toe om hier naar meer opdrachten te luisteren (of wijzig gewoon de bovenstaande als je geen scherm wilt) * / }
Standaard werken de volgende MQTT-opdrachten:
woonkamer / bediening / schakelaar / X / Y (waarbij X kanaal is en Y plug-ID is; met berichttekst aan of uit)
woonkamer / bediening / scherm (met berichttekst omhoog of omlaag)
Gebruik de opdrachtregel of een GUI MQTT-client om uw apparaten te testen voordat u ze aan OpenHAB toevoegt.
Toevoegen aan OpenHAB
Als laatste stap hoeven we alleen maar wat items voor deze schakelaars in OpenHAB te maken. Ik heb de volgende items voorlopig gedefinieerd, maar je zou moeten kunnen bedenken hoe je er meer kunt toevoegen:
/ * RF433mHz-apparaten * / Schakel CinemaScreen "Screen" (Cinema) {mqtt = "> [broker: livingroom / control / screen: command: ON: down],> [broker: livingroom / control / screen: command: OFF: up]"} Schakelaar Switch41 "Switch41" (Cinema) {mqtt = "> [makelaar: woonkamer / bediening / schakelaar / 4/1: commando: AAN: aan],> [makelaar: woonkamer / bediening / schakelaar / 4/1: opdracht: UIT: uit]"} Schakelaar Switch42 "Switch42" (Cinema) {mqtt = "> [makelaar: woonkamer / bediening / schakelaar / 4/2: commando: AAN: aan],> [makelaar: woonkamer / bediening / schakelaar / 4/2: opdracht: UIT: uit]"}
U zou nu uw RF-apparaten vanaf OpenHAB moeten kunnen bedienen! Een ding waar ik aangenaam verrast door was, was het bereik - een enkele knoop kon het grootste deel van mijn huis bedekken. U kunt natuurlijk een ander knooppunt toevoegen door naar hetzelfde kanaal te luisteren, dat eenvoudig dezelfde opdrachten herhaalt, als u meer dekking nodig heeft.
De enige beperking om in gedachten te houden is dat de stopcontacten zelf hun status niet kunnen rapporteren, dus als jij gebruik de originele afstandsbediening, controleer de status van het stopcontact mogelijk niet nauwkeurig binnen OpenHAB. Blijf bij het gebruik van alleen de OpenHAB-interface en het komt goed.
Vragen of problemen? Vraag het maar in de comments en ik zal mijn best doen om te helpen. Als je mijn code wilt verbeteren, kun je een pull-verzoek indienen.
James heeft een BSc in Artificial Intelligence en is CompTIA A + en Network + gecertificeerd. Hij is de hoofdontwikkelaar van MakeUseOf en brengt zijn vrije tijd door met het spelen van VR paintball en bordspellen. Hij bouwt al pc's sinds hij een kind was.