ZWaveJS avec daemon docker distant

Salut
Oui c’est tout l’intérêt.
Tu pourras enfin déporter l’antenne docker ZWave pour une meilleure réception ou switcher facilement de Jeedom sans la stopper et sans galerer avec les changements de port USB

Je vais arranger le code et je proposerai un PR a l’equipe Jeedom s’ils sont d’accord

2 « J'aime »

Merci à ceux d’entre vous qui m’ont envoyé des messages
Je progresse…encore quelques détails à régler

2 « J'aime »

Salut

Ca y est j’ai terminé. Je vous laisse tester et me dire si ca marche:

Pas besoin de lancer les dépendances, ca prend moins de place sur le disque

cd /var/www/html/plugins
mv zwavejs zwavejs.orig
git clone https://github.com/lxrootard/zwavejs
2 « J'aime »

Chez moi ca fonctionne bien et c’est très facile de changer de release juste avec un docker pull.
Je viens de tester la dernière release zwave-js-ui v9.9.1 ca marche sans problèmes.

@defmy @arcameca @Arnaud_69 avez vous testé?

Le plus dur est fait, je pourrais facilement ajouter un mode docker local managé.

Bonjour,
J’ai ZWaveJs en docker à part.
J’ai aussi WatchTower qui met à jour en auto tout ce qu’il peut, sauf Jeedom (à cause des dépendances).

Zwave :
zwave-js-ui: 9.9.1.f6dff21
zwave-js: 12.4.4

Jeedom : 4.4.2 Beta

Aucun problème, sauf à un moment avec le Soft Reset et ma Gen 5

Édit : j’ai répondu à côté de ta question.
J’aimerai tester ton plugin modifié. Je verrai quand je pourrai le faire.
Merci pour ta modif

Salut,

Non, comme je te l’ai dit mon ZWaveJs ne tourne pas actuellement sous Docker mais sur une VM, je ne suis pas super à l’aise avec docker donc je vais prendre le temps de me faire une VM de test pour mettre ça en place et tester avant de le passer en prod.

Merci pour le taf en tout cas.

Merci pour ton feedback

Rien à voir avec le plugin mais j’ai moi aussi quelques problèmes au démarrage avec ma Gen5:
ca démarre puis plantage puis soft reset et finalement c’est ok. Peut-être un défaut de jeunesse de la v9.9.1?

       ██╗ ███████╗
                      ╚══███╔╝        ██║    ██║ ██╔══██╗ ██║   ██║ ██╔════╝          ██║ ██╔════╝
                        ███╔╝  █████╗ ██║ █╗ ██║ ███████║ ██║   ██║ █████╗            ██║ ███████╗
                       ███╔╝   ╚════╝ ██║███╗██║ ██╔══██║ ╚██╗ ██╔╝ ██╔══╝       ██   ██║ ╚════██║
                      ███████╗        ╚███╔███╔╝ ██║  ██║  ╚████╔╝  ███████╗     ╚█████╔╝ ███████║
                      ╚══════╝         ╚══╝╚══╝  ╚═╝  ╚═╝   ╚═══╝   ╚══════╝      ╚════╝  ╚══════╝
18:24:49.137 DRIVER   version 12.4.4
18:24:49.140 DRIVER
18:24:50.164 CONFIG   version 12.4.4
18:24:52.950 CNTRLR   querying Serial API capabilities...
18:24:52.991 CNTRLR   received API capabilities:
                        firmware version:    1.2
                        manufacturer ID:     0x86
                        product type:        0x01
                        product ID:          0x5a
                        supported functions:
                        · GetSerialApiInitData (0x02)
                        · SetApplicationNodeInformation (0x03)
                        · ApplicationCommand (0x04)
                        · GetControllerCapabilities (0x05)
                        · SetSerialApiTimeouts (0x06)
                        · GetSerialApiCapabilities (0x07)
                        · SoftReset (0x08)
                        · GetProtocolVersion (0x09)
                        · SerialAPIStarted (0x0a)
                        · SerialAPISetup (0x0b)
                        · SetRFReceiveMode (0x10)
                        · UNKNOWN_FUNC_SET_SLEEP_MODE (0x11)
                        · FUNC_ID_ZW_SEND_NODE_INFORMATION (0x12)
                        · SendData (0x13)
                        · SendDataMulticast (0x14)
                        · GetControllerVersion (0x15)
                        · SendDataAbort (0x16)
                        · FUNC_ID_ZW_R_F_POWER_LEVEL_SET (0x17)
                        · FUNC_ID_ZW_GET_RANDOM (0x1c)
                        · GetControllerId (0x20)
                        · UNKNOWN_FUNC_MEMORY_GET_BYTE (0x21)
                        · UNKNOWN_FUNC_MEMORY_PUT_BYTE (0x22)
                        · UNKNOWN_FUNC_MEMORY_GET_BUFFER (0x23)
                        · UNKNOWN_FUNC_MEMORY_PUT_BUFFER (0x24)
                        · EnterBootloader (0x27)
                        · UNKNOWN_FUNC_UNKNOWN_0x28 (0x28)
                        · GetNVMId (0x29)
                        · ExtNVMReadLongBuffer (0x2a)
                        · ExtNVMWriteLongBuffer (0x2b)
                        · ExtNVMReadLongByte (0x2c)
                        · ExtExtWriteLongByte (0x2d)
                        · NVMOperations (0x2e)
                        · undefined (0x2f)
                        · undefined (0x37)
                        · undefined (0x38)
                        · UNKNOWN_FUNC_ClearNetworkStats (0x39)
                        · UNKNOWN_FUNC_GetNetworkStats (0x3a)
                        · GetBackgroundRSSI (0x3b)
                        · undefined (0x3c)
                        · UNKNOWN_FUNC_RemoveNodeIdFromNetwork (0x3f)
                        · GetNodeProtocolInfo (0x41)
                        · HardReset (0x42)
                        · FUNC_ID_ZW_REPLICATION_COMMAND_COMPLETE (0x44)
                        · FUNC_ID_ZW_REPLICATION_SEND_DATA (0x45)
                        · AssignReturnRoute (0x46)
                        · DeleteReturnRoute (0x47)
                        · RequestNodeNeighborUpdate (0x48)
                        · ApplicationUpdateRequest (0x49)
                        · AddNodeToNetwork (0x4a)
                        · RemoveNodeFromNetwork (0x4b)
                        · FUNC_ID_ZW_CREATE_NEW_PRIMARY (0x4c)
                        · FUNC_ID_ZW_CONTROLLER_CHANGE (0x4d)
                        · AssignPriorityReturnRoute (0x4f)
                        · FUNC_ID_ZW_SET_LEARN_MODE (0x50)
                        · AssignSUCReturnRoute (0x51)
                        · FUNC_ID_ZW_REQUEST_NETWORK_UPDATE (0x53)
                        · SetSUCNodeId (0x54)
                        · DeleteSUCReturnRoute (0x55)
                        · GetSUCNodeId (0x56)
                        · UNKNOWN_FUNC_SEND_SUC_ID (0x57)
                        · AssignPrioritySUCReturnRoute (0x58)
                        · FUNC_ID_ZW_EXPLORE_REQUEST_INCLUSION (0x5e)
                        · undefined (0x5f)
                        · RequestNodeInfo (0x60)
                        · RemoveFailedNode (0x61)
                        · IsFailedNode (0x62)
                        · ReplaceFailedNode (0x63)
                        · UNKNOWN_FUNC_UNKNOWN_0x66 (0x66)
                        · UNKNOWN_FUNC_UNKNOWN_0x67 (0x67)
                        · FirmwareUpdateNVM (0x78)
                        · GetRoutingInfo (0x80)
                        · UNKNOWN_FUNC_LOCK_ROUTE_RESPONSE (0x90)
                        · GetPriorityRoute (0x92)
                        · SetPriorityRoute (0x93)
                        · UNKNOWN_FUNC_UNKNOWN_0x98 (0x98)
                        · FUNC_ID_APPLICATION_SLAVE_COMMAND_HANDLER (0xa1)
                        · UNKNOWN_FUNC_UNKNOWN_0xB4 (0xb4)
                        · UNKNOWN_FUNC_WATCH_DOG_ENABLE (0xb6)
                        · UNKNOWN_FUNC_WATCH_DOG_DISABLE (0xb7)
                        · UNKNOWN_FUNC_WATCH_DOG_KICK (0xb8)
                        · UNKNOWN_FUNC_UNKNOWN_0xB9 (0xb9)
                        · UNKNOWN_FUNC_RF_POWERLEVEL_GET (0xba)
                        · UNKNOWN_FUNC_GET_LIBRARY_TYPE (0xbd)
                        · UNKNOWN_FUNC_SEND_TEST_FRAME (0xbe)
                        · UNKNOWN_FUNC_GET_PROTOCOL_STATUS (0xbf)
                        · FUNC_ID_ZW_SET_PROMISCUOUS_MODE (0xd0)
                        · FUNC_ID_PROMISCUOUS_APPLICATION_COMMAND_HANDLER (0xd1)
                        · UNKNOWN_FUNC_UNKNOWN_0xD2 (0xd2)
                        · UNKNOWN_FUNC_UNKNOWN_0xD3 (0xd3)
                        · UNKNOWN_FUNC_UNKNOWN_0xD4 (0xd4)
                        · undefined (0xee)
                        · UNKNOWN_FUNC_UNKNOWN_0xEF (0xef)
18:24:52.996 CNTRLR   querying version info...
18:24:53.020 CNTRLR   received version info:
                        controller type: Static Controller
                        library version: Z-Wave 6.07
18:24:53.023 CNTRLR   querying protocol version info...
18:24:53.055 CNTRLR   received protocol version info:
                        protocol type:             Z-Wave
                        protocol version:          6.7.0
                        appl. framework build no.: 97
18:24:53.058 CNTRLR   querying serial API setup capabilities...
18:24:53.080 CNTRLR   supported serial API setup commands:
                      · GetSupportedCommands
                      · SetTxStatusReport
                      · SetPowerlevel
                      · GetPowerlevel
                      · GetMaximumPayloadSize
18:24:53.084 CNTRLR   querying controller IDs...
18:24:53.106 CNTRLR   received controller IDs:
                        home ID:     0xe0d48973
                        own node ID: 1
18:24:53.124 CNTRLR   Performing soft reset...
18:24:53.142 CNTRLR   Waiting for the controller to reconnect...
18:24:54.645 CNTRLR   Re-opening serial port...
18:24:55.662 CNTRLR   Waiting for the Serial API to start...
18:24:56.057 CNTRLR   Serial API started
18:24:56.107 CNTRLR   supported Z-Wave features:
                        · SmartStart
18:24:56.110 CNTRLR   querying controller capabilities...
18:24:56.138 CNTRLR   received controller capabilities:
                        controller role:      primary
                        is the SUC:           true
                        started this network: true
                        SIS is present:       true
                        was real primary:     true
18:24:56.141 CNTRLR   Enabling TX status report...
18:24:56.184 CNTRLR   Enabling TX status report successful...
18:24:56.186 CNTRLR   finding SUC...
18:24:56.212 CNTRLR   This is the SUC
18:24:56.214 CNTRLR   querying additional controller information...
18:24:56.332 CNTRLR   received additional controller information:
                        Z-Wave API version:         8 (legacy)
                        Z-Wave chip type:           ZW050x
                        node type                   Controller
                        controller role:            primary
                        controller is the SIS:      true
                        controller supports timers: false
                        nodes in the network:       1, 13, 15
18:24:56.582 CNTRLR   [Node 001] Embedded device config loaded
18:24:56.599 CNTRLR   [Node 013] Embedded device config loaded
18:24:56.626 CNTRLR   [Node 015] Embedded device config loaded
18:24:56.648 CNTRLR   setting serial API timeouts: ack = 1000 ms, byte = 150 ms
18:24:56.683 CNTRLR   serial API timeouts overwritten. The old values were: ack = 1500 ms, byte = 15
                      0 ms
18:24:56.685 CNTRLR   Interview completed
18:24:56.873 CNTRLR   [Node 001] The node is alive.
18:24:57.278 CNTRLR   [Node 001] The node is ready to be used
18:24:57.282 CNTRLR   Interviewing nodes and/or determining their status: 15, 13
18:24:57.286 CNTRLR » [Node 015] pinging the node...
18:24:57.313 CNTRLR   [Node 013] The node is asleep.
18:24:57.435 CNTRLR   Retrieving priority route to node 13...
18:24:57.447 CNTRLR   [Node 013] The node is ready to be used
18:24:58.543 CNTRLR   Failed to execute controller command after 1/3 attempts. Scheduling next try i
                      n 100 ms.
18:24:59.652 CNTRLR   Failed to execute controller command after 2/3 attempts. Scheduling next try i
                      n 1100 ms.
18:25:00.483 DRIVER   unexpected response, discarding...
18:25:01.812 CNTRLR   Failed to execute controller command after 1/3 attempts. Scheduling next try i
                      n 100 ms.
18:25:02.816 DRIVER   unexpected response, discarding...
18:25:02.837 DRIVER     no handlers registered!
18:25:02.927 CNTRLR   Failed to execute controller command after 2/3 attempts. Scheduling next try i
                      n 1100 ms.
18:25:05.045 CNTRLR   The controller is unresponsive
18:25:05.051 DRIVER   Attempting to recover unresponsive controller by restarting it...
18:25:05.059 CNTRLR   Performing soft reset...
18:25:05.123 CNTRLR   Failed to execute controller command after 1/3 attempts. Scheduling next try i
                      n 100 ms.
18:25:05.235 CNTRLR   Failed to execute controller command after 2/3 attempts. Scheduling next try i
                      n 1100 ms.
18:25:07.349 CNTRLR   Soft reset failed: Timeout while waiting for an ACK from the controller (ZW020
                      0)
18:25:07.355 DRIVER   Attempting to recover unresponsive controller by reopening the serial port...
18:25:07.361 CNTRLR   [Node 015] ping failed: Timeout while waiting for an ACK from the controller (
                      ZW0200)
18:25:08.370 DRIVER   Serial port reopened. Returning to normal operation and hoping for the best...
18:25:08.373 CNTRLR   The controller is no longer unresponsive
18:25:09.396 CNTRLR   Failed to execute controller command after 1/3 attempts. Scheduling next try i
                      n 100 ms.
18:25:10.047 DRIVER   Dropping message because it contains invalid data
18:25:10.505 CNTRLR   Failed to execute controller command after 2/3 attempts. Scheduling next try i
                      n 1100 ms.
18:25:12.615 CNTRLR   The controller is unresponsive
18:25:12.621 DRIVER   Attempting to recover unresponsive controller by restarting it...
18:25:12.624 CNTRLR   Performing soft reset...
18:25:13.615 DRIVER   Dropping message because it contains invalid data
18:25:13.659 CNTRLR   Failed to execute controller command after 1/3 attempts. Scheduling next try i
                      n 100 ms.
18:25:14.771 CNTRLR   Failed to execute controller command after 2/3 attempts. Scheduling next try i
                      n 1100 ms.
18:25:16.885 CNTRLR   Soft reset failed: Timeout while waiting for an ACK from the controller (ZW020
                      0)
18:25:16.892 DRIVER   Attempting to recover unresponsive controller by reopening the serial port...
18:25:16.897 CNTRLR   Retrieving priority route failed: Timeout while waiting for an ACK from the co
                      ntroller (ZW0200)
18:25:17.906 DRIVER   Serial port reopened. Returning to normal operation and hoping for the best...
18:25:17.911 CNTRLR   The controller is no longer unresponsive
18:25:22.948 CNTRLR   Failed to execute controller command after 1/3 attempts. Scheduling next try i
                      n 100 ms.
18:25:24.065 CNTRLR   Failed to execute controller command after 2/3 attempts. Scheduling next try i
                      n 1100 ms.
18:25:26.184 CNTRLR   The controller is unresponsive
18:25:26.191 DRIVER   Attempting to recover unresponsive controller by restarting it...
18:25:26.194 CNTRLR   Performing soft reset...
18:25:27.236 CNTRLR   Failed to execute controller command after 1/3 attempts. Scheduling next try i
                      n 100 ms.
18:25:28.352 CNTRLR   Failed to execute controller command after 2/3 attempts. Scheduling next try i
                      n 1100 ms.
18:25:30.481 CNTRLR   Soft reset failed: Timeout while waiting for an ACK from the controller (ZW020
                      0)
18:25:30.486 DRIVER   Attempting to recover unresponsive controller by reopening the serial port...
18:25:31.500 DRIVER   Serial port reopened. Returning to normal operation and hoping for the best...
18:25:31.503 CNTRLR   The controller is no longer unresponsive


Comme c’est un réseau de test je ne le laisse jamais allumé bien longtemps, il faudra voir si c’est stable dans la durée sinon revenir sur une version plus ancienne…

Avec plaisir

Si j’ai du temps j’essaierai d’automatiser l’install mais c’est pas très compliqué, j’ai décrit les étapes dans le README. Si tu as besoin d’aide dis moi

Alors moi j’ai testé le plugin en version 0.2 mais ça ne fonctionne pas dans mon environnement.

Installation des dépendances sans problème. Communication ZWaveJS est à OK. Le démon est OK.

Par contre la version remontée par le plugin est 9.8.3 alors que je suis dans la version 9.9.0, j’ai pourtant bien cliqué sur « Tester ». De plus mes clés de sécurités ne correspondent pas à mon instance ZWaveJS, c’est pas récupéré automatiquement ?

Je vois dans les logs que c’est OK au niveau de la communication:

Checking remote ZWave container zwavejs2mqtt:8091: 1
{« zwave »:{« Cuisine »:{« Four »:{« 50 »:[{« value »:{« 66817 »:{« time »:1709853283126,« value »:0.052}}}],« lastActive »:{« time »:1709853283124,« value »:1709853283124}}}}}

Salut

Effectivement il y avait un petit souci de maj au niveau de la remontée de la version de la lib, je vais arranger ca. C’est juste de l’info donc pas grave.

Par contre ca n’est pas normal pour tes clés de sécurité.

As tu bien copié le contenu de l’archive sur un répertoire de ton docker distant?
exemple: /root/store/zwavejs
Pourrais tu vérifier si les clés sont présentes dans /root/store/zwavejs/settings.json ?

Idem sur ton jeedom dans le fichier généré:

$ cat /var/www/html/plugins/zwavejs/data/store/settings.json

Je gère moi même mon image de Zwave JS UI et il y a déjà un settings.json dans le container. Je ne pensais pas que c’était obligatoire de copier l’archive, je pensais que tout se faisait au niveau de Jeedom pour la configuration et que l’ensemble se connectait sur le Zwave JS distant via son API. J’ai mal compris ?

PS : La bonne version est apparue ce soir, bizarre…

Installes plutôt la dernière release. A minima tu as besoin du fichier settings.json qui contient tout le parametrage des topics + tes cles de sécurité. Pour le reste du repertoire config les fichiers sont référencés dans settings.json je suppose que c’est des configs de devices ajoutés par l’equipe jeedom

Ah j’ai compris, il faut mettre le « client id » de MQTT à « Jeedom » dans ZwaveJS pour que ça marche, c’est parfait maintenant. Je ne voulais pas écraser mon settings.json.

1 « J'aime »

Bonjour,
J’ai enfin pu tester.
J’ai installé le plugin officiel.
Puis j’ai simplement lancé tes commandes pour renommer le plugin officiel et récupérer le tien par clone et le renommer comme il fallait.

Je dirai : Ça marche très bien !

Ma config : ZwaveJs est installé sur mon docker distant, donc j’ai paramétré comme suit :

Le démon s’est lancé après l’installation des dépendances.

J’ai ensuite synchronisé et j’ai retruové mes petits équipements ZWave :

L’équipement apparait très bien et fonctionne.
image

Voici maintenant mes remarques pour amélioration :

  • Le port pour administration : serait-il possible de mettre dans l’infobulle le port par défaut ?
    Il y en a 2 potentiels par défaut : 3000 & 8091. Après, il peut y avoir un mapping et c’est autre chose pour l’utilisateur. Mais tant pis pour lui :smiley:
  • Les dépendances tournent tout de même et installent 501Mo de node_modules. J’imagine que ce n’est pas toi qui as ajouté cela. Ce n’était pas ce qui est installé pour avoir ZWaveJs en local ?

Bonjour,

Sans vouloir être rabat-joie, il me semblait que ça ne se faisait pas de forker le plugin d’un autre pour le reprendre à son compte… Je ne vais pas épiloguer mais pourquoi ne pas simplement avoir proposé une PR ?

Bref, la réponse à cette demande est dans la FAQ de la documentation du plugin Z-wave JS.

2 « J'aime »

Bonjour,
Il ne fait peut-être pas dans le bon ordre, mais à priori c’est dans ses intentions, en tout cas il l’a écrit plus haut.

1 « J'aime »

Salut

Merci pour vos retours. Effectivement les 500Mo de dépendances ne servent à rien dans ce cas :wink:

@Salvialf c’est pas faute de demander une evolution mais on m’a envoyé dans mes buts…
Qu’est ce qui te fait penser que je vais forker? il me semble avoir écrit le contraire plus haut…

Au passage la contrib c’est le principe même de l’opensource, sinon fallait pas publier les sources!
Vous devriez plutot me remercier de faire avancer la communauté.

oui il y a encore quelques petits détails à corriger avant de faire le PR mais je manque de temps.
Je m’y remets des que j’ai un moment sauf l’equipe Jeedom ou quelqu’un d’autre souhaite reprendre en l’état, dites moi

2 « J'aime »

Salut

J’ai modifié l’install des dépendances pour ne plus installer le deamon en local si on choisit le mode remote. testez et dites moi si ca va.

Bonjour,
J’ai tout supprimé pour être au propre.
Je refais l’installation que tu as proposé, je ne lance pas les dépendances.

Voici ce qui est ok :

Et ce qui n’est pas ok :

Maintenant, je relance les dépendances.

Un petit problème car le plugin MQTT s’est arreté.


Je le relance et c’est ok.

Les resources sont toujours à 28ko.

Les onglets Ko sont maintenant ok.



J’aime beaucoup le fait de pouvoir utiliser ce plugin sans installer la clef et tout ZWave sur la machine. Cela me parait plus abordable que jMqtt que j’ai mis en place.

Cette histoire de dépendance à relancer m’a inquiété au début, car j’ai eu peur d’avoir ZWave récupéré avec ces 500Mo.
image

Il y a moyen d’empêcher le démon de se lancer si les dépendances ne sont pas lancées ?

Salut @Arnaud_69

Les dépendances ne portent plus que sur l’install du plugin MQTT2, j’ai tout déporté dans le bouton ad-hoc en mode local uniquement.

Je ne maitrise pas assez les internes Jeedom pour savoir si on peut empêcher le plugin de démarrer avant la fin des dépendances? Bizarrement en mettant des traces dans dependancy_info() et dependancy_end() je n’ai aucun output en relancant les dépendances. Peut-être un guru Jeedom pourrait nous éclairer?

Si tes infos zwave sont vides ca signifie que le container n’est pas joignable. Ceci dit J’avoue que je comprends pas comment tu as pu lancer le deamon sans ces contrôles OK? Je ne reproduis pas chez moi. Comme tu peux le voir dans le code du deamon_start() il n’est pas possible de démarrer en mode remote sans container zwave-js-ui up & running (c’est le bouton tester):

                   if (! self::remoteZwaveIsAlive()) {
                            log::add(__CLASS__, 'error', __('Container ZWaveJS non démarré', __FILE__), 'unableStartDeamon');
                            throw new Exception(__("Container ZWaveJS non démarré", __FILE__));
                    }

Le deamon zwavejs ne peut pas non plus se lancer tant que MQTT2 n’est pas installé et démarré :

public static function deamon_info() {
...
	if (!class_exists('mqtt2')) {
		$return['launchable'] = 'nok';
		$return['launchable_message'] = __("Le plugin MQTT Manager n'est pas installé", __FILE__);
	} else {
		if (mqtt2::deamon_info()['state'] != 'ok') {
			$return['launchable'] = 'nok';
			$return['launchable_message'] = __("Le démon MQTT Manager n'est pas démarré", __FILE__);
		}
	}

Enfin vs ta question sur le démarrage de MQTT2 qui ne s’est pas fait il n’est pas managé non plus dans le plugin officiel, je n’y ai rien changé. Il te faut le démarrer a part et le mettre en autostart si tu le souhaites.