Gecombineerde sensor in Domoticz splitsen

Voorbeeld van een gecombineerde sensor

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

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.

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.

 

Eén gedachte over “Gecombineerde sensor in Domoticz splitsen

  • 24 augustus 2018 om 14:57
    Permalink

    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?

    Beantwoorden

Geef een reactie

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