| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import asyncio
- import logging
- import logging.handlers
- import yaml
- from pathlib import Path
- from src.services.mqtt_service import MQTTService
- from src.services.i2c_service import I2CService
- from src.services.http_service import HTTPService
- from src.controllers.measurement_controller import MeasurementController
- async def main():
- # Load config
- config_path = Path(__file__).parent / "config" / "config.yaml"
- with open(config_path) as f:
- config = yaml.safe_load(f)
- # Setup logging
- logging.basicConfig(
- level=getattr(logging, config['logging']['level']),
- format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
- handlers=[
- logging.handlers.RotatingFileHandler(
- filename=config['logging']['file'],
- mode=config['logging']['mode'],
- maxBytes=config['logging']['max_bytes'],
- backupCount=2,
- encoding=None,
- delay=0
- ),
- logging.StreamHandler()
- ]
- )
- logging.info("Starting battery measurement controller...")
- # Initialize services
- i2c_service = I2CService(config)
- mqtt_service = MQTTService(config)
- http_service = HTTPService(config)
- controller = MeasurementController(config, i2c_service, http_service, mqtt_service)
- await controller.start_polling()
- try:
- # Keep running until interrupted
- while True:
- await asyncio.sleep(1)
- finally:
- logging.info("Shutting down...")
- mqtt_service.cleanup()
- if __name__ == "__main__":
- asyncio.run(main())
|