kilnController/lib/ovenWatcher.py

78 wiersze
2.4 KiB
Python
Czysty Zwykły widok Historia

2013-11-29 23:47:35 +00:00
import threading,logging,json,time,datetime
from oven import Oven
2013-11-24 15:00:46 +00:00
log = logging.getLogger(__name__)
class OvenWatcher(threading.Thread):
def __init__(self,oven):
2013-11-29 23:47:35 +00:00
self.last_profile = None
self.last_log = []
self.started = None
self.recording = False
2013-11-24 15:00:46 +00:00
self.observers = []
threading.Thread.__init__(self)
self.daemon = True
2013-11-30 00:42:35 +00:00
self.log_skip_counter = 0
2013-11-24 15:00:46 +00:00
self.oven = oven
self.start()
def run(self):
while True:
oven_state = self.oven.get_state()
2013-11-29 23:47:35 +00:00
if oven_state.get("state") == Oven.STATE_RUNNING:
2013-11-30 00:42:35 +00:00
if self.log_skip_counter==0:
self.last_log.append(oven_state)
2013-11-29 23:47:35 +00:00
else:
self.recording = False
self.notify_all(oven_state)
2013-11-30 00:42:35 +00:00
self.log_skip_counter = (self.log_skip_counter +1)%20
2013-12-06 22:02:07 +00:00
time.sleep(self.oven.time_step)
2013-11-29 23:47:35 +00:00
def record(self, profile):
self.last_profile = profile
self.last_log = []
self.started = datetime.datetime.now()
self.recording = True
2013-11-30 00:55:35 +00:00
#we just turned on, add first state for nice graph
self.last_log.append(self.oven.get_state())
2013-11-29 23:47:35 +00:00
def add_observer(self,observer):
2013-11-30 00:42:35 +00:00
if self.last_profile:
p = {
"name": self.last_profile.name,
"data": self.last_profile.data,
"type" : "profile"
}
else:
p = None
2013-11-29 23:47:35 +00:00
backlog = {
'type': "backlog",
2013-11-30 00:42:35 +00:00
'profile': p,
2013-11-29 23:47:35 +00:00
'log': self.last_log,
#'started': self.started
}
print backlog
backlog_json = json.dumps(backlog)
try:
print backlog_json
observer.send(backlog_json)
except:
log.error("Could not send backlog to new observer")
2013-11-24 15:00:46 +00:00
self.observers.append(observer)
2013-11-29 23:47:35 +00:00
def notify_all(self,message):
2013-11-24 15:00:46 +00:00
message_json = json.dumps(message)
log.debug("sending to %d clients: %s"%(len(self.observers),message_json))
for wsock in self.observers:
if wsock:
try:
wsock.send(message_json)
except:
log.error("could not write to socket %s"%wsock)
2013-11-24 15:21:19 +00:00
self.observers.remove(wsock)
2013-11-24 15:00:46 +00:00
else:
2013-11-24 15:21:19 +00:00
self.observers.remove(wsock)