| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import asyncio
- import logging
- import logging.handlers
- import yaml
- from pathlib import Path
- from services.mqtt_service import MQTTService
- from services.i2c_service import I2CService
- from services.http_service import HTTPService
- from controllers.measurement_controller import MeasurementController
- async def main():
- # Load config
- config_path = Path(__file__).parent.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)
- http_service = HTTPService(config)
- measurement_controller = MeasurementController(config, i2c_service, http_service)
- # Setup MQTT client with callback
- mqtt_service = MQTTService(config)
-
- async def on_cell_inserted(device_id: str, slot: int, cell_id: int):
- await measurement_controller.start_measurement(device_id, slot, cell_id)
- mqtt_service.set_callback(on_cell_inserted)
- await mqtt_service.connect()
- try:
- # Keep running until interrupted
- while True:
- await asyncio.sleep(1)
- except KeyboardInterrupt:
- logging.info("Shutting down...")
- finally:
- await mqtt_service.disconnect()
- if __name__ == "__main__":
- asyncio.run(main())
|