Add test config

This commit is contained in:
Edward Brown 2023-08-31 17:46:12 +01:00
parent a719aab68f
commit bd9304b4ba
4 changed files with 47 additions and 21 deletions

View file

@ -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.')

View file

@ -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'}

25
haco/configs/test.py Normal file
View file

@ -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

View file

@ -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):