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
Identifier un noeud alimenté
Re: Identifier un noeud alimenté
Je réponds à ma deuxième question : d'où vient l'information "Version MySensors" ?
La documentation du plugin indique :
Pour une version 2.x, voici ce que j'ai fait :
1. patcher la librairie MySensors
2. patcher le démon mysensors.js du plugin MySensors
3. Enfin, utiliser le code suivant dans la fonction setup() de mon sketch
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
La documentation du plugin indique :
Bon, mais ça n'est valable qu'avec une version MySensors en 1.5.x.Pour une passerelle USB après le gw.begin…:
serial.print(“0;0;3;0;2;”);Serial.print(LIBRARY_VERSION);
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.
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);
Code : Tout sélectionner
// library version
msg.clear();
mSetCommand( msg, C_INTERNAL );
sendAsIs( msg.setSensor( 255 ).setType( I_VERSION ).set( MYSENSORS_LIBRARY_VERSION ));
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
Re: Identifier un noeud alimenté
- 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
- Pull request pour la bibliothèque MySensors (development branch) : https://github.com/mysensors/MySensors/pull/1290
Re: Identifier un noeud alimenté
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 :
- 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) {
Re: Identifier un noeud alimenté
Je suis ton sujet, vraiment merci pour ton temps et tes PR !
Au plaisir d'aider si jamais je peux ^^
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
Jeedom esclave (Raspberry Pi 2 B + Z-Wave + MySensors)
récit
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités