From fec899c3fbe4b08da5e2a61d0c97db8c118b8971 Mon Sep 17 00:00:00 2001
From: jkerdreux-imt <jerome.kerdreux@imt-atlantique.fr>
Date: Tue, 4 Feb 2025 18:05:19 +0100
Subject: [PATCH] Starting devices

---
 .../protocols/ZwaveJS/xaal/zwavejs/const.py   |  1 +
 .../protocols/ZwaveJS/xaal/zwavejs/devices.py | 45 +++++++++++++++++++
 devices/protocols/ZwaveJS/xaal/zwavejs/gw.py  | 32 +++++++------
 3 files changed, 61 insertions(+), 17 deletions(-)
 create mode 100644 devices/protocols/ZwaveJS/xaal/zwavejs/const.py
 create mode 100644 devices/protocols/ZwaveJS/xaal/zwavejs/devices.py

diff --git a/devices/protocols/ZwaveJS/xaal/zwavejs/const.py b/devices/protocols/ZwaveJS/xaal/zwavejs/const.py
new file mode 100644
index 00000000..f5b1f381
--- /dev/null
+++ b/devices/protocols/ZwaveJS/xaal/zwavejs/const.py
@@ -0,0 +1 @@
+EVT_VALUE_UPDATED = "value updated"
diff --git a/devices/protocols/ZwaveJS/xaal/zwavejs/devices.py b/devices/protocols/ZwaveJS/xaal/zwavejs/devices.py
new file mode 100644
index 00000000..50ada5d0
--- /dev/null
+++ b/devices/protocols/ZwaveJS/xaal/zwavejs/devices.py
@@ -0,0 +1,45 @@
+from xaal.schemas import devices
+
+from zwave_js_server.model.node import Node
+from zwave_js_server.event import Event
+
+from logging import getLogger
+
+logger = getLogger(__name__)
+
+
+def build_devices(node: Node):
+    logger.warning(f"{node.node_id} {node.device_config.manufacturer}/{node.device_config.label} ")
+    # node.on("value updated", self.value_updated)
+    # pdb.set_trace()
+    for k in node.values:
+        value = node.values.get(k)
+        if value:
+            print(f"[{k}] {value.endpoint} {value.property_name} => {value.value}")
+    # pprint(node.data)
+
+
+class ZwaveDevice(object):
+    def __init__(self, node: Node):
+        self.node = node
+
+    def setup(self):
+        pass
+
+    def update(self, event: Event):
+        pass
+
+
+class PowerRelay(ZwaveDevice):
+    def __init__(self, node):
+        super().__init__(node)
+        self.dev = devices.powerrelay()
+
+
+class PowerMeter(ZwaveDevice):
+    def __init__(self, node):
+        super().__init__(node)
+        self.dev = devices.powermeter()
+
+    def update(self, event: Event):
+        print(event)
diff --git a/devices/protocols/ZwaveJS/xaal/zwavejs/gw.py b/devices/protocols/ZwaveJS/xaal/zwavejs/gw.py
index 9b33f22d..cb3d1c9c 100644
--- a/devices/protocols/ZwaveJS/xaal/zwavejs/gw.py
+++ b/devices/protocols/ZwaveJS/xaal/zwavejs/gw.py
@@ -2,10 +2,10 @@
 
 import asyncio
 
-# import pdb
+import pdb
 import logging
 
-# from pprint import pprint
+from pprint import pprint
 
 
 from zwave_js_server.client import Client as ZwaveClient
@@ -15,6 +15,9 @@ from xaal.lib import AsyncEngine
 from xaal.schemas import devices
 
 from .cmdclass import COMMAND_CLASS
+from .devices import build_devices
+from .const import EVT_VALUE_UPDATED
+
 
 PACKAGE_NAME = 'xaal.zwavejs'
 
@@ -23,8 +26,10 @@ logger = logging.getLogger(__name__)
 logging.getLogger("zwave_js_server").setLevel(logging.WARNING)
 
 
-# URL = "ws://10.77.3.143:3000"
-URL = "ws://localhost:3000"
+URL = "ws://10.77.3.143:3000"
+# URL = "ws://localhost:3000"
+
+DEBUG = True
 
 
 class GW:
@@ -53,26 +58,19 @@ class GW:
         nodes = self.client.driver.controller.nodes
         for node in nodes.values():
             if node.ready:
-                logger.warning(f"{node.node_id} {node.device_config.manufacturer}/{node.device_config.label} ")
-                node.on("value updated", self.on_value_updated)
-                for k in node.values:
-                    value = node.values.get(k)
-                    if value:
-                        print(f"{k} {value.property_name} => {value.value}")
-            # pprint(node.data)
-
-    def on_value_updated(self, event):
+                build_devices(node)
+                if DEBUG:
+                    node.on(EVT_VALUE_UPDATED, self.dump_event)
+
+    def dump_event(self, event):
         cmd_class = int(event["args"]["commandClass"])
         nodeId = event["nodeId"]
         value = event["value"]
+        # pdb.set_trace()
         prop = event["args"]["property"]
         if prop in ["value", "currentValue", "targetValue"]:
             prop = value.property_key_name
         logger.warning(f"{nodeId}.{value.endpoint} {COMMAND_CLASS(cmd_class)}={prop}=>{event["args"]["newValue"]}")
-        # if cmd_class == 49 and nodeId == 4:
-        # pdb.set_trace()
-
-        # print(event)
 
 
 def setup(eng):
-- 
GitLab