Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

Identifier un noeud alimenté

Retrouvez ici des sujets concernant le protocole mySensors et les modules domotiques de type mySensors utilisés avec JEEDOM
/!\ Plugin mySensors non officiel
Barbapapa
Timide
Messages : 28
Inscription : 17 juil. 2015, 12:21

Identifier un noeud alimenté

Message par Barbapapa » 15 mai 2019, 22:24

Bonjour,
J'ai plusieurs noeuds mySensors dans ma configuration.
Dans la page Santé mySensors, ils sont tous indiqués avec un niveau batterie à 0%, alors qu'ils sont tous alimentés sur le secteur.
Question : comment faire pour indiquer à MySensors (ou à JeeSensors, ou à Jeedom ?) qu'un noeud est alimenté par secteur ?
Et question complémentaire : d'où vient l'information "Version mySensors" indiquée sur la page d'équipement de chaque noeud ?

Merci de vos éclaircissements ;)

Barbapapa
Timide
Messages : 28
Inscription : 17 juil. 2015, 12:21

Re: Identifier un noeud alimenté

Message par Barbapapa » 20 mai 2019, 20:05

Je réponds à ma deuxième question : d'où vient l'information "Version MySensors" ?

La documentation du plugin indique :
Pour une passerelle USB après le gw.begin…:
serial.print(“0;0;3;0;2;”);Serial.print(LIBRARY_VERSION);
Bon, mais ça n'est valable qu'avec une version MySensors en 1.5.x.

Pour une version 2.x, voici ce que j'ai fait :

1. patcher la librairie MySensors

Code : Tout sélectionner

diff -uNr MySensors-2.1.1.orig/core/MySensorsCore.cpp MySensors-2.1.1/core/MySensorsCore.cpp
--- MySensors-2.1.1.orig/core/MySensorsCore.cpp	2017-01-18 21:57:07.000000000 +0100
+++ MySensors-2.1.1/core/MySensorsCore.cpp	2019-05-19 16:13:39.193845968 +0200
@@ -289,8 +289,13 @@
 
 bool send(MyMessage &message, const bool enableAck)
 {
-	message.sender = getNodeId();
 	mSetCommand(message, C_SET);
+	return sendAsIs( message, enableAck );
+}
+
+bool sendAsIs(MyMessage &message, const bool enableAck)
+{
+	message.sender = getNodeId();
 	mSetRequestAck(message, enableAck);
 
 #if defined(MY_REGISTRATION_FEATURE) && !defined(MY_GATEWAY_FEATURE)
diff -uNr MySensors-2.1.1.orig/core/MySensorsCore.h MySensors-2.1.1/core/MySensorsCore.h
--- MySensors-2.1.1.orig/core/MySensorsCore.h	2017-01-18 21:57:07.000000000 +0100
+++ MySensors-2.1.1/core/MySensorsCore.h	2019-05-19 16:12:56.046451159 +0200
@@ -164,7 +164,7 @@
 * @return true Returns true if message reached the first stop on its way to destination.
 */
 bool send(MyMessage &msg, const bool ack = false);
-
+bool sendAsIs(MyMessage &msg, const bool ack = false);
 
 /**
  * Send this nodes battery level to gateway.
2. patcher le démon mysensors.js du plugin MySensors

Code : Tout sélectionner

--- mysensors.js.orig	2019-05-19 10:39:09.909261855 +0200
+++ mysensors.js.2	2019-05-20 19:57:41.140965130 +0200
@@ -132,7 +132,7 @@
 			;
 			else
 			connectJeedom('saveSensor', sender, sensor, type, payload);
-			connectJeedom('saveLibVersion', sender, sensor, type, payload);
+			//connectJeedom('saveLibVersion', sender, sensor, type, payload);
 			break;
 			case C_SET:
 			connectJeedom('saveValue', sender, sensor, type, payload);
3. Enfin, utiliser le code suivant dans la fonction setup() de mon sketch

Code : Tout sélectionner

    // library version
    msg.clear();
    mSetCommand( msg, C_INTERNAL );
    sendAsIs( msg.setSensor( 255 ).setType( I_VERSION ).set( MYSENSORS_LIBRARY_VERSION ));
Voilà... Au cas où ça pourrait aider certains..

Quant à ma première question, je n'ai pas (encore) trouvé.
Ce que je vois :
- l'information est disponible dans la zone Status de la fenêtre Informations accessible depuis la configuration avancée du noeud : "battery":"0"
- la chaine JSON affichée n'est apparemment pas stockée telle quelle dans la base (peut-être reconstruite dynamiquement ?)
- et c'est tout pour le moment :(

Bien à vous
Barbapapa

Barbapapa
Timide
Messages : 28
Inscription : 17 juil. 2015, 12:21

Re: Identifier un noeud alimenté

Message par Barbapapa » 21 mai 2019, 21:50

- Pull request pour le plugin mySensors : https://github.com/lunarok/jeedom_mySensors/pull/21
- Pull request pour la bibliothèque MySensors (development branch) : https://github.com/mysensors/MySensors/pull/1290

Barbapapa
Timide
Messages : 28
Inscription : 17 juil. 2015, 12:21

Re: Identifier un noeud alimenté

Message par Barbapapa » 21 mai 2019, 22:03

Quant aux noeuds MySensors qui sont affichés sur la page de Santé comme "sur batterie" alors qu'ils sont sur secteur :

- l'information n'est stockée qu'en cache dans la chaine JSON déjà évoquée
- je pense que les noeuds créés "anciennement" ont été initialisés avec une valeur "0" au lieu d'une chaine vide
- mais ces noeuds ont au moins trois ans et tant le core que le plugin ont évolué depuis.

Donc je me suis contenté de corriger le cache si battery=0 et qu'aucune batterie n'est configurée :

Code : Tout sélectionner

diff -uNr mySensors-20190513/desktop/modal/health.php mySensors/desktop/modal/health.php
--- mySensors-20190513/desktop/modal/health.php	2019-05-21 19:14:15.306358054 +0200
+++ mySensors/desktop/modal/health.php	2019-05-21 19:17:50.756723731 +0200
@@ -26,6 +26,7 @@
 		<tr>
 			<th>{{Module}}</th>
 			<th>{{ID}}</th>
+			<th>{{NodeId}}</th>
 			<th>{{Gateway}}</th>
 			<th>{{Statut}}</th>
 			<th>{{Batterie}}</th>
@@ -38,6 +39,7 @@
 foreach ($eqLogics as $eqLogic) {
 	echo '<tr><td><a href="' . $eqLogic->getLinkToConfiguration() . '" style="text-decoration: none;">' . $eqLogic->getHumanName(true) . '</a></td>';
 	echo '<td><span class="label label-info" style="font-size : 1em; cursor : default;">' . $eqLogic->getId() . '</span></td>';
+	echo '<td><span class="label label-info" style="font-size : 1em; cursor : default;">' . $eqLogic->getConfiguration('nodeid') . '</span></td>';
 	echo '<td><span class="label label-info" style="font-size : 1em; cursor : default;">' . $eqLogic->getConfiguration('gateway') . '</span></td>';
 	$status = '<span class="label label-success" style="font-size : 1em; cursor : default;">{{OK}}</span>';
 	if ($eqLogic->getStatus('state') == 'nok') {
@@ -46,8 +48,13 @@
 	echo '<td>' . $status . '</td>';
 	$battery_status = '<span class="label label-success" style="font-size : 1em;">{{OK}}</span>';
 	$battery = $eqLogic->getStatus('battery'); 
+	$battery_type = $eqLogic->getConfiguration('battery_type', '');
 	if ($battery == '') {
 		$battery_status = '<span class="label label-primary" style="font-size : 1em;" title="{{Secteur}}"><i class="fas fa-plug"></i></span>';
+	} elseif ($battery == 0 && $battery_type == '' ) {
+		$eqLogic->setStatus( 'battery', '' );
+		$eqLogic->setStatus( 'batteryDatetime', '' );
+		$battery_status = '<span class="label label-primary" style="font-size : 1em;" title="{{Secteur}}"><i class="fas fa-plug"></i></span>';
 	} elseif ($battery < 20) {
 		$battery_status = '<span class="label label-danger" style="font-size : 1em;">' . $battery . '%</span>';
 	} elseif ($battery < 60) {

Avatar de l’utilisateur
dough29
Actif
Messages : 734
Inscription : 30 nov. 2014, 12:55

Re: Identifier un noeud alimenté

Message par dough29 » 21 mai 2019, 22:47

Je suis ton sujet, vraiment merci pour ton temps et tes PR !

Au plaisir d'aider si jamais je peux ^^
Jeedom maître (Docker sur Synology DSM6 + téléinfo)
Jeedom esclave (Raspberry Pi 2 B + Z-Wave + MySensors)
récit

Répondre

Revenir vers « [Plugin Tiers] MySensors »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 5 invités