Got it almost working, one strange thing, see output:
us: dzVents: Info: Notificatie-----------------------------------------
2018-12-12 10:55:27.646 Status: dzVents: Info: 00 Notificatie.norm(in.min)............= 5
2018-12-12 10:55:27.647 Status: dzVents: Info: 00 Notificatie.huidige tijd..............= 10:55:27
2018-12-12 10:55:27.647 Status: dzVents: Info: 00 Notificatie.eind tijd.................= 10:55:57
2018-12-12 10:55:27.647 Status: dzVents: Info: 00 Notificatie.resterende tijd.........= 01:00:30
2018-12-12 10:55:27.647 Status: dzVents: Info: 00 Notificatie.verzonden..............= false
2018-12-12 10:55:27.647 Status: dzVents: Info: 00 Notificatie.teller.....................= 77
The difference between curent time and timer was at this moment 30 seconds
At line 4 you see: 01:00:30, an hour and 30 seconds!
It works great, it does give a notification at 10:55:57, so it must be the presentation of the variable
I have all my LUA scripts rewritten, i am finished! Thanks @Waaren, no more LUA for me...
ANd they work with my raspberry pi google home assistent!
Code: Select all
-- test met stroomlint
-- boven norm dan werkt t lint
-- onder norm en geijk aan switchoutminutes dan is het lint mogelijk kapot of is toch de thermostaat aan. dan is norm niet juist gekozen
-- evt kijken naar tijdstip van teller =1 en dan waarde in uren
-- ipv huidwaarde en prevwaarde de laatste 5 waarde nemen om pieken te voorkomen, historie op 5 zetten en die nemen
-- https://github.com/dannybloe/dzVents
local USAGE_SENSORS = {
['buro_kwh'] = 'buro_kwh', -- Adjust to your needs. Between every line you need to add a ",".
--['Verbruikwarmtelint'] = 'Verbruikwarmtelint', -- Adjust to your needs. Between every line you need to add a ",".
}
local USAGE_SWITCHES = {
['buro_kwh'] = 'buro', -- Name of device that switch kw_1 On/ Off
--['Verbruikwarmtelint'] = 'stroomlint', -- Name of device that switch kw_1 On/ Off
}
local USAGE_Norm = {
['buro_kwh'] = 110, -- There is powerconsumption
--['Verbruikwarmtelint'] = 1, -- There is powerconsumption
}
local USAGE_DurTimer = {
['buro_kwh'] = 300, --in seconden, tijd dat gemiddeld gebruik onder de norm zit, na deze periode evt n notificatie, 300 is 5 minuten
--['Verbruikwarmtelint'] = 200,
}
local USAGE_Notify = {
['buro_kwh'] = 'Yes',
-- ['Verbruikwarmtelint'] = 'Yes',
}
local USAGE_Pushoverreceivers = {
['buro_kwh'] = 'galaxya52017',
--['Verbruikwarmtelint'] = 'galaxya52017',
}
local USAGE_Pushoversound = {
['buro_kwh'] = 'siren',
--['Verbruikwarmtelint'] = 'siren',
}
return {
on = {devices = USAGE_SENSORS,},
logging = { level = domoticz.LOG_DEBUG ,marker = actOnIdleDevices },
data = {
prevhistwaarde = { history = true, maxHours = 1 }, --
sendnotification = {initial = {}},
pvktimer = {initial = {}},
sensors = { initial = {} },
},
execute = function(dz, device)
if dz.data.prevhistwaarde.getOldest() == nil then -- Check if history is already filled (initial does not work with history persistent data
dz.data.prevhistwaarde.add(0) -- eerste waarde op 0 gezet
end
local name = device.name
local name2 = USAGE_SWITCHES[name]
local notify = USAGE_Notify[USAGE_SENSORS[name]]
local receivers = USAGE_Pushoverreceivers[USAGE_SENSORS[name]]
local sound = USAGE_Pushoversound[USAGE_SENSORS[name]]
local norm = USAGE_Norm[USAGE_SENSORS[name]]
local DurTimer = USAGE_DurTimer[USAGE_SENSORS[name]]
local huidwaarde = dz.utils.round(device.usage,1)
local prevwaarde = dz.utils.round(dz.data.prevhistwaarde.getLatest().data,1) --local prevwaarde5 = dz.utils.round(dz.data.prevhistwaarde.get(5).data,1)
local gemwaarden = dz.utils.round(dz.data.prevhistwaarde.avgSince('00:05:00'),1)
local avgwaarde = dz.utils.round(dz.data.prevhistwaarde.avg(),1)
local minwaarde = dz.utils.round(dz.data.prevhistwaarde.min(),1)
local maxwaarde = dz.utils.round(dz.data.prevhistwaarde.max(),1)
local now = os.time(os.date('*t'))
dz.data.prevhistwaarde.add(huidwaarde)
if dz.data.sensors[name] == nil then
dz.data.sensors[name] = 0 -- eerste waarde teller op 0 gezet -- geen notify gedaan
end
if dz.data.sendnotification[name] == nil then
dz.data.sendnotification[name] = false -- eerste waarde teller op false gezet -- geen notify gedaan
end
if dz.data.pvktimer[name] == nil then
dz.data.pvktimer[name] = '0' --eerste waarde op 0 gezet
end
for i = dz.data.prevhistwaarde.size,1,-1 do
item = dz.data.prevhistwaarde.get(i)
dz.log("00 History data van " .. item.time.rawDate .. " " .. item.time.rawTime .. " = " .. item.data .. " norm")
end
dz.log("Deviceinfo-----------------------------------------")
dz.log("00 Kwh-device............................= " .. name)
dz.log("00 Switch-device.........................= " .. name2)
dz.log("Verbruikinfo---------------------------------------")
dz.log("00 Verbruik.norm.........................= " .. norm)
dz.log("00 Verbruik.gemid. 5min..................= " .. gemwaarden)
dz.log("00 Verbruik.huidige waarde...............= " .. huidwaarde)
dz.log("00 Verbruik.vorige waarde................= " .. prevwaarde)
dz.log("00 Verbruik.gemid. hist..................= " .. avgwaarde)
dz.log("00 Verbruik.minimumwaarde................= " .. minwaarde)
dz.log("00 Verbruik.maximumwaarde................= " .. maxwaarde)
dz.log("Notificatie-----------------------------------------")
dz.log("00 Notificatie.norm(in.min)..............= " .. DurTimer/60)
dz.log("00 Notificatie.huidige tijd..............= " .. os.date("%X", now))
if tonumber(dz.data.pvktimer[name]) == 0 then
dz.log("00 Notificatie.eind tijd.................= " .. 'n.v.t.')
else
dz.log("00 Notificatie.eind tijd.................= " .. os.date("%X",dz.data.pvktimer[name]))
end
if now <= tonumber(dz.data.pvktimer[name]) then
dz.log("00 Notificatie.resterende tijd...........= " .. os.date("%X",dz.data.pvktimer[name] - now))
else
dz.log("00 Notificatie.resterende tijd...........= " .. 'n.v.t.')
end
dz.log("00 Notificatie.verzonden.................= " .. tostring(dz.data.sendnotification[name]))
dz.log("00 Notificatie.teller....................= " .. tostring(dz.data.sensors[name]))
dz.log("00 Notificatie.aan.......................= " .. notify)
dz.log("00 Notificatie.receivers.................= " .. receivers)
dz.log("00 Notificatie.sound.....................= " .. sound)
dz.log("---------------------------------------------------")
--dz.data.prevhistwaarde.add(huidwaarde)
if dz.devices(name2).state == 'On' then
if gemwaarden <= norm then
dz.log("01 Sensor info = Gemiddeld verbruik van device: " .. name .. " met huidig gemiddeld verbruik: (".. gemwaarden ..") is onder de norm(".. norm .. ")")
if dz.data.sensors[name] == 0 then
dz.data.pvktimer[name] = tostring(now+DurTimer)
end
dz.data.sensors[name] = dz.data.sensors[name] + 1
if tonumber(now) < ( tonumber(dz.data.pvktimer[name])) then
dz.log("02 Sensor info = Timerperiode(".. tostring(DurTimer/60) .. "Min) is nog niet verstreken, huidige timer is set at: (" .. dz.data.pvktimer[name] .. ")") --TOEVOEGING
else
if (dz.data.sendnotification[name] == false) then
dz.log("03 Sensor info = Gemiddeld verbruik van device: " .. name .. " is lange tijd onder de norm, deze is defect!")
if (notify == 'Yes') then
dz.notify('03 Sensor info = Gemiddeld verbruik('.. gemwaarden .. ') van device:' .. name2 .. ' is lange tijd('.. tostring(DurTimer/60) .. 'min), onder de norm('.. norm .. '), deze is defect!',
name,PRIORITY_NORMAL,sound,receivers,dz.NSS_PUSHOVER)
end
dz.data.sendnotification[name] = true
else
dz.log("04 Sensor info = Gemiddeld verbruik(".. gemwaarden .. ") van device:" .. name2 .. " is lange tijd(".. tostring(DurTimer/60) .. "min), onder de norm(".. norm .. "), deze is defect! melding is reeds verzonden")
end
end
elseif gemwaarden > norm then
dz.data.sensors[name] = 0
dz.data.pvktimer[name] = '0'
dz.data.sendnotification[name] = false
dz.log("05 Sensor info = Gemiddeld verbruik van device: " .. name .. " met huidig gemiddeld verbruik: (".. gemwaarden ..") is boven de norm(".. norm .. "), en werkt dus correct")
end
else
--dz.data.prevhistwaarde.reset()
dz.data.sensors[name] = 0
dz.data.pvktimer[name] = '0'
dz.data.sendnotification[name] = false
end
end
}
Raspberry (raspbian on rpi 3) , Domoticz Beta, dzVents , RFXtrx433e, P1, Hue, Yeelight, Zwave+, X10, ESP(easy), MQTT,Weather Underground, System Alive Checker, Domoticz Remote Server to RPI with Google Assistant,
Jablotron connection, Ikea