main.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import asyncio
  2. import logging
  3. import logging.handlers
  4. import yaml
  5. from pathlib import Path
  6. from src.services.mqtt_service import MQTTService
  7. from src.services.i2c_service import I2CService
  8. from src.services.http_service import HTTPService
  9. from src.controllers.measurement_controller import MeasurementController
  10. async def main():
  11. # Load config
  12. config_path = Path(__file__).parent / "config" / "config.yaml"
  13. with open(config_path) as f:
  14. config = yaml.safe_load(f)
  15. # Setup logging
  16. logging.basicConfig(
  17. level=getattr(logging, config['logging']['level']),
  18. format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
  19. handlers=[
  20. logging.handlers.RotatingFileHandler(
  21. filename=config['logging']['file'],
  22. mode=config['logging']['mode'],
  23. maxBytes=config['logging']['max_bytes'],
  24. backupCount=2,
  25. encoding=None,
  26. delay=0
  27. ),
  28. logging.StreamHandler()
  29. ]
  30. )
  31. logging.info("Starting battery measurement controller...")
  32. # Initialize services
  33. i2c_service = I2CService(config)
  34. mqtt_service = MQTTService(config)
  35. http_service = HTTPService(config)
  36. controller = MeasurementController(config, i2c_service, http_service, mqtt_service)
  37. await controller.start_polling()
  38. try:
  39. # Keep running until interrupted
  40. while True:
  41. await asyncio.sleep(1)
  42. finally:
  43. logging.info("Shutting down...")
  44. mqtt_service.cleanup()
  45. if __name__ == "__main__":
  46. asyncio.run(main())