Hoe te controleren Goedkope RF-stopcontacten van OpenHAB

Hoe te controleren Goedkope RF-stopcontacten van OpenHAB / Slimme woning

Slimme stopcontacten zijn de eenvoudigste manier om uw huis te automatiseren, maar bij een prijs van $ 40 per stuk voor een socket op basis van Wi-Fi of ZWave is het onwaarschijnlijk dat u 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 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 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-bord is met ingebouwde wifi voor minder dan $ 10? Welnu, dat is er. Lees meer voor de NodeMCU / ESP8266-chip. Je hebt ook nodig CH430-stuurprogramma's. 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 Arduino / bibliotheken map.

Als je een bestaande hebt PubSubClient of MQTT-bibliotheek, een back-up maken en verwijderen - degene die ik heb opgenomen in de download is de enige waar ik betrouwbaar berichten kon ontvangen op NodeMCU, en ik probeerde veel!

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 “snuiven” de RF-codes die worden verzonden. Om dit te doen, laadt u de ReceiveDemo_Advanced schets van de Menu -> Voorbeelden -> RCSwitch map en wijzig de volgende regel van 0

mySwitch.enableReceive (0); // Ontvanger op interrupt 0 => dat is pin # 2

tot 2.

mySwitch.enableReceive (2); // Ontvanger op 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 gewijzigde versie ReceiveDemo_Advanced, en als het klaar is, opent u de seriële monitor en drukt u op knoppen op uw afstandsbedieningen. 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 “EEN BEETJE” is eigenlijk “GEGEVENS”, 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 nogmaals, verander 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 meerdere apparaten tegelijk zijn ingeschakeld.

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.

 // Merk op dat mijn scherm eigenlijk TWEE-knoppen vereist (niet lang drukken, maar twee fysieke keer drukken), dus ik vertraag een bit en verzend vervolgens hetzelfde signaal opnieuw. Ongeldig schermUp () mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (decimale code, aantal bits) vertraging (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 van Github heeft gedownload 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 bericht ontvangen() functie, die reageert op binnenkomende MQTT-opdrachten. In deze functie controleren we eerst het belangrijkste zoekwoord - ik heb gekozen “schakelaar” en “scherm”. In het geval van “schakelaar”, we ontleden dan het kanaal en pluggen ID in; 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 en plug id int channel = getValue ( topic, '/', 3) .toInt (); int plug = getValue (topic, '/', 4) .toInt (); if (payload == "on") mySwitch.switchOn (kanaal, plug);  else mySwitch.switchOff (channel, plug);  else if (topic.indexOf ("screen")> = 0) // schermbesturing if (payload == "up") screenUp ();  else if (payload == "down") screenDown ();  / * voeg nog een ander toe als hier om naar meer commando's te luisteren (of verander alleen die hierboven als je geen scherm wilt) * / 

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 die in gedachten moet worden gehouden, 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.

Ontdek meer over: Home Automation, Smart Plugs.