Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
F1atb Monitor Android
pour OpenDTU j ai du modifier le code du routeur pour des POST avec corps et aussi récupérer les json
donc c est le routeur qui fait le relai entre opendtu et le client
si le routeur et accessible a distance les donnees opendtu aussi.
Répondre

(22-08-2026, 08:09 PM)59jag a écrit : pour OpenDTU j ai du modifier le code du routeur pour des POST avec corps  et aussi récupérer les json
donc c est le routeur  qui fait le relai entre opendtu et le client 
si le routeur et accessible a distance les donnees opendtu aussi.


J'ai besoin de précisions

-Le chemin exact du nouvel endpoint (GET pour la lecture, et si possible confirmation du format POST pour plus tard)
-Le format JSON exact renvoyé (idéalement un vrai exemple de réponse)
Répondre

exemple si ip openDTU en 192.168.1.97
en lecture un  GET http://192.168.1.97/api/livedata/status
ca donne les infos en général de tous les M.O
reponse json (j ai juste remplacer les numéros de serie de mes M.O par xxxxxx)
Code :
{
  "inverters": [
    {
      "serial": "xxxxxxxxxxxx",
      "name": "panneau david",
      "order": 0,
      "data_age": 12,
      "data_age_ms": 12035,
      "poll_enabled": true,
      "reachable": true,
      "producing": true,
      "limit_relative": 75,
      "limit_absolute": 1500,
      "radio_stats": {
        "tx_request": 6624,
        "tx_re_request": 0,
        "rx_success": 1992,
        "rx_fail_nothing": 4632,
        "rx_fail_partial": 0,
        "rx_fail_corrupt": 0,
        "rssi": -67
      }
    },
    {
      "serial": "xxxxxxxxxx",
      "name": "8PV Noir",
      "order": 2,
      "data_age": 7,
      "data_age_ms": 7036,
      "poll_enabled": true,
      "reachable": true,
      "producing": true,
      "limit_relative": 75,
      "limit_absolute": 1500,
      "radio_stats": {
        "tx_request": 6629,
        "tx_re_request": 0,
        "rx_success": 1992,
        "rx_fail_nothing": 4634,
        "rx_fail_partial": 0,
        "rx_fail_corrupt": 3,
        "rssi": -71
      }
    },
    {
      "serial": "xxxxxxxx",
      "name": "Cave",
      "order": 1,
      "data_age": 2,
      "data_age_ms": 2034,
      "poll_enabled": true,
      "reachable": true,
      "producing": true,
      "limit_relative": 100,
      "limit_absolute": 2000,
      "radio_stats": {
        "tx_request": 6645,
        "tx_re_request": 3,
        "rx_success": 1981,
        "rx_fail_nothing": 4664,
        "rx_fail_partial": 0,
        "rx_fail_corrupt": 0,
        "rssi": -63
      }
    }
  ],
  "total": {
    "Power": {
      "v": 1550.7,
      "u": "W",
      "d": 1
    },
    "YieldDay": {
      "v": 7176,
      "u": "Wh",
      "d": 0
    },
    "YieldTotal": {
      "v": 11952.86,
      "u": "kWh",
      "d": 3
    }
  },
  "hints": {
    "time_sync": false,
    "radio_problem": false,
    "default_password": true,
    "pin_mapping_issue": false
  }
}

pour detail de chaque M.O avec xxxxxxx le numero de serie du M.O

http://192.168.1.97/api/livedata/status?inv=xxxxxxxxxx
reponse json 
Code :
{
  "inverters": [
    {
      "serial": "xxxxxxxxx",
      "name": "panneau david",
      "order": 0,
      "data_age": 7,
      "data_age_ms": 7284,
      "poll_enabled": true,
      "reachable": true,
      "producing": true,
      "limit_relative": 75,
      "limit_absolute": 1500,
      "radio_stats": {
        "tx_request": 6666,
        "tx_re_request": 0,
        "rx_success": 2034,
        "rx_fail_nothing": 4632,
        "rx_fail_partial": 0,
        "rx_fail_corrupt": 0,
        "rssi": -68
      },
      "AC": {
        "0": {
          "Power": {
            "v": 557.4,
            "u": "W",
            "d": 1
          },
          "Voltage": {
            "v": 236.1,
            "u": "V",
            "d": 1
          },
          "Current": {
            "v": 2.36,
            "u": "A",
            "d": 2
          },
          "Frequency": {
            "v": 49.99,
            "u": "Hz",
            "d": 2
          },
          "PowerFactor": {
            "v": 1,
            "u": "",
            "d": 3
          },
          "ReactivePower": {
            "v": 0,
            "u": "var",
            "d": 1
          }
        }
      },
      "DC": {
        "0": {
          "name": {
            "u": ""
          },
          "Power": {
            "v": 148.9,
            "u": "W",
            "d": 1
          },
          "Voltage": {
            "v": 34.5,
            "u": "V",
            "d": 1
          },
          "Current": {
            "v": 4.31,
            "u": "A",
            "d": 2
          },
          "YieldDay": {
            "v": 698,
            "u": "Wh",
            "d": 0
          },
          "YieldTotal": {
            "v": 1162.978,
            "u": "kWh",
            "d": 3
          }
        },
        "1": {
          "name": {
            "u": ""
          },
          "Power": {
            "v": 145.6,
            "u": "W",
            "d": 1
          },
          "Voltage": {
            "v": 34.4,
            "u": "V",
            "d": 1
          },
          "Current": {
            "v": 4.23,
            "u": "A",
            "d": 2
          },
          "YieldDay": {
            "v": 685,
            "u": "Wh",
            "d": 0
          },
          "YieldTotal": {
            "v": 1156.005,
            "u": "kWh",
            "d": 3
          }
        },
        "2": {
          "name": {
            "u": ""
          },
          "Power": {
            "v": 150.3,
            "u": "W",
            "d": 1
          },
          "Voltage": {
            "v": 34.6,
            "u": "V",
            "d": 1
          },
          "Current": {
            "v": 4.34,
            "u": "A",
            "d": 2
          },
          "YieldDay": {
            "v": 701,
            "u": "Wh",
            "d": 0
          },
          "YieldTotal": {
            "v": 1191.046,
            "u": "kWh",
            "d": 3
          }
        },
        "3": {
          "name": {
            "u": ""
          },
          "Power": {
            "v": 141.8,
            "u": "W",
            "d": 1
          },
          "Voltage": {
            "v": 34.2,
            "u": "V",
            "d": 1
          },
          "Current": {
            "v": 4.14,
            "u": "A",
            "d": 2
          },
          "YieldDay": {
            "v": 670,
            "u": "Wh",
            "d": 0
          },
          "YieldTotal": {
            "v": 1170.434,
            "u": "kWh",
            "d": 3
          }
        }
      },
      "INV": {
        "0": {
          "Power DC": {
            "v": 586.6,
            "u": "W",
            "d": 1
          },
          "YieldDay": {
            "v": 2754,
            "u": "Wh",
            "d": 0
          },
          "YieldTotal": {
            "v": 4680.463,
            "u": "kWh",
            "d": 3
          },
          "Temperature": {
            "v": 33.9,
            "u": "°C",
            "d": 1
          },
          "Efficiency": {
            "v": 95.02217,
            "u": "%",
            "d": 3
          }
        }
      },
      "events": 1
    }
  ],
  "total": {
    "Power": {
      "v": 1626.6,
      "u": "W",
      "d": 1
    },
    "YieldDay": {
      "v": 7429,
      "u": "Wh",
      "d": 0
    },
    "YieldTotal": {
      "v": 11953.11,
      "u": "kWh",
      "d": 3
    }
  },
  "hints": {
    "time_sync": false,
    "radio_problem": false,
    "default_password": true,
    "pin_mapping_issue": false
  }
}

pour  définir la puissance max du M.O il faut un POST plus complexe .
Répondre

(25-08-2026, 02:27 PM)59jag a écrit : exemple si ip openDTU en 192.168.1.97
en lecture un  GET http://192.168.1.97/api/livedata/status
ca donne les infos en général de tous les M.O
reponse json (j ai juste remplacer les numéros de serie de mes M.O par xxxxxx)
Code :
{
  ...
}

pour detail de chaque M.O avec xxxxxxx le numero de serie du M.O

http://192.168.1.97/api/livedata/status?inv=xxxxxxxxxx
reponse json 
Code :
{
  ...
}

pour  définir la puissance max du M.O il faut un POST plus complexe .

ok pour le local 192.168.x.x ça passe mais quand tu es à l'extérieur tu fais : 

- http://<IP publique>:<port> /api/livedata/status 
et
- http://<IP publique>:<port>/api/livedata/status?inv=xxxxxxxxxx

avec <IP publique>:<port> correspondant à la redirection vers l'ESP F1ATB ?

ou t'as rajouté une commande sur l'ESP pour accéder à OpenDTU ?
Répondre

Oui, j'ai modifié le code du routeur pour l'utiliser comme relais (proxy HTTP générique). Le navigateur ne peut pas appeler OpenDTU directement (origines différentes, pas de CORS, IPv4 privée injoignable de l'extérieur). Le routeur, lui, est sur le même LAN qu'OpenDTU : il ouvre une socket TCP vers la cible et renvoie le corps de la réponse sur sa propre origine ESP32.

Côté client tu vises donc TOUJOURS le routeur (IP LAN en local, <IP publique>:<port> redirigé vers l'ESP à distance). L'IP d'OpenDTU reste côté routeur, jamais exposée sur Internet.

J'ai ajouté une seule route générique : /RelaisIP, qui prend l'IP cible et le chemin en paramètres
Du coup la même route sert aussi à piloter d'autres équipements du LAN (relais tapo,shelly etc.), pas seulement OpenDTU. Si le routeur est joignable à distance, tout ce qu'il relaie l'est aussi — sans rien exposer directement.
Répondre

(25-08-2026, 11:45 PM)59jag a écrit : [...]
Côté client tu vises donc TOUJOURS le routeur (IP LAN en local, <IP publique>:<port> redirigé vers l'ESP à distance). L'IP d'OpenDTU reste côté routeur, jamais exposée sur Internet.

[...]

ok c'est comme ça que je l'avais précodé

si tu peux tester cette version et me faire un retour...

toujours dur de coder à l'aveugle donc éventuellement si tu veux bien me faire confiance, envoie moi juste l'IP/port (ou un dyndns) de ton ESP en MP (tu peux demander à seb04, j'ai rien cassé chez lui Tongue) ça me permettra de voir ce que ça donne et d'ajuster au besoin
Répondre



Atteindre :


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

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