Répétition de messages

Bonjour,

Depuis la dernière mise à jour du plugin rfPlayer2 j’ai un pb de répétition de messages et d’appel à l’API Jeedom par le plugin.
J’utilise une télécommande DIO porté clé

Dans le log ci-dessous j’ai bien double cliqué sur le bouton à 08:53:08 et on voit bien 2 répétitions alors que je n’ai pas touché à la télécommande.

[2020-06-15 08:53:08][DEBUG] : ZIA33{ "frame" :{"header": {"frameType": "0", "cluster": "0", "dataFlag": "0", "rfLevel": "-86", "floorNoise": "-96", "rfQuality": "2", "protocol": "4", "protocolMeaning": "CHACON", "infoType": "1", "frequency": "433920"},"infos": {"subType": "0", "id": "2175969167", "subTypeMeaning": "OFF"}}}
[2020-06-15 08:53:08][DEBUG] : Received a Chacon frame
[2020-06-15 08:53:08][DEBUG] : type1
[2020-06-15 08:53:08][DEBUG] : Send to jeedom : {'devices': {'81b2a78fL': {'protocol': 'CHACON', 'subid': 'a78fL', 'raw': {'frame': {'header': {'rfQuality': '2', 'protocol': '4', 'frameType': '0', 'floorNoise': '-96', 'cluster': '0', 'frequency': '433920', 'rfLevel': '-86', 'dataFlag': '0', 'infoType': '1', 'protocolMeaning': 'CHACON'}, 'infos': {'subType': '0', 'id': '2175969167', 'subTypeMeaning': 'OFF'}}}, 'learn': False, 'data': {'subType': '0', 'dBm': '-86', 'subTypeMeaning': 'OFF', 'info_a78fL': '0'}, 'id': '81b2'}}}
[2020-06-15 08:53:08][DEBUG] : Starting new HTTP connection (1): 127.0.0.1
[2020-06-15 08:53:08][INFO] : API RfPlayer solicité
[2020-06-15 08:53:08][DEBUG] : http://127.0.0.1:80 "POST /plugins/rfplayer2/core/php/jeeRfplayer2.php?apikey=S9fRKbnG1NTZjUDFGrUZhcMTnbayvROt HTTP/1.1" 200 0
[2020-06-15 08:57:33][DEBUG] : ZIA33{ "frame" :{"header": {"frameType": "0", "cluster": "0", "dataFlag": "0", "rfLevel": "-89", "floorNoise": "-95", "rfQuality": "2", "protocol": "4", "protocolMeaning": "CHACON", "infoType": "1", "frequency": "433920"},"infos": {"subType": "0", "id": "2175969167", "subTypeMeaning": "OFF"}}}
[2020-06-15 08:57:33][DEBUG] : Received a Chacon frame
[2020-06-15 08:57:33][DEBUG] : type1
[2020-06-15 08:57:33][DEBUG] : Send to jeedom : {'devices': {'81b2a78fL': {'protocol': 'CHACON', 'subid': 'a78fL', 'raw': {'frame': {'header': {'rfQuality': '2', 'protocol': '4', 'frameType': '0', 'floorNoise': '-95', 'cluster': '0', 'frequency': '433920', 'rfLevel': '-89', 'dataFlag': '0', 'infoType': '1', 'protocolMeaning': 'CHACON'}, 'infos': {'subType': '0', 'id': '2175969167', 'subTypeMeaning': 'OFF'}}}, 'learn': False, 'data': {'subType': '0', 'dBm': '-89', 'subTypeMeaning': 'OFF', 'info_a78fL': '0'}, 'id': '81b2'}}}
[2020-06-15 08:57:33][DEBUG] : Starting new HTTP connection (1): 127.0.0.1
[2020-06-15 08:57:33][INFO] : API RfPlayer solicité
[2020-06-15 08:57:33][DEBUG] : http://127.0.0.1:80 "POST /plugins/rfplayer2/core/php/jeeRfplayer2.php?apikey=S9fRKbnG1NTZjUDFGrUZhcMTnbayvROt HTTP/1.1" 200 0
[2020-06-15 08:58:51][DEBUG] : Received a Chacon frame
[2020-06-15 08:58:51][DEBUG] : type1
[2020-06-15 08:58:51][DEBUG] : Send to jeedom : {'devices': {'81b2a78fL': {'protocol': 'CHACON', 'subid': 'a78fL', 'raw': {'frame': {'header': {'rfQuality': '2', 'protocol': '4', 'frameType': '0', 'floorNoise': '-94', 'cluster': '0', 'frequency': '433920', 'rfLevel': '-87', 'dataFlag': '0', 'infoType': '1', 'protocolMeaning': 'CHACON'}, 'infos': {'subType': '0', 'id': '2175969167', 'subTypeMeaning': 'OFF'}}}, 'learn': False, 'data': {'subType': '0', 'dBm': '-87', 'subTypeMeaning': 'OFF', 'info_a78fL': '0'}, 'id': '81b2'}}}
[2020-06-15 08:58:51][DEBUG] : Starting new HTTP connection (1): 127.0.0.1
[2020-06-15 08:58:51][INFO] : API RfPlayer solicité
[2020-06-15 08:58:51][DEBUG] : http://127.0.0.1:80 "POST /plugins/rfplayer2/core/php/jeeRfplayer2.php?apikey=S9fRKbnG1NTZjUDFGrUZhcMTnbayvROt HTTP/1.1" 200 0

Avez vous une idée du problème?

Up, pas d’idée?

Vieux sujet, je déterre, car à l’époque je pensais être le seul concerné, mais j’ai également le même soucis.
Chez moi avec le protocole DOMIA ou X10.

La dernière commande reçue par mes télécommandes est répétée presque à l’infini.
J’ai modifié le plugin à l’époque afin de palier à ce problème.
J’ai remarqué que les répétitions « fantômes » sont a un niveau d’émission très faible.
Donc j’ai défini un niveau de signal minimum pour chacun de mes équipement (suivant sa distance) pour que la commande soit acceptée et interprétée comme d’origine humaine.
J’accepte également d’office toute nouvelle commande, car les répétitions fantômes concernent uniquement la dernière commande reçue.
J’ai également intégré un double appui afin de forcer la commande pour mes télécommandes les plus lointaines qui fleurtent avec le niveau de seuil fantôme.

A noté qu’avant la maj de juin 2020 je n’avais pas ce soucis également.
Si d’autres ont les mêmes symptômes je peux partager mes modifs.

ex de logs :

ou encore :

J’avais pensé au début que ça venait de mes télécommandes, ou des piles, mais quand j’ai constaté qu’elles avaient toutes le même pb aussi bien en X10 qu’en DOMIA, j’ai compris que ça ne venait pas d’elles.

Bonjour,

J’ai le même problème avec des télécommandes de lumière et pour ma sonnette.
Je suis obligée de tout désactiver pour éviter que la répétition allume les lumières en pleine nuit et pareil pour la sonnette.
Peux tu me dire comment tu as fait ?
Je ne vois pas où tu peux gérer le signal ?

Merci par avance de ton aide.
Séverine

Quel protocole utilises-tu ?

Merci de ton retour

Générique CHACON

Ok, donc le soucis semble se produire sur au moins 3 protocoles :
CHACON, X10, DOMIA.

Je suis certain, car je suis resté plusieurs années avec de nombreuses télécommandes murales, que le problème est arrivé suite à une maj du plugin, maj de 2020, donc c’est vieux…

Reste à savoir d’où sortent ces trames fantômes et pourquoi on ne les avait pas avant cette maj. Vu que cette maj est vieille et que personne n’a réagi à l’époque, ça risque d’être encore plus compliqué aujourd’hui de comprendre d’où cela vient.

En analysant les trames dans la partie php du plugin, je n’avais trouvé à l’époque aucun moyen de les différencier des vraies trames, ci ce n’est que le niveau du signal de ces trames fantômes se situe toujours aux alentours des 80db.

C’est donc facile à filtrer pour les télécommandes proches du récepteur, plus compliqué pour celles se trouvant à plus grande distance avec des niveaux <= 75db.

Je vais regarder les modifs que j’avais faite à l’époque…

Ha le signal de la lumière est à -84 dbm et ma sonnette à -79 dbm
ça va être compliqué et je ne connais pas le signal des message fantomes

Ce que je peux faire c’est te donner un code qui accepte soit un signal différent (le dernier signal reçu est une autre commande), soit un double appuie (qui peut parfois merder si il y a 2 trames fantômes reçues dans un laps de temps de très court, ce qui arrive parfois)
Avec le log, tu pourras voir ce qui est filtré et le niveau des trames fantômes.

Il faut que je modifie mon code, qui prend en compte également les niveaux de signal en fonction des commandes.

le double appui ne va pas fonctionner avec la sonnette (déjà qu’il y a des visiteurs qui ont dû mal à appuyer sur le bouton) et mes interrupteurs pour la lumière ne font pas de double appui donc plutôt la première solution

Le double appui est dans le code, la télécommande n’a pas besoin de le supporter.
La première solution à l’inconvénient que si la dernière commande est identique alors elle sera ignorée (c’est là que le double appuie permet de s’en sortir)

Ex un type sonne a 10h00 du matin, si autre type sonne à 15h00 et que aucune commande différente de la sonnerie n’est arrivée entre temps, la sonnerie de 15h00 sera rejetée.

J’ai été intelligente, j’ai mis l’historique sur le signal de la lumière et les signaux fantômes sont au dessous de -90dbm, ce qui pourrait déjà aider

Après un signal de la lumière, je mis un retour d’état à 0.5 pour la variable info_398a au bout de 1 minutes

Ok je te prépares un truc qui devrait fonctionner :wink:

1 « J'aime »

Voici le code :


    // [dJuL] check signal strength to avoid phantoms
    if (isset($datas['data']['dBm']) && is_numeric($datas['data']['dBm'])) {
      $DBLActiveMinDbm = -85;
      $requiredDbm = -85;
      $DBLMaxtime = 3;
      $deviceInfos = $datas['id'] . ' ' . $datas['data']['subTypeMeaning'] . ' (' . $datas['protocol'] . ')';
      $lastSignal = cache::byKey('rfplayer2_lastSignal');
      $lastSignal = $lastSignal->getValue();
      $lastSignal = is_array($lastSignal) ? $lastSignal : array('inconnu', 0);
      $dblPress = ($requiredDbm <= $DBLActiveMinDbm && (time() - $lastSignal[1]) < $DBLMaxtime);
      $checkDbm = (!$dblPress && $lastSignal[0] == $deviceInfos);
      log::add('rfplayer2', 'debug', '[dJuL hack] ' . $deviceInfos . ' - Signal reçu (' . $datas['data']['dBm'] . 'dBm / ' . $requiredDbm . 'dBm minimum)');
      log::add('rfplayer2', 'debug', '[dJuL hack] Signal précédent reçu par ' . $lastSignal[0] . ' à ' . (($lastSignal[1] == 0) ? 'inconnu' : date('H:i:s', $lastSignal[1])));
      cache::set('rfplayer2_lastSignal', array($deviceInfos, time()), 0);
      if ($checkDbm && $datas['data']['dBm'] < $requiredDbm) {
        log::add('rfplayer2', 'warning', '[dJuL hack] ' . $deviceInfos . ' - Signal ignoré (' . $datas['data']['dBm'] . 'dBm < ' . $requiredDbm . 'dBm minimum)');
        continue;
      }
      else {
        if ($checkDbm) {
          $requiredDbm.= 'dBm minimum';
        }
        else {
          $requiredDbm = ($dblPress) ? 'Double appui' : 'Nouveau signal';
        }
        log::add('rfplayer2', 'info', '[dJuL hack] ' . $deviceInfos . ' - Signal accepté (' . $datas['data']['dBm'] . 'dBm / ' . $requiredDbm . ')');
      }
    }

Ce code est a insérer dans le fichier jeeRfplayer2.php (html/plugins/rfplayer2/core/php)
à la ligne 132 en théorie juste en dessous de :

     	if (!$rfplayer2->getIsEnable()) {
			continue;
		}
   

Il filtre les trames uniquement si c’est un signal répété, et si le niveau est en dessous du seuil (-85db). Un double clique en moins de 3 secondes force la commande, même si tu n’en auras probablement pas besoin.

Les trames rejetées apparaissent en warning dans le log du plugin.

:wink:

ok merci, je vais faire cela

Ok tiens moi au jus car j’ai pas testé, j’ai modifier mon code à la volée pour l’adapter à ta situation.

1 « J'aime »

je ne vois pas trop l’intérêt de la première condition de la ligne :

$dblPress = ($requiredDbm <= $DBLActiveMinDbm && (time() - $lastSignal[1]) < $DBLMaxtime);

sachant que $requiredDbm = -85 et $DBLActiveMinDbm = -85 donc c’est toujours vrai
je mettrais bien

$dblPress = (time() - $lastSignal[1]) < $DBLMaxtime;

C’est parce que c’est un reste de mon code que ça semble farfelu.
Tu peux mettre $DBLActiveMinDbm = -100 pour désactiver complètement le double clique, pour ça que j’ai laissé comme ça.

1 « J'aime »

Voici les logs pour des signaux réels pour 2 interrupteurs lumière mis en ON l’un après l’autre puis OFF l’un après l’autre :

[2025-01-26 19:35:08][DEBUG] : ZIA33{ "frame" :{"header": {"frameType": "0", "cluster": "0", "dataFlag": "0", "rfLevel": "-65", "floorNoise": "-102", "rfQuality": "9", "protocol": "4", "protocolMeaning": "CHACON", "infoType": "1", "frequency": "433920"},"infos": {"subType": "1", "id": "280050058", "subTypeMeaning": "ON"}}}
[2025-01-26 19:35:08][DEBUG] : Data found
[2025-01-26 19:35:08][DEBUG] : {'frame': {'header': {'frameType': '0', 'cluster': '0', 'dataFlag': '0', 'rfLevel': '-65', 'floorNoise': '-102', 'rfQuality': '9', 'protocol': '4', 'protocolMeaning': 'CHACON', 'infoType': '1', 'frequency': '433920'}, 'infos': {'subType': '1', 'id': '280050058', 'subTypeMeaning': 'ON'}}}
[2025-01-26 19:35:08][DEBUG] : frame found
[2025-01-26 19:35:08][DEBUG] : Received a Chacon frame
[2025-01-26 19:35:08][DEBUG] : type1
[2025-01-26 19:35:08][DEBUG] : Send to jeedom: {'devices': {'10b1398a': {'data': {'subTypeMeaning': 'ON', 'subType': '1', 'dBm': '-65', 'info_398a': '1'}, 'id': '10b1', 'subid': '398a', 'protocol': 'CHACON', 'raw': {'frame': {'header': {'frameType': '0', 'cluster': '0', 'dataFlag': '0', 'rfLevel': '-65', 'floorNoise': '-102', 'rfQuality': '9', 'protocol': '4', 'protocolMeaning': 'CHACON', 'infoType': '1', 'frequency': '433920'}, 'infos': {'subType': '1', 'id': '280050058', 'subTypeMeaning': 'ON'}}}, 'learn': False}}}
[2025-01-26 19:35:08][DEBUG] : Starting new HTTP connection (1): 127.0.0.1:80
[2025-01-26 19:35:08][INFO] : API RfPlayer solicité
[2025-01-26 19:35:08][DEBUG] : [dJuL hack] 10b1 ON (CHACON) - Signal reçu (-65dBm / -85dBm minimum)
[2025-01-26 19:35:08][DEBUG] : [dJuL hack] Signal précédent reçu par inconnu à inconnu
[2025-01-26 19:35:08][INFO] : [dJuL hack] 10b1 ON (CHACON) - Signal accepté (-65dBm / Nouveau signal)
[2025-01-26 19:35:09][DEBUG] : http://127.0.0.1:80 "POST /plugins/rfplayer2/core/php/jeeRfplayer2.php?apikey=SiJgpmwupABkwY7178kFmH5l8m7g4XNi HTTP/1.1" 200 0
[2025-01-26 19:35:19][DEBUG] : ZIA33{ "frame" :{"header": {"frameType": "0", "cluster": "0", "dataFlag": "0", "rfLevel": "-62", "floorNoise": "-102", "rfQuality": "10", "protocol": "4", "protocolMeaning": "CHACON", "infoType": "1", "frequency": "433920"},"infos": {"subType": "1", "id": "280007050", "subTypeMeaning": "ON"}}}
[2025-01-26 19:35:19][DEBUG] : Data found
[2025-01-26 19:35:19][DEBUG] : {'frame': {'header': {'frameType': '0', 'cluster': '0', 'dataFlag': '0', 'rfLevel': '-62', 'floorNoise': '-102', 'rfQuality': '10', 'protocol': '4', 'protocolMeaning': 'CHACON', 'infoType': '1', 'frequency': '433920'}, 'infos': {'subType': '1', 'id': '280007050', 'subTypeMeaning': 'ON'}}}
[2025-01-26 19:35:19][DEBUG] : frame found
[2025-01-26 19:35:19][DEBUG] : Received a Chacon frame
[2025-01-26 19:35:19][DEBUG] : type1
[2025-01-26 19:35:19][DEBUG] : Send to jeedom: {'devices': {'10b0918a': {'data': {'subTypeMeaning': 'ON', 'subType': '1', 'dBm': '-62', 'info_918a': '1'}, 'id': '10b0', 'subid': '918a', 'protocol': 'CHACON', 'raw': {'frame': {'header': {'frameType': '0', 'cluster': '0', 'dataFlag': '0', 'rfLevel': '-62', 'floorNoise': '-102', 'rfQuality': '10', 'protocol': '4', 'protocolMeaning': 'CHACON', 'infoType': '1', 'frequency': '433920'}, 'infos': {'subType': '1', 'id': '280007050', 'subTypeMeaning': 'ON'}}}, 'learn': False}}}
[2025-01-26 19:35:19][DEBUG] : Starting new HTTP connection (1): 127.0.0.1:80
[2025-01-26 19:35:19][INFO] : API RfPlayer solicité
[2025-01-26 19:35:19][DEBUG] : [dJuL hack] 10b0 ON (CHACON) - Signal reçu (-62dBm / -85dBm minimum)
[2025-01-26 19:35:19][DEBUG] : [dJuL hack] Signal précédent reçu par 10b1 ON (CHACON) à 19:35:08
[2025-01-26 19:35:19][INFO] : [dJuL hack] 10b0 ON (CHACON) - Signal accepté (-62dBm / Nouveau signal)
[2025-01-26 19:35:20][DEBUG] : http://127.0.0.1:80 "POST /plugins/rfplayer2/core/php/jeeRfplayer2.php?apikey=SiJgpmwupABkwY7178kFmH5l8m7g4XNi HTTP/1.1" 200 0
[2025-01-26 19:35:48][DEBUG] : ZIA33{ "frame" :{"header": {"frameType": "0", "cluster": "0", "dataFlag": "0", "rfLevel": "-73", "floorNoise": "-103", "rfQuality": "7", "protocol": "4", "protocolMeaning": "CHACON", "infoType": "1", "frequency": "433920"},"infos": {"subType": "0", "id": "280050058", "subTypeMeaning": "OFF"}}}
[2025-01-26 19:35:48][DEBUG] : Data found
[2025-01-26 19:35:48][DEBUG] : {'frame': {'header': {'frameType': '0', 'cluster': '0', 'dataFlag': '0', 'rfLevel': '-73', 'floorNoise': '-103', 'rfQuality': '7', 'protocol': '4', 'protocolMeaning': 'CHACON', 'infoType': '1', 'frequency': '433920'}, 'infos': {'subType': '0', 'id': '280050058', 'subTypeMeaning': 'OFF'}}}
[2025-01-26 19:35:48][DEBUG] : frame found
[2025-01-26 19:35:48][DEBUG] : Received a Chacon frame
[2025-01-26 19:35:48][DEBUG] : type1
[2025-01-26 19:35:48][DEBUG] : Send to jeedom: {'devices': {'10b1398a': {'data': {'subTypeMeaning': 'OFF', 'subType': '0', 'dBm': '-73', 'info_398a': '0'}, 'id': '10b1', 'subid': '398a', 'protocol': 'CHACON', 'raw': {'frame': {'header': {'frameType': '0', 'cluster': '0', 'dataFlag': '0', 'rfLevel': '-73', 'floorNoise': '-103', 'rfQuality': '7', 'protocol': '4', 'protocolMeaning': 'CHACON', 'infoType': '1', 'frequency': '433920'}, 'infos': {'subType': '0', 'id': '280050058', 'subTypeMeaning': 'OFF'}}}, 'learn': False}}}
[2025-01-26 19:35:48][DEBUG] : Starting new HTTP connection (1): 127.0.0.1:80
[2025-01-26 19:35:48][INFO] : API RfPlayer solicité
[2025-01-26 19:35:48][DEBUG] : [dJuL hack] 10b1 OFF (CHACON) - Signal reçu (-73dBm / -85dBm minimum)
[2025-01-26 19:35:48][DEBUG] : [dJuL hack] Signal précédent reçu par 10b0 ON (CHACON) à 19:35:19
[2025-01-26 19:35:48][INFO] : [dJuL hack] 10b1 OFF (CHACON) - Signal accepté (-73dBm / Nouveau signal)
[2025-01-26 19:35:49][DEBUG] : http://127.0.0.1:80 "POST /plugins/rfplayer2/core/php/jeeRfplayer2.php?apikey=SiJgpmwupABkwY7178kFmH5l8m7g4XNi HTTP/1.1" 200 0
[2025-01-26 19:35:57][DEBUG] : ZIA33{ "frame" :{"header": {"frameType": "0", "cluster": "0", "dataFlag": "0", "rfLevel": "-64", "floorNoise": "-102", "rfQuality": "9", "protocol": "4", "protocolMeaning": "CHACON", "infoType": "1", "frequency": "433920"},"infos": {"subType": "0", "id": "280007050", "subTypeMeaning": "OFF"}}}
[2025-01-26 19:35:57][DEBUG] : Data found
[2025-01-26 19:35:57][DEBUG] : {'frame': {'header': {'frameType': '0', 'cluster': '0', 'dataFlag': '0', 'rfLevel': '-64', 'floorNoise': '-102', 'rfQuality': '9', 'protocol': '4', 'protocolMeaning': 'CHACON', 'infoType': '1', 'frequency': '433920'}, 'infos': {'subType': '0', 'id': '280007050', 'subTypeMeaning': 'OFF'}}}
[2025-01-26 19:35:57][DEBUG] : frame found
[2025-01-26 19:35:57][DEBUG] : Received a Chacon frame
[2025-01-26 19:35:57][DEBUG] : type1
[2025-01-26 19:35:58][DEBUG] : Send to jeedom: {'devices': {'10b0918a': {'data': {'subTypeMeaning': 'OFF', 'subType': '0', 'dBm': '-64', 'info_918a': '0'}, 'id': '10b0', 'subid': '918a', 'protocol': 'CHACON', 'raw': {'frame': {'header': {'frameType': '0', 'cluster': '0', 'dataFlag': '0', 'rfLevel': '-64', 'floorNoise': '-102', 'rfQuality': '9', 'protocol': '4', 'protocolMeaning': 'CHACON', 'infoType': '1', 'frequency': '433920'}, 'infos': {'subType': '0', 'id': '280007050', 'subTypeMeaning': 'OFF'}}}, 'learn': False}}}
[2025-01-26 19:35:58][DEBUG] : Starting new HTTP connection (1): 127.0.0.1:80
[2025-01-26 19:35:58][INFO] : API RfPlayer solicité
[2025-01-26 19:35:58][DEBUG] : [dJuL hack] 10b0 OFF (CHACON) - Signal reçu (-64dBm / -85dBm minimum)
[2025-01-26 19:35:58][DEBUG] : [dJuL hack] Signal précédent reçu par 10b1 OFF (CHACON) à 19:35:48
[2025-01-26 19:35:58][INFO] : [dJuL hack] 10b0 OFF (CHACON) - Signal accepté (-64dBm / Nouveau signal)
[2025-01-26 19:35:58][DEBUG] : http://127.0.0.1:80 "POST /plugins/rfplayer2/core/php/jeeRfplayer2.php?apikey=SiJgpmwupABkwY7178kFmH5l8m7g4XNi HTTP/1.1" 200 0

Je vais essayer de regarder dans la semaine si il y a eu des warning dans les logs.
merci et bonne soirée