videv sends the initial state on startup
This commit is contained in:
parent
c076f516d8
commit
04f269c750
23
base.py
23
base.py
@ -58,7 +58,6 @@ class videv_base(mqtt_base):
|
|||||||
super().__init__(mqtt_client, topic, default_values=default_values)
|
super().__init__(mqtt_client, topic, default_values=default_values)
|
||||||
self.__display_dict__ = {}
|
self.__display_dict__ = {}
|
||||||
self.__control_dict__ = {}
|
self.__control_dict__ = {}
|
||||||
self.__capabilities__ = None
|
|
||||||
|
|
||||||
def add_display(self, my_key, ext_device, ext_key, on_change_only=True):
|
def add_display(self, my_key, ext_device, ext_key, on_change_only=True):
|
||||||
"""
|
"""
|
||||||
@ -76,7 +75,8 @@ class videv_base(mqtt_base):
|
|||||||
self.__display_dict__[(id(ext_device), ext_key)] = my_key
|
self.__display_dict__[(id(ext_device), ext_key)] = my_key
|
||||||
# register a callback to listen for data from external device
|
# register a callback to listen for data from external device
|
||||||
ext_device.add_callback(ext_key, None, self.__rx_ext_device_data__, on_change_only)
|
ext_device.add_callback(ext_key, None, self.__rx_ext_device_data__, on_change_only)
|
||||||
# send default data to videv interface
|
# send initial display data to videv interface
|
||||||
|
self.__tx__(my_key, ext_device.get(ext_key))
|
||||||
|
|
||||||
def __rx_ext_device_data__(self, ext_device, ext_key, data):
|
def __rx_ext_device_data__(self, ext_device, ext_key, data):
|
||||||
my_key = self.__display_dict__[(id(ext_device), ext_key)]
|
my_key = self.__display_dict__[(id(ext_device), ext_key)]
|
||||||
@ -87,10 +87,6 @@ class videv_base(mqtt_base):
|
|||||||
if type(data) not in (str, ):
|
if type(data) not in (str, ):
|
||||||
data = json.dumps(data)
|
data = json.dumps(data)
|
||||||
self.mqtt_client.send('/'.join([self.topic, key]), data)
|
self.mqtt_client.send('/'.join([self.topic, key]), data)
|
||||||
self.__tx_capabilities__()
|
|
||||||
|
|
||||||
def __tx_capabilities__(self):
|
|
||||||
self.mqtt_client.send(self.topic + '/' + self.KEY_INFO, json.dumps(self.capabilities))
|
|
||||||
|
|
||||||
def add_control(self, my_key, ext_device, ext_key, on_change_only=True):
|
def add_control(self, my_key, ext_device, ext_key, on_change_only=True):
|
||||||
"""
|
"""
|
||||||
@ -125,18 +121,3 @@ class videv_base(mqtt_base):
|
|||||||
# add display
|
# add display
|
||||||
self.add_display(my_key, ext_device, ext_key, on_change_only_disp)
|
self.add_display(my_key, ext_device, ext_key, on_change_only_disp)
|
||||||
self.add_control(my_key, ext_device, ext_key, on_change_only_videv)
|
self.add_control(my_key, ext_device, ext_key, on_change_only_videv)
|
||||||
|
|
||||||
@property
|
|
||||||
def capabilities(self):
|
|
||||||
if self.__capabilities__ is None:
|
|
||||||
self.__capabilities__ = {}
|
|
||||||
self.__capabilities__['__type__'] = self.__class__.__name__
|
|
||||||
for key in self.__control_dict__:
|
|
||||||
if not key in self.__capabilities__:
|
|
||||||
self.__capabilities__[key] = {}
|
|
||||||
self.__capabilities__[key]['control'] = True
|
|
||||||
for key in self.__display_dict__.values():
|
|
||||||
if not key in self.__capabilities__:
|
|
||||||
self.__capabilities__[key] = {}
|
|
||||||
self.__capabilities__[key]['display'] = True
|
|
||||||
return self.__capabilities__
|
|
||||||
|
@ -449,6 +449,8 @@ class silvercrest_motion_sensor(base):
|
|||||||
KEY_UNMOUNTED = "tamper"
|
KEY_UNMOUNTED = "tamper"
|
||||||
KEY_VOLTAGE = "voltage"
|
KEY_VOLTAGE = "voltage"
|
||||||
#
|
#
|
||||||
|
TX_TYPE = base.TX_DICT
|
||||||
|
#
|
||||||
RX_KEYS = [KEY_BATTERY, KEY_BATTERY_LOW, KEY_LINKQUALITY, KEY_OCCUPANCY, KEY_UNMOUNTED, KEY_VOLTAGE]
|
RX_KEYS = [KEY_BATTERY, KEY_BATTERY_LOW, KEY_LINKQUALITY, KEY_OCCUPANCY, KEY_UNMOUNTED, KEY_VOLTAGE]
|
||||||
|
|
||||||
def __init__(self, mqtt_client, topic):
|
def __init__(self, mqtt_client, topic):
|
||||||
|
@ -26,8 +26,6 @@ class videv_switching(videv_base):
|
|||||||
def __init__(self, mqtt_client, topic, sw_device, sw_key):
|
def __init__(self, mqtt_client, topic, sw_device, sw_key):
|
||||||
super().__init__(mqtt_client, topic)
|
super().__init__(mqtt_client, topic)
|
||||||
self.add_routing(self.KEY_STATE, sw_device, sw_key)
|
self.add_routing(self.KEY_STATE, sw_device, sw_key)
|
||||||
#
|
|
||||||
self.__tx_capabilities__()
|
|
||||||
|
|
||||||
|
|
||||||
class videv_switching_timer(videv_base):
|
class videv_switching_timer(videv_base):
|
||||||
@ -38,8 +36,6 @@ class videv_switching_timer(videv_base):
|
|||||||
super().__init__(mqtt_client, topic)
|
super().__init__(mqtt_client, topic)
|
||||||
self.add_routing(self.KEY_STATE, sw_device, sw_key)
|
self.add_routing(self.KEY_STATE, sw_device, sw_key)
|
||||||
self.add_display(self.KEY_TIMER, tm_device, tm_key)
|
self.add_display(self.KEY_TIMER, tm_device, tm_key)
|
||||||
#
|
|
||||||
self.__tx_capabilities__()
|
|
||||||
|
|
||||||
|
|
||||||
class videv_switching_motion(videv_base):
|
class videv_switching_motion(videv_base):
|
||||||
@ -57,8 +53,6 @@ class videv_switching_motion(videv_base):
|
|||||||
# motion sensor state
|
# motion sensor state
|
||||||
for index, motion_sensor in enumerate(self.motion_sensors):
|
for index, motion_sensor in enumerate(self.motion_sensors):
|
||||||
self.add_display(self.KEY_MOTION_SENSOR % index, motion_sensor, motion_sensor.KEY_OCCUPANCY)
|
self.add_display(self.KEY_MOTION_SENSOR % index, motion_sensor, motion_sensor.KEY_OCCUPANCY)
|
||||||
#
|
|
||||||
self.__tx_capabilities__()
|
|
||||||
|
|
||||||
|
|
||||||
class videv_switch_brightness(videv_base):
|
class videv_switch_brightness(videv_base):
|
||||||
@ -69,8 +63,6 @@ class videv_switch_brightness(videv_base):
|
|||||||
super().__init__(mqtt_client, topic)
|
super().__init__(mqtt_client, topic)
|
||||||
self.add_routing(self.KEY_STATE, sw_device, sw_key)
|
self.add_routing(self.KEY_STATE, sw_device, sw_key)
|
||||||
self.add_routing(self.KEY_BRIGHTNESS, br_device, br_key)
|
self.add_routing(self.KEY_BRIGHTNESS, br_device, br_key)
|
||||||
#
|
|
||||||
self.__tx_capabilities__()
|
|
||||||
|
|
||||||
|
|
||||||
class videv_switch_brightness_color_temp(videv_base):
|
class videv_switch_brightness_color_temp(videv_base):
|
||||||
@ -83,8 +75,6 @@ class videv_switch_brightness_color_temp(videv_base):
|
|||||||
self.add_routing(self.KEY_STATE, sw_device, sw_key)
|
self.add_routing(self.KEY_STATE, sw_device, sw_key)
|
||||||
self.add_routing(self.KEY_BRIGHTNESS, br_device, br_key)
|
self.add_routing(self.KEY_BRIGHTNESS, br_device, br_key)
|
||||||
self.add_routing(self.KEY_COLOR_TEMP, ct_device, ct_key)
|
self.add_routing(self.KEY_COLOR_TEMP, ct_device, ct_key)
|
||||||
#
|
|
||||||
self.__tx_capabilities__()
|
|
||||||
|
|
||||||
|
|
||||||
class videv_heating(videv_base):
|
class videv_heating(videv_base):
|
||||||
@ -111,8 +101,6 @@ class videv_heating(videv_base):
|
|||||||
self.add_display(self.KEY_VALVE_TEMPERATURE_SETPOINT, heating_function, heating_function.KEY_TEMPERATURE_SETPOINT)
|
self.add_display(self.KEY_VALVE_TEMPERATURE_SETPOINT, heating_function, heating_function.KEY_TEMPERATURE_SETPOINT)
|
||||||
self.add_display(self.KEY_BOOST_TIMER, heating_function, heating_function.KEY_BOOST_TIMER)
|
self.add_display(self.KEY_BOOST_TIMER, heating_function, heating_function.KEY_BOOST_TIMER)
|
||||||
self.add_display(self.KEY_TEMPERATURE, heating_function, heating_function.KEY_TEMPERATURE_CURRENT, False)
|
self.add_display(self.KEY_TEMPERATURE, heating_function, heating_function.KEY_TEMPERATURE_CURRENT, False)
|
||||||
#
|
|
||||||
self.__tx_capabilities__()
|
|
||||||
|
|
||||||
|
|
||||||
class videv_multistate(videv_base):
|
class videv_multistate(videv_base):
|
||||||
@ -126,14 +114,10 @@ class videv_multistate(videv_base):
|
|||||||
self.__tx__(self.KEY_STATE % i, False)
|
self.__tx__(self.KEY_STATE % i, False)
|
||||||
#
|
#
|
||||||
device.add_callback(key_for_device, None, self.__index_rx__, True)
|
device.add_callback(key_for_device, None, self.__index_rx__, True)
|
||||||
#
|
|
||||||
self.__tx_capabilities__()
|
|
||||||
|
|
||||||
def __index_rx__(self, device, key, data):
|
def __index_rx__(self, device, key, data):
|
||||||
for i in range(0, self.num_states):
|
for i in range(0, self.num_states):
|
||||||
self.__tx__(self.KEY_STATE % i, i == data)
|
self.__tx__(self.KEY_STATE % i, i == data)
|
||||||
#
|
|
||||||
self.__tx_capabilities__()
|
|
||||||
|
|
||||||
|
|
||||||
class videv_audio_player(videv_base):
|
class videv_audio_player(videv_base):
|
||||||
@ -148,18 +132,10 @@ class videv_audio_player(videv_base):
|
|||||||
#
|
#
|
||||||
for audio_device in args:
|
for audio_device in args:
|
||||||
audio_device.add_callback(audio_device.KEY_TITLE, None, self.__title_rx__, True)
|
audio_device.add_callback(audio_device.KEY_TITLE, None, self.__title_rx__, True)
|
||||||
#
|
|
||||||
self.__tx_capabilities__()
|
|
||||||
|
|
||||||
def __title_rx__(self, device, key, data):
|
def __title_rx__(self, device, key, data):
|
||||||
self.__tx__(self.KEY_TITLE, data or self.NO_TITLE)
|
self.__tx__(self.KEY_TITLE, data or self.NO_TITLE)
|
||||||
|
|
||||||
@property
|
|
||||||
def capabilities(self):
|
|
||||||
super().capabilities
|
|
||||||
self.__capabilities__[self.KEY_TITLE] = {'display': True}
|
|
||||||
return self.__capabilities__
|
|
||||||
|
|
||||||
|
|
||||||
class videv_warnings(videv_base):
|
class videv_warnings(videv_base):
|
||||||
MAX_WARNINGS = 10
|
MAX_WARNINGS = 10
|
||||||
@ -188,8 +164,6 @@ class all_off(videv_base):
|
|||||||
# register mqtt callbacks for all my keys
|
# register mqtt callbacks for all my keys
|
||||||
for key in self.__inst_dict__:
|
for key in self.__inst_dict__:
|
||||||
mqtt_client.add_callback(topic + "/" + key, self.all_off)
|
mqtt_client.add_callback(topic + "/" + key, self.all_off)
|
||||||
#
|
|
||||||
self.__tx_capabilities__()
|
|
||||||
|
|
||||||
def __check_inst_capabilities__(self, name, inst):
|
def __check_inst_capabilities__(self, name, inst):
|
||||||
# fits to specified classes
|
# fits to specified classes
|
||||||
@ -220,14 +194,3 @@ class all_off(videv_base):
|
|||||||
def all_off(self, client, userdata, message):
|
def all_off(self, client, userdata, message):
|
||||||
key = message.topic[len(self.topic) + 1:]
|
key = message.topic[len(self.topic) + 1:]
|
||||||
self.__inst_dict__[key].all_off()
|
self.__inst_dict__[key].all_off()
|
||||||
self.__tx_capabilities__()
|
|
||||||
|
|
||||||
@property
|
|
||||||
def capabilities(self):
|
|
||||||
if self.__capabilities__ is None:
|
|
||||||
self.__capabilities__ = {}
|
|
||||||
self.__capabilities__['__type__'] = self.__class__.__name__
|
|
||||||
for key in self.__inst_dict__:
|
|
||||||
self.__capabilities__[key] = {}
|
|
||||||
self.__capabilities__[key]['control'] = True
|
|
||||||
return self.__capabilities__
|
|
||||||
|
@ -13,7 +13,7 @@ logger = logging.getLogger(config.APP_NAME)
|
|||||||
|
|
||||||
VERS_MAJOR = 1
|
VERS_MAJOR = 1
|
||||||
VERS_MINOR = 2
|
VERS_MINOR = 2
|
||||||
VERS_PATCH = 4
|
VERS_PATCH = 5
|
||||||
|
|
||||||
INFO_TOPIC = "__info__"
|
INFO_TOPIC = "__info__"
|
||||||
INFO_DATA = {
|
INFO_DATA = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user