add entities for battery level and charger status
parent
aca0668832
commit
411a0b8570
|
@ -18,6 +18,7 @@
|
|||
coloredlogs
|
||||
configargparse
|
||||
ha-mqtt-discoverable
|
||||
psutil
|
||||
];
|
||||
};
|
||||
|
||||
|
@ -27,6 +28,7 @@
|
|||
coloredlogs
|
||||
configargparse
|
||||
ha-mqtt-discoverable
|
||||
psutil
|
||||
];
|
||||
};
|
||||
};
|
||||
|
|
|
@ -4,25 +4,32 @@ import argparse
|
|||
import coloredlogs
|
||||
import logging
|
||||
import os
|
||||
import psutil
|
||||
import socket
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
from ha_mqtt_discoverable import Settings, DeviceInfo
|
||||
from ha_mqtt_discoverable.sensors import Number, NumberInfo
|
||||
from ha_mqtt_discoverable.sensors import BinarySensor, BinarySensorInfo, Number, NumberInfo, Sensor, SensorInfo
|
||||
from paho.mqtt.client import Client, MQTTMessage
|
||||
|
||||
coloredlogs.install()
|
||||
logger = logging.getLogger("HA kiosk agent")
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
def get_display_brightness():
|
||||
def get_battery_level() -> float:
|
||||
blevel = psutil.sensors_battery()
|
||||
if not blevel:
|
||||
return -1
|
||||
|
||||
return ("{:.2f}".format(blevel.percent), blevel.power_plugged)
|
||||
|
||||
def get_display_brightness() -> float:
|
||||
res = subprocess.run(['brightnessctl', '-m', 'info'], capture_output=True)
|
||||
if res.returncode != 0:
|
||||
logger.warn(f'failed to get brightness: exit code { res.returncode }')
|
||||
return -1
|
||||
|
||||
print(res.stdout)
|
||||
stdout = res.stdout.decode("utf-8")
|
||||
brightPerc = stdout.split(',')[3].split('%')[0]
|
||||
return float(brightPerc)
|
||||
|
@ -52,7 +59,6 @@ parser.add_argument("--mqtt-host", dest='mqtt_host', default=os.environ.get('MQT
|
|||
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("--mqtt-client", dest='mqtt_client', default=os.environ.get('MQTT_CLIENT', socket.gethostname()))
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
|
@ -70,34 +76,75 @@ if args.mqtt_user:
|
|||
if args.mqtt_pass:
|
||||
mqtt_args['password'] = args.mqtt_pass
|
||||
|
||||
if args.mqtt_client:
|
||||
mqtt_args['client_name'] = args.mqtt_client
|
||||
|
||||
# Configure the required parameters for the MQTT host
|
||||
mqtt_settings = Settings.MQTT(**mqtt_args)
|
||||
|
||||
# Define the device. At least one of `identifiers` or `connections` must be supplied
|
||||
device_info = DeviceInfo(name=args.device_name, identifiers=args.device_id)
|
||||
|
||||
# Information about the `number` entity.
|
||||
number_info = NumberInfo(
|
||||
# Battery charging
|
||||
battery_charging_info = BinarySensorInfo(
|
||||
name="Battery charging",
|
||||
device=device_info,
|
||||
unique_id=f'{args.device_id}_battery_charging',
|
||||
device_class='battery_charging')
|
||||
battery_charging_settings = Settings(mqtt=mqtt_settings, entity=battery_charging_info)
|
||||
battery_charging = BinarySensor(battery_charging_settings)
|
||||
|
||||
# Battery level
|
||||
battery_level_info = SensorInfo(
|
||||
name="Battery Level",
|
||||
device=device_info,
|
||||
unique_id=f'{args.device_id}_battery_level',
|
||||
device_class='battery',
|
||||
unit_of_measurement='%')
|
||||
battery_level_settings = Settings(mqtt=mqtt_settings, entity=battery_level_info)
|
||||
battery_level = Sensor(battery_level_settings)
|
||||
|
||||
# Display brightness
|
||||
display_brightness_info = NumberInfo(
|
||||
name="Display Brightness",
|
||||
min=0,
|
||||
max=100,
|
||||
mode="slider",
|
||||
device=device_info,
|
||||
unique_id=f'{args.device_id}_display_brightness')
|
||||
|
||||
settings = Settings(mqtt=mqtt_settings, entity=number_info)
|
||||
|
||||
# Instantiate the number
|
||||
display_brightness = Number(settings, display_brightness_callback)
|
||||
unique_id=f'{args.device_id}_display_brightness',
|
||||
unit_of_measurement='%')
|
||||
display_brightness_settings = Settings(mqtt=mqtt_settings, entity=display_brightness_info)
|
||||
display_brightness = Number(display_brightness_settings, display_brightness_callback)
|
||||
|
||||
logger.info('finished setup')
|
||||
|
||||
brightness = get_display_brightness()
|
||||
logger.info(f'current brightness: { brightness }')
|
||||
display_brightness.set_value(brightness)
|
||||
lastBattery = get_battery_level()
|
||||
logger.info(f'current battery level: { lastBattery }')
|
||||
battery_level.set_state(lastBattery[0])
|
||||
if lastBattery[1] or lastBattery[1] is None:
|
||||
battery_charging.on()
|
||||
else:
|
||||
battery_charging.off()
|
||||
|
||||
lastBrightness = get_display_brightness()
|
||||
logger.info(f'current brightness: { lastBrightness }')
|
||||
display_brightness.set_value(lastBrightness)
|
||||
|
||||
while True:
|
||||
time.sleep(30)
|
||||
newBrightness = get_display_brightness()
|
||||
if newBrightness != lastBrightness:
|
||||
logger.info(f'updating value for display brightness to { newBrightness }')
|
||||
display_brightness.set_value(newBrightness)
|
||||
lastBrightness = newBrightness
|
||||
|
||||
newBattery = get_battery_level()
|
||||
if newBattery[0] != lastBattery[0]:
|
||||
logger.info(f'updating value for battery level to { newBattery[0] }')
|
||||
battery_level.set_state(newBattery[0])
|
||||
|
||||
if newBattery[1] != lastBattery[1]:
|
||||
logger.info(f'updating value for battery charger plugged to { newBattery[1] }')
|
||||
if newBattery[1] or newBattery[1] is None:
|
||||
battery_charging.on()
|
||||
else:
|
||||
battery_charging.off()
|
||||
lastBattery = newBattery
|
||||
|
||||
time.sleep(5)
|
||||
|
|
Loading…
Reference in New Issue