@Nicolas-Bernaerts bin je comprends pas non plus, le fonctionnement avec le firmware tasmota "stock" sur l'esp32s2 est parfaitement fonctionnel en plus, y compris l'enregistrement des GPIO, le changement de historique à standard, tout fonctionne plutôt bien... Ce que j'observe est différent, je peux enregistrer les GPIO sans soucis, mais la conf teleinfo ne s'enregistre pas. Je peux redémarrer autant que je veux l'esp32s2 reste accessible, mais les paramètres restent "stock". Je flash le firmware "factory" via serial de mon côté.
@Charles en fait j'ai tenté en effet de faire marcher le tasmota avec emoncms mais ce que j'en ai sorti c'est que l'esp32s2 me semblait trop faible pour envoyer les trames avec toutes les données du mode standard. Je me trompe probablement, mais dès que j'activais le script berry, l'interface web devenait de plus en plus lente jusqu'à se bloquer jusqu'au redémarrage. Aucune donnée en plus n'arrivait dans l'emoncms, alors que si j'arrivais à attraper une URL depuis la console et que je l'entrait manuellement dans mon navigateur, une salve de données arrivait bien (indiquant que les configuration était a priori correcte).
J'avais mis ça sur le compte de la quantité de données envoyée par le script, et qu'il était judicieux d'essayer la version de @Nicolas-Bernaerts pour filtrer les données avant des les envoyer.
Pour la log, non pas possible par l'USB d'avoir un accès série, c'est déconnecté sur le S2. Idem pour flasher il faut obligatoirement garder un bouton appuyé au moment de reset, pour mettre en mode download, ce n'est pas automatique comme sur le wemos d1 mini esp32 (qui a bien un accès série par l'usb lui, mais c'est pas un s2 )
Je vais tenter à nouveau avec le firmware version @Charles de jouer avec les script berry, mais je pense qu'il manque pas grand chose dans la version @Nicolas-Bernaerts pour que ça marche aussi sur le S2... ^^
EDIT : @Charles en fait en mode "standard" le script proposé n'est pas compatible, j'avais essayé de le modifier mais du coup la modif faite n'est clairement pas bonne. Par ex, si j'ai bien compris, HCHP et HCHC ne sont pas transmises. ISOUSC doit être calculé sur la base de PREF/200. IINST est remplacé par SINSTS... Bref je suis largué...
J'ai en désespoir tenté de commenter le bloc avec les calculs juste pour faire un envoi des données brut, j'ai l'URL qui fonctionne j'ai l'impression quand je l'entre à la main dans le navigateur mais pas en auto depuis le tasmota.
import json
var api_url = "http://emoncms.mondomain.local/input/post"
var api_key = "APIQUEJ'AIENTRE"
var node_name = "linky"
#def setcolor(iinst, isousc)
# var red = tasmota.scale_uint(iinst, 0, isousc, 0, 255)
# var green = 255 - red
# var channels = [red, green, 0]
# light.set({"channels":channels, "bri":64, "power":true})
#end
def rule_tic(value, trigger)
# Got Heures Creuses contract so I will calculate total consumption
# adding Heures Creuses (HCHC) + Heures Pleines (HCHP) and create new value for emoncms
# Change label depending on name for your contract type
#var htot = value['HCHP'] + value['HCHC']
# Create new value HTOT converted to kWH
#value['HTOT'] = htot / 1000.0
# Calculate current percent Load
#var iinst = value['SINSTS']
#var isousc= value['PREF']
#if iinst != nil && isousc != nil
# # Drive RGB LED
# setcolor(iinst, isousc)
# if isousc > 0
# load = 100 * iinst / isousc
# value['LOAD'] = load
# end
#end
# Convert JSON object to string
var obj_json = json.dump(value)
# Create URL to call
var param="?fulljson="+obj_json + "&node="+node_name + "&apikey="+api_key
# Post Data to EMONCMS
var cl = webclient()
cl.begin( api_url + param)
var r = cl.GET()
print(r, load, param)
end
# Callback on each MQTT interception
tasmota.add_rule("TIC",rule_tic)
EDIT2 : voilà j'ai refait le test, en console berry après avoir entré le script ci-dessus, j'ai ces lignes très longues qui apparaissent :
J'ai copié une ligne dans un notepad :
-1 <function: 0x3fd80e94> ?fulljson={"EASF08":0[...]
J'ai remplacé le début jusqu'au ? par l'url de mon emoncms, ce qui donne :
http://emoncms.mondomaine.local/input/post?fulljson={"EASF08":0,"CCASN"[...]
Si je colle ça dans mon navigateur j'obtiens :
Et les données sont fraiches dans emoncms :
Mais en auto rien ne se passe...
EDIT3 :
J'ai fais une nouvelle version du script mais pareil en auto rien ne part. La gestion de la valeur du LOAD est correcte a priori, de même que la gestion de la led (a priori toujours). J'ai décommenté ce que j'avais commenté, hors gestion heures creuses...
import json
var api_url = "http://emoncms.mondomaine.local/input/post"
var api_key = "API"
var node_name = "linky"
def setcolor(iinst, isousc)
var red = tasmota.scale_uint(iinst, 0, isousc, 0, 255)
var green = 255 - red
var channels = [red, green, 0]
light.set({"channels":channels, "bri":64, "power":true})
end
def rule_tic(value, trigger)
# Got Heures Creuses contract so I will calculate total consumption
# adding Heures Creuses (HCHC) + Heures Pleines (HCHP) and create new value for emoncms
# Change label depending on name for your contract type
#var htot = value['HCHP'] + value['HCHC']
# Create new value HTOT converted to kWH
#value['HTOT'] = htot / 1000.0
# Calculate current percent Load
var iinst = value['SINSTS']
var isousc= value['PREF'] * 1000
if iinst != nil && isousc != nil
# Drive RGB LED
setcolor(iinst, isousc)
if isousc > 0
load = 100 * iinst / isousc
value['LOAD'] = load
end
end
# Convert JSON object to string
var obj_json = json.dump(value)
# Create URL to call
var param="?fulljson="+obj_json + "&node="+node_name + "&apikey="+api_key
# Post Data to EMONCMS
var cl = webclient()
cl.begin( api_url + param)
var r = cl.GET()
print(r, load, param)
end
# Callback on each MQTT interception
tasmota.add_rule("TIC",rule_tic)
Dites moi si c'est correct ou pas, j'ai vu que PREF était en kva, donc pour comparer à SINSTS qui est en va il faut ajouter un x1000 sur PREF. Le reste doit fonctionner normalement...