Tasmota
-
@Barbu-Dor j'ai changé pas mal de choses dans le soft notamment le fait de pouvoir configurer tout un tas de choses avec des nouvelles commandes en mode console.
Sauf que j'aurai besoin de ton expertise, j'ai bien créé tout ce qu'il faut, ca compile ça tourne j'appelle bien ma fonction de gestion des commandes lorsque je reçois
FUNC_COMMAND
dans le driver teleinfo, sauf que je ne reçois jamais ca, même qd je tape une commande dans la console, j'ai surement oublié un truc genre register ma callback pour les commandes, mais je ne trouves pas, tu sais ou on fait ça ?bool Xnrg15(uint8_t function) { bool result = false; switch (function) { case FUNC_EVERY_250_MSECOND: TInfoProcess(); break; case FUNC_COMMAND: AddLog(LOG_LEVEL_INFO, PSTR("TIC: FUNC_COMMAND")); result = TInfoCmd(); break; case FUNC_JSON_APPEND: TInfoShow(1); break; #ifdef USE_WEBSERVER case FUNC_WEB_SENSOR: TInfoShow(0); break; #endif // USE_WEBSERVER case FUNC_INIT: TInfoInit(); break; case FUNC_PRE_INIT: TInfoDrvInit(); break; } return result; }
Le code source si tu veux jeter un oeil sur la branche
teleinfo
https://github.com/hallard/Tasmota/blob/teleinfo/tasmota/xnrg_15_teleinfo.ino
-
@charles En effet ta gestion de commande est légèrement erronée
Ce qui te manque surtout pour que ton driver soit enregistré c'est de définir#define XDRV_15 15
au debut de ton code
A partir de là tu devrais voir arriver les FUNC_COMMANDEnsuite normalement les commandes sont faite d'un prefixe et d'une partie variable.
Par exemple pour le driver display les commandes sont : DisplayModel, DisplayType, DisplayWidth etc....
La chaine kDisplayCommands vaut (une fois remplacé les macros) "Display|Model|Type|Width..."
Et Tasmota te fourni une fonction de décodage que tu peux appeller dans FUNC_COMMAND:case FUNC_COMMAND: result = DecodeCommand(kTinfoCommands, TinfoCommand); break;
où TinfoCommand[] est un tableau de pointeurs vers les fonctions de chacune de test commandes.
Après, il est vrai que pas tous les drivers utilisent
DecodeCommand()
, certains font comme toi et decrypte la commande "à la main"
L'avantage d'utiliserDecodeCommand()
c'est d'éviter de recréer un code identique dans tous les drivers et donc d'optimiser l'occupation en flash. -
@barbu-dor My bad, tu as deja XNRG_15 15 au debut (tu es un driver NRG, pas un driver générique)
Et les drivers energy ne peuvent pas recevoir de commandes individuelles mais uniquement les commandes standards energy
Donc c'est pour cela que tu ne reçoit pas les commandes
-
@charles Je pensais tester ce soir. C'est bon je peux récupérer les sources sur le github ??
-
@Charles Tu es sur Discord ? Ca serait plus simple d'en chatter en live
Mais les driver xnrg_xx sont des ous drivers de xdrv_03_energy
xdrv_03_energy decode les commandes liées à l'energie (voir au debut du module) et passe au sous driver uniquement ces commandes làJe suis en train de discuter sur le discord de l'equipe pour voir les options possibles
-
@charles
Je viens de tester ce soir, et exactement même symptôme que la dernière fois.
Tu choisis la pin D7, il reboote, tu rentres dans la console pour passer en 9600 baud, il ne décode rien, et si tu rentres dans la config la pin D7 sélectionné a disparu..21:08:09.037 MQT: tele/tasmota_D84B6D/LWT = Online (persistant)
21:08:09.038 MQT: cmnd/tasmota_D84B6D/POWER =
21:08:09.042 MQT: tele/tasmota_D84B6D/INFO1 = {"Info1":{"Module":"Generic","Version":"9.3.1.2(tasmota)","FallbackTopic":"cmnd/DVES_D84B6D_fb/","GroupTopic":"cmnd/tasmotas/"}}
21:08:09.044 MQT: tele/tasmota_D84B6D/INFO2 = {"Info2":{"WebServerMode":"Admin","Hostname":"tasmota_D84B6D-2925","IPAddress":"192.168.1.151"}}
21:08:09.047 MQT: tele/tasmota_D84B6D/INFO3 = {"Info3":{"RestartReason":{"Exception":3,"Reason":"Exception","EPC":["402596f4","00000000","00000000"],"EXCVADDR":"40294bbc","DEPC":"00000000","CallChain":["4021d33c","40231b38","4024da2e","40218d4d","402527ca","402527c0","401010c0","4024db29","4021d77f","401010c0","402360ab","4021da7c","40220b7c","40218d4d","402325f3","40232648","40100a58","40250b8c","40101d05"]}}}
21:08:12.401 QPC: Reset -
Tu choisis la pin D7, il reboote,
Ca c'est normal. Quand tu appliques une config de GPIO et que tu cliques "SAVE", Tasmota reboote
Si tu vas vérifier la config juste après le reboot, est que D7 est toujours configurée en Teleinfo ?
Peux tu te mettre en WebLog 3 avant d'appliquer la config sur D7, puis après le reboot copier ici les premières lignes du log, jusqu'à la connexion WIFI, cela suffira
Quoi que là, ton log semble vouloir dire qu'il y a eu un crash
J'essayerais demain soir. Pour l'instant game-over
Bonne nuit -
@barbu-dor
Weblog 3 avant de sélectionner la pin d7
00:00:00.029 CFG: Chargé de la flash à F8, Compte 7
00:00:00.032 QPC: Count 1
00:00:00.033 CFG: CR 353/699, Busy 0
00:00:00.036 SRC: Restart
00:00:00.037 Projet tasmota Tasmota Version 9.3.1.2(tasmota)-2_7_4(2021-04-08T22:00:10)
00:00:00.189 WIF: Tentative de connexion...
00:00:00.524 WIF: Connexion à l'AP1 Sylvia&Seb Channel 1 BSSId xx:xx:xx:xx:xx:xx en mode 11n comme tasmota_D84B6D-2925...
00:00:01.754 WIF: ConnectéPuis une fois la pin d7 sélectionné, j'ai un message étranges NRG: Energy reset by invalid data
22:54:41.412 APP: Nombre de boot 3
22:54:41.434 HTP: Configuration
22:54:42.302 CFG: Enregistré en flash à FC, Compte 11, Octets 4096
22:54:42.933 HTP: Configuration du Module
22:54:47.380 HTP: Configuration
22:54:49.106 HTP: Menu principal
22:54:52.706 HTP: Console
22:54:53.413 NRG: Energy reset by invalid dataPuis une fois le setoption102 1 validé, voici le résultat
00:00:00.031 CFG: Chargé de la flash à FA, Compte 13
00:00:00.034 FRC: Some settings have been reset (2)
00:00:00.035 CFG: CR 353/699, Busy 0
00:00:00.037 SRC: Restart
00:00:00.038 Projet tasmota Tasmota Version 9.3.1.2(tasmota)-2_7_4(2021-04-08T22:00:10)
00:00:00.039 TIC: RX on GPIO13, baudrate 9600
00:00:00.039 TIC: always enabled
00:00:00.090 SNS: Hardware Serial
00:00:00.090 TIC: using hardware serial
00:00:00.090 TIC: Ready
00:00:00.169 WIF: Tentative de connexion...
00:00:00.504 WIF: Connexion à l'AP1 Sylvia&Seb Channel 1 BSSId xx:xx:xx:xx:xx:xx en mode 11n comme tasmota_D84B6D-2925...
00:00:01.500 WIF: Connecté
00:00:01.751 HTP: Serveur web actif sur tasmota_D84B6D-2925 avec l'adresse IP 192.168.1.151
00:00:02.459 RTC: UTC 2021-04-08T21:56:45, DST 2021-03-28T02:00:00, STD 2021-10-31T03:00:00
22:57:08.015 RSL: tele/tasmota_D84B6D/INFO1 = {"Info1":{"Module":"Generic","Version":"9.3.1.2(tasmota)","FallbackTopic":"cmnd/DVES_D84B6D_fb/","GroupTopic":"cmnd/tasmotas/"}}
22:57:08.016 RSL: tele/tasmota_D84B6D/INFO2 = {"Info2":{"WebServerMode":"Admin","Hostname":"tasmota_D84B6D-2925","IPAddress":"192.168.1.151"}}
22:57:08.019 RSL: tele/tasmota_D84B6D/INFO3 = {"Info3":{"RestartReason":{"Exception":3,"Reason":"Exception","EPC":["402596f4","00000000","00000000"],"EXCVADDR":"40294bbc","DEPC":"00000000","CallChain":["4021d33c","402360ab","40236070","4024da2e","4024e157","4024e157","402527ca","402527c0","4024db29","4021d77f","401010c0","402360ab","4021da7c","40220b7c","40218d4d","402325f3","40232648","40100a58","40250b8c","40101d05"]}}}
22:57:11.471 QPC: Reset
22:57:12.438 RSL: tele/tasmota_D84B6D/STATE = {"Time":"2021-04-08T22:57:12","Uptime":"0T00:00:09","UptimeSec":9,"Heap":25,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":0,"Wifi":{"AP":1,"SSId":"Sylvia&Seb","BSSId":"14:91:82:FC:0E:ED","Channel":1,"RSSI":66,"Signal":-67,"LinkCount":1,"Downtime":"0T00:00:03"}}
22:57:13.413 APP: Nombre de boot 4
22:57:13.564 CFG: Enregistré en flash à F8, Compte 15, Octets 4096 -
00:00:00.039 TIC: RX on GPIO13, baudrate 9600
00:00:00.039 TIC: always enabled
00:00:00.090 SNS: Hardware Serial
00:00:00.090 TIC: using hardware serial
00:00:00.090 TIC: ReadyPourtant le module Teleinfo (TIC) est bien démarré et sur la GPIO13 (D7)
Donc a ce moment là il devrait être en mesure de recevoir
Par contre le dernier redémarrage est quand même du à un crashIl faudra que j'essaye ce soir
-
@barbu-dor J’Ai fait des modifs pour afficher plus de chose en mode standard je dois avoir un bug dans un des sends pour afficher ou envoyer des donnés mais sans linky chaud à trouver
-
@barbu-dor yes j’y suis.
Oui j’ai vu que ça dépendait du module energy après coup depuis le début je le dit que c’était pas forcément la meilleure des idées de pas passer par un driver standard
-
@charles Theo vient de merger ma PR
Il y a maintenant une commande EnergyConfig qui est poussée jusqu'au driver energie actif
A partir de là tu peux traite la commande comme tu veux (la chaine est dans XDrvMailbox.data)
Regarde le petit exemple ajouté dans xnrg_20_dummy -
@barbu-dor ok top je fais ça ASAP s'suis déjà sur 2 autres trucs, mais tu connais ça je suppose
-
@barbu-dor et voila c'est fait un grand merci à toi
Maintenant toute la config téléinfo se fait en mode console et sans les SetOption, donc depuis la branche developpement de tasmota de ce matin, les 2 options
SetOption102
etSetOption108
n'ont plus d'incidence elles ne servent plus à rien et ont été marquée obsolètes dans le code.Description:
Comment ça se passe maintenant ? Très simple avec la commande
EnergyConfig
depuis la consoleEnergyConfig
affiche la configuration de la téléinfo14:03:38.161 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "ADCO":"031428067147","OPTARIF":"HC..","ISOUSC":15,"HCHC":2478378,"HCHP":0,"PTEC":"HC..","IINST":0,"IMAX":2,"PAPP":100,"HHPHC":3,"MOTDETAT":0} 14:03:38.605 CMD: EnergyConfig 14:03:38.609 TIC: Settings Mode:historique, Raw:full, Skip:0, Limit:0 14:03:38.630 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/stat/RESULT = {"EnergyConfig":"Done"} 14:03:39.664 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "ADCO":"031428067147","OPTARIF":"HC..","ISOUSC":15,"HCHC":2478378,"HCHP":0,"PTEC":"HC..","IINST":0,"IMAX":2,"PAPP":100,"HHPHC":3,"MOTDETAT":0} 14:03:41.411 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "ADCO":"031428067147","OPTARIF":"HC..","ISOUSC":15,"HCHC":2478378,"HCHP":0,"PTEC":"HC..","IINST":0,"IMAX":2,"PAPP":100,"HHPHC":3,"MOTDETAT":0} 14
EnergyConfig Standard
Configure la téléinfo en mode Linky Standard (9600bps)
EnergyConfig Historique
Configure la téléinfo en mode Linky Historique (1200bps)Au dela de la trame complète de télémetrie (topic
SENSOR
) envoyée régulièrement (menuconfiguration/configure logging
)14:00:01.561 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/SENSOR = {"Time":"2021-04-10T14:00:01","ENERGY":{"TotalStartTime":"2021-04-09T23:32:17","Total":0.602,"Yesterday":0.000,"Today":0.602,"Period":6,"Power":110,"Current":0.000,"Load":0,"ADCO":"031428067147","OPTARIF":"HC..","ISOUSC":15,"HCHC":2478373,"HCHP":0,"PTEC":"HC..","IINST":0,"IMAX":2,"PAPP":110,"HHPHC":3,"MOTDETAT":0}}
il est possible d'envoyer en plus les données complètes à chaque trame reçue
EnergyConfig full
active l'envoi complet à chaque trame reçue
EnergyConfig changed
active l'envoi uniquement des données modifiées (depuis la dernière trame donc) à chaque trame reçue14:05:18.411 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "ADCO":"031428067147","OPTARIF":"HC..","ISOUSC":15,"HCHC":2478380,"HCHP":0,"PTEC":"HC..","IINST":0,"IMAX":2,"PAPP":110,"HHPHC":3,"MOTDETAT":0} 14:05:19.241 CMD: EnergyConfig Changed 14:05:19.245 TIC: Raw to 'changed' 14:05:19.267 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/stat/RESULT = {"EnergyConfig":"Done"} 14:05:20.105 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "PAPP":100} 14:05:23.209 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "HCHC":2478381} 14:06:06.201 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "PAPP":110} 14:06:09.160 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "HCHC":2478382} 14:06:53.737 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "HCHC":2478383} 14:07:12.914 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "PAPP":100}
EnergyConfig noraw
désactive l'envoi (complet ou changed) de chaque trame reçue
EnergyConfig Skip 5
envoi seulement 1 trame sur x (ici 5) lors de l'envoi des données, permet de limiter un peu le trafic et surtout l'envoi en base systématique par exemple.
EnergyConfig Skip 0
désactive l'option précédente.Attention, a partir du moment ou vous avez activé le
skip
mode l'optionchanged
devient caduque car lechanged
sera appliqué sur la dernière trame reçue et pas celle envoyée, et en plus elle peut être "skippée".N'hésitez pas si vous avez des questions ou des remarques
-
@charles Super
Est-ce que les settings sont sauvegardés ?
Ou bien faut-il les remettre à chaque démarrage ?
C'est assez facile soit avec uneRule
typeon system#boot do backlog EnergyConfig xxxx; EnergyConfig xxx endon
De plus maintenant en activant le FileSystem en flash on peut aussi avoir un fichier `autexec.bat' qui enchaîne des commandes de configuration. Même sur un module minimum de 1MB on peut avoir 48kB de filesystem, largement suffisant pour un autoexec.bet conséquent. Avec un MiniD1/NodeMCU de 4MB on peut avoir 2MB de filesystem.
Sur ESP32, la place réservé au code est plus importante (2 * 1,9MB pour gérer l'OTA) et donc le filesystem minimum est de 48kB aussi.Ca serait bien de faire une page de doc dédiée mais par contre, il faudra la faire en anglais pour être cohérent avec le reste. Je peux regarder cela un peu plus tard.
-
Bonjour,
Merci pour votre travail pour intégrer la téléinfo dans Tasmota.
Sur la version tasmota 9.3.1.1, en mode téléinfo standard, les compteurs triphasés ne semblent pas correctement traités.
Sur la page d'accueil, il n'apparait qu'une seule tension et une seule intensité.
Est-ce que cela a été corrigé sur Tasmota 9.3.1.2?Je vous remercie.
Vincent
-
@barbu-dor said in Tasmota:
@Charles j'ai changé l'appel à MqttPublish() par MqttPublishRules() (ou du meme genre) ainsi le JSON est parsé par le moteur de règles
Chaque champ est alors un triggerBonjour,
Pourriez-vous m'indiquer à partir de quelle version de Tasmota cette fonction a été intégrée?
Est-ce bien la 9.3.1.1?
donc pas sur la 9.3.1?Merci
Vincent
-
@vincent835 Compte tenu que j'ai posté ce message le 11 février et que la 9.3.1 est sortie le 22 février, ma PR de février est donc dans le code de la release 9.3.1
MAIS n'oublie pas que Teleinfo n'est pas inclus par défaut dans aucun des binaires et qu'il faut compiler soit même.
Donc tant qu'a compiler, autant le faire sur la version de développement. -
@charles
J'ai tenté de charger ta dernière version logicielle, mais chez moi c'est toujours pareil sur un wemos D1 mini00:00:00.032 CFG: Chargé de la flash à F8, Compte 15
00:00:00.034 FRC: Some settings have been reset (5)
00:00:00.039 Projet tasmota Tasmota Version 9.3.1.2(tasmota)-2_7_4(2021-04-11T13:29:44)
00:00:00.507 WIF: Connexion à l'AP1 Sylvia&Seb Channel 1 BSSId xxxxxx en mode 11n comme tasmota_D84B6D-2925...
00:00:01.752 WIF: Connecté
00:00:02.004 HTP: Serveur web actif sur tasmota_D84B6D-2925 avec l'adresse IP 192.168.1.151
12:43:18.047 RSL: tele/tasmota_D84B6D/INFO1 = {"Info1":{"Module":"Generic","Version":"9.3.1.2(tasmota)","FallbackTopic":"cmnd/DVES_D84B6D_fb/","GroupTopic":"cmnd/tasmotas/"}}
12:43:18.048 RSL: tele/tasmota_D84B6D/INFO2 = {"Info2":{"WebServerMode":"Admin","Hostname":"tasmota_D84B6D-2925","IPAddress":"192.168.1.151"}}
12:43:18.051 RSL: tele/tasmota_D84B6D/INFO3 = {"Info3":{"RestartReason":{"Exception":3,"Reason":"Exception","EPC":["40259a0c","00000000","00000000"],"EXCVADDR":"402950d0","DEPC":"00000000","CallChain":["4021d35c","402323a7","40255070","4024dd42","401060f9","4000050c","40232918","402328f5","40252ade","40252ad4","4024de3d","4021dab4","401010c0","402363bb","4021dde0","40220efc","40218d55","402328e7","4023293c","40100a58","40250ea0","40101d05"]}}}
12:43:21.447 QPC: Reset
12:43:22.413 RSL: tele/tasmota_D84B6D/STATE = {"Time":"2021-04-11T12:43:22","Uptime":"0T00:00:09","UptimeSec":9,"Heap":25,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":0,"Wifi":{"AP":1,"SSId":"Sylvia&Seb","BSSId":"xxxxxxxx","Channel":1,"RSSI":64,"Signal":-68,"LinkCount":1,"Downtime":"0T00:00:03"}}Il me fait un reset du choix teleinfo sur la pin D7
-
@barbu-dor oui je pense que ca l'est automatiquement car c'est dans les settings globaux, mais faudra que je verifie qd même
yes j'ai vu ca maintenant j'active UFS par défaut aussi c'est top.
Oui pour la doc j'ai déjà fait 2/3 modifs, pour les vieux setoption mais aussi pour une carte ZigBee que j'ai ajouté dans la partie zigbee donc je devrais pouvoir m'en sortir
Pour la téléinfio oui le mieux est une page dédiée justement j'y pensais. Si tu peux "créer" cette page même vide (ou me dire comment faire) ca me permettrait de commencer à y mettre des choses.