#!/usr/bin/env python3 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  sys 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  time 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  datetime 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  common . realtime  import  Ratekeeper 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  common . filter_simple  import  FirstOrderFilter 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  tools . zookeeper  import  Zookeeper 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if  __name__  ==  " __main__ " : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  z  =  Zookeeper ( ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  z . set_device_power ( True ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  z . set_device_ignition ( False ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  duration  =  None 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  len ( sys . argv )  >  1 : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    duration  =  int ( sys . argv [ 1 ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  rate  =  123 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  rk  =  Ratekeeper ( rate ,  print_delay_threshold = None ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  fltr  =  FirstOrderFilter ( 0 ,  5 ,  1.  /  rate ,  initialized = False ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  measurements  =  [ ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  start_time  =  time . monotonic ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  try : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  duration  is  None  or  time . monotonic ( )  -  start_time  <  duration : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      fltr . update ( z . read_power ( ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  rk . frame  %  rate  ==  0 : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								        measurements . append ( fltr . x ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								        t  =  datetime . timedelta ( seconds = time . monotonic ( )  -  start_time ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        avg  =  sum ( measurements )  /  len ( measurements ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        print ( f " Now:  { fltr . x : .2f }  W, Avg:  { avg : .2f }  W over  { t } " ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      rk . keep_time ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  except  KeyboardInterrupt : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    pass 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  t  =  datetime . timedelta ( seconds = time . monotonic ( )  -  start_time ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  avg  =  sum ( measurements )  /  len ( measurements ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  print ( f " \n Average power:  { avg : .2f } W over  { t } " )