My Switch went to often on and off because of a outside temperature that is flipping. Risc is that the heating device connected to it, runs defect.
So i use variable DurTImer. When the switch is On because off the temperatureaverage is above the norm, i wait For DurTimer minutes before switching the switch back to off.
But i got a error on my if then else statement...
:20.527 Status: dzVents: Info: Temperatuur trend: --------------------------------------------
2018-12-17 12:14:20.527 Status: dzVents: Info: Temperatuur trend: 03 Sensor info = Huidig gemiddelde temperatuur (8.4) is boven de norm(4), device: Zuiderparklaan-Diversen
2018-12-17 12:14:20.527 Status: dzVents: Error (2.4.9): Temperatuur trend: An error occured when calling event handler DZ_temperatuur
2018-12-17 12:14:20.527 Status: dzVents: Error (2.4.9): Temperatuur trend: ...icz/scripts/dzVents/generated_scripts/DZ_temperatuur.lua:131: attempt to index field 'lastupdate' (a nil value)
2018-12-17 12:14:20.527 Status: dzVents: Info: Temperatuur trend: ------ Finished DZ_temperatuur
if switch.state == 'On' and onoff == 'Yes' then
if tonumber(switch.lastupdate.minutesAgo) > tonumber(DurTimer) then
switch.switchOff().checkFirst().silent()
else
dz.log("04 Sensor info = device: " .. name .. " Niet uitgezet omdat timer nog niet is verlopen: " .. DurTimer )
end
end
Logging: strange that there a two historic records with a value and Verbruik.gemiddeld = 0 ????
Code: Select all
14:04:24.255 (weather underground rijswijk) General/Solar Radiation (Zuiderparklaan6)
2018-12-17 14:04:24.680 (dummydevices) Light/Switch (Sonoff1)
2018-12-17 14:04:24.554 Status: dzVents: Info: Temperatuur trend: ------ Start internal script: DZ_temperatuur: Device: "Zuiderparklaan-Diversen (weather underground rijswijk)", Index: 681
2018-12-17 14:04:24.556 Status: dzVents: Debug: Temperatuur trend: Processing device-adapter for Sonoff1: Switch device adapter
2018-12-17 14:04:24.556 Status: dzVents: Info: Temperatuur trend: 00 History data van 2018-12-17 13:04:22 = 8.5 graden
2018-12-17 14:04:24.556 Status: dzVents: Info: Temperatuur trend: 00 History data van 2018-12-17 13:34:23 = 8.5 graden
2018-12-17 14:04:24.556 Status: dzVents: Info: Temperatuur trend: Deviceinfo----------------------------------
2018-12-17 14:04:24.556 Status: dzVents: Info: Temperatuur trend: 00 Kwh-device................= Zuiderparklaan-Diversen
2018-12-17 14:04:24.556 Status: dzVents: Info: Temperatuur trend: 00 Switch-device.............= Sonoff1
2018-12-17 14:04:24.556 Status: dzVents: Info: Temperatuur trend: 00 Switch.onoff..............= Yes
2018-12-17 14:04:24.556 Status: dzVents: Info: Temperatuur trend: Verbruikinfo--------------------------------
2018-12-17 14:04:24.556 Status: dzVents: Info: Temperatuur trend: 00 Verbruik.norm.............= 4
2018-12-17 14:04:24.557 Status: dzVents: Info: Temperatuur trend: 00 Verbruik.gemiddeld........= 0
2018-12-17 14:04:24.557 Status: dzVents: Info: Temperatuur trend: 00 Verbruik.huidige waarde...= 9.8
2018-12-17 14:04:24.557 Status: dzVents: Info: Temperatuur trend: 00 Verbruik.vorige waarde....= 8.5
2018-12-17 14:04:24.557 Status: dzVents: Info: Temperatuur trend: 00 Verbruik.gemid. hist......= 8.5
2018-12-17 14:04:24.557 Status: dzVents: Info: Temperatuur trend: 00 Verbruik.minimumwaarde....= 8.5
2018-12-17 14:04:24.557 Status: dzVents: Info: Temperatuur trend: 00 Verbruik.maximumwaarde....= 8.5
2018-12-17 14:04:24.557 Status: dzVents: Info: Temperatuur trend: Notificatie---------------------------------
2018-12-17 14:04:24.557 Status: dzVents: Info: Temperatuur trend: 00 Notificatie.norm(in.min)..= 30
2018-12-17 14:04:24.557 Status: dzVents: Info: Temperatuur trend: 00 Notificatie.verzonden.....= false
2018-12-17 14:04:24.557 Status: dzVents: Info: Temperatuur trend: 00 Notificatie.aan...........= Yes
2018-12-17 14:04:24.557 Status: dzVents: Info: Temperatuur trend: 00 Notificatie.receivers.....= pvkmobiel
2018-12-17 14:04:24.557 Status: dzVents: Info: Temperatuur trend: 00 Notificatie.prio..........= PRIORITY_NORMAL
2018-12-17 14:04:24.557 Status: dzVents: Info: Temperatuur trend: 00 Notificatie.sound.........= siren
2018-12-17 14:04:24.557 Status: dzVents: Info: Temperatuur trend: --------------------------------------------
2018-12-17 14:04:24.557 Status: dzVents: Debug: Temperatuur trend: Constructed timed-command: On
2018-12-17 14:04:24.557 Status: dzVents: Debug: Temperatuur trend: Constructed timed-command: On
2018-12-17 14:04:24.557 Status: dzVents: Debug: Temperatuur trend: Constructed timed-command: On NOTRIGGER
2018-12-17 14:04:24.557 Status: dzVents: Info: Temperatuur trend: 05 Sensor info = Huidig gemiddelde temperatuur (0) is onder of gelijk aan de norm(4), device: Zuiderparklaan-Diversen
2018-12-17 14:04:24.559 Status: dzVents: Info: Temperatuur trend: ------ Finished DZ_temperatuur
2018-12-17 14:04:24.645 Status: EventSystem: Script event triggered: /home/pi/domoticz/dzVents/runtime/dzVents.lua
2018-12-17 14:04:24.681 Status: Notification: Domoticz device:Sonoff1
Code: Select all
--[[ wordt de vervanger van dz_buitentemperatuur aanzetten van lint en een timer om aan uit te voorkomen..
https://github.com/dannybloe/dzVents#historical-variables-api <<<<< This is quite old ; better use
https://www.domoticz.com/wiki/DzVents:_next_generation_LUA_scripting#Accessing_values_in_historical_variables
script uses a temp sensor Zuiderparklaan which uses Weather Underground with pws:ITHEHAGU40
]] --
local USAGE_SENSORS = {
['Zuiderparklaan-Diversen'] = 'Zuiderparklaan-Diversen', -- Adjust to your needs. Between every line you need to add a ",".
--['Zuiderparklaan'] = 'Zuiderparklaan', -- Adjust to your needs. Between every line you need to add a ",".
}
local USAGE_SWITCHES = {
['Zuiderparklaan-Diversen'] = 'Sonoff1', -- Name of device that switch kw_1 On/ Off
--['Zuiderparklaan'] = 'stroomlint', -- Name of device that switch kw_1 On/ Off
}
local USAGE_Norm = {
['Zuiderparklaan-Diversen'] = 4, -- is de norm, onder deze waarde gaat het device aan als onoff aanstaat
--['Zuiderparklaan'] = 4, -- is de norm, onder deze waarde gaat het device aan als onoff aanstaat
}
local USAGE_DurTimer = {
['Zuiderparklaan-Diversen'] = 30, -- is de periode waarover gemiddelde wordt berekend om pieken te voorkomen, zie gemwaarden (deze kun je niet parametriseren)
--['Zuiderparklaan'] = 30, -- is de periode waarover gemiddelde wordt berekend om pieken te voorkomen, deze wordt niet gebruikt, zie gemwaarden (deze kun je niet parametriseren)
}
local USAGE_SwitchOnOff = {
['Zuiderparklaan-Diversen'] = 'Yes', -- Adjust to your needs. Between every line you need to add a ",".
--['Zuiderparklaan'] = 'Yes', -- Adjust to your needs. Between every line you need to add a ",".
}
local USAGE_Notify = {
['Zuiderparklaan-Diversen'] = 'Yes',
-- ['Zuiderparklaan'] = 'Yes',
}
local USAGE_Pushoverreceivers = {
['Zuiderparklaan-Diversen'] = 'pvkmobiel',
--['Zuiderparklaan'] = 'pvkmobiel',
}
local USAGE_Pushoverprio = {
['Zuiderparklaan-Diversen'] = 'PRIORITY_NORMAL', --domoticz.PRIORITY_LOW, PRIORITY_MODERATE, PRIORITY_NORMAL, PRIORITY_HIGH, PRIORITY_EMERGENCY
--['Zuiderparklaan'] = 'PRIORITY_NORMAL', --domoticz.PRIORITY_LOW, PRIORITY_MODERATE, PRIORITY_NORMAL, PRIORITY_HIGH, PRIORITY_EMERGENCY
}
local USAGE_Pushoversound = {
['Zuiderparklaan-Diversen'] = 'siren',
--['Zuiderparklaan'] = 'siren',
}
return {
on = { devices = USAGE_SENSORS },
logging = {
level = domoticz.LOG_DEBUG , -- Uncomment to override the dzVents global logging setting
marker = "Temperatuur trend"
},
data = {
prevhistwaarde = { history = true, maxHours = 1 },
sendnotification = {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(4) -- ook deze kun je niet parametriseren
end
local name = device.name
local name2 = USAGE_SWITCHES[name]
local switch = dz.devices(USAGE_SWITCHES[name])
local onoff = USAGE_SwitchOnOff[USAGE_SENSORS[name]]
local norm = USAGE_Norm[USAGE_SENSORS[name]]
local notify = USAGE_Notify[USAGE_SENSORS[name]]
local receivers = USAGE_Pushoverreceivers[USAGE_SENSORS[name]]
local prio = USAGE_Pushoverprio[USAGE_SENSORS[name]]
local sound = USAGE_Pushoversound[USAGE_SENSORS[name]]
local DurTimer = USAGE_DurTimer[USAGE_SENSORS[name]]
local huidwaarde = dz.utils.round(device.temperature,1)
local prevwaarde = dz.utils.round(dz.data.prevhistwaarde.getLatest().data,1)
local gemwaarden = dz.utils.round(dz.data.prevhistwaarde.avgSince('00:30:00'),1) --check als deze geen waarde heeft, dan prevwaarde! neem niet een te klein bereik
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'))
if huidwaarde == nil then -- onderstaande checks moeten na de locals omdat ze deze ook gebruiken!
dz.log("01 Sensor info = Geen waarde opgehaald")
end
if gemwaarde == 0 then
dz.log("02 Sensor info = Geen gemiddelde waarde opgehaald, nu vorige waarde gebruikt")
end
if dz.data.sendnotification[name] == nil then
dz.data.sendnotification[name] = false -- eerste waarde teller op false gezet -- geen notify gedaan
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 .. " graden")
end
dz.log("Deviceinfo----------------------------------")
dz.log("00 Kwh-device................= " .. name)
dz.log("00 Switch-device.............= " .. name2)
dz.log("00 Switch.onoff..............= " .. onoff)
dz.log("Verbruikinfo--------------------------------")
dz.log("00 Verbruik.norm.............= " .. norm)
dz.log("00 Verbruik.gemiddeld........= " .. 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)
dz.log("00 Notificatie.verzonden.....= " .. tostring(dz.data.sendnotification[name]))
dz.log("00 Notificatie.aan...........= " .. notify)
dz.log("00 Notificatie.receivers.....= " .. receivers)
dz.log("00 Notificatie.prio..........= " .. prio)
dz.log("00 Notificatie.sound.........= " .. sound)
dz.log("--------------------------------------------")
if gemwaarden > norm then
dz.log("03 Sensor info = Huidig gemiddelde temperatuur (".. gemwaarden ..") is boven de norm(".. norm .. "), device: " .. name .. "")
if switch.state == 'On' and onoff == 'Yes' then
if tonumber(switch.lastupdate.minutesAgo) > tonumber(DurTimer) then
switch.switchOff().checkFirst().silent()
else
dz.log("04 Sensor info = device: " .. name .. " Niet uitgezet omdat timer nog niet is verlopen: " .. DurTimer )
end
end
dz.data.sendnotification[name] = false
else
if switch.state == 'Off' and onoff == 'Yes' then
switch.switchOn().checkFirst().silent()
msg3=' Switch: ' .. name2 .. ' is aangezet'
else
msg3=' '
end
if (dz.data.sendnotification[name] == false) then
if (notify == 'Yes') then
msg1 = 'Domoticz device:' .. name2
msg2 = 'Gemiddelde temperatuur (' .. gemwaarden .. ') <= (' .. norm .. '), voor een periode van (' .. tostring(DurTimer) .. ' min)' .. msg3
dz.notify(msg1,msg2,prio,sound,receivers,dz.NSS_PUSHOVER)
dz.data.sendnotification[name] = true
end
end
dz.log("05 Sensor info = Huidig gemiddelde temperatuur (".. gemwaarden ..") is onder of gelijk aan de norm(".. norm .. "), device: " .. name .. "")
dz.data.prevhistwaarde.add(huidwaarde)
end
end
}