KiwiHC16 / Abeille

Abeille pour Jeedom (Gateway ZiGate)
GNU Affero General Public License v3.0
60 stars 52 forks source link

[KiwiHC16] Integration prise Aqara Smart Plug EU : Active Power #2665

Closed KiwiHC16 closed 7 months ago

KiwiHC16 commented 7 months ago

Eq créé dans Abeille/Jeedom mais l information de puissance n est pas gérée.

KiwiHC16 commented 7 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.

KiwiHC16 commented 7 months ago

Active Power:

0B04-01-050B
KiwiHC16 commented 7 months ago
{
    "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.

KiwiHC16 commented 7 months ago

Capture d’écran 2023-12-03 à 11 26 55

KiwiHC16 commented 7 months ago
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.

KiwiHC16 commented 7 months ago
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",
...
KiwiHC16 commented 7 months ago

Si je mets "inf_zbAttr-000C-PresentValue.json", l EP n est pas bon car à 01.

KiwiHC16 commented 7 months ago
            "ActivePower": {
                "use": "inf_zbAttr-000C-PresentValue",
                "params": "ep=15",
                "isVisible": 1
            },

Semble ok, a tester

KiwiHC16 commented 7 months ago

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

KiwiHC16 commented 7 months ago
                        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 ....

KiwiHC16 commented 7 months ago

2666

tcharp38 commented 7 months ago

Quelle est la signature de ce plug ?

tcharp38 commented 7 months ago

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

KiwiHC16 commented 7 months ago

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.

tcharp38 commented 7 months ago

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"
            }
        }
    }
tcharp38 commented 7 months ago

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.

KiwiHC16 commented 7 months ago

Ok interessant. Je vais tester. Et je te tiens au courant.

KiwiHC16 commented 7 months ago

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

tcharp38 commented 7 months ago

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

tcharp38 commented 7 months ago

C'est dans le master. Je te laisse retenter.

KiwiHC16 commented 7 months ago

Ca fonctionne avec ta derniere modif ;-)