# IndustrialTracker ## Databse model ### Device Main device object used as base for dependency injection - id - number - name - string - type - (Relation)->DeviceType - enabled - boolean ### DeviceType Device type definition - id - number - name - string ### Reading Reading object used to store data from Device - id - number - device - (Relation)->Device - reading_time - date - energy - number - air - number - running - boolean - ... place for more data eventually ### PLC PLC object used to store configuration of PLC - id - number - ip - string - port - number - db_number - number - energy_offset - number - air_offset - number - running_offset - number - ... place for more offsets definition ### PAC PAC object used to store configuration of PAC - id - number - ip - string - port - number ... something I missed ### Scheduler - id - number - name - string - interval_seconds - number - next_run - date ... something I missed ## Workflow ### Main process `main.py` Is infinite loop that: - checks scheduler settings from database (Scheduler) - checks if it's time to run scheduler - if yes, runs scheduler then updates next_run date following schema date.now() + interval_seconds ### Scheduler process/service `scheduler_service.py` When scheduler is run, it: - gets all devices from database (Device) - for each device that is enable, at first, check if it is accessible (by pinging) - if yes, then it gets data from device (via read_service) and saves it to database (Reading) ### Read process/service `read_service.py` > Read process should be unified for all devices and handled by dependency injection. Abstract class for dependency injection is declared in `readers/device_reader.py`. Each device type has it's own reader class that implements pinging function and reading function. * PLC reader is implemented in `readers/plc_reader.py` * PAC reader is implemented in `readers/pac_reader.py` #### PLC reader Utilizes `python-snap7` library to communicate with PLC. #### PAC reader > TODO: PAC reader is not implemented yet. Utilizes `---` library to communicate with PAC. ### Database process/service `database_service.py` Singleton class that implements all database operations. > Most use cases should be in scheduler process where readed data are going to be saved to database.