Closed KiwiHC16 closed 12 months ago
[2023-12-03 11:02:41] Abeille1, Type=8002/Data indication, Status=00, ProfId=0104, ClustId=000C, SrcEP=15, DstEP=01, SrcAddrMode=02, SrcAddr=1785, DstAddrMode=02, DstAddr=0000
[2023-12-03 11:02:41] FCF=1C/General/Serv->Cli/ManufCode=115F, SQN=A1, cmd=0A/Report attributes
[2023-12-03 11:02:41] UNHANDLED 000C-0055-39: 00000000
[2023-12-03 11:02:41] Abeille1, Type=8102/Attribute report, SQN=A1, Addr=1785, EP=15, ClustId=000C, AttrId=0055, AttrStatus=00, AttrDataType=39, AttrSize=0004
[2023-12-03 11:02:41] 000C-0055 => Handled by decode8002
Bien en ligne avec le message zigbee (sniff)
Il semble que l EP ne soit pas pris en compte et donc ca ne fonctionne pas.
Active Power:
0B04-01-050B
{
"inf_zbAttr-0B04-ActivePower": {
"comment": "val = device specific = (attribute_value / ACPowerDiv) * AcPowerMultiplier",
"subType": "numeric",
"template": "badge",
"configuration": {
"calculValueOffset": "#value#*#MULT#/#DIV#",
"historizeRound": "0",
"visibilityCategory": "All"
},
"type": "info",
"logicalId": "0B04-#EP#-050B",
"unit": "W",
"genericType": "POWER"
}
}
Modele prend bien compte EP. Mais ce n est pas le bon modele ! Mauvais cluster et mauvais parametre.
www-data@JeedomDev:~/html/plugins/Abeille$ grep -R "000C-15-0055" *
core/config/commands/OBSOLETE/puissanceEP15.json: "logicalId": "000C-15-0055",
www-data@JeedomDev:~/html/plugins/Abeille$
Ca ressemble à une régression.
www-data@JeedomDev:~/html/plugins/Abeille/core/config/commands$ grep -R "000C" *
...
inf_zbAttr-000C-PresentValue.json: "inf_zbAttr-000C-PresentValue": {
inf_zbAttr-000C-PresentValue.json: "comment": "Cluster 000C, attrib 0055/PresentValue",
inf_zbAttr-000C-PresentValue.json: "logicalId": "000C-#EP#-0055",
...
OBSOLETE/puissanceEP15.json: "logicalId": "000C-15-0055",
...
Si je mets "inf_zbAttr-000C-PresentValue.json", l EP n est pas bon car à 01.
"ActivePower": {
"use": "inf_zbAttr-000C-PresentValue",
"params": "ep=15",
"isVisible": 1
},
Semble ok, a tester
Parser:
[2023-12-03 11:57:17] Abeille1, Type=8002/Data indication, Status=00, ProfId=0104, ClustId=000C, SrcEP=15, DstEP=01, SrcAddrMode=02, SrcAddr=1785, DstAddrMode=02, DstAddr=0000
[2023-12-03 11:57:17] FCF=1C/General/Serv->Cli/ManufCode=115F, SQN=ED, cmd=0A/Report attributes
[2023-12-03 11:57:17] xiaomi UNHANDLED 000C-0055-39: 14AE6141
[2023-12-03 11:57:17] Abeille1, Type=8102/Attribute report, SQN=ED, Addr=1785, EP=15, ClustId=000C, AttrId=0055, AttrStatus=00, AttrDataType=39, AttrSize=0004
[2023-12-03 11:57:17] 000C-15-0055 => Handled by decode8002
14AE6141 => 14,105 W
if ($manufCode == '115F') { // Xiaomi specific
// New code
xiaomiReportAttributes($dest, $srcAddr, $clustId, $pl, $attrReportN);
}
else if (isset($eq['xiaomi']) && isset($eq['xiaomi']['fromDevice'][$clustId.'-'.$attrId])) { // Xiaomi specific without manufCode
xiaomiReportAttributes($dest, $srcAddr, $clustId, $pl, $attrReportN);
}
// Philips Hue specific cluster
// Used by RWL021, RDM001
// Tcharp38: Where is the source of this decoding ?
else if ($clustId == "FC00") {
...
} // End cluster FC00
// else {
$l = strlen($msg);
Comme xiaomiReportAttributes ne traite pas le report acr il ne le reconnait pas les if then else font que le dernier else n est pas exécuté et donc le param n est pas traité.
Si je commente le else et avec le nouveau modele ca fonctionne.
Reste a savoir comment gérer ce else ....
Quelle est la signature de ce plug ?
Je vois tres bien d'ou vient le souci. Effectivement une regression. Je n'avais aucun cas pour tester ce cas foireux..
en fait si le manufCode est défini il ne faut pas traiter TOUT le cluster comme specifique Xiaomi. Il y a dans ton cas des attributs qui eux suivent la spec Zigbee et ce mixte n'est pas supporté... d'ou la regression.
Je suis dessus
Je vois que tu as le sujet en tête. C'est exactement ma conclusion. J'allais voir comment changer le code mais dans ce cas je te laisse faire. Il faut aussi revoir le modele avec la commande ActivePower et ep=15 comme indiqué plus haut. Le modele est: plug.maeu01 C est une prise Aqara Smart EU. Elle remonte aussi plein d autre champ pas décodé, mais dans un premier temps j ai besoin de la puissance.
Code revu et en test. Je pousserai demain si je vois pas de pb particulier. J'ai revu la façon de traiter les attributs, un par un, en testant si il faut le traiter de maniere "privée" ou "standard". Du coup j'ai aussi revu la definition des clusters privés dans les models.. appliqué à tous les modeles Xiaomi dans un premier temps uniquement.
Tout ça était dans le pipe mais pas pris le temps d'appliquer jusque la.
Pour info, le traitement d'un truc "proprietaire" se fait avec le mot clef "private" dans le modele.
Ex Xiaomi "sensor_magnet.aq2"
"private": {
"0000-FF01": {
"type": "xiaomi",
"01-21": {
"func": "numberDiv",
"div": 1000,
"info": "0001-01-0020",
"comment": "Battery-Volt"
},
"64-10": {
"func": "raw",
"info": "0006-01-0000"
}
}
}
J'ai tout poussé + une update du modele "plug.maeu01". Active power utilise maintenant l'info 000C-15-0055 au lieu de 0B04-01-050B
Mais ce device pue. A priori pas le meme comportement d'une version de FW à une autre et ca c'est ingérable proprement.
Ok interessant. Je vais tester. Et je te tiens au courant.
Ne semble pas fonctionner. Valeur Power à 0W.
[2023-12-05 13:33:01] Abeille1, Type=8000/Status, Status=00/Success, SQN=02, PacketType=0092, Sent=01, SQNAPS=B4, NPDU=00, APDU=01
[2023-12-05 13:33:01] Abeille1, Type=8012/APS data confirm, Status=00, Addr=1785, SQNAPS=B4, NPDU=00, APDU=01
[2023-12-05 13:33:01] Abeille1, Type=8011/APS data ACK, Status=00/Success, Addr=1785, EP=01, ClustId=0006, SQNAPS=B4
[2023-12-05 13:33:01] Abeille1, Type=8002/Data indication, Status=00, ProfId=0104, ClustId=0006, SrcEP=01, DstEP=01, SrcAddrMode=02, SrcAddr=1785, DstAddrMode=02, DstAddr=0000
[2023-12-05 13:33:01] FCF=18/General/Serv->Cli, SQN=F1, cmd=0A/Report attributes
[2023-12-05 13:33:01] AttrId=0000/OnOff, AttrType=10, ValueHex=01 => 1
[2023-12-05 13:33:01] AttrId=00F5/Unknown-0006-00F5, AttrType=23, ValueHex=07000002 => 117440514
[2023-12-05 13:33:01] Abeille1, Type=8102/Attribute report, SQN=F1, Addr=1785, EP=01, ClustId=0006, AttrId=0000, AttrStatus=00, AttrDataType=10, AttrSize=0001
[2023-12-05 13:33:01] 0006-0000 => Handled by decode8002
[2023-12-05 13:33:01] Abeille1, Type=8102/Attribute report, SQN=F1, Addr=1785, EP=01, ClustId=0006, AttrId=00F5, AttrStatus=00, AttrDataType=23, AttrSize=0004
[2023-12-05 13:33:01] 0006-00F5 => Handled by decode8002
[2023-12-05 13:33:01] Abeille1, Type=8000/Status, Status=00/Success, SQN=00, PacketType=0010, Sent=00, SQNAPS=00, NPDU=00, APDU=00
[2023-12-05 13:33:01] Abeille1, Type=8010/Version, Appli=0004, SDK=0323
[2023-12-05 13:33:02] Abeille1, Type=8002/Data indication, Status=00, ProfId=0104, ClustId=000C, SrcEP=15, DstEP=01, SrcAddrMode=02, SrcAddr=1785, DstAddrMode=02, DstAddr=0000
[2023-12-05 13:33:02] FCF=1C/General/Serv->Cli/ManufCode=115F, SQN=F2, cmd=0A/Report attributes
[2023-12-05 13:33:02] Old way (manufCode) to handle Xiaomi private cluster
[2023-12-05 13:33:02] UNHANDLED 000C-0055-39: 00008641
[2023-12-05 13:33:02] Abeille1, Type=8102/Attribute report, SQN=F2, Addr=1785, EP=15, ClustId=000C, AttrId=0055, AttrStatus=00, AttrDataType=39, AttrSize=0004
[2023-12-05 13:33:02] 000C-0055 => Handled by decode8002
Je fouille le code pour voir ou ca pêche.
function xiaomiReportAttributeOld($net, $addr, $clustId, $pl, &$attrReportN = null) {
...
if (isset($eq['xiaomi']) && isset($eq['xiaomi']['fromDevice'][$clustId.'-'.$attrId]))
...
else
=> UNHANDLED 000C-0055-39: 00008641
if (isset($eq['xiaomi'])
est faux car $eq['xiaomi'] n est pas défini
Ha oui pigé ! Le "old way" n'existe plus et doit etre viré. Comme il y a un manufCode defini ca court circuit le traitement normal de l'attribut 000C-xx-0055
Je corrige ca tout de suite
C'est dans le master. Je te laisse retenter.
Ca fonctionne avec ta derniere modif ;-)
Eq créé dans Abeille/Jeedom mais l information de puissance n est pas gérée.