| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- 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
- from src.services.prometheus_service import start_metrics_server
- 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=False
- ),
- 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)
- start_metrics_server(8000)
- 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())
|