Bonjour, j’utilisais depuis au moins 2 ans le plugin Frisquet Connect dispo sur le market pour piloter ma chaudière à gaz Frisquet qui est équipée du boitier « Frisquet Connect » permettant la commande à distance via appli sur smartphone.
Grâce au plugin je pouvais modifier les réglages de ma chaudière avec Jeedom.
Je constate depuis quelques temps que les ordres envoyés à la chaudière ne passent plus (en revanche le plugin restitue bien les infos venant de la chaudière)
Chose étrange, lorsqu’on passe un ordre (changement de température de consigne ou de mode de fonctionnement) via le plugin à partir de Jeedom, cet ordre passe bien au niveau de l’appli Frisquet Connect (qui affiche alors l’état tel que demandé via le plugin), mais cet ordre n’est pas communiqué à la chaudière (et je reçois une notification m’indiquant qu’un ordre n’a pas été envoyé).
En revanche si je passe le même ordre directement depuis l’appli sur smartphone, la chaudière le prend bien en compte …
J’ai aussi testé les scripts proposés ici https://community.jeedom.com/t/plugin-frisquet-connect/92119/17 : le résultat est le même → les scripts récupèrent bien les infos, les actions sont bien envoyées vers les serveurs Frisquet et apparaissent dans l’appli, mais ces actions ne sont pas envoyées à la chaudière (mais une action directe dans l’appli fonctionne systématiquement)
D’autres rencontrent-ils le même problème ? Frisquet auraient-ils changé quelque chose pour éviter ce type d’interactions (qui restent en théorie non autorisées par leurs conditions générales de vente …).
Je confirme le même soucis : mail de Frisquet Connect " Un ordre n’a pas été envoyé à votre chaudière" lorsque l’ordre est envoyé depuis Jeedom, pb depuis le mois d’Avril environ.
J’ai réussi une fois à faire passer l’ordre après avoir débrancher/rebrancher l’alimentation de la box Frisquet Connect mais j’en suis resté là.
Je sais que @WillJ a le même pb pour avoir échangé avec lui.
Hello,
je confirme même problème cela était bien pratique… Je pense que Frisquet a mis en place une protection car ils « aiment » garder leur système fermé.
j’ai également fait un reset du Frisquet Connect enlevant l’association entre la chaudière et la box Frisquet, depuis j’obtiens régulièrement des messages « Un ordre n’a pas été envoyé à votre chaudière » alors que celle ci est tout de même envoyée…
Il faudrait réussir à sniffer les ordres envoyés depuis l’appli Frisquet vers leurs serveurs comme cela avait été fait mais je n’y suis pas parvenu (je m’y prend surement mal).
Merci de vos réponses ! Déjà ça me rassure : ce n’est pas un problème sur mon installation
Je n’avais pas été jusqu’à refaire l’association entre box et chaudière : comme les actions initiées directement depuis l’appli Frisquet Connect sur smartphone fonctionnent, cette association ne me paraissait pas en cause.
Il doit y avoir une subtilité introduite par Frisquet qui permet de discerner les ordres venant effectivement de l’appli de ceux venant d’ailleurs … Mais là, je suis comme vous incapable d’aller plus loin, mes connaissances techniques ne me le permettent hélas pas.
Je vais tenter de fouiller sur les forums relatifs à Home Assistant car je sais que des utilisateurs de HA avaient aussi développé une interface avec Frisquet Connect : ils devraient avoir le même problème.
Sinon je vais aussi tenter de recontacter l’auteur du plugin Frisquet Connect : j’avais été « béta testeur » de son plugin il y a quelques années et il avait été très réactif quand je lui faisais remonter des problèmes durant mes tests (mais à priori j’ai cru lire qu’il n’était plus actif ici hélas) … à suivre …
Une info sur ce sujet, obtenue sur la communauté française des utilisateurs de Home Assistant
Il y a en effet une intégration dans Home Assistant qui a été faite par un développeur : j’ai donc demandé si elle fonctionnait toujours, voici la réponse du développeur HA:
« Oui cela fonctionne toujours. Nous avons du mettre a jour l’integration car Frisquet a fait des mise a jour et il faut maintenant gérer du websocket. Nous avons réussi a adapter les appels API avec cela »
Conclusion : ça peut toujours fonctionner mais la solution développée pour Jeedom doit être mise à jour … mais là s’arrêtent hélas mes compétences. Si quelqu’un pouvait comparer avec la solution HA disponible sur Github, ce serait top …
Effectivement, toutes les modifs concernant l’API sont bien détaillées sur GitHub pour HA avec les scripts en python:
Pour ma part sur Jeedom, j’utilise les scripts shell fournit par @zos93 ( Plugin Frisquet Connect ) et pas le plugin Frisquet Connect (qui est resté en « privé » d’ailleurs)
Hélas pas compétent pour savoir si les nouveaux appels API peuvent être adaptés sur les scripts shell.
voilà c’est exactement ça - les scripts que tu cites développés par @zos93 utilisent la même méthode que le plugin privé de @anto35 (auquel j’avais accès, mais hélas il ne semble plus intervenir sur ce forum) : j’ai testé et visualisé le code des 2 et c’est pareil - il faudrait effectivement intégrer à ces scripts (ou au plugin pour ceux qui l’utilisent, les évolutions comme fait pour Home Assistant … mais là je suis comme toi, pas suffisamment compétent … mais comme quand j’ai un os à ronger je m’avoue rarement vaincu, je vais essayer de comprendre ce qu’il faudrait faire … ça va occuper les longues soirées d’hiver
J’ai trouvé une solution, il faut désormais utiliser Python pour exécuter des commandes avec websocket. n’étant pas développeur sur python j’ai fait appel à Gemini… qui a su adapter et réécrire le script à partir de la source Home Assistant…
Etape 1 : Créer un fichier FrisquetSet.py
import sys
import json
import requests
import websocket
import time
import ssl
# --- 1. Récupération des arguments passés par Jeedom ---
if len(sys.argv) < 6:
print("Erreur : Arguments manquants.")
print("Usage : python3 frisquet_set.py <EMAIL> <PASSWORD> <CLE_ORDRE> <TYPE> <VALEUR>")
sys.exit(1)
EMAIL = sys.argv[1]
PASSWD = sys.argv[2]
CLE_ORDRE = sys.argv[3]
TYPE = sys.argv[4]
VALEUR = sys.argv[5]
# --- 2. Préparation de la Valeur (comme dans le script shell) ---
# Formatage de la température (ex: 20.5 -> "205")
if TYPE == "TEMPERATURE":
VALEUR_str = str(VALEUR).replace('.', '')
if len(VALEUR_str) <= 2:
VALEUR_str += "0"
VALEUR = VALEUR_str
else:
VALEUR = str(VALEUR)
# --- 3. AUTHENTIFICATION (Récupération du Token et de l'ID) ---
AUTH_URL = 'https://fcutappli.frisquet.com/api/v1/authentifications?app_id=dXk9XRsJQ8WfuO3IAsgpxr'
AUTH_DATA = {
"locale": "fr",
"email": EMAIL,
"password": PASSWD,
"type_client": "IOS" # Le payload reste 'IOS'
}
# Headers Android requis par la nouvelle API
HEADERS = {
'Content-Type': 'application/json; charset=UTF-8',
'Accept-Language': 'FR',
'Android-Version': '2.8.1',
'User-Agent': 'okhttp/4.12.0',
'Host': 'fcutappli.frisquet.com'
}
try:
auth_response = requests.post(AUTH_URL, headers=HEADERS, json=AUTH_DATA, timeout=10)
auth_response.raise_for_status()
auth_json = auth_response.json()
# Extraction du Token (niveau racine)
TOKEN = auth_json.get('token')
# CORRECTION : Extraction de l'ID Chaudière (imbriqué dans ['utilisateur']['sites'][0])
try:
# On suppose que le premier site/chaudière est celui que l'on veut contrôler
ID_CHAUDIERE = auth_json['utilisateur']['sites'][0]['identifiant_chaudiere']
except (KeyError, IndexError):
ID_CHAUDIERE = None
if not TOKEN or not ID_CHAUDIERE:
print(f"Erreur d'authentification: Token ou ID chaudière manquant. Réponse: {auth_json}")
sys.exit(1)
except requests.exceptions.RequestException as e:
print(f"Erreur lors de l'authentification HTTP: {e}")
sys.exit(1)
# --- 4. ENVOI DE L'ORDRE (POST) ---
ORDER_URL = f"https://fcutappli.frisquet.com/api/v1/ordres/{ID_CHAUDIERE}?token={TOKEN}"
ORDER_DATA = [
{
"cle": CLE_ORDRE,
"valeur": VALEUR
}
]
try:
order_response = requests.post(ORDER_URL, headers=HEADERS, json=ORDER_DATA, timeout=10)
order_response.raise_for_status()
print(f"Ordre POST envoyé. Statut HTTP: {order_response.status_code}")
except requests.exceptions.RequestException as e:
print(f"Erreur lors de l'envoi de l'ordre HTTP: {e}")
sys.exit(1)
# --- 5. CONFIRMATION PAR WEBSOCKET ---
# L'attente de confirmation est essentielle pour la nouvelle API
WS_URL = f"wss://fcappcom.frisquet.com/?token={TOKEN}&identifiant_chaudiere={ID_CHAUDIERE}"
WS_PAYLOAD = json.dumps({"type": "ORDRE_EN_ATTENTE"})
confirmation_received = False
TIMEOUT = 20 # Attente maximum de 20 secondes
try:
# Création de la connexion WebSocket. Ignorer la vérification SSL est parfois nécessaire.
ws = websocket.create_connection(WS_URL, timeout=TIMEOUT, sslopt={"cert_reqs": ssl.CERT_NONE})
ws.send(WS_PAYLOAD)
start_time = time.time()
while time.time() - start_time < TIMEOUT:
try:
result = ws.recv()
if result:
data = json.loads(result)
# La chaudière envoie 'ORDRE_OK' ou un statut 'OK' une fois la commande prise en compte
if data.get('type') == 'ORDRE_OK' or data.get('statut') == 'OK':
confirmation_received = True
break
except websocket.WebSocketTimeoutException:
pass # Continue la boucle si rien n'est reçu immédiatement
except Exception:
# En cas d'autre erreur (connexion coupée), on sort
break
ws.close()
except Exception as e:
print(f"Erreur de connexion WebSocket: {e}")
# On considère la commande comme non confirmée si le WS échoue
sys.exit(1)
# --- 6. RÉSULTAT FINAL ---
if confirmation_received:
print(f"SUCCESS: Commande '{CLE_ORDRE}' avec valeur '{VALEUR}' confirmée.")
sys.exit(0) # Code de succès
else:
print(f"FAILURE: Délai d'attente dépassé. Commande non confirmée après {TIMEOUT} secondes.")
sys.exit(1) # Code d'échec
Etape 2 : Modifier le fichier FrisquetSet.sh
#!/bin/bash
# Le $0 est le nom du script, les $1, $2, etc., sont les arguments.
python3 /var/www/html/plugins/script/data/FrisquetSet.py "$1" "$2" "$3" "$4" "$5"
Etape 3 : Tester dans le plugin script ! et normalement tout rentre dans l’ordre
Connais tu les commandes pour passer la chaudière « Confort », « Réduit », « Hors Gel » ou « Auto » ?
Idem sur le ballon d’eau chaude de la chaudière : « Max », « Eco », « Eco🕛 »; « Eco+ »; « Eco+🕛 »; « Stop »
J’ai juste eu un petit soucis de message d’erreur lié au time out de 20 secondes initialement mis dans le script : en le poussant à 60 secondes ça semble OK
pour info, comme j’avais échangé avec lui en message privé, @anto35 vient de m’informer qu’il a poussé sur le market une nouvelle béta du plugin qu’il avait développé il y a 2 ou 3 ans, et qui intègre les corrections nécessaires. Je n’ai pas encore testé (ce soir), je vous dirai si ça fonctionne
je vais demander à l’auteur …
Sinon j’ai toujours ce message d’erreur sur le délai d’attente dépassé, quasi systématiquement quand j’envoie un ordre à la chaudière, même si l’ordre passe effectivement.
Ca se produit aussi avec le plugin béta que je viens de tester (mais dans le code je trouve le même timeout de 20s, ce qui explique que le comportement est le même qu’avec le script python)
Avez-vous aussi ce message d’erreur ? (pendant cette période de timeout, je comprends que le code entre dans une boucle d’attente de la confirmation de prise en compte de l’ordre par la chaudière - si cette confirmation n’arrive pas, on sort de la boucle et le message d’erreur est affiché - en passant le timeout à 60s ça se produit encore - je vais tenter à 90s je ne pense pas que cela ait d’incidence car le code est juste à l’écoute de la réponse du serveur)
Bandeau rouge qui apparaît en bas à droite de la fenêtre Jeedom et on le retrouve dans les log du plugin script - ceci dit quand j’envoi un ordre même depuis l’appli il est toujours assez long à être pris en compte sur le satellite/thermostat de la chaudière et ça a toujours été comme ça depuis que j’ai le boîtier Frisquet Connect (que j’ai depuis au moins 5 ou 6 ans) - c’est instantané chez toi ?