Ehoco.nl

Home Automation

DomoticzHow-toLUA scripts

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.


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.

 

11 gedachten over “Gecombineerde sensor in Domoticz splitsen

  • Geert Bruijnes

    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
    • Henk Croijmans

      Beste Geert,

      Ben bezig met het zelfde fenomeen.
      Heb jij intussen je probleem opgelost?
      Zo ja dan hoor ik het graag

      Beantwoorden
      • 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
        }

        Beantwoorden
  • 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.

    Beantwoorden
  • 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.

    Beantwoorden
  • 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?

    Beantwoorden
  • 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?

    Beantwoorden
    • 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.

      Beantwoorden
  • Dank je Joost. Heb je aanwijzingen opgevolgd en het werkt weer. Blij mee, nogmaals mijn dank!!

    Beantwoorden
  • Ronald Raasveld

    Zeer nuttig. Jammer dat DomoticZ geen keuze heeft voor combi- of enkele devices.
    Dank.

    Beantwoorden
  • 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.

    Beantwoorden

Laat een antwoord achter aan Joost Reactie annuleren

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