Slimme stopcontacten zijn de eenvoudigste manier om uw huis te automatiseren, maar bij een prijs van ongeveer $ 40 voor een socket op basis van Wi-Fi of ZWave is het onwaarschijnlijk dat u er meer dan een paar koopt.
Je hebt misschien al een paar goedkope RF-gebaseerde sockets - de soort die met hun eigen aangepaste afstandsbediening wordt meegeleverd, en hebben een aantal kanaal- en ID-selectors op de achterkant. Helaas zijn er geen slimme thuishubs op de markt Battle of the Smart Home Hubs: wat is er te doen en wat komt eraan? Battle of the Smart Home Hubs: wat is er daar en wat komt eraan? Lees meer die daar mee werken. Zou het niet geweldig zijn als je die op de een of andere manier zou kunnen koppelen aan je DIY Smart Home-systeem? Nou ja, je kunt - vrij eenvoudig in feite - met ongeveer $ 10 in delen.
Met wat meer werk kunt u ook andere op maat gemaakte RF-gebaseerde externe hardware integreren, zoals dit budgetbioscoopscherm.
Wat je nodig hebt:
- ESP8266 NodeMCU v12E dev-bord (exact model doet er niet toe, v1 of v3 zou ook goed moeten zijn). De reden dat we een NodeMCU-bord gebruiken, is omdat we later een eenvoudige Wi-Fi-verbinding willen. De link is voor een pakket van 2, dat werkt op $ 7 per stuk.
- Pakket van 433 Mhz zender en ontvanger (ongeveer $ 3).
- RCSwitch- en MQTT-bibliotheken en onze code - allemaal beschikbaar om te downloaden van Github.
- Een MQTT-server, lokaal of op afstand.
- Sommige RF-gestuurde aansluitingen werken op een 433-MHz band (dit zou op de afstandsbediening moeten staan). Ik heb de mijne van Maplin gekocht 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 hiervoor downloaden: volg het eerste deel van onze Arduino Killer-kennismakingsgids Meet the Arduino Killer: ESP8266 Maak kennis met de Arduino-moordenaar: ESP8266 Wat als ik heb je verteld dat er een Arduino-compatibel dev-board is met ingebouwde wifi voor minder dan $ 10? Welnu, dat is er. Lees meer voor de NodeMCU / ESP8266-chip. Je hebt ook CH430-stuurprogramma's nodig . Je kunt hier getekende macOS CH430-stuurprogramma's vinden, of Windows hier.
Ik heb v1.6.5 van de Arduino gebruikt omdat iets hogers meer problemen introduceert dan het oplost. Downgrade als je dat nog niet hebt gedaan.
Voordat je verdergaat, ga ik uit van een basiskennisniveau over Arduino programmeren Arduino Programmeren voor beginners: De verkeerslichtregelaar Arduino Programmeren voor beginners: De verkeerslichtregelaar Afgelopen week hebben we geleerd over de basisstructuur van een Arduino-programma en onderzochten het voorbeeld van 'knipperen' van naderbij. Hopelijk heb je van de gelegenheid gebruik gemaakt om met code te experimenteren en de timing aan te passen. Deze keer, ... Lees meer, en dat u uw NodeMCU setup in de board manager hebt, en in staat bent om sommige democodes correct te uploaden. Je had ook de bibliotheken in onze download moeten toevoegen aan je map Arduino / bibliotheken .
Als je een bestaande PubSubClient- of MQTT-bibliotheek hebt, maak er dan een back-up van en maak deze los - degene die ik in de download heb opgenomen, was de enige waar ik betrouwbaar berichten kon ontvangen op NodeMCU, en ik heb veel geprobeerd!
RF snuiven (optioneel)
Deze stap is niet nodig als u alleen de DIP-switch of de selector-contactpunten wilt bedienen - deze worden standaard ondersteund en er is een minimale codewijziging nodig (dit is echter nog steeds interessant om eerst te doen, dus u ' Ik begrijp wat er achter de schermen gebeurt).
Als u andere RF-afstandsbedieningen heeft die u wilt toevoegen, moet u eerst de RF-codes die worden verzonden 'ruiken'. Hiervoor laadt u de schets ReceiveDemo_Advanced uit de map Menu -> Voorbeelden -> RCSwitch en wijzigt u de volgende regel in 0
mySwitch.enableReceive(0); // Receiver on interrupt 0 =>that is pin #2
tot 2.
mySwitch.enableReceive(2); // Receiver on GPIO 2 / D4.
Bedraad de ontvangermodule als volgt. Kijkend naar de voorkant van de ontvangerkaart (het is de langere van de twee, de zender is vierkant) - de kant met de componenten aan:
- Helemaal rechts is GND. Maak verbinding met GND op de NodeMCU-kaart.
- Helemaal links is VCC. Maak verbinding met VIN op de NodeMCU-kaart.
- De middelste twee pinnen zijn het signaal. Verbind één met D4 op de NodeMCU (ze zijn met elkaar verbonden, dus het maakt niet uit welke).
Upload nu de gemodificeerde ReceiveDemo_Advanced, en als het klaar is, open je de seriële monitor en druk je op knoppen op je afstandsbediening. Kopieer het decimaalteken (inclusief bitlengte), pulsduur en protocol als u op een knop drukt.
Nadat ik dit gedaan had, merkte ik dat mijn projectiescherm gebruikte
- SCREEN UP: Received 8694273 / 24bit; Pulslengte: 355 of 356; Protocol: 1
- SCHERM DOWN: Ontvangen 8694276 / 24bit; Pulsduur: 355 of 356; Protocol: 1
Ga door voor zoveel knoppen als je nodig hebt.
Testen van de zender
Vervolgens gaan we proberen codes te verzenden met behulp van de zender. Bedraad de transmittermodule (de vierkante) als volgt. Wees voorzichtig: de labels op deze pinnen zijn afschuwelijk .
De VCC-pin bevindt zich eigenlijk in het midden, niet aan de linkerkant. Ik heb een module vernietigd tijdens het uitzoeken van dit. Dat ding dat zegt "ATAD" is eigenlijk "DATA", achterstevoren gespeld. Nogmaals, de gegevens gaan naar D4, VCC naar VIN en GND naar GND (verwijder de ontvangermodule, u hebt deze niet langer nodig).
Laad de voorbeelden -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches en verander opnieuw de data-pin:
mySwitch.enableTransmit(10);
naar
mySwitch.enableTransmit(2);
Let op, er zijn een aantal voorbeelden opgenomen in de bibliotheek, en welke voor u geschikt is, hangt af van het exacte type schakelaar dat u heeft. Type A (dip-switches) en B (knoppen of schuifregelaars) zijn de meest voorkomende - zie de afbeeldingen op de RCSwitch-pagina. Voor type B is het in- en uitschakelen van een socket zo simpel 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 waren in Romeinse cijfers op mijn voetjes geschreven. Er kunnen dus maximaal 16 individuele sockets worden geadresseerd, hoewel meerdere sockets hetzelfde adres kunnen gebruiken als u meerdere apparaten tegelijk wilt inschakelen.
Mijn projectiescherm 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 VÓÓR de pulslengte definieert. De pulslengte wordt overschreven bij het wijzigen van het protocol.
// Note that my screen actually requires TWO button presses (not a long press, but two physical presses), so I'm delaying a bit then sending the same signal again void screenUp(){ mySwitch.setPulseLength(358); mySwitch.send(8694273, 24); // (decimal code, number of bits) delay(2000); mySwitch.send(8694273, 24); } void screenDown(){ mySwitch.setPulseLength(358); mySwitch.send(8694276, 24); delay(2000); mySwitch.send(8694276, 24); }
Test dat al uw codes werken voordat u doorgaat met de volgende stap.
Regelen via MQTT
Open de schets die u hebt gedownload van Github met de naam mqtt_rcswitch.ino en begin met het wijzigen van de netwerk-SSID en het wachtwoord voor uw huis. Wijzig vervolgens de kanaalnaam als u dat wilt en stel de MQTT-server in. Als je nog geen MQTT-server hebt die op je OpenHAB-installatie draait, lees dan deel 2 van onze OpenHAB-beginnersgids OpenHAB-beginnershandleiding Deel 2: ZWave, MQTT, regels en grafieken OpenHAB-beginnershandleiding Deel 2: ZWave, MQTT, regels en grafieken OpenHAB, de open source domotica-software, overtreft ruimschoots de mogelijkheden van andere domoticasystemen op de markt, maar het is niet eenvoudig om deze in te stellen. In feite kan het ronduit frustrerend zijn. Lees verder . Merk op dat mijn code is ontworpen voor sockets van type B (draaischakelaar), maar dat u deze ook gemakkelijk kunt wijzigen voor DIP-schakelaars.
Het belangrijkste onderdeel van de code is de functie messageReceived (), die reageert op binnenkomende MQTT-opdrachten. In deze functie controleren we eerst het belangrijkste zoekwoord: ik heb 'schakelen' en 'scherm' gekozen. In het geval van "switch" analyseren we het kanaal en plug-ID; controleer vervolgens de payload-instantie voor het commando.
void messageReceived(String topic, String payload, char * bytes, unsigned int length) { if (topic.indexOf("switch")>=0){ //switch control, parse out the channel and plug id int channel = getValue(topic, '/', 3).toInt(); int plug = getValue(topic, '/', 4).toInt(); if(payload == "on"){ mySwitch.switchOn(channel, plug); } else{ mySwitch.switchOff(channel, plug); } } else if (topic.indexOf("screen")>=0){ //screen control if(payload == "up"){ screenUp(); } else if(payload == "down"){ screenDown(); } } /* add another else if here to listen for more commands (or just modify the one above if you dont want screen) */ }
Standaard werken de volgende MQTT-opdrachten:
woonkamer / controle / schakelaar / X / Y (waarbij X kanaal is, en Y is plug ID, met bericht body aan of uit)
woonkamer / besturingselement / scherm (met berichttekst omhoog of omlaag)
Gebruik de opdrachtregel of een GUI MQTT-client om uw apparaten te testen voordat u OpenHAB toevoegt.
Toevoegen aan OpenHAB
Als laatste stap hoeven we alleen maar items voor deze switches in OpenHAB te maken. Ik heb de volgende items voor nu gedefinieerd, maar je moet kunnen achterhalen hoe je meer kunt toevoegen:
/ * RF433mHz-apparaten * / Switch CinemaScreen "Screen" (Cinema) {mqtt = "> [makelaar: woonkamer / besturingselement / scherm: opdracht: AAN: omlaag], > [makelaar: woonkamer / besturingselement / scherm: opdracht: UIT: omhoog ] "} Schakelaar Switch41" Schakelaar41 "(Cinema) {mqtt ="> [makelaar: woonkamer / bediening / schakelaar / 4/1: opdracht: AAN: aan], > [makelaar: woonkamer / bediening / schakelaar / 4/1: opdracht: UIT: uit] "} Schakelaar Schakelen42" Schakelaar42 "(Cinema) {mqtt ="> [makelaar: woonkamer / bediening / schakelaar / 4/2: opdracht: AAN: aan], > [makelaar: woonkamer / bediening / schakelaar / 4/2: commando: oFF: off] "}
U moet nu uw RF-apparaten vanuit OpenHAB kunnen bedienen! Eén ding waar ik aangenaam van verrast was, was het bereik - een enkele knoop kon het grootste deel van mijn huis bedekken. Je kunt natuurlijk een ander knooppunt toevoegen, luisterend naar hetzelfde kanaal, dat simpelweg dezelfde commando's herhaalt, als je verdere dekking nodig hebt.
De enige beperking om in gedachten te houden is dat de sockets zelf hun status niet kunnen melden, dus als u de originele afstandsbediening gebruikt, controleert u mogelijk de status van de socket niet nauwkeurig binnen OpenHAB. Blijf bij het gebruik van alleen de OpenHAB-interface en het komt goed.
Vragen of problemen? Vraag het in de comments en ik zal mijn best doen om te helpen . Als u mijn code wilt verbeteren, kunt u een pull-aanvraag indienen.