diff --git a/haco/callback.py b/haco/callback.py index b149f16..7f8bb1d 100644 --- a/haco/callback.py +++ b/haco/callback.py @@ -4,7 +4,7 @@ import inspect import typing from typing import _AnnotatedAlias -from haco import berry +from haco import berry, schema from haco.trigger import Trigger, Rule Signature = namedtuple('Signature', ['type', 'expression']) @@ -66,7 +66,7 @@ class Callback: known_args = {'value', 'data'} skip_args = {'control'} - if self.platform == 'tasmota': + if self.platform == schema.Tasmota.PLATFORM: berry_exp = {} for name, (type, exp) in arg_data.items(): @@ -76,7 +76,7 @@ class Callback: continue if name not in known_args: - msg = f'Callback {self.function_name} argument {name} requires a Berry expression annotation.' + msg = f'Callback "{self.function_name}" argument "{name}" requires a Berry expression annotation.' raise ValueError(msg) exp = name @@ -104,6 +104,6 @@ class Callback: self.function_tasmota - if self.platform == 'tasmota': + if self.platform == schema.Tasmota.PLATFORM: if not self.trigger: - raise ValueError(f'Callback {self.function_name} must have a trigger.') + raise ValueError(f'Callback "{self.function_name}" must have a trigger.') diff --git a/haco/configs/air_fryer.py b/haco/configs/proscenic_t21.py similarity index 89% rename from haco/configs/air_fryer.py rename to haco/configs/proscenic_t21.py index 4d5eb8e..8ad974c 100644 --- a/haco/configs/air_fryer.py +++ b/haco/configs/proscenic_t21.py @@ -20,9 +20,9 @@ def tasmota(value: int): time_remaining = Sensor( name='Time Remaining', - uom='minutes', + uom=Sensor.UOM.TIME_MINUTES, icon='timer', - device_class='DURATION' + device_class=Sensor.DEVICE_CLASS.DURATION ) @@ -34,7 +34,7 @@ def tasmota(value: int): cooking_time = Number( name='Cooking Time', number_range=range(1, 60), - uom='minutes', + uom=Number.UOM.TIME_MINUTES, icon='timer' ) @@ -52,7 +52,7 @@ cooking_temp_f = Number( 'Cooking Temperature (F)', number_range=range(170, 399), mode='slider', - uom='°F', + uom=Number.UOM.TEMP_FAHRENHEIT, icon='temperature-fahrenheit' ) @@ -71,7 +71,7 @@ cooking_temp_c = Number( 'Cooking Temperature (C)', number_range=range(77, 204), mode='slider', - uom='°C', + uom=Number.UOM.TEMP_CELSIUS, icon='temperature-celsius' ) @@ -103,7 +103,7 @@ add_tuya_io(power, int, 1, 1) delay_time = Number( name='Delay Time', number_range=range(0, 720), - uom='minutes', + uom=Sensor.UOM.TIME_MINUTES, icon='timer-pause' ) @@ -112,22 +112,21 @@ add_tuya_io(delay_time, int, 2, 6) status = Sensor( name='Status', icon='playlist-play', - device_class='ENUM' + device_class=Sensor.DEVICE_CLASS.ENUM ) -keep_warm_time = Number( - name='Keep Warm Time', - number_range=range(0, 120), - uom='minutes', - icon='timer-sync' -) - -add_tuya_io(keep_warm_time, int, 2, 105) - @status.callback(trigger=tuya.received(4, 5)) def tasmota(value: int): return ['Ready', 'Delayed Cook', 'Cooking', 'Keep Warm', 'Off', 'Cooking Complete'][value] +keep_warm_time = Number( + name='Keep Warm Time', + number_range=range(0, 120), + uom=Sensor.UOM.TIME_MINUTES, + icon='timer-sync' +) + +add_tuya_io(keep_warm_time, int, 2, 105) DEVICE_CONFIG = {'run_config_post': f'def () return tasmota.cmd("TuyaSend0") end'} diff --git a/haco/configs/test.py b/haco/configs/test.py new file mode 100644 index 0000000..ea150a9 --- /dev/null +++ b/haco/configs/test.py @@ -0,0 +1,25 @@ +from haco import Select, Tasmota + +greeter = Select('Greeter', icon='hand-wave', options=['Hi', 'Hello Word', 'Bienvenue']) + +set_greeting = """ +def (value,data) + + import string + var cmd=string.format('var16 %s',value) + tasmota.cmd(cmd) + + print(string.format('haco says: %s!',value)) + +end +""" + + +@greeter.callback() +def ha(value) -> Tasmota[str, set_greeting]: + return value + + +@greeter.callback(trigger='Var16#state') +def tasmota(value: str): + return value diff --git a/haco/number.py b/haco/number.py index c87057b..9da7c87 100644 --- a/haco/number.py +++ b/haco/number.py @@ -1,10 +1,12 @@ from haco.control import Control +from haco.data.uom import Uom from haco.tools import get_range_pair class Number(Control): NAME = 'number' + UOM = Uom # def init(name, number_range, mode, step, uom, entity_id, icon, callbacks) def __init__(self, name, number_range: range, icon=None, mode=None, step=None, uom=None):