diff --git a/gateway_addon/addon_manager_proxy.py b/gateway_addon/addon_manager_proxy.py index 9678f41..21d461d 100644 --- a/gateway_addon/addon_manager_proxy.py +++ b/gateway_addon/addon_manager_proxy.py @@ -7,6 +7,7 @@ import threading import time import websocket +import inspect from .api_handler_utils import APIRequest, APIResponse from .constants import MessageType @@ -178,6 +179,9 @@ def send_pairing_prompt(self, adapter, prompt, url=None, device=None): url -- URL to site with further explanation or troubleshooting info device -- Device the prompt is associated with """ + #if str(adapter.id).endsWth('Adapter'): + # adapter.id = adapter.id[:-7] + data = { 'adapterId': adapter.id, 'prompt': prompt, @@ -200,6 +204,9 @@ def send_unpairing_prompt(self, adapter, prompt, url=None, device=None): url -- URL to site with further explanation or troubleshooting info device -- Device the prompt is associated with """ + #if str(adapter.id).endsWth('Adapter'): + # adapter.id = adapter.id[:-7] + data = { 'adapterId': adapter.id, 'prompt': prompt, @@ -477,7 +484,23 @@ def set_prop_fn(proxy, adapter): return try: - prop.set_value(msg['data']['propertyValue']) + if 'propertyMeta' in msg['data']: + print("addon_manager_proxy: message has meta") + sig = inspect.signature(prop.set_value) + supports_meta = False + if len(sig.parameters) > 1: + for param in sig.parameters.values(): + if param.name == 'meta': + supports_meta = True + break + + if supports_meta: + print("addon_manager_proxy: addon supports meta") + prop.set_value(msg['data']['propertyValue'],msg['data']['propertyMeta']) + else: + prop.set_value(msg['data']['propertyValue']) + else: + prop.set_value(msg['data']['propertyValue']) if prop.fire_and_forget: proxy.send_property_changed_notification(prop) except PropertyError: diff --git a/gateway_addon/device.py b/gateway_addon/device.py index 32546ca..8402df3 100644 --- a/gateway_addon/device.py +++ b/gateway_addon/device.py @@ -186,7 +186,7 @@ def connected_notify(self, connected): """ self.adapter.manager_proxy.send_connected_notification(self, connected) - def set_property(self, property_name, value): + def set_property(self, property_name, value, meta): """ Set a property value. @@ -197,7 +197,7 @@ def set_property(self, property_name, value): if not prop: return - prop.set_value(value) + prop.set_value(value, meta) def request_action(self, action_id, action_name, action_input): """ diff --git a/gateway_addon/ipc.py b/gateway_addon/ipc.py index 3c4c473..26757e2 100644 --- a/gateway_addon/ipc.py +++ b/gateway_addon/ipc.py @@ -66,6 +66,9 @@ def __init__(self, plugin_id, on_message, verbose=False): self.verbose = verbose self.owner_message_handler = on_message + self.developer_mode = os.path.exists('/boot/firmware/developer_ipc.txt') + #print("ipc.py: self.developer_mode: " + str(self.developer_mode)) + self.validator = jsonschema.Draft7Validator( schema=schema, resolver=Resolver() @@ -86,7 +89,7 @@ def __init__(self, plugin_id, on_message, verbose=False): while not self.registered: time.sleep(0.01) - def on_open(self): + def on_open(self, _): """Event handler for WebSocket opening.""" if self.verbose: print('IpcClient: Connected to server, registering...') @@ -102,13 +105,16 @@ def on_open(self): print('IpcClient: Failed to send message: {}'.format(e)) return - def on_message(self, message): + def on_message(self, _, message): """ Event handler for WebSocket messages. message -- the received message """ try: + if self.developer_mode: + print('gateway_addon_python: developer_ipc.txt -> on_message: \n' + str(message)) + resp = json.loads(message) self.validator.validate({'message': resp}) diff --git a/gateway_addon/property.py b/gateway_addon/property.py index 353445b..b0809fc 100644 --- a/gateway_addon/property.py +++ b/gateway_addon/property.py @@ -122,7 +122,7 @@ def get_value(self): """ return self.value - def set_value(self, value): + def set_value(self, value, meta): """ Set the current value of the property. diff --git a/requirements.txt b/requirements.txt index 30058f1..7d0e591 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ jsonschema==3.2.0 singleton-decorator==1.0.0 -websocket-client==0.57.0 +websocket-client==1.5.0 diff --git a/setup.py b/setup.py index 7a246aa..0db397e 100644 --- a/setup.py +++ b/setup.py @@ -24,7 +24,7 @@ requirements = [ 'jsonschema==3.2.0', 'singleton-decorator==1.0.0', - 'websocket-client==0.57.0', + 'websocket-client==1.5.0', ] setup(