main.py 1.7 KB

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