kopia lustrzana https://github.com/jbruce12000/kiln-controller
				
				
				
			
		
			
				
	
	
		
			78 wiersze
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			78 wiersze
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
| import threading,logging,json,time,datetime
 | |
| from oven import Oven
 | |
| log = logging.getLogger(__name__)
 | |
| 
 | |
| class OvenWatcher(threading.Thread):
 | |
|     def __init__(self,oven):
 | |
|         self.last_profile = None
 | |
|         self.last_log = []
 | |
|         self.started = None
 | |
|         self.recording = False
 | |
|         self.observers = []
 | |
|         threading.Thread.__init__(self)
 | |
|         self.daemon = True
 | |
|         self.log_skip_counter = 0
 | |
| 
 | |
|         self.oven = oven
 | |
|         self.start()
 | |
| 
 | |
|     def run(self):
 | |
|         while True:
 | |
|             oven_state = self.oven.get_state()
 | |
|             
 | |
|             if oven_state.get("state") == Oven.STATE_RUNNING:
 | |
|                 if self.log_skip_counter==0:
 | |
|                     self.last_log.append(oven_state)
 | |
|             else:
 | |
|                 self.recording = False
 | |
|             self.notify_all(oven_state)
 | |
|             self.log_skip_counter = (self.log_skip_counter +1)%20
 | |
|             time.sleep(0.5)
 | |
|     
 | |
|     def record(self, profile):
 | |
|         self.last_profile = profile
 | |
|         self.last_log = []
 | |
|         self.started = datetime.datetime.now()
 | |
|         self.recording = True
 | |
|         #we just turned on, add first state for nice graph
 | |
|         self.last_log.append(self.oven.get_state())
 | |
| 
 | |
|     def add_observer(self,observer):
 | |
|         if self.last_profile:
 | |
|             p = {
 | |
|                 "name": self.last_profile.name,
 | |
|                 "data": self.last_profile.data, 
 | |
|                 "type" : "profile"
 | |
|             }
 | |
|         else:
 | |
|             p = None
 | |
|         
 | |
|         backlog = {
 | |
|             'type': "backlog",
 | |
|             'profile': p,
 | |
|             '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")
 | |
|         
 | |
|         self.observers.append(observer)
 | |
| 
 | |
|     def notify_all(self,message):
 | |
|         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)
 | |
|                     self.observers.remove(wsock)
 | |
|             else:
 | |
|                 self.observers.remove(wsock)
 |