Handmatige afstandsbediening

Gepubliceerd door Robot One op

433MHz afstandsbediening

Maak het smart, maar ook gebruiksvriendelijk

Huisgenoten klagen er wel eens over dat weliswaar veel in huis is geautomatiseerd, maar handbediening daarbij niet of nauwelijks mogelijk is. Dat is eenvoudig op te lossen met een goedkope 433MHz afstandsbediening die je koppelt aan een aantal apparaten: het zonnescherm, de insectenlamp, de schemerlamp, scenes om meerdere lampen aan of uit te zetten, etc.

Simpel, dacht ik. Maar het bleek minder rechttoe-rechtaan dan ik had verwacht. Allereerst werd het apparaatje, zoals we wel gewend zijn van Chinese hardware, inclusief batterij maar zonder technische specificatie of gebruiksaanwijzing geleverd. Met wat experimenteren was het echter vrij eenvoudig om Domoticz hiervoor in te stellen.

Digital Remote Controller

Deze universele afstandsbediening kost nog geen 3 euro en maakt het mogelijk om de apparaten in je smarthouse met fysieke knoppen te bedienen. Handig als je smartphone leeg is, of als je jouw huisgenoten geen toegang wilt geven tot het volledige automatiseringssysteem. Werkt met een 23A 12V batterij (meegeleverd).

Bekijk op Banggood

In het tabblad Schakelaars van Domoticz kun je eenvoudig een schakelaar toevoegen door de optie ‘Leren’ aan te klikken en vervolgens de toets op je afstandsbediening in te drukken. Als je dan een ‘Time out’ melding krijgt, ligt dit er doorgaans aan dat het benodigde protocol nog niet is ingeschakeld.

Apparaten die met 433MHz protocol werken, komen bij mij binnen via een RFXCOM XL: een onmisbare uitbreiding voor als je veel verschillende apparaten wilt kunnen aansluiten. Daar komen we t.z.t. nog in een review op terug.

De protocollen die de RFXCOM herkent, kun je aan of uitschakelen vanuit Domoticz, onder het tabblad Instellingen > Hardware. In dit geval moest ik Lighting4 aanvinken en op SET MODE klikken. Daarna lukte het Leren van de schakelaar in Domoticz wel.

RFXCOM instellingen in Domoticz
Vink het gewenste protocol van RFXCOM aan en klik op SET MODE. Let op: gebruik niet de knop Upgrade Firmware die je hier ziet; de ontwikkelaar van RFXCOM geeft aan dat je apparaat hierdoor kan crashen. Upgrade liever op een laptop met de officiële tool RFXflash.

Hierna is het heel eenvoudig om met één knop op de afstandsbediening bijvoorbeeld een lamp in te schakelen en met een andere knop hem weer uit te schakelen. Omdat het aantal knoppen beperkt is, wil ik echter dat de lamp aan één knop is gekoppeld: 1x klikken is aan, nog 1x klikken is uit. Dat kan met een simpel dzvents script (de eigen scripttaal van Domoticz). De knop die ik hiervoor wil gebruiken heb ik bij het ‘leren’ van Domoticz SwitchC genoemd en het type on/off meegegeven.

-- Script voor het IN/UITSCHAKELEN van de schemerlamp dmv afstandsbediening
 
return {
 on = {
         devices = {
                     'SwitchC'
               }
 },
 execute = function(domoticz, device)
            lamp = domoticz.devices('Schemerlamp bij TV')
            if (lamp.state == 'Off') then
                lamp.switchOn()
            else 
                lamp.switchOff()
         end
    end
}

Hierbij kwam echter een bijzonderheid aan het licht. Door contactdender, of doordat de afstandsbediening zelf het signaal herhaalt zolang je een knop houdt ingedrukt, meldt Domoticz dat de knop meerdere keren wordt ingedrukt. Het gevolg is dan dat de lamp gaat knipperen.

Er is dus een zogeheten ‘debounce’ routine nodig: een scriptfunctie die ervoor zorgt dat de status van de knop nadat deze is doorgegeven pas weer na 1 seconde kan veranderen. Of 2 of 3, als je dat prettiger vindt.

-- Script voor het IN/UITSCHAKELEN van de schemerlamp dmv afstandsbediening inclusief DEBOUNCE
 
return {
    on = {
            devices = {
                        'SwitchC'
                      },
          },
    
    execute = function(domoticz, device)
            laatste = device.lastUpdate.secondsAgo                            -- stel vast wanneer de laatste update van debounceC is geweest 
            local lamp = domoticz.devices('Schemerlamp bij TV')                 -- lamp is de lamp die ik hiermee wil schakelen 
            if ((laatste == nil) or (laatste ~=nil) and (laatste > 1)) then     -- alleen als laatste update nooit of langer dan 1 seconde geleden is
                if (lamp.state == 'Off') then                                   -- als lamp uit staat dan
                    lamp.switchOn()                                             -- zet lamp aan
                else                                                            -- (anders staat de lamp aan en dan
                    lamp.switchOff()                                            -- zet lamp uit
                end
            end
    end
}

Hoe dit werkt? De eerste regel die wordt uitgevoerd (laatste = device.lastUpdate.secondsAgo) , haalt op hoeveel seconden geleden de routine voor het laatst door het device (SwitchC) is aangeroepen. Wil je dit exacter kunnen bepalen, gebruik dan millisecondsAgo in plaats van secondsAgo.

Als de routine nog nooit is aangeroepen, dan is de waarde van de variabele ‘laatste’ leeg (nil). Als deze variabele niet leeg is, bevat hij een getal (in dit geval het aantal seconden).

De volgende regel zorgt ervoor dat de rest van de code (het aan of uitzetten van de lamp) alleen wordt uitgevoerd als dat nog nooit eerder is gebeurd, of als dat wel eerder is gebeurd, maar op zijn minst 1 seconde geleden. Hier kun je het aantal seconden wachttijd ook aanpassen.

RFXCOM XL

De RFXCOM bevat niet alleen een krachtige 433MHz transceiver (zender en ontvanger) met een USB-interface, maar vertaalt ook vele tientallen protocollen van uiteenlopende sensoren, besturingen, weerstations, etc. Bijna maandelijks komen daar nieuwe apparaten bij, via firmware updates. De RFXCOM werkt naadloos samen met de meest belangrijkste home automation programma’s, waaronder Domoticz.

Bekijk op Amazon Bekijk op Bol.com

0 reacties

Geef een reactie

Avatar plaatshouder

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *