Gecombineerde sensor in Domoticz splitsen
Een gecombineerde sensor in Domoticz geeft twee of meerdere waarden. Een voorbeeld hiervan is de temperatuursensor die ook vaak het percentage van de luchtvochtigheid aangeeft. Soms is het gemakkelijker om enkelvoudige sensoren te hebben. In dit artikel leggen we uit hoe het mogelijk is een gecombineerde sensor kunt opsplitsen in twee aparte (virtuele) sensoren. Als voorbeeld nemen we een temperatuur + luchtvochtigheidssensor.
Benodigdheden
- Raspberry Pi
- Raspbian software
- Domoticz software
- RFXCom interface
- Gecombineerde sensor
Dummy hardware en sensoren
Allereerst moeten we een dummy hardware aanmaken. Ga naar Setup > Hardware. Bedenk een logische naam en kies bij Type voor Dummy (Does nothing, use for virtual switches only). Data Timeout kun je op Disabled laten staan. Klik op Add om de dummy hardware toe te voegen.
Klik nu op Create Virtual Sensor (donkerblauw). Bedenk een handige naam voor de sensor en kies bij Sensor Type voor “Temperature”. Maak nog een virtuele sensor aan maar dan met het Sensor Type “Humidity”. Ga nu naar Setup > Devices, hier zal je de zojuist aangemaakte sensoren zien staan. Beide virtuele sensoren hebben een idx-nummer gekregen. Noteer de idx-nummer van beide sensoren en klik op het groene pijltje om de sensoren toe te voegen (in onderstaande afbeelding zijn de pijltjes blauw, aangezien ik de sensoren al toegevoegd heb). Je vindt ze dan terug op het tabblad “Temperature”.
LUA-script
Hieronder vind je het benodigde LUA-script.
Op regel 3 wijzig je “Badkamer” naar de naam van jouw gecombineerde sensor (2).
Op regel 4 en 5 zet je de idx-nummers van jouw virtuele sensoren neer (1).
Sla dit script op met de naam script_time_scrapesensor.lua
in de folder /home/pi/domoticz/scripts/lua/
. Het script zal nu automatisch iedere minuut draaien en de twee virtuele sensoren updaten.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
commandArray = {} idxc = 'Badkamer' -- naam van de gecombineerde sensor idxt = '191' -- idx van de virtuele temperatuursensor idxh = '192' -- idx van de virtuele humidity sensor --Data verzamelen uit de gecombineerde sensor: tp, hd = otherdevices_svalues[idxc]:match("([^;]+);([^;]+)") tp = tonumber(tp); hd = tonumber(hd); dp = otherdevices_dewpoint[idxc]; --Optioneel print("Temperatuur van de " .. idxc .. " is: " .. tp .. "º"); print("Humidity van de " .. idxc .. " is: " .. hd .. "%"); print("Dauwpunt van de " .. idxc .. " is " .. dp .."º"); --hum_stat 0=Normal (niet gebruikt), 1=Comfortable, 2=Dry of 3=Wet zijn --er wordt gekeken naar het dauwpunt, aangezien de luchtvochtigheid in combinatie met de temperatuur bepalend is voor hoe de luchtvochtigheid ervaren wordt if dp > 20 then hum_stat = 3 -- wet elseif dp > 10 then hum_stat = 1 -- confortable else hum_stat = 2 -- dry end commandArray[1]={['UpdateDevice'] = idxt .. '|0|' .. tp } commandArray[2]={['UpdateDevice'] = idxh .. '|' .. hd .. '|' .. hum_stat } return commandArray |
Het resultaat: één sensor met de temperatuur en één sensor met de luchtvochtigheid:
Uiteraard kun je dit script ook als basis gebruiken voor andere gecombineerde sensoren.
Ik heb dit script wat aangepast om de gecombineerde sensor van mijn Youless energiemonitor uit te lezen met Domoticz. De Youless heeft de volgende data: 0/25983387;945. Het eerste getal is de totaalteller in Wh en het tweede getal is het actuele gebruik in Watt.
Mijn script:
——————————————————————————–
commandArray = {}
idxc = ‘Zonnepanelen’ — name combined sensor
idxte=’67’ — idx of virtuel sensor total energy
idxap=’68’ — idx of virtuel sensor actueel power
— Sensor calculates new values every 10 secs
–Gather data from combined sensor:
te, ap = otherdevices_svalues[idxc]:match(“([^;]+);([^;]+)”)
te = tonumber(te); te = te/1000;
ap = tonumber(ap);
— Write data to vertuel sensors
commandArray[‘UpdateDevice’] = ”..idxte..’|0|’..te..”
commandArray[‘UpdateDevice’] = ”..idxap..’|0|’..ap..”
— debug
— print(te);
— print(ap)
return commandArray
—————————————————————————————————
Nu gebeurt het dat de eerste virtuele sensor niet weggeschreven wordt, in het script hierboven dus die van ..te..
Wissel ik beide regels, dan wordt nog steeds de bovenste niet weggeschreven, dan dus ..ap..
Beide variabelen krijgen wel een waarde.
iemand een idee hoe dit komt?
Beste Geert,
Ben bezig met het zelfde fenomeen.
Heb jij intussen je probleem opgelost?
Zo ja dan hoor ik het graag
Henk,
Ik ben zelf aan het programmeren met dzVents.
Ik heb een script dat al mijn sensors vult. Ik heb het commentaar wat aangevuld. Zie hierna.
Groet,
Geert
–[[
Dit script vult de sensoren voor de kWh tellers, de gasmeter en berekent het actuele elektriciteitsgebruik.
Gebruikte devices:
Idx Name [unit] (Hardware, Type, SubType)
———————————————————————–
1 Zonnepanelen (YouLess, Youless meter, Youless counter)
2 Slimme meter, Energy (Slimme meter, P1 Smart Meter. Enery)
4 Slimme meter, Gas (Slimme meter, P1 Smert Meter, Gas)
67 Zonnepanelen [kWh] (Dummy, General, Custom Sensor)
69 E -> laag [kWh] (Dummy, General, Custom Sensor)
70 E -> hoog [kWh] (Dummy, General, Custom Sensor)
71 E <- laag [kWh] (Dummy, General, Custom Sensor)
72 E <- hoog [kWh] (Dummy, General, Custom Sensor)
167 Gasmeter [m3] (Dummy, General, Custom Sensor)
212 E netto gebruik [W] (Dummy, Usage, Electric)
–]]
return {
on = {
devices = {1},
},
execute = function(domoticz, device)
— update 4 totaaltellers van de kWh-meter
domoticz.devices(69).updateCustomSensor(math.floor(domoticz.devices(2).usage1/1000+0.5))
domoticz.devices(70).updateCustomSensor(math.floor(domoticz.devices(2).usage2/1000+0.5))
domoticz.devices(71).updateCustomSensor(math.floor(domoticz.devices(2).return1/1000+0.5))
domoticz.devices(72).updateCustomSensor(math.floor(domoticz.devices(2).return2/1000+0.5))
— bereken het actuele gebruik (afname + productie zonnepanelen) en update
domoticz.devices(212).updateEnergy(domoticz.devices(2).usage – domoticz.devices(2).usageDelivered + domoticz.devices(1).powerYield)
— update de totaalteller van gasmeter
domoticz.devices(167).updateCustomSensor(math.floor(domoticz.devices(4).counter))
— update de totaalteller van de zonnepanelen
domoticz.devices(67).updateCustomSensor(math.floor(domoticz.devices(1).counterDeliveredTotal/1000+0.5))
end
}
Beste Ehoco,
Supergave scripts. Ik heb de meeste ook toegepast om te experimenteren en te leren.
Ik ben nu alleen op zoek naar een script om van 2 losse sensoren 1 gecombineerde sensor te maken zodat ik die waarden in 1 grafiek zie staan.
Dit is me echter nog niet gelukt. Hebben jullie daar ook een hint voor of een voorbeeld?
Alvast bedankt.
Werkt mooi
Als je voor de naam van de temp/luchtvochtigheid een $ zet dan wordt hij niet zichtbaar bij temperatuur
maar blijft verborgen, maar wel actief.
Werkt prima. Ik heb het script gebruikt om mijn buiten sensor T/H te splitsen met het idee om de afwijking in H te corrigeren. Bij de gesplitst T kun je wel een correctie invoeren, maar bij H echter niet. Iemand een idee hoe dit op te lossen? Kun je mogelijk in het script zelf een correctie invoeren?
Werkte prima maar na upgrade naar Buster / Domoticz script opnieuw moeten installeren. Krijg nu navolgende fout melding;
2020-04-13 11:46:00.274 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_scrapesensor.lua: /home/pi/domoticz/scripts/lua/script_time_scrapesensor.lua:14: ‘)’ expected near ”
Iemand enig idee?
Waarschijnlijk is er iets fout gegaan met het kopiëren van quotejes. Je kunt die print-regels ook helemaal weghalen, dan zal ze foutmelding ook weg zijn.
Dank je Joost. Heb je aanwijzingen opgevolgd en het werkt weer. Blij mee, nogmaals mijn dank!!
Zeer nuttig. Jammer dat DomoticZ geen keuze heeft voor combi- of enkele devices.
Dank.
Wat een perfecte heldere uitleg en ook nog in het Nederlands. 🙂
Weet iemand hoe ik het LUA script kan aanpassen zodat een uitgesplitst device weer gecombineerde waardes als 1 sensor weergeeft in Domoticz ?
Mijn Aqara (Xiaomi) Temperature and Humidity Sensor meet de temperatuur, vochtigheid en luchtdruk. Maar presenteert zich als 3 verschillende sensors. Hierdoor wordt het druk met tegels op het dashbord en per onderdeel zie je maar 1 grafiek in het log terug.
Wie kan mij helpen met het aanpassen van dit LUA script?
Alvast dank voor jullie reacties.