Faudrait qu’on trouve le moyen d’avertir l’utilisateur si le device est détecté. Car typiquement y’a plein d’infos avec ce device mais qui n’ont pas d’intérêt domotique, exemple sur le screen de @Albenss , l’'expose ISOUSC ne change jamais de valeur.
Ou peut être la solution est d’identifier ces features et les « bannir »
Hello,
De mon côté j’ai demandé un passage en mode « Standard » de mon linky auprès d’EDF (il suffit de faire la demande via les formulaires de demandes de modification).
Les données remontent bien mieux maintenant, j’ai encore un peu de réglage je pense mais c’est déjà mieux
Ok, donc il y a 2 gros points à résoudre avant de pouvoir passer en prod.
Pour l’affichage des feature, on peut en parler lundi 20 si tes disponibilités tiennent toujours pour le call !
La performance je sais que tu me dis que c’est pas possible, mais on doit trouver un moyen, c’est pas raisonnable d’envoyer en production un truc qui par défaut défonce Gladys
Donc en gros, si je comprend bien, l’intégration Z2M avale un gros volume de donnée toutes les 60 secondes ? (en pic)
Tu as des chiffres sur le volume avalé par défaut ?
L’intégration Z2M peut aussi faire du throttling vu que c’est un gros pic, et distribuer les évènements de manière plus distribué dans le temps. On reçoit tout via MQTT, rien ne nous force à tout traiter dans la nano-seconde.
Au lieu d’envoyer 1000 events (je sais pas) en 1 bloc, on peut rajouter un peu d’attente entre chaque event, pour laisser à Node.js le temps de respirer.
Node.js il faut pas oublier que c’est une techno single-threaded qui fonctionne autour d’une « event-loop » ( Node.js — The Node.js Event Loop, Timers, and process.nextTick()), et cette event-loop peut-être bloquée par des opérations synchrones qui prennent trop de temps. Dans l’idéal, cette event loop doit tourner en permanence et n’être jamais bloquée.
A voir si dans l’intégration Z2M (ou dans le core) il n’y a pas un bloc synchrone un peu trop gros qui entraine des blocages de l’event loop et qui font côté utilisateur une sensation de blocage.
Pour débugger ce genre de soucis, il y a des libs qui existent (à utiliser uniquement en local pour tester) :
Tu mets le blocked() n’importe où dans le code (vraiment n’importe où), du moment que c’est exécuté une fois ça écoutera en permanence et ça te dira si jamais l’event loop est blocked, et surtout où c’est blocked!
J’ai reçu le module lixee mais je n’arrive pas a le voir encore dans mon réseau. J’ai le compteur à environs 20 m de ma box.
J’ai essayé de rapprocher une lampe Hue mais pour l’instant c’est pareil.
ça spam pas mal au démarrage, je n’ai pas encore remis en conf par défaut côté z2m
Mais j’ai ça qui revient régulièrement: ( toutes les 30/40 secondes )
Blocked for 36.14090771484375ms, operation started here: [
' at Socket.connect (net.js:970:7)',
' at Object.connect (net.js:201:17)',
' at Object.streamBuilder (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/connect/tcp.js:18:14)',
' at MqttClient.wrapper [as streamBuilder] (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/connect/index.js:154:36)',
' at MqttClient._setupStream (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/client.js:298:22)',
' at new MqttClient (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/client.js:277:8)',
' at Object.connect (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/connect/index.js:156:16)',
' at Zigbee2mqttManager.connect (/src/server/services/zigbee2mqtt/lib/connect.js:16:40)',
' at Zigbee2mqttManager.init (/src/server/services/zigbee2mqtt/lib/init.js:88:18)',
' at async Object.start (/src/server/services/zigbee2mqtt/index.js:17:5)',
' at async Service.start (/src/server/lib/service/service.start.js:33:7)'
]
ça concorde avec le publish d’un device z2m de nouvelles datas
Donc à mon avis , un device verbeux fout tout en carrafe
Super intéressant, cool que tu ai mis cette lib pour tester
Ok, dans ce cas il faudrait étudier le code de l’intégration Zigbee2mqtt dans Gladys, et faire du testing de publish de valeur sur des devices super verbeux, et voir combien de temps d’exécution synchrone on observe (ça peut se faire dans les unit test ça), pour si il le faut pouvoir découper certaines opérations en plus petites opérations pour laisser le reste du process souffler et avancer dans l’event loop
Tu pense pouvoir regarder ou tu aurais besoin d’aide là dessus ?
pas sur d’avoir compris ce que tu voulais faire, tu veux que je flood un device z2 ? . Sachant que je ne peux pas créer de fake device ( à la main en db peut être), j’aimerai ne pas pourrir ma prod.