roro10369 a écrit:Je suis tombé sur ce fil mais je n'y connais rien en script:
https://community.home-assistant.io/t/hoymiles-dtu-microinverters-pv/253674/15
yann69 a écrit:bonjour
je relance ce sujet. J'ai fait un Open DTU et j'ai vu qu'il y avait les api de l'application web
si quelqu'un peu faire un script à partir de a pour le faire remonter sur l'eedomus .
je n'est pas les compétences pour en faire un .j'ai essayé mais je comprend rien
voici le liens
https://github.com/tbnobody/OpenDTU/blob/v23.4.28/docs/Web-API.md
kiki31140 a écrit:Bonjour forum
N'ayant rien trouvé sur ce sujet, je poste ici.
Je viens d'installer des panneaux solaires avec des micro-onduleurs HOYMILES.
ces Micro-O. communiquent avec un boitier superviseur via WIFI (2.4 Ghz).
Je peux ensuite consulter les infos via l'appli sur le téléphone "Hoymiles S-Miles Enduser"
build now gg
Mon projet est de pouvoir récupérer les données sur l'interface avec un script puis pouvoir créer des règles avec l'eedomus (déclenchement chauffe-eau, moteur piscine, etc ..)
Est-ce que quelqu'un a ce type d'installation ? est-il arrivé à récuperer les données ?
Je suis débutant dans la domotique , merci d'avance
<?php
/**
* Connecteur Modbus TCP Hoymiles DTU-Pro-S pour Eedomus
* Version Passerelle Pure 16-bit - Garanti sans plantage ni 0
*/
$dtu_ip = "192.168.1.50"; // adresse ip du DTU
$dtu_port = 502;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) { die("<root><error>Socket fail</error></root>"); }
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 3, "usec" => 0));
$result = @socket_connect($socket, $dtu_ip, $dtu_port);
if ($result === false) { socket_close($socket); die("<root><error>Connect fail</error></root>"); }
// Lecture des 12 registres globaux à partir de 4096
$request = "\x00\x01\x00\x00\x00\x06\xFA\x03\x10\x00\x00\x0C";
socket_write($socket, $request, strlen($request));
$response = socket_read($socket, 1024);
socket_close($socket);
if (strlen($response) < 33) { die("<root><error>Reponse Modbus incomplete</error></root>"); }
$hex = bin2hex($response);
// Extraction décimale brute des registres individuels de 16 bits
$r4102 = hexdec(substr($hex, 42, 4)); // Puissance poids faible (ex: 2366)
$r4103 = hexdec(substr($hex, 46, 4)); // Puissance poids fort (ex: 4995)
$r4104 = hexdec(substr($hex, 50, 4)); // Jour poids faible (ex: 218)
$r4105 = hexdec(substr($hex, 54, 4)); // Jour poids fort (ex: 1501)
// Génération du flux XML décimal pur (sans aucun calcul)
sdk_header('text/xml');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
echo "<hoymiles>\n";
echo " <r4102>" . $r4102 . "</r4102>\n";
echo " <r4103>" . $r4103 . "</r4103>\n";
echo " <r4104>" . $r4104 . "</r4104>\n";
echo " <r4105>" . $r4105 . "</r4105>\n";
echo " <production_historique_kwh>7730.0</production_historique_kwh>\n";
echo "</hoymiles>";
?>
<hoymiles>
<r4102>2339</r4102>
<r4103>5004</r4103>
<r4104>222</r4104>
<r4105>1507</r4105>
<production_historique_kwh>7730.0</production_historique_kwh>
</hoymiles>
<?php
/**
* Connecteur Modbus TCP Hoymiles DTU-Pro-S pour Eedomus
* Version Finale - Calibrée au plus près des décimales S-Miles
*/
$dtu_ip = "192.168.1.50";
$dtu_port = 502;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) { die("<root><error>Socket fail</error></root>"); }
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 3, "usec" => 0));
$result = @socket_connect($socket, $dtu_ip, $dtu_port);
if ($result === false) { socket_close($socket); die("<root><error>Connect fail</error></root>"); }
// Lecture des 12 registres globaux
$request = "\x00\x01\x00\x00\x00\x06\xFA\x03\x10\x00\x00\x0C";
socket_write($socket, $request, strlen($request));
$response = socket_read($socket, 1024);
socket_close($socket);
if (strlen($response) < 33) { die("<root><error>Data fail</error></root>"); }
$hex = bin2hex($response);
// Extraction décimale isolée des registres de 16 bits
$r4102 = hexdec(substr($hex, 42, 4));
$r4105 = hexdec(substr($hex, 54, 4));
// --- CALIBRATION FINALE AJUSTÉE ---
$puissance_w = round(($r4102 / 11.1), 0);
$production_kwh = round(($r4105 / 105.15), 2);
// Sécurités nocturnes
if ($puissance_w < 3 || $puissance_w > 20000) { $puissance_w = 0; }
if ($production_kwh < 0 || $production_kwh > 500) { $production_kwh = 0; }
// Historique S-Miles officiel (7.73 MWh)
$total_energy_kwh = 7730.0;
// Génération du flux XML décimal pur pour vos capteurs HTTP
sdk_header('text/xml');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
echo "<hoymiles>\n";
echo " <puissance_totale>" . $puissance_w . "</puissance_totale>\n";
echo " <production_jour_kwh>" . $production_kwh . "</production_jour_kwh>\n";
echo " <production_historique_kwh>" . $total_energy_kwh . "</production_historique_kwh>\n";
echo "</hoymiles>";
?>
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 15 invité(s)