Steenderen.NET

Domoticz sensor-controle – Versie 1.0

Status: Verouderd, versie 1.1 is beschikbaar.

Beschrijving

Gebruikersgebeurtenis in Lua-script om te controleren of sensoren ten minste 1 keer per x-aantal minuten data versturen (standaard 120 minuten, kan aangepast worden). Verstuurt een sensor al langer geen data, dan wordt er een notificatie verstuurd. Als een sensor al meer dan 24 uur geen data verstuurt, dan wordt er ’s morgens om 7 uur een reminder verstuurd.

Instructies

  1. Creëer in Domoticz onder Instellingen > Meer opties > Gebruikersvariabelen een nieuwe variabele met de naam No update from sensor van het type String. De waarde van de variabele mag leeg blijven.
  2. Creëer in Domoticz onder Instellingen > Meer opties > Gebeurtenissen een nieuwe gebeurtenis via + (plus-knop) > Lua > Time.
  3. Geef de nieuwe gebeurtenis een herkenbare naam (bij mij heet deze bijvoorbeeld Controle data van sensors.
  4. Verwijder alle voorbeeld code en plak onderstaande code daarvoor in de plaats.
  5. Pas in de eerste alinea van het script aan door de namen van jouw sensors hierin op te nemen. Er staan nu drie sensornamen opgenomen (Sensor 1, Sensor 2 en Sensor 3), dit kan uiteraard uitgebreid worden. Let daarbij op tussen iedere sensornaam (die tussen aanhalingstekens moet staan) er ook een komma staat.
  6. Sla de gebeurtenis/het script op en kijk of deze geen fouten bevat (dan staat er een rood kruisje voor één van de regels code) en goed werkt (kan bijvoorbeeld door uit één van je sensoren meer dan een uur een batterij te trekken).

Code

-- Enter all devices that you want to monitor in the device array.
local devices = {
    "Sensor 1",
    "Sensor 2",
    "Sensor 3"
}

-- Enter time in minutes after how long not sending data a notification should be sending
no_data_timer = 120

-- Function to calculate difference between given timestamp (s) and current time
function datetimedifferencenow(s)
   year = string.sub(s, 1, 4)
   month = string.sub(s, 6, 7)
   day = string.sub(s, 9, 10)
   hour = string.sub(s, 12, 13)
   minutes = string.sub(s, 15, 16)
   seconds = string.sub(s, 18, 19)
   t1 = os.time()
   t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
   difference = os.difftime (t1, t2)
   return difference
end

time = os.date("*t")

commandArray = {}

-- Once a failing device is detected (meaning no update received in the last hour), this device is stored in the user variable "No update from sensor" and a notification is send.
-- To prevent a notification storm, no update is send out as long as the user variable contains a value.
if (uservariables["No update from sensor"] ~= tostring("")) then
    if (datetimedifferencenow(otherdevices_lastupdate[uservariables["No update from sensor"]]) < no_data_timer*60) then
        commandArray["Variable:No update from sensor"] = tostring("")
        commandArray["SendNotification"] = "Sensor \"" .. uservariables["No update from sensor"] .. "\" verstuurt weer data."
        print ("Received data from sensor \"" .. uservariables["No update from sensor"] .. "\" again.")
    end
end

-- If there is no device stored in the user variable "No update from sensor", all devices are checked if they send data in the last hour.
if (uservariables["No update from sensor"] == tostring("")) then
    for i,device in pairs(devices) do
        -- If check device did not give an update in the last hour (= 3600 seconds) then send notification and write device to user variable "No update from sensor".
        if (datetimedifferencenow(otherdevices_lastupdate[device]) >= no_data_timer*60) then
            commandArray["Variable:No update from sensor"] = tostring(device)
            commandArray["SendNotification"] = "Sensor \"" .. device .. "\" heeft meer dan " .. no_data_timer .. " minuten geen data verstuurd."
            print ("No data received from sensor \"" .. device .. "\" for more than " .. no_data_timer .. " minutes.")
            break -- stop the for loop.
        end
    end
end

-- To make sure a failing sensor is not forgotten, every morning at 7:00 a notification is send if the sensor is failing for > 24 hours.
if (uservariables["No update from sensor"] ~= tostring("") and time.hour==7 and time.min==0) then
    if (datetimedifferencenow(otherdevices_lastupdate[uservariables["No update from sensor"]]) >= 86400) then
        commandArray["SendNotification"] = "Ter herinnering, sensor \"" .. uservariables["No update from sensor"] .. "\" verstuurt nog steeds geen data."
        print ("Reminder sent for sensor \"" .. uservariables["No update from sensor"] .. "\" that is not sending data for more than 24 hours.")
    end
end

return commandArray

Verder Bericht

Vorige Bericht

11 Reacties

  1. Jacob Heres 6 mei 2020

    Mooie oplossing en inmiddels zelf (met eigen sensors) in gebruik genomen. Dank.

    Als gekend “mierenneuker”: pas in het script nog even de strings ” verstuurd weer data” en “verstuurd nog steeds geen data.” aan en vervang “verstuurd” door “verstuurt”. 😉

    Groet, Jacob.

  2. Eelco 18 november 2020

    Hoi, dank voor het delen van het script. Ik heb het in 1x werkend, helemaal top. Nog een vraagje, kun je ook nog op een makkelijke manier voor een bepaald notificatie type kiezen. Nu verstuurd hij het via alle notificatie mogelijkheden.

    • jos 18 november 2020 — Berichtauteur

      Goeie vraag, en geen idee eerlijk gezegd 🙂 Ik zal er eens induiken…

      • Eelco 18 november 2020

        Thanks! Ik hou je blog in de gaten 😉

        • jos 19 november 2020 — Berichtauteur

          De SendNotification in het script roept het standaard notifictie-mechanisme van Domoticz aan. De enige andere mogelijkheid qua scripting is om een mail te versturen. Wat had je in gedachte?

          • Eelco 21 november 2020

            Ik gebruikt de app Pilot om mijn Domoticz ook door vrouw en kinderen eenvoudig te laten bedienen, enkele berichten mogen hierin getoond worden. Daarnaast gebruik ik Pushover om meer technische/hobby berichten via te versturen, zodat vrouw en kinderen niet allerlei berichten binnen krijgen. Dit script verstuurd dus via allebei. Dus ik hoopte dat het mogelijk was om een communicatiekanaal te kiezen.

          • Eelco 21 november 2020

            Oh en hij stuurt ook een mail :-).

          • Mark 9 december 2020

            Is alleen email ook mogelijk? Het hele gezin word dan niet gestoord met problemen 🙂

          • jos 9 december 2020 — Berichtauteur

            Ja kan, script heb ik werkend, moet ik alleen nog even netjes publiceren. Probeer ik komende dagen ergens te doen.

          • jos 11 december 2020 — Berichtauteur

            Nieuwe versie (1.1 om precies te zijn) van het script is beschikbaar. Hierin heb ik toegevoegd dat je ook alleen per e-mail genotificeerd kan worden.

Laat een reactie achter

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

© 2022 Steenderen.NET

Thema door Anders Norén