Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Peut-on échanger des données entre F1ATB et Calc ?
#1
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°.  
Répondre

#2
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.
Répondre

#3
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°.  
Répondre

#4
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.
Répondre

#5
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
Répondre

#6
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°.  
Répondre

#7
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
Répondre

#8
(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°.  
Répondre

#9
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
Répondre



Atteindre :


Utilisateur(s) parcourant ce sujet :
1 visiteur(s)

Moteur MyBB, © 2002-2025 Melroy van den Berg.