def main(): """main""" #create the object for getting CPU data data_collector = SystemDataCollector(5) #create the thread in charge of calling the data collector system_monitor = WorkerThread(data_collector.collect) #create the modbus TCP simulator and one slave #and one block of analog inputs simu = Simulator(TcpServer()) slave = simu.server.add_slave(1) slave.add_block("Cpu", defines.ANALOG_INPUTS, 0, 10) try: LOGGER.info("'quit' for closing the server") #start the data collect system_monitor.start() #start the simulator! will block until quit command is received simu.start() except Exception as excpt: print excpt finally: #close the simulator simu.close() #stop the data collect system_monitor.stop()
def collect(self): """get the CPU load thanks to WMI""" try: self._count += 1 if self._count >= self._max_count: self._count = 0 #WMI get the load percentage of the machine from win32com.client import GetObject wmi = GetObject('winmgmts:') cpu = wmi.InstancesOf('Win32_Processor') for (_cpu, i) in zip(cpu, xrange(10)): value = _cpu.Properties_('LoadPercentage').Value cpu_usage = int(str(value)) if value else 0 #execute a RPC command for changing the value self._simu.set_values(1, "Cpu", i, (cpu_usage, )) except Exception as excpt: LOGGER.debug("SystemDataCollector error: %s", str(excpt)) time.sleep(0.1)