2 petites améliorations suite au passage de la V15.00 à la V15.01
Nettoyage du code HTML,CSS,JavaScript grâce à l'analyse approfondie du code par Michy. Cela ne va rien changer. Juste un meilleur respect des recommandations du W3c.
Augmentation du timeout à l'établissement de la connexion vers un autre ESP ou Shelly et une deuxième tentative de connexion si la première échoue. Modification proposée par Lolo69 qui diminue les messages comme : "Connection to ESP_RMS ... failed" ou "connection to Shelly Em failed"
Pour passer de la V15.00 à la V15.01, il n'est pas nécessaire de sauvegarder vos paramètres. Allez dans Paramètres/Mise à jour par OTA, téléchargez la version 15.01 sur votre PC et envoyez-la à l'ESP32.
Merci beaucoup pour cette mise à jour que je viens d'effectuer. Ayant moi même un Shelly EM comme moyen de mesures, je ne manquerais pas de vous faire un retour
Routeur v15.01, mesures Shelly EM + sonde de température DS18B20
Triac Robodyn 24A/600V avec radiateur externe
Réglages réactivité 5, seuil de déclenchement -50, multi sinus
3 panneaux photovoltaïques Sunology Play 405W
Cumulus 200L 2200W méca 62°
Mise à jour effectuée ce matin à la première heure (avant que le (chaud) soleil ne se pointe), en utilisant pour ma part comme d'habitude la procédure par OTA après compilation du code source un peu modifié, sans aucun soucis.
Effectivement, il y a beaucoup (mais vraiment beaucoup) moins d'alertes de déconnexion sur mon Shelly PRO EM50, c'est parfait !
Merci à tous (André, Lolo69, Michy) pour cette nouvelle version !
_________________________________________________
Routeur Solaire en v15.01 (modifié avec écran OLED)
Pilotage d'un cumulus de 3kW + Jeedom v4.4.19 + Station solaire 3,5kW
Hier, 07:41 AM (Modification du message : Hier, 07:42 AM par Sgb31.)
Bonjour ,
Petit retour sur la maj 15.01
précédemment j'avais pas mal de messages Shelly Failed ...
si avec la 15.01, j'ai moins de messages ou plutôt les messages sont plus espacés ,
j'ai maintenant des messages " client Shelly Em Timeout !" que je n'avais pas avant .
voir en PJ recopie écran des données brutes de mon routeur maitre situé à 1 m du shelly dans la même pièce.
Config : 3 routeurs F1ATB en V14.25 - 2 routeurs fixes en mode Triacs + 1 routeur mobile polyvalent en mode : Triac+SSR
PV 3kw (8 panneaux TrinaSolar 425W + Onduleur SunGrow 3KW) - Supervision : Home Assistant / Shelly & MQTT
Autoconsommation moyenne >96 % depuis l'usage des routeurs f1atb
Hier, 08:23 AM (Modification du message : Hier, 08:24 AM par clyon44.)
(Hier, 07:41 AM)Sgb31 a écrit : Bonjour ,
Petit retour sur la maj 15.01
précédemment j'avais pas mal de messages Shelly Failed ...
si avec la 15.01, j'ai moins de messages ou plutôt les messages sont plus espacés ,
j'ai maintenant des messages " client Shelly Em Timeout !" que je n'avais pas avant .
voir en PJ recopie écran des données brutes de mon routeur maitre situé à 1 m du shelly dans la même pièce.
C'est très étrange parce que je ne rencontre pas du tout ce problème.
En tous cas pour moi cela fonctionne parfaitement, j'ai quelques erreurs par ci par là à une fréquence de 2 par exemple hier mais franchement par rapport à avant c'est anecdotique. Et en effet on a comme une impression que la régulation fonctionne encore mieux. A voir avec le temps.
Merci à tous pour cette amélioration !
Routeur v15.01, mesures Shelly EM + sonde de température DS18B20
Triac Robodyn 24A/600V avec radiateur externe
Réglages réactivité 5, seuil de déclenchement -50, multi sinus
3 panneaux photovoltaïques Sunology Play 405W
Cumulus 200L 2200W méca 62°
(Hier, 07:41 AM)Sgb31 a écrit : Bonjour ,
Petit retour sur la maj 15.01
précédemment j'avais pas mal de messages Shelly Failed ...
si avec la 15.01, j'ai moins de messages ou plutôt les messages sont plus espacés ,
j'ai maintenant des messages " client Shelly Em Timeout !" que je n'avais pas avant .
voir en PJ recopie écran des données brutes de mon routeur maitre situé à 1 m du shelly dans la même pièce.
C'est très étrange parce que je ne rencontre pas du tout ce problème.
En tous cas pour moi cela fonctionne parfaitement, j'ai quelques erreurs par ci par là à une fréquence de 2 par exemple hier mais franchement par rapport à avant c'est anecdotique. Et en effet on a comme une impression que la régulation fonctionne encore mieux. A voir avec le temps.
Merci à tous pour cette amélioration !
Voilà également ce que je constate sur le second routeur esclave du premier ..
C'est assez étrange ...
Config : 3 routeurs F1ATB en V14.25 - 2 routeurs fixes en mode Triacs + 1 routeur mobile polyvalent en mode : Triac+SSR
PV 3kw (8 panneaux TrinaSolar 425W + Onduleur SunGrow 3KW) - Supervision : Home Assistant / Shelly & MQTT
Autoconsommation moyenne >96 % depuis l'usage des routeurs f1atb
Hier, 01:47 PM (Modification du message : Hier, 02:24 PM par FastFrench.)
(Hier, 07:41 AM)Sgb31 a écrit : Bonjour ,
Petit retour sur la maj 15.01
précédemment j'avais pas mal de messages Shelly Failed ...
si avec la 15.01, j'ai moins de messages ou plutôt les messages sont plus espacés ,
j'ai maintenant des messages " client Shelly Em Timeout !" que je n'avais pas avant .
voir en PJ recopie écran des données brutes de mon routeur maitre situé à 1 m du shelly dans la même pièce.
Ah, ça me rassure de ne pas être le seul à avoir ces TimeOut venant du Shelly (Shelly Pro 3EM dans mon cas, connecté en filaire. Et le routeur est tout près du point d'accès Wifi 2.4GHz)
Et donc globalement le routeur (injection du surplus) fonctionne correctement malgré ces erreurs épisodiques ? Quels paramètres tu utilises pour les actions ?
Vu que de mon côté la régulation ne marche pas, je suspectais que ça puisse en être la raison.
Et effectivement dans le version 15.01, André a augmenté le temps de Timeout de la connexion au Shelly à 3 secondes, et en cas d'erreur, réessaie dans la foulée une autre connexion avec ce même TimeOut de 3 seconde. Ce n'est que si les deux échouent qu'on a le message d'erreur.
Si tu veux essayer ce petit script Python, je suis curieux de voir de que ça te donne (il te suffit de changer l'IP du Shelly Ligne 6). A la fin, le script t'affiche un récap et génère un .csv contenant le détail des mesures effectuées:
Code :
import requests
import time
import csv
from requests.exceptions import ConnectTimeout, ReadTimeout, RequestException
def get_status_with_retry(request_number, timeout_counter, start_time):
"""
Effectue la requête avec retries, affiche le détail complet en cas de timeout ou erreur
+ indique le temps écoulé depuis le début du test.
"""
for attempt in range(1, MAX_RETRIES + 1):
try:
r = requests.get(SHELLY_URL, timeout=(CONNECT_TIMEOUT, READ_TIMEOUT))
r.raise_for_status()
return r.json(), timeout_counter, False
except ConnectTimeout:
timeout_counter += 1
elapsed = time.time() - start_time
print(f"[Requête #{request_number}] ConnectTimeout {timeout_counter} "
f"(tentative {attempt}/{MAX_RETRIES}, à {elapsed:.2f}s depuis le début, "
f"timeout={CONNECT_TIMEOUT}s)")
time.sleep(0.05)
except ReadTimeout:
timeout_counter += 1
elapsed = time.time() - start_time
print(f"[Requête #{request_number}] ReadTimeout {timeout_counter} "
f"(tentative {attempt}/{MAX_RETRIES}, à {elapsed:.2f}s depuis le début, "
f"timeout={READ_TIMEOUT}s)")
time.sleep(0.05)
except RequestException as e:
elapsed = time.time() - start_time
print(f"[Requête #{request_number}] Erreur: {e} "
f"(à {elapsed:.2f}s depuis le début)")
time.sleep(0.05)
return None, timeout_counter, True # échec complet
# Détection changement global
if values != last_values:
now = time.perf_counter()
if last_change_time is not None:
refresh_intervals.append((now - last_change_time) * 1000)
last_change_time = now
last_values = values
# Ignorer le premier intervalle
filtered_intervals = refresh_intervals[1:] if len(refresh_intervals) > 1 else []
# Résultats
if response_times:
print("\n=== Temps de réponse API (réussites uniquement) ===")
print(f"Min: {min(response_times):.2f} ms")
print(f"Max: {max(response_times):.2f} ms")
print(f"Moy: {sum(response_times)/len(response_times):.2f} ms")
if filtered_intervals:
print("\n=== Intervalle de mise à jour global (3 phases) ===")
print(f"(Première valeur ignorée, {len(filtered_intervals)} intervalles utilisés)")
print(f"Min: {min(filtered_intervals):.2f} ms")
print(f"Max: {max(filtered_intervals):.2f} ms")
print(f"Moy: {sum(filtered_intervals)/len(filtered_intervals):.2f} ms")
total_time = time.time() - start_time
print("\n=== Bilan final ===")
print(f"Durée totale du test : {total_time:.2f} s")
print(f"Nombre total de requêtes tentées : {request_number}")
print(f"Nombre de requêtes réussies : {success_count}")
print(f"Nombre de changements détectés (hors 1er) : {len(filtered_intervals)}")
print(f"Taux de réussite : {100 * success_count / request_number:.1f} %")
print(f"Total timeouts : {timeout_counter}")
print("\n? Détails enregistrés dans 'shelly_log.csv'")
if __name__ == "__main__":
main()
Dans mon cas, voici la répartition des temps d'accès au Shelly, sur un test intensif pendant 3 minutes (861 accès effectués). On voit que la grande majorité des accès se fait en environ 200 ms. Seuls 3 accès sur 861 dépassent une seconde, le pire étant à 2.55s.