From 09cab876435afc3ee1777a00d138d04b11bc1d1f Mon Sep 17 00:00:00 2001 From: benoit5672 Date: Fri, 6 Feb 2026 15:27:22 +0100 Subject: [PATCH] Implementation mode distant, similair au plugin jeeZigbee (z2m) --- core/class/zwavejs.class.php | 65 ++++++++++++++++++++++------------- core/i18n/de_DE.json | 1 + core/i18n/en_US.json | 3 +- core/i18n/es_ES.json | 1 + core/i18n/fr_FR.json | 1 + core/i18n/id_ID.json | 1 + core/i18n/it_IT.json | 1 + core/i18n/ja_JP.json | 1 + core/i18n/pt_PT.json | 1 + core/i18n/ru_RU.json | 1 + core/i18n/tr.json | 1 + desktop/php/zwavejs.php | 3 +- docs/fr_FR/index.md | 4 ++- plugin_info/configuration.php | 5 +-- plugin_info/install.php | 18 ++++++++-- 15 files changed, 77 insertions(+), 30 deletions(-) diff --git a/core/class/zwavejs.class.php b/core/class/zwavejs.class.php index 228f1487..d421aef5 100644 --- a/core/class/zwavejs.class.php +++ b/core/class/zwavejs.class.php @@ -138,7 +138,7 @@ public static function cron() { } public static function cronHourly() { - if (config::byKey('zwavejs::mode', 'zwavejs') == 'distant') { + if (config::byKey('zwavejs::mode', __CLASS__) == 'distant') { self::getNodes('health'); return; } @@ -150,7 +150,7 @@ public static function cronHourly() { } public static function configureSettings($_path) { - if (config::byKey('zwavejs::mode', 'zwavejs') == 'distant') { + if (config::byKey('zwavejs::mode', __CLASS__) == 'distant') { return; } $file = $_path . '/settings.json'; @@ -281,7 +281,7 @@ public static function postConfig_zwavejs_mode($_value) { } public static function additionnalDependancyCheck() { - if (config::byKey('zwavejs::mode', 'zwavejs') == 'distant') { + if (config::byKey('zwavejs::mode', __CLASS__) == 'distant') { $return = array(); $return['state'] = 'ok'; return $return; @@ -297,7 +297,7 @@ public static function additionnalDependancyCheck() { } public static function dependancy_info() { - if (config::byKey('zwavejs::mode', 'zwavejs') == 'distant') { + if (config::byKey('zwavejs::mode', __CLASS__) == 'distant') { $return = array(); $return['state'] = 'ok'; return $return; @@ -314,29 +314,34 @@ public static function dependancy_info() { } public static function deamon_info() { - if (config::byKey('zwavejs::mode', 'zwavejs') == 'distant') { - $return = array(); - $return['log'] = __CLASS__; - $return['launchable'] = 'ok'; - $return['state'] = 'ok'; - return $return; - } $return = array(); $return['log'] = __CLASS__; $return['launchable'] = 'ok'; $return['state'] = 'nok'; + switch (config::byKey('zwavejs::mode', __CLASS__)) { + case 'local': + break; + case 'distant': + break; + default: + $return['launchable'] = 'nok'; + $return['launchable_message'] = __("Veuillez sélectionner le mode d'installation", __FILE__); + return $return; + } if (self::isRunning()) { $return['state'] = 'ok'; } - $port = config::byKey('port', __CLASS__); - if ($port == 'none') { - $return['launchable'] = 'nok'; - $return['launchable_message'] = __("Le port n'est pas configuré", __FILE__); - } else { - $port = jeedom::getUsbMapping($port); - if (is_array($port) || @!file_exists($port)) { + if (config::byKey('zwavejs::mode', __CLASS__) == 'local') { + $port = config::byKey('port', __CLASS__); + if ($port == 'none') { $return['launchable'] = 'nok'; $return['launchable_message'] = __("Le port n'est pas configuré", __FILE__); + } else { + $port = jeedom::getUsbMapping($port); + if (is_array($port) || @!file_exists($port)) { + $return['launchable'] = 'nok'; + $return['launchable_message'] = __("Le port n'est pas configuré", __FILE__); + } } } if (!class_exists('mqtt2')) { @@ -358,24 +363,38 @@ public static function deamon_info() { } public static function isRunning() { - if (config::byKey('zwavejs::mode', 'zwavejs') == 'distant') { - return true; + if (config::byKey('zwavejs::mode', __CLASS__) == 'distant') { + return (config::byKey('mqtt2Registered', __CLASS__, 0) == 1); } if (!empty(system::ps('server/bin/www.js'))) { return true; } return false; } + + public static function postConfig_mqtt_topic($_value = null) { + log::add(__CLASS__, 'debug', '[' . __FUNCTION__ . '] ' . 'Inscription au plugin mqtt2'); + if (!class_exists('mqtt2')) { + return; + } + if (method_exists('mqtt2', 'removePluginTopicByPlugin')) { + mqtt2::removePluginTopicByPlugin(__CLASS__); + config::save('mqtt2Registered', 0, __CLASS__); + } + mqtt2::addPluginTopic(__CLASS__, config::byKey('prefix', __CLASS__, 'zwave')); + config::save('mqtt2Registered', 1, __CLASS__); + } public static function deamon_start($_debug = false) { - if (config::byKey('zwavejs::mode', 'zwavejs') == 'distant') { + if (config::byKey('zwavejs::mode', __CLASS__) == 'distant') { + self::postConfig_mqtt_topic(); return; } // log::add(__CLASS__, 'debug', '[' . __FUNCTION__ . '] ' . 'Inscription au plugin mqtt2'); config::save('controllerStatus', 'none', __CLASS__); config::save('driverStatus', 0, __CLASS__); self::deamon_stop(); - mqtt2::addPluginTopic(__CLASS__, config::byKey('prefix', __CLASS__, 'zwave')); + self::postConfig_mqtt_topic(); $deamon_info = self::deamon_info(); if ($deamon_info['launchable'] != 'ok') { throw new Exception(__('Veuillez vérifier la configuration', __FILE__)); @@ -432,7 +451,7 @@ public static function deamon_start($_debug = false) { } public static function deamon_stop() { - if (config::byKey('zwavejs::mode', 'zwavejs') == 'distant') { + if (config::byKey('zwavejs::mode', __CLASS__) == 'distant') { return; } log::add(__CLASS__, 'info', __('Arrêt du démon ZwaveJS', __FILE__)); diff --git a/core/i18n/de_DE.json b/core/i18n/de_DE.json index 236658df..be2548ce 100644 --- a/core/i18n/de_DE.json +++ b/core/i18n/de_DE.json @@ -62,6 +62,7 @@ "ZwaveJs UI": "ZwaveJs-Benutzeroberfläche", "Interface ZwaveJs UI": "ZwaveJs UI-Schnittstelle", "Mode": "Mode", + "A configurer": "Zum Konfigurieren", "Distant": "Fernbedienung", "Local": "Lokal", "Port du contrôleur Z-Wave": "Z-Wave-Controller-Port", diff --git a/core/i18n/en_US.json b/core/i18n/en_US.json index 9ad8fbbe..5fdc8786 100644 --- a/core/i18n/en_US.json +++ b/core/i18n/en_US.json @@ -61,7 +61,8 @@ "Le plugin jMQTT est installé, veuillez vérifier la configuration du broker dans le plugin jMQTT et la reporter, si nécessaire, dans le plugin MQTT Manager.": "The jMQTT plugin is installed, please check the configuration of the broker in the jMQTT plugin and report it, if necessary, in the MQTT Manager plugin", "ZwaveJs UI": "ZwaveJs UI", "Interface ZwaveJs UI": "ZwaveJs UI Interface", - "Mode": "Fashion", + "Mode": "Mode", + "A configurer": "To configure", "Distant": "Distant", "Local": "Local", "Port du contrôleur Z-Wave": "Z-Wave controller port", diff --git a/core/i18n/es_ES.json b/core/i18n/es_ES.json index e2231623..7361b961 100644 --- a/core/i18n/es_ES.json +++ b/core/i18n/es_ES.json @@ -62,6 +62,7 @@ "ZwaveJs UI": "Interfaz de usuario de ZwaveJs", "Interface ZwaveJs UI": "Interfaz de usuario de ZwaveJs", "Mode": "Moda", + "A configurer": "Para configurar", "Distant": "Remoto", "Local": "Local", "Port du contrôleur Z-Wave": "Puerto del controlador Z-Wave", diff --git a/core/i18n/fr_FR.json b/core/i18n/fr_FR.json index d2ac376f..367d6195 100644 --- a/core/i18n/fr_FR.json +++ b/core/i18n/fr_FR.json @@ -62,6 +62,7 @@ "ZwaveJs UI": "ZwaveJs UI", "Interface ZwaveJs UI": "Interface ZwaveJs UI", "Mode": "Mode", + "A configurer": "A configurer", "Distant": "Distant", "Local": "Local", "Port du contrôleur Z-Wave": "Port du contrôleur Z-Wave", diff --git a/core/i18n/id_ID.json b/core/i18n/id_ID.json index 53bb2224..be2cfc38 100644 --- a/core/i18n/id_ID.json +++ b/core/i18n/id_ID.json @@ -62,6 +62,7 @@ "ZwaveJs UI": "ZwaveJs UI", "Interface ZwaveJs UI": "Interface ZwaveJs UI", "Mode": "Mode", + "A configurer": "A configurer", "Distant": "Distant", "Local": "Local", "Port du contrôleur Z-Wave": "Port du contrôleur Z-Wave", diff --git a/core/i18n/it_IT.json b/core/i18n/it_IT.json index 53bb2224..37ca8db7 100644 --- a/core/i18n/it_IT.json +++ b/core/i18n/it_IT.json @@ -61,6 +61,7 @@ "Le plugin jMQTT est installé, veuillez vérifier la configuration du broker dans le plugin jMQTT et la reporter, si nécessaire, dans le plugin MQTT Manager.": "Le plugin jMQTT est installé, veuillez vérifier la configuration du broker dans le plugin jMQTT et la reporter, si nécessaire, dans le plugin MQTT Manager", "ZwaveJs UI": "ZwaveJs UI", "Interface ZwaveJs UI": "Interface ZwaveJs UI", + "A configurer": "A configurer", "Mode": "Mode", "Distant": "Distant", "Local": "Local", diff --git a/core/i18n/ja_JP.json b/core/i18n/ja_JP.json index 53bb2224..be2cfc38 100644 --- a/core/i18n/ja_JP.json +++ b/core/i18n/ja_JP.json @@ -62,6 +62,7 @@ "ZwaveJs UI": "ZwaveJs UI", "Interface ZwaveJs UI": "Interface ZwaveJs UI", "Mode": "Mode", + "A configurer": "A configurer", "Distant": "Distant", "Local": "Local", "Port du contrôleur Z-Wave": "Port du contrôleur Z-Wave", diff --git a/core/i18n/pt_PT.json b/core/i18n/pt_PT.json index 9dc4c0d5..ce61a3d9 100644 --- a/core/i18n/pt_PT.json +++ b/core/i18n/pt_PT.json @@ -62,6 +62,7 @@ "ZwaveJs UI": "IU do ZwaveJs", "Interface ZwaveJs UI": "Interface de IU do ZwaveJs", "Mode": "Moda", + "A configurer": "Para configurar", "Distant": "Remoto", "Local": "Local", "Port du contrôleur Z-Wave": "Porta do controlador Z-Wave", diff --git a/core/i18n/ru_RU.json b/core/i18n/ru_RU.json index 53bb2224..be2cfc38 100644 --- a/core/i18n/ru_RU.json +++ b/core/i18n/ru_RU.json @@ -62,6 +62,7 @@ "ZwaveJs UI": "ZwaveJs UI", "Interface ZwaveJs UI": "Interface ZwaveJs UI", "Mode": "Mode", + "A configurer": "A configurer", "Distant": "Distant", "Local": "Local", "Port du contrôleur Z-Wave": "Port du contrôleur Z-Wave", diff --git a/core/i18n/tr.json b/core/i18n/tr.json index 53bb2224..be2cfc38 100644 --- a/core/i18n/tr.json +++ b/core/i18n/tr.json @@ -62,6 +62,7 @@ "ZwaveJs UI": "ZwaveJs UI", "Interface ZwaveJs UI": "Interface ZwaveJs UI", "Mode": "Mode", + "A configurer": "A configurer", "Distant": "Distant", "Local": "Local", "Port du contrôleur Z-Wave": "Port du contrôleur Z-Wave", diff --git a/desktop/php/zwavejs.php b/desktop/php/zwavejs.php index bc871879..74da3a79 100644 --- a/desktop/php/zwavejs.php +++ b/desktop/php/zwavejs.php @@ -24,10 +24,11 @@ $eqLogics = eqLogic::byType($plugin->getId()); $controllerStatus = config::byKey('controllerStatus', 'zwavejs', 'none'); $driverStatus = config::byKey('driverStatus', 'zwavejs', 0); +$pluginMode = config::byKey('zwavejs::mode', 'zwavejs', 'local'); if (!zwavejs::isRunning()) { echo '
"; -} else if ($driverStatus != 1) { +} else if ($pluginMode == 'local' && $driverStatus != 1) { echo '
"; } else { diff --git a/docs/fr_FR/index.md b/docs/fr_FR/index.md index 95184349..69c58bf5 100644 --- a/docs/fr_FR/index.md +++ b/docs/fr_FR/index.md @@ -20,7 +20,9 @@ Le reste des dépendances consiste au téléchargement, à la compilation et à ## Configuration du plugin -Concernant la configuration du plugin, le point primordial est la bonne sélection du **port du contrôleur Z-Wave** correspondant à l'interface physique sur laquelle le contrôleur est connecté. +Il existe 2 modes pour le plugin : local, tout est sur votre Jeedom, c'est le mode recommandé. Pour les utilisateurs avancés, il est possible d'utiliser le mode distant; dans ce cas Jeedom ne gère pas Zigbee2MQTT, celui doit etre installé par vos soins (en général sur un docker sur jeedom ou sur une autre machine). Attention en mode distant il faut que Mqtt manager et ZwaveJS soient connectés au même broker mqtt (mosquitto) + +Concernant la configuration du plugin, si vous etes en mode local, le point primordial est la bonne sélection du **port du contrôleur Z-Wave** correspondant à l'interface physique sur laquelle le contrôleur est connecté. Les autres paramétrages possibles sont : diff --git a/plugin_info/configuration.php b/plugin_info/configuration.php index 20140843..ffea142d 100644 --- a/plugin_info/configuration.php +++ b/plugin_info/configuration.php @@ -34,15 +34,16 @@ {{Interface ZwaveJs UI}} - +