Messages : 97
Sujets : 15
Inscription : Jun 2024
Bonjour à Chacun,
L'idée sous-jacente est de se passer de HW/SW domotique pour échanger avec F1ATB.
Si c'est possible
Comment récupérer les données de la page d'accueil ?
Pour aller plus loin encore, pourrait-on agir sur la page actions
Quelles seraient les commandes reconnues et leur syntaxe?
Peut-être ce n'est pas possible,
mais je récupère déjà la production horaire des panneaux
en interrogeant par des macros python sur Libre office Calc le Shelly 2PM intercalé entre le réseau et les µOnduleurs.
Alors pourquoi pas?
Merci de votre lecture, et vous avez le droit de casser mon rêve
Cdt
Oui ... ça ose tout c'est à cela qu'on les reconnaît ;-)
Routeur F1ATB seulement 1,25% d'injection hors pb Heure Eq.
840 Wc (Versailles solar/ Hoymiles) face à l'Est
+ 1000W (Leapton/Deye) Est et Sud dans le Dept 06.
Routeur split 2 ESP uPesy en v14.04: UxIx2 (entrée et cumulus) / Triac 40A surveillé par une sonde T°.
Messages : 452
Sujets : 5
Inscription : Jun 2024
Bonjour,
Il y a ce endpoint qui donne les principales informations de la page d’accueil : http://ipDuRouteur/ajax_dataRMS
Peut-être que cela peut aider.
Messages : 97
Sujets : 15
Inscription : Jun 2024
Merci Mike
c'est un bon début, cela permet de récupérer les données de la page données brutes.
si tu as d'autres idées je suis preneur.
Mais déjà celle ci va me permettre d'aller fouiller les .ino pour voir si par analogie je ne peux trouver d'autres data.
Sais tu de la même manière changer une valeur dans une page, et la valider, bien sûr?
Cdt
Philippe
Routeur F1ATB seulement 1,25% d'injection hors pb Heure Eq.
840 Wc (Versailles solar/ Hoymiles) face à l'Est
+ 1000W (Leapton/Deye) Est et Sud dans le Dept 06.
Routeur split 2 ESP uPesy en v14.04: UxIx2 (entrée et cumulus) / Triac 40A surveillé par une sonde T°.
Messages : 452
Sujets : 5
Inscription : Jun 2024
08-11-2025, 10:24 AM
(Modification du message : 08-11-2025, 10:25 AM par Mike.)
Pour changer les paramètres des actions c'est le endpoint /ActionsUpdate mais il y a énormément de paramètres donc le plus "simple" c'est d'utiliser le "developer tools" de ton navigateur (F12 pour Firefox et Chrome) et d'aller dans le tab network et de regarder la requête qui part quand tu appuies sur sauvegarder.
Pouvoir changer tous les paramètres risque d’être compliqué mais en revanche si les changements que tu recherches sont limités, tu peux les effectuer via la page des actions du routeur avec le "developer tools" ouvert, et récupérer la requête qui correspond de manière à pouvoir l'effectuer à nouveau depuis l’extérieur.
Messages : 107
Sujets : 7
Inscription : Oct 2024
08-11-2025, 10:59 AM
(Modification du message : 08-11-2025, 05:34 PM par 59jag.)
si ca peux t aider
? DONNÉES TEMPS RÉEL :
/ajax_data → Puissances, énergies principales
/ajax_etatActions → État de toutes les actions
/ajax_etatActionX → État d'une action spécifique
/ajax_Temperature → Températures uniquement
? HISTORIQUES :
/ajax_histo48h → 50h de données (5min)
/ajax_data10mn → 10min de données (2s)
/ajax_histo1an → 1 an d'énergie quotidienne
? CONTRÔLE :
/ForceAction → Forcer ON/OFF/AUTO
/SetGPIO → Contrôle GPIO direct
⚙️ CONFIGURATION :
/HourUpdate → Mise à jour heure
/restart → Redémarrage ESP32
/ajaxRAZhisto → RAZ historiques
?️ SYSTÈME :
/ajax_dataESP32 → Infos système
/ajax_dataRMS → Données brutes source
/ajax_Noms → Noms des actions
═══════════════════════════════════════════════════════════════
1. ROUTES DE LECTURE DES DONNÉES
═══════════════════════════════════════════════════════════════
┌─────────────────────────────────────────────────────────────┐
│ Route : /ajax_data │
│ Méthode : GET │
│ Description : Données principales de la page d'accueil │
└─────────────────────────────────────────────────────────────┘
URL : http://IP_ROUTEUR/ajax_data
STRUCTURE DE LA RÉPONSE (séparée par GS=chr(29)) :
┌─── BLOC 0 : Informations générales ───────────────────────┐
│ Séparateur : RS (chr 30) │
│ │
│ [0] = "Deb" │
│ [1] = Date/Heure (ex: "08/11/2025 14:32") b │
│ [2] = Source (ex: "UxIx2", "Linky", "Enphase", etc.) │
│ [3] = LTARF (Tarif Linky si applicable) │
│ [4] = STGEt (État STGE Linky si applicable) │
│ [5] = Températures (séparées par RS) │
│ [6] = Pva_valide (validation puissance apparente) │
└───────────────────────────────────────────────────────────┘
┌─── BLOC 1 : Puissances Maison ────────────────────────────┐
│ Séparateur : RS (chr 30) │
│ │
│ [0] = PuissanceS_M (Puissance active soutirée en W) │
│ [1] = PuissanceI_M (Puissance active injectée en W) │
│ [2] = PVAS_M (Puissance apparente soutirée en VA) │
│ [3] = PVAI_M (Puissance apparente injectée en VA) │
│ [4] = EnergieJour_M_Soutiree (Énergie du jour en Wh) │
│ [5] = EnergieJour_M_Injectee (Énergie du jour en Wh) │
│ [6] = Energie_M_Soutiree (Énergie totale en Wh) │
│ [7] = Energie_M_Injectee (Énergie totale en Wh) │
└───────────────────────────────────────────────────────────┘
┌─── BLOC 2 : Puissances Triac (si UxIx2 ou Shelly) ────────┐
│ Structure identique au BLOC 1 mais pour le Triac │
│ Présent uniquement si source = UxIx2 ou Shelly monophasé │
│ │
│ [0] = PuissanceS_T │
│ [1] = PuissanceI_T │
│ [2] = PVAS_T │
│ [3] = PVAI_T │
│ [4] = EnergieJour_T_Soutiree │
│ [5] = EnergieJour_T_Injectee │
│ [6] = Energie_T_Soutiree │
│ [7] = Energie_T_Injectee │
└───────────────────────────────────────────────────────────┘
┌─── BLOC 3 : Fin ──────────────────────────────────────────┐
│ [0] = "Fin\r" │
└───────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Route : /ajax_etatActions │
│ Méthode : GET │
│ Description : État de toutes les actions configurées │
└─────────────────────────────────────────────────────────────┘
URL : http://IP_ROUTEUR/ajax_etatActions
STRUCTURE DE LA RÉPONSE (séparée par GS=chr(29)) :
┌─── BLOC 0 : Températures ─────────────────────────────────┐
│ Séparateur : RS (chr 30) │
│ Température de chaque canal (4 canaux max) │
└───────────────────────────────────────────────────────────┘
┌─── BLOC 1 : Source de données ────────────────────────────┐
│ Nom de la source (ex: "UxIx2") │
└───────────────────────────────────────────────────────────┘
┌─── BLOC 2 : IP RMS externe ───────────────────────────────┐
│ Adresse IP du routeur externe (format entier) │
└───────────────────────────────────────────────────────────┘
┌─── BLOC 3 : Nombre d'actions actives ─────────────────────┐
│ Nombre entier d'actions configurées et actives │
└────────────────────────────────────────────────────────────┘
┌─── BLOCS 4+ : Données de chaque action ───────────────────┐
│ Pour chaque action (séparées par GS, champs par RS): │
│ │
│ [0] = NumAction (numéro de l'action : 0, 1, 2...) │
│ [1] = Titre (nom de l'action) │
│ [2] = État : │
│ - "On" si relais activé │
│ - "Off" si relais désactivé │
│ - "0" à "100" si Triac/SSR (pourcentage ouverture) │
│ [3] = tOnOff (minutes de forçage restantes) │
│ - > 0 : forcé ON │
│ - < 0 : forcé OFF │
│ - = 0 : mode automatique │
│ [4] = H_Ouvre (heures équivalentes * 100) │
└───────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Route : /ajax_etatActionX │
│ Méthode : GET │
│ Paramètre : NumAction (numéro de l'action) │
│ Description : État d'une action spécifique │
└─────────────────────────────────────────────────────────────┘
URL : http://IP_ROUTEUR/ajax_etatActionX?NumAction=1
STRUCTURE DE LA RÉPONSE (séparée par GS=chr(29)) :
[0] = Actif (0=inactif, 1=On/Off, 2=Proportionnel, etc.)
[1] = Ouvre (pourcentage d'ouverture 0-100)
[2] = Hequiv (heures équivalentes * 100)
┌─────────────────────────────────────────────────────────────┐
│ Route : /ajax_Temperature │
│ Méthode : GET │
│ Description : Températures des sondes DS18B20 │
└─────────────────────────────────────────────────────────────┘
URL : http://IP_ROUTEUR/ajax_Temperature
STRUCTURE DE LA RÉPONSE :
GS + Températures (séparées par RS) + RS
Exemple : chr(29) + "25.3" + chr(30) + "22.1" + chr(30) + "28.5" + chr(30)
┌─────────────────────────────────────────────────────────────┐
│ Route : /ajax_histo48h │
│ Méthode : GET │
│ Description : Historique de 50h (600 points toutes les 5min)│
└─────────────────────────────────────────────────────────────┘
URL : http://IP_ROUTEUR/ajax_histo48h
STRUCTURE DE LA RÉPONSE (séparée par GS=chr(29)) :
┌─── BLOC 0 : Puissances maximales ─────────────────────────┐
│ Séparateur : RS (chr 30) │
│ [0] = PuisMaxS_M (Max soutirée Maison) │
│ [1] = PuisMaxI_M (Max injectée Maison) │
│ [2] = PuisMaxS_T (Max soutirée Triac) │
│ [3] = PuisMaxI_T (Max injectée Triac) │
└───────────────────────────────────────────────────────────┘
┌─── BLOC 1 : Historique Maison ────────────────────────────┐
│ 600 valeurs de puissance (W) séparées par des virgules │
│ Une valeur toutes les 5 minutes sur 50 heures │
└───────────────────────────────────────────────────────────┘
┌─── BLOC 2 : Historique Triac ─────────────────────────────┐
│ 600 valeurs de puissance (W) séparées par des virgules │
└───────────────────────────────────────────────────────────┘
┌─── BLOC 3 : Historique Températures ──────────────────────┐
│ Pour chaque canal (4 canaux): │
│ 600 valeurs * 0.1 séparées par virgules │
│ Puis température actuelle │
│ Puis séparateur "|" │
└───────────────────────────────────────────────────────────┘
┌─── BLOCS 4+ : Historique ouverture des actions ───────────┐
│ Pour chaque action active: │
│ GS + 600 valeurs d'ouverture + Titre de l'action │
└───────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Route : /ajax_data10mn │
│ Méthode : GET │
│ Description : Historique de 10min (300 points toutes les 2s)│
└─────────────────────────────────────────────────────────────┘
URL : http://IP_ROUTEUR/ajax_data10mn
STRUCTURE SIMILAIRE À /ajax_histo48h mais avec 300 points
┌─────────────────────────────────────────────────────────────┐
│ Route : /ajax_histo1an │
│ Méthode : GET │
│ Description : Historique énergie quotidienne sur 1 an │
└─────────────────────────────────────────────────────────────┘
URL : http://IP_ROUTEUR/ajax_histo1an
STRUCTURE : 370 points d'énergie quotidienne
┌─────────────────────────────────────────────────────────────┐
│ Route : /ajax_dataRMS │
│ Méthode : GET │
│ Paramètre : idx (index du dernier message) │
│ Description : Données brutes selon la source │
└─────────────────────────────────────────────────────────────┘
URL : http://IP_ROUTEUR/ajax_dataRMS?idx=0
STRUCTURE : Varie selon la source (UxI, Linky, Enphase, etc.)
┌─────────────────────────────────────────────────────────────┐
│ Route : /ajax_dataESP32 │
│ Méthode : GET │
│ Description : Informations système ESP32 │
└─────────────────────────────────────────────────────────────┘
URL : http://IP_ROUTEUR/ajax_dataESP32
STRUCTURE DE LA RÉPONSE (séparée par RS et GS) :
┌─── BLOC 0 : Système ESP32 ────────────────────────────────┐
│ [0] = Heures de fonctionnement │
│ [1] = Type d'ESP32 │
│ [2] = RSSI WiFi (ou vide si Ethernet) │
│ [3] = BSSID │
│ [4] = Canal WiFi │
│ [5] = Adresse MAC │
│ [6] = SSID │
│ [7] = Adresse IP │
│ [8] = Gateway │
│ [9] = Subnet Mask │
│ [10] = Stats Coeur 0 (min, moy, max) │
│ [11] = Stats Coeur 1 (min, moy, max) │
│ [12] = Pourcentage EEPROM utilisé │
│ [13] = Mémoire libre │
│ [14] = Mémoire minimum libre │
│ [15] = Interruptions IT10ms │
│ [16] = Mode IT (Secteur ou Horloge ESP) │
│ [17] = Nombre de sondes DS18B20 │
│ [18] = Liste températures │
└───────────────────────────────────────────────────────────┘
┌─── BLOC 1 : Messages historique ──────────────────────────┐
│ 10 derniers messages système (séparés par RS) │
└───────────────────────────────────────────────────────────┘
┌─── BLOC 2 : Autres routeurs RMS ──────────────────────────┐
│ Liste des autres routeurs connectés sur le réseau │
│ Format: Nom (IP) Note/NbConnexions │
└───────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Route : /ajax_Noms │
│ Méthode : GET │
│ Description : Noms et états des actions │
└─────────────────────────────────────────────────────────────┘
URL : http://IP_ROUTEUR/ajax_Noms
STRUCTURE : GS + RMS_NomEtat[0] + "\r"
═══════════════════════════════════════════════════════════════
2. ROUTES DE CONTRÔLE/COMMANDE
═══════════════════════════════════════════════════════════════
┌─────────────────────────────────────────────────────────────┐
│ Route : /ForceAction │
│ Méthode : GET │
│ Paramètres : Force, NumAction │
│ Description : Force une action ON/OFF ou mode AUTO │
└─────────────────────────────────────────────────────────────┘
URL : http://IP_ROUTEUR/ForceAction?Force=VALE...ion=NUMERO
PARAMÈTRES :
- NumAction : Numéro de l'action (0, 1, 2, ...)
- Force :
* > 0 : Force ON pendant X minutes (ex: 30, 60, 120)
* < 0 : Force OFF pendant X minutes (ex: -30, -60)
* = 0 : Remet en mode automatique
EXEMPLES :
Force=30&NumAction=1 → Force action 1 ON pendant 30 min
Force=-60&NumAction=2 → Force action 2 OFF pendant 60 min
Force=0&NumAction=1 → Action 1 en mode AUTO
RÉPONSE : "Force" (texte simple)
┌─────────────────────────────────────────────────────────────┐
│ Route : /SetGPIO │
│ Méthode : GET │
│ Paramètres : gpio, etat │
│ Description : Contrôle direct d'une sortie GPIO │
└─────────────────────────────────────────────────────────────┘
URL : http://IP_ROUTEUR/SetGPIO?gpio=PIN&etat=VALEUR
PARAMÈTRES :
- gpio : Numéro du GPIO (ex: 23, 25, 26, etc.)
- etat :
* 0 = LOW (éteint)
* 1 = HIGH (allumé)
EXEMPLES :
gpio=23&etat=1 → Active le GPIO 23
gpio=23&etat=0 → Désactive le GPIO 23
RÉPONSE : Texte confirmant l'action
═══════════════════════════════════════════════════════════════
3. ROUTES DE CONFIGURATION
═══════════════════════════════════════════════════════════════
┌─────────────────────────────────────────────────────────────┐
│ Route : /HourUpdate │
│ Méthode : GET │
│ Paramètre : New_H │
│ Description : Met à jour l'heure manuellement │
└─────────────────────────────────────────────────────────────┘
URL : http://IP_ROUTEUR/HourUpdate?New_H=14:30
PARAMÈTRE :
- New_H : Heure au format HH:MM (ex: "14:30")
RÉPONSE : "OKheure"
┌─────────────────────────────────────────────────────────────┐
│ Route : /restart │
│ Méthode : GET │
│ Description : Redémarre l'ESP32 │
└─────────────────────────────────────────────────────────────┘
URL : http://IP_ROUTEUR/restart
RÉPONSE : "OK Reset. Attendez."
(L'ESP32 redémarre après 1 seconde)
┌─────────────────────────────────────────────────────────────┐
│ Route : /ajaxRAZhisto │
│ Méthode : GET │
│ Description : Remet à zéro les historiques │
└─────────────────────────────────────────────────────────────┘
URL : http://IP_ROUTEUR/ajaxRAZhisto
RÉPONSE : Confirmation de la RAZ
═══════════════════════════════════════════════════════════════
4. FORMAT DES DONNÉES ET SÉPARATEURS
═══════════════════════════════════════════════════════════════
SÉPARATEURS UTILISÉS :
┌────────────────────────────────────────────────────────────┐
│ RS (Record Separator) = chr(30) = 0x1E │
│ → Sépare les champs dans un même bloc │
│ │
│ GS (Group Separator) = chr(29) = 0x1D │
│ → Sépare les blocs de données │
│ │
│ US (Unit Separator) = chr(31) = 0x1F │
│ → Sépare les sous-unités (utilisé rarement) │
│ │
│ ES (séparateur "=") = "=" │
│ → Utilisé dans certains contextes spécifiques │
└────────────────────────────────────────────────────────────┘
Quelques macros générées par IA pour LibreOffice. Pas testées, car je n’ai pas LibreOffice.
Code : REM =====================================================
REM MACROS LIBREOFFICE CALC - ROUTEUR SOLAIRE F1ATB
REM =====================================================
Option Explicit
REM Constantes pour les séparateurs
Const RS = 30 ' Record Separator
Const GS = 29 ' Group Separator
Const US = 31 ' Unit Separator
REM =====================================================
REM FONCTION : GetPuissanceSoutiree
REM Description : Récupère la puissance soutirée du réseau
REM Paramètres : ipRouteur = adresse IP du routeur
REM Retour : Puissance en Watts
REM Utilisation : =GetPuissanceSoutiree("192.168.1.100")
REM =====================================================
Function GetPuissanceSoutiree(ipRouteur As String) As Double
Dim url As String
Dim data As String
Dim blocs() As String
Dim puissances() As String
url = "http://" & ipRouteur & "/ajax_data"
data = HttpGet(url)
If data = "" Then
GetPuissanceSoutiree = 0
Exit Function
End If
' Séparer les blocs avec GS
blocs = Split(data, Chr(GS))
If UBound(blocs) >= 1 Then
' Bloc 2 contient les puissances
puissances = Split(blocs(1), Chr(RS))
If UBound(puissances) >= 0 Then
GetPuissanceSoutiree = CDbl(puissances(0))
Else
GetPuissanceSoutiree = 0
End If
Else
GetPuissanceSoutiree = 0
End If
End Function
REM =====================================================
REM FONCTION : GetPuissanceInjectee
REM Description : Récupère la puissance injectée sur le réseau
REM Paramètres : ipRouteur = adresse IP du routeur
REM Retour : Puissance en Watts
REM Utilisation : =GetPuissanceInjectee("192.168.1.100")
REM =====================================================
Function GetPuissanceInjectee(ipRouteur As String) As Double
Dim url As String
Dim data As String
Dim blocs() As String
Dim puissances() As String
url = "http://" & ipRouteur & "/ajax_data"
data = HttpGet(url)
If data = "" Then
GetPuissanceInjectee = 0
Exit Function
End If
blocs = Split(data, Chr(GS))
If UBound(blocs) >= 1 Then
puissances = Split(blocs(1), Chr(RS))
If UBound(puissances) >= 1 Then
GetPuissanceInjectee = CDbl(puissances(1))
Else
GetPuissanceInjectee = 0
End If
Else
GetPuissanceInjectee = 0
End If
End Function
REM =====================================================
REM FONCTION : GetPuissanceNette
REM Description : Récupère la puissance nette (soutirée - injectée)
REM Paramètres : ipRouteur = adresse IP du routeur
REM Retour : Puissance en Watts (>0 = consommation, <0 = injection)
REM Utilisation : =GetPuissanceNette("192.168.1.100")
REM =====================================================
Function GetPuissanceNette(ipRouteur As String) As Double
Dim url As String
Dim data As String
Dim blocs() As String
Dim puissances() As String
Dim pSoutiree As Double
Dim pInjectee As Double
url = "http://" & ipRouteur & "/ajax_data"
data = HttpGet(url)
If data = "" Then
GetPuissanceNette = 0
Exit Function
End If
blocs = Split(data, Chr(GS))
If UBound(blocs) >= 1 Then
puissances = Split(blocs(1), Chr(RS))
If UBound(puissances) >= 1 Then
pSoutiree = CDbl(puissances(0))
pInjectee = CDbl(puissances(1))
GetPuissanceNette = pSoutiree - pInjectee
Else
GetPuissanceNette = 0
End If
Else
GetPuissanceNette = 0
End If
End Function
REM =====================================================
REM FONCTION : GetEnergieJourSoutiree
REM Description : Récupère l'énergie soutirée du jour
REM Paramètres : ipRouteur = adresse IP du routeur
REM Retour : Énergie en Wh
REM Utilisation : =GetEnergieJourSoutiree("192.168.1.100")
REM =====================================================
Function GetEnergieJourSoutiree(ipRouteur As String) As Double
Dim url As String
Dim data As String
Dim blocs() As String
Dim puissances() As String
url = "http://" & ipRouteur & "/ajax_data"
data = HttpGet(url)
If data = "" Then
GetEnergieJourSoutiree = 0
Exit Function
End If
blocs = Split(data, Chr(GS))
If UBound(blocs) >= 1 Then
puissances = Split(blocs(1), Chr(RS))
If UBound(puissances) >= 4 Then
GetEnergieJourSoutiree = CDbl(puissances(4))
Else
GetEnergieJourSoutiree = 0
End If
Else
GetEnergieJourSoutiree = 0
End If
End Function
REM =====================================================
REM FONCTION : GetEnergieJourInjectee
REM Description : Récupère l'énergie injectée du jour
REM Paramètres : ipRouteur = adresse IP du routeur
REM Retour : Énergie en Wh
REM Utilisation : =GetEnergieJourInjectee("192.168.1.100")
REM =====================================================
Function GetEnergieJourInjectee(ipRouteur As String) As Double
Dim url As String
Dim data As String
Dim blocs() As String
Dim puissances() As String
url = "http://" & ipRouteur & "/ajax_data"
data = HttpGet(url)
If data = "" Then
GetEnergieJourInjectee = 0
Exit Function
End If
blocs = Split(data, Chr(GS))
If UBound(blocs) >= 1 Then
puissances = Split(blocs(1), Chr(RS))
If UBound(puissances) >= 5 Then
GetEnergieJourInjectee = CDbl(puissances(5))
Else
GetEnergieJourInjectee = 0
End If
Else
GetEnergieJourInjectee = 0
End If
End Function
REM =====================================================
REM FONCTION : GetEtatAction
REM Description : Récupère l'état d'une action
REM Paramètres :
REM - ipRouteur = adresse IP du routeur
REM - numAction = numéro de l'action (0, 1, 2...)
REM Retour : État de l'action ("On", "Off", ou pourcentage)
REM Utilisation : =GetEtatAction("192.168.1.100", 1)
REM =====================================================
Function GetEtatAction(ipRouteur As String, numAction As Integer) As String
Dim url As String
Dim data As String
Dim blocs() As String
Dim nbActions As Integer
Dim actionData() As String
Dim i As Integer
url = "http://" & ipRouteur & "/ajax_etatActions"
data = HttpGet(url)
If data = "" Then
GetEtatAction = "Erreur"
Exit Function
End If
blocs = Split(data, Chr(GS))
If UBound(blocs) >= 3 Then
nbActions = CInt(blocs(3))
' Chercher l'action demandée
For i = 0 To nbActions - 1
If UBound(blocs) >= 4 + i Then
actionData = Split(blocs(4 + i), Chr(RS))
If UBound(actionData) >= 2 Then
If CInt(actionData(0)) = numAction Then
GetEtatAction = actionData(2)
Exit Function
End If
End If
End If
Next i
End If
GetEtatAction = "N/A"
End Function
REM =====================================================
REM FONCTION : GetNomAction
REM Description : Récupère le nom/titre d'une action
REM Paramètres :
REM - ipRouteur = adresse IP du routeur
REM - numAction = numéro de l'action
REM Retour : Nom de l'action
REM Utilisation : =GetNomAction("192.168.1.100", 1)
REM =====================================================
Function GetNomAction(ipRouteur As String, numAction As Integer) As String
Dim url As String
Dim data As String
Dim blocs() As String
Dim nbActions As Integer
Dim actionData() As String
Dim i As Integer
url = "http://" & ipRouteur & "/ajax_etatActions"
data = HttpGet(url)
If data = "" Then
GetNomAction = "Erreur"
Exit Function
End If
blocs = Split(data, Chr(GS))
If UBound(blocs) >= 3 Then
nbActions = CInt(blocs(3))
For i = 0 To nbActions - 1
If UBound(blocs) >= 4 + i Then
actionData = Split(blocs(4 + i), Chr(RS))
If UBound(actionData) >= 1 Then
If CInt(actionData(0)) = numAction Then
GetNomAction = actionData(1)
Exit Function
End If
End If
End If
Next i
End If
GetNomAction = "N/A"
End Function
REM =====================================================
REM FONCTION : ForcerActionON
REM Description : Force une action en mode ON
REM Paramètres :
REM - ipRouteur = adresse IP du routeur
REM - numAction = numéro de l'action
REM - dureeMinutes = durée de forçage en minutes
REM Retour : "OK" ou message d'erreur
REM Utilisation : =ForcerActionON("192.168.1.100", 1, 30)
REM =====================================================
Function ForcerActionON(ipRouteur As String, numAction As Integer, dureeMinutes As Integer) As String
Dim url As String
Dim result As String
url = "http://" & ipRouteur & "/ForceAction?Force=" & dureeMinutes & "&NumAction=" & numAction
result = HttpGet(url)
If result <> "" Then
ForcerActionON = "OK - ON " & dureeMinutes & "min"
Else
ForcerActionON = "Erreur"
End If
End Function
REM =====================================================
REM FONCTION : ForcerActionOFF
REM Description : Force une action en mode OFF
REM Paramètres :
REM - ipRouteur = adresse IP du routeur
REM - numAction = numéro de l'action
REM - dureeMinutes = durée de forçage en minutes
REM Retour : "OK" ou message d'erreur
REM Utilisation : =ForcerActionOFF("192.168.1.100", 1, 30)
REM =====================================================
Function ForcerActionOFF(ipRouteur As String, numAction As Integer, dureeMinutes As Integer) As String
Dim url As String
Dim result As String
url = "http://" & ipRouteur & "/ForceAction?Force=-" & dureeMinutes & "&NumAction=" & numAction
result = HttpGet(url)
If result <> "" Then
ForcerActionOFF = "OK - OFF " & dureeMinutes & "min"
Else
ForcerActionOFF = "Erreur"
End If
End Function
REM =====================================================
REM FONCTION : ModeAuto
REM Description : Remet une action en mode automatique
REM Paramètres :
REM - ipRouteur = adresse IP du routeur
REM - numAction = numéro de l'action
REM Retour : "OK" ou message d'erreur
REM Utilisation : =ModeAuto("192.168.1.100", 1)
REM =====================================================
Function ModeAuto(ipRouteur As String, numAction As Integer) As String
Dim url As String
Dim result As String
url = "http://" & ipRouteur & "/ForceAction?Force=0&NumAction=" & numAction
result = HttpGet(url)
If result <> "" Then
ModeAuto = "OK - AUTO"
Else
ModeAuto = "Erreur"
End If
End Function
REM =====================================================
REM FONCTION INTERNE : HttpGet
REM Description : Effectue une requête HTTP GET
REM Paramètres : url = URL complète à interroger
REM Retour : Contenu de la réponse ou chaîne vide en cas d'erreur
REM =====================================================
Function HttpGet(url As String) As String
On Error GoTo ErrorHandler
Dim oSimpleFileAccess As Object
Dim oInputStream As Object
Dim oTextInputStream As Object
Dim sResponse As String
' Créer le service de connexion HTTP
oSimpleFileAccess = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
' Ouvrir la connexion
oInputStream = oSimpleFileAccess.openFileRead(url)
' Créer un flux texte pour lire la réponse
oTextInputStream = CreateUnoService("com.sun.star.io.TextInputStream")
oTextInputStream.setInputStream(oInputStream)
oTextInputStream.setEncoding("UTF-8")
' Lire tout le contenu
sResponse = ""
Do While Not oTextInputStream.isEOF()
sResponse = sResponse & oTextInputStream.readLine()
Loop
' Fermer les flux
oTextInputStream.closeInput()
oInputStream.closeInput()
HttpGet = sResponse
Exit Function
ErrorHandler:
HttpGet = ""
End Function
REM =====================================================
REM SUB : RafraichirDonnees
REM Description : Macro pour rafraîchir toutes les cellules
REM À assigner à un bouton dans Calc
REM Utilisation : Créer un bouton et lui assigner cette macro
REM =====================================================
Sub RafraichirDonnees
' Forcer le recalcul de toutes les formules
ThisComponent.calculateAll()
MsgBox "Données rafraîchies !", 64, "Routeur F1ATB"
End Sub
Messages : 97
Sujets : 15
Inscription : Jun 2024
Merci encore à Mike, et à 59Jag pour la bible !!!
Nul doute qu'il y a ce qu'il faut pour que je puisse avancer sur la récupération des data.
Je n'ai pas tout lu, alors, peut-être cela m'a échappé,
mais avant de me lancer dans ce projet, il faut que je sache si je peux arriver au bout,
je n'ai pas vu comment l'on peut modifier les plages horaires des actions ?
Car le projet complet pourrait être de récupérer les data à des fins de statistiques et de suivis.
Avec les éléments que vous m'avez, tous les 2, transmis, je n'ai aucun doute: c'est faisable!
Mais pourrait-on aller jusqu'à gérer le planning de chauffe de nuit en fonction des prévisions météo et/ou UV de la semaine?
Pour cela il faut pouvoir faire varier ces plages d'actions, en fonction des données recueillies
et accéder une fois par jour à la feuille pour déclencher la modification d'action de chauffe de nuit,
(ou laisser tourner le PC, mais là, c'est réinventer la roue, car je pense qu'un Rasp4 ou HA Green fait déjà ce genre de chose)
Vos avis ?
Crdt
Routeur F1ATB seulement 1,25% d'injection hors pb Heure Eq.
840 Wc (Versailles solar/ Hoymiles) face à l'Est
+ 1000W (Leapton/Deye) Est et Sud dans le Dept 06.
Routeur split 2 ESP uPesy en v14.04: UxIx2 (entrée et cumulus) / Triac 40A surveillé par une sonde T°.
Messages : 452
Sujets : 5
Inscription : Jun 2024
08-11-2025, 09:25 PM
(Modification du message : 08-11-2025, 09:33 PM par Mike.)
Oui c'est possible de changer les plages horaire avec le endpoint /ActionsUpdate. Comme expliqué dans mon précédent message, avec le developer tools regarde la requête qui part lorsque tu cliques sur sauvegarder et tu pourras voir comment ça marche.
Le format qu'attends /ActionsUpdate peut aussi etre vu dans la fonction SendValues (ligne 675 en 15.12) de pageHtmlActions.h
Messages : 97
Sujets : 15
Inscription : Jun 2024
(08-11-2025, 10:24 AM)Mike a écrit : Pour changer les paramètres des actions c'est le endpoint /ActionsUpdate mais il y a énormément de paramètres donc le plus "simple" c'est d'utiliser le "developer tools" de ton navigateur (F12 pour Firefox et Chrome) et d'aller dans le tab network et de regarder la requête qui part quand tu appuies sur sauvegarder.
Pouvoir changer tous les paramètres risque d’être compliqué mais en revanche si les changements que tu recherches sont limités, tu peux les effectuer via la page des actions du routeur avec le "developer tools" ouvert, et récupérer la requête qui correspond de manière à pouvoir l'effectuer à nouveau depuis l’extérieur.
Merci Mike,
Je vais essayer tout cela !
Cdt
Routeur F1ATB seulement 1,25% d'injection hors pb Heure Eq.
840 Wc (Versailles solar/ Hoymiles) face à l'Est
+ 1000W (Leapton/Deye) Est et Sud dans le Dept 06.
Routeur split 2 ESP uPesy en v14.04: UxIx2 (entrée et cumulus) / Triac 40A surveillé par une sonde T°.
Messages : 645
Sujets : 29
Inscription : Jun 2024
Hello,
J'avoue ne pas comprendre l'intérêt fine de la démarche quand on peut récupérer la majorité des infos via le protocole domotique MQTT.. et qu'on puisse interagir également sur les actions et autres paramètres ... sans pour autant rentrer dans le code ...
Pourquoi vouloir passer par le code brut sachant que ce code continu à évoluer au gré des fonctionnalités et autre évols à venir ( prochainement adaptations probables sur l'esp S3 CYD ...) ?
Config : 3 routeurs F1ATB en V15.11 - 2 routeurs fixes en mode Triacs + 1 routeur mobile polyvalent en mode : Triac+SSR
PV : 3kw (8*425W + Onduleur SunGrow 3KW) + 1KW (2 *500w + MO Hoymiles HMS-1000W-2T)
Supervision : Home Assistant / Shelly & MQTT
|