ha-kiosk-agent/src/ha-kiosk-agent

82 lines
2.8 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
import asyncio
import coloredlogs
import logging
import os
import ha_mqtt_discoverable
import sensor
from device import Device
from display import DisplayBrightnessManager
async def sensor_loop(logger, sensor_entities):
logger.info('starting sensor loop')
while True:
for sensor in sensor_entities.values():
sensor.update_value()
await asyncio.sleep(5)
async def main():
parser = argparse.ArgumentParser()
parser.add_argument("--debug", action='store_true', default=False)
parser.add_argument("--device-id", dest='device_id', default=os.environ.get('DEVICE_ID'), required=True)
parser.add_argument("--device-name", dest='device_name', default=os.environ.get('DEVICE_NAME'), required=True)
parser.add_argument("--display-device", dest='display_device', default=os.environ.get('DISPLAY_DEVICE'))
parser.add_argument("--mqtt-host", dest='mqtt_host', default=os.environ.get('MQTT_HOST', 'localhost'))
parser.add_argument("--mqtt-port", dest='mqtt_port', default=os.environ.get('MQTT_PORT', 1883))
parser.add_argument("--mqtt-user", dest='mqtt_user', default=os.environ.get('MQTT_USER'))
parser.add_argument("--mqtt-pass", dest='mqtt_pass', default=os.environ.get('MQTT_PASS'))
parser.add_argument("--touch-device", dest='touch_device', default=os.environ.get('TOUCH_DEVICE'))
args = parser.parse_args()
mqtt_args = {'host': args.mqtt_host}
if args.debug:
coloredlogs.install(level='DEBUG')
logger = logging.getLogger("HA Kiosk Agent")
logger.debug('debug')
mqtt_args['debug'] = args.debug
else:
coloredlogs.install()
logger = logging.getLogger("HA Kiosk Agent")
if args.mqtt_port:
mqtt_args['port'] = args.mqtt_port
if args.mqtt_user:
mqtt_args['username'] = args.mqtt_user
if args.mqtt_pass:
mqtt_args['password'] = args.mqtt_pass
mqtt_settings = ha_mqtt_discoverable.Settings.MQTT(**mqtt_args)
device = Device(args.device_name, args.device_id, mqtt_settings)
tasks = []
dbm = None
if args.display_device:
dbm = DisplayBrightnessManager(device, args.display_device, args.touch_device, logger)
tasks.append(dbm.run())
sensor_entities = {
'battery': sensor.BatterySensor(device),
'display_brightness': sensor.DisplayBrightnessSensor(device, dbm),
'ip_address': sensor.IPAddressSensor(device),
'last_boot': sensor.LastBootSensor(device),
'temperature': sensor.TemperatureSensor(device),
'wifi_signal': sensor.WifiSignalStrengthSensor(device)
};
tasks.append(sensor_loop(logger, sensor_entities))
logger.info('finished setup, starting tasks')
await asyncio.gather(*tasks)
if __name__ == "__main__":
asyncio.run(main())