How do I safeguard against receiver error (RFXtrx/Tellstick)
Posted: Tue Feb 10, 2015 8:52 am
In both my home and cabin setup I sometimes (maybe once a month, maybe a bit less) have the receivers fail (maybe because I'm running a virtual machine). Yesterday it hapened just after we went to bed, and at the moment my home office (which should be a nice 20 degrees by 08) is around 17 degrees. Which made me decide that I really need a safeguard against this. It's fixed by restarting EG or in a worst case scenario to restart the VM. But of course restarting every hour or so is just dumb. I have a few sensors that fall out and then get back again every now and then, so I would like not to use "lost contact with sensor" for that. But maybe it would be possible to use the main script for heat control? I made one with good help a few weeks back. It takes the input from every temp sensor in the house, checks if the temp is within the parameters (set in a startup script) and then acts accordingly. Here's the full script:
Can somebody please help me put in some kind of routine that restarts the VM when there has been no sensor input for maybe five minutes? I could do one minute, since they come in every ten seconds or so, but since they are split between the Tellstick and the RFX at the cabin, with only a few sensors for the Tellstick, I'd go for five minutes. In that time both the RFXtrx and TellStick always gets sensor input.
Code: Select all
#Sjekke om det er en Viking-sensor
if (eg.eventString.split(' ')[1]) == "Viking":
#Finne rommet sensoren kommer fra ved hjelp av tabellen i oppstartsskriptet
Rom = eg.globals.Romkonvertering[int(eg.eventString.split(' ')[4])]
#Skille ut temperatur og signal fra payload
eg.globals.Romtemperatur[Rom] = float((eg.event.payload.split(' ')[2]))
eg.globals.Signal[Rom] = (eg.event.payload.split(' ')[6])
#Skrive ut rommet i loggen for lettere å kunne se hvilke sensorer som er hva
#print (Rom)
#Skrive ut de utskilte verdiene for debugging når det trengs
#print (Romtemperatur,Romsignal)
#Hente inn og formatere tidspunkt og dato etter norsk system
eg.globals.Tid[Rom] = eg.Utils.time.strftime("Kl. %H:%M, den %d.%m.", eg.Utils.time.localtime())
#Skrive ut den formaterte tiden for debugging når det trengs
#print (eg.globals.Tid[Rom])
#Sjekke om det er dag, natt eller frostvakttemperatur og velge termostattemperatur ut fra det
#Avslutte sccript hvis modus er 0, altså av
if eg.globals.Termostatmodus[Rom] == 0:
eg.globals.Termostatemperatur[Rom] = 'Av'
eg.globals.NettsideOvn[Rom] = 'av.jpg' #Vise ovn på for Nettsideserver
print "%s.: Temperatur: %s, termostatmodus: %s, tidspunkt: %s\n"%(Rom,eg.globals.Romtemperatur[Rom],eg.globals.Termostatemperatur[Rom], eg.globals.Tid[Rom])
eg.Exit()
if eg.globals.Termostatmodus[Rom] == 1: eg.globals.Termostatemperatur[Rom] = eg.globals.Temp1[Rom]
if eg.globals.Termostatmodus[Rom] == 2: eg.globals.Termostatemperatur[Rom] = eg.globals.Temp2[Rom]
if eg.globals.Termostatmodus[Rom] == 3: eg.globals.Termostatemperatur[Rom] = eg.globals.Temp3[Rom]
if eg.globals.Termostatmodus[Rom] == 4: eg.globals.Termostatemperatur[Rom] = eg.globals.Temp4[Rom]
#Printe rommet, modusen, termostatemperaturen og den aktuelle temperaturen i loggeren
print "%s.: Temperatur: %s, termostatmodus: %s, termostattemperatur: %s, tidspunkt: %s\n"%(Rom,eg.globals.Romtemperatur[Rom],eg.globals.Termostatmodus[Rom],eg.globals.Termostatemperatur[Rom], eg.globals.Tid[Rom])
if eg.globals.Romtemperatur[Rom] < (eg.globals.Termostatemperatur[Rom]-0.5): #Her sjekkes det om det er mer enn 0,5 grader under termostattemperaturen
#print('Ovn på') #Printe om ovnen slås på for debugging
(eg.globals.OvnPaa (Rom))
eg.globals.NettsideOvn[Rom] = 'paa.jpg' #Vise ovn på for Nettsideserver
if eg.globals.Romtemperatur[Rom] > (eg.globals.Termostatemperatur[Rom]+0.5): #Her sjekkes det om det er mer enn 0,5 grader over termostattemperaturen
#print('Ovn av') #Printe om ovnen slås av for debugging
eg.globals.OvnAv (Rom)
eg.globals.NettsideOvn[Rom] = 'av.jpg' #Vise ovn på for Nettsideserver