Handmatige 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
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.
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
0 reacties