Sinds ik de bedrijfsstatus van de warmtepomp volg, zijn mijn 1-wire DS18B20 thermische sensoren een klein beetje instabiel. Gemiddeld 1x per week geeft Domoticz voor alle 9 sensoren nulwaarden. Meestal keren de juiste waarden na 1 tot 10 minuten weer terug. Ik zag dat de “w1_slave” bestanden er op dat moment ook niet waren. Ik vermoed dat dit veroorzaakt werd door RF-interferentie van de relaiscontacten voor het schakelen van de circulatiepomp van de warmtepomp. In de logs zie ik dat die relais een aantal keer stuiteren bij het aan en uit-gaan. Ik heb het probleem opgelost door de voeding van de sensoren schakelbaar te maken. In plaats van continue voeding van de 3.3V pin komt de benodigde spanning nu van gpio-poort 17. Poort 17 heb ik bovendien een inschakelvertraging van 3 seconden gegeven in Domoticz.

Onderstaand lua-script wordt geïnitieerd door een device change. Als de voeding aan is en één van de sensoren nul geeft dan wordt de voeding uit- en weer ingeschakeld. Door de inschakelvertraging is dit voldoende om de sensoren te resetten.

--
-- Resetten sensoren als 0 of lang niet gezien
--
--
commandArray = {}
 
logging = false
d = otherdevices
device = ""
for i, v in pairs(devicechanged) do
    if (#device == 0 or #i < #device) then device = i end
end
if (logging) then print("Triggered by " .. device .. " now " .. d[device]) end
 
-- script moet niet zichzelf aanroepen, maar in principe alleen als 'Aanvoer T' verandert of als aanvoer T al lang niet meer aangepast, of de Voeding timer loopt af
if  (device == "Aanvoer T") or (uservariables['duur-aanvoer-T-niet-gezien'] - 60 > 0) or devicechanged['Voeding timer'] == "Off" then
    if ((otherdevices['Aanvoer T'] - 0.1 < 0 ) or (uservariables['duur-aanvoer-T-niet-gezien'] - 60 > 0)) and (otherdevices['Voeding temperatuursensors'] == "On") and (otherdevices['Voeding timer'] == "Off") then
        commandArray['SendEmail'] ="Aanvoer T 0#Aanvoer T "..otherdevices['Aanvoer T'].. " Duur aanvoer T niet gezien " .. uservariables['duur-aanvoer-T-niet-gezien'] .. "#youraccount@yourdomain.xyz"
        commandArray['Voeding temperatuursensors'] = "Off"
        commandArray['Voeding timer'] = "On"
    elseif (otherdevices['Voeding temperatuursensors'] == "Off") and (devicechanged['Voeding timer'] == "Off") then
        commandArray['Voeding timer'] = "On"
        commandArray['Voeding temperatuursensors'] = "On"
    end
elseif (devicechanged['Voeding temperatuursensors']=="Off") then
    commandArray={['Voeding temperatuursensors']="On AFTER 3"}
end
return commandArray

De Voeding timer is nodig om te zorgen dat de sensoren wel even de tijd krijgen om waarden door te geven voordat de voeding weer wordt uitgeschakeld. Ik heb nog een timer gebaseerd script lopen dat in de gaten houdt of 1 van de sensoren langere tijd niet wordt bijgewerkt.

--
--Zet duur uservariabele duur-aanvoer-T-niet-gezien
s = otherdevices_lastupdate['Aanvoer T']
-- returns a date time like 2013-07-11 17:23:12
 
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)
 
commandArray = {}
 
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
 
difference = (os.difftime (os.time(), t2))
 
--os.execute("sudo su  pi  --session-command '/bin/echo " .. os.time() .. " " .. t2 .. " " .. difference .. " s " .. s ..">>/home/pi/log/diftime '" )
 
commandArray['Variable:duur-aanvoer-T-niet-gezien']= tostring(difference)