3.0 KiB
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
Entire application should be configurable via databse.
Main config of dbs connections, seq connection should be in config.ini
file.
Maintain support to multiple dbs providers (mssql, postgresql)
WARNING:
config.ini
contains sensitive data, so it should be excluded from git repository.
Main process
main.py
Place where:
- logger is initialized
- database service is initialized
- read service is initialized
- scheduler service is initialized
Scheduler process/service
scheduler.py
Module that is responsible for scheduled operations. Scheduler should be able to:
- have name - set on object creation, it will be used as identifier of scheduler
- run multiple instances of itself
- Raw class of
Scheduler
should have methods for controlling other schedulers. Scheduler
object should have methods for controlling scheduler itself.- Function that it will be calling should be somehow passed to scheduler.
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.