Bonjour,
Je souhaiterais avec Solarman envoyer une commande pour contrôler la puissance en sortie de mon micro onduleur .
Je ne sais pas trop par quel bout attaquer ça.
un bloc code dans un scénario à adapter à ta config (si $modbus = 16 renvoie une erreur alors tester avec 6 et adapter la commande à envoyer). Attention, le valeur que tu dois envoyer sera divisée par 10. Donc pour 40% envoie 400
//parametres pour écrire sur votre onduleur
$modbus = 16; // commande ecriture en modbus pour votre onduleur en decimal
// 16 (0x10 en héxa) correspond à l'écriture de plusieurs registres qui se suivent: "write multiple holding registers"
// 6 (0x06 en héxa) correspond à l'écriture d'un unique registre: "write holding register"
$ipclewifi = 'l adresse ip de votre clé';
$portclewifi = 'port de votre clé';
$serialclewifi = 'votre numéro de série';
$mbslaveid = '1';
$registre = 0x0028; //1er registre à écrire
// endroit où est stocké le fichier python que vous allez utiliser, ci dessous celui que je vous fourni mais vous pouvez en écrire un autre mieux adapté à votre besoin
$solarmanpath = '/var/www/html/plugins/solarman/ressources/commandes.py';
// détermination des différentes valeurs à envoyer à votre onduleur
$infopourcent = 'la valeur que tu souhaites envoyer à ton onduleur ça peut être récupéré par un tag par exemple';
$scenario->setlog("% envoyé = " . $infopourcent);
// saisie de la ligne de commande qui sera envoyée pour lancer le prog en python
$cmda = 'nice -n 19 /usr/bin/python3 ' . $solarmanpath;
$cmda .= ' --ipclewifi ' . $ipclewifi;
$cmda .= ' --portclewifi ' . $portclewifi;
$cmda .= ' --serialclewifi ' . $serialclewifi;
$cmda .= ' --mbslaveid ' . $mbslaveid;
$cmd = $cmda . ' --registre ' . $registre;
$cmd .= ' --modbus ' . $modbus;
// Si vous êtes en write multiple register alors ci dessous la liste des valeurs à écrire dans des registres qui se suivent. Attention à bien respecter l'ordre
$cmd .= ' --liste ' . $infopourcent;
// Si vous êtes en write holding register commentez la ligne ci dessus et décommentez celle ci dessous
//$cmd .= '--unique ' . "valeur unique à envoyer";
$scenario->setlog('solarman [commande envoyée] : ' . $cmd);
$result = exec('nohup ' . $cmd . ' >> ' . log::getPathToLog('solarman_commandes') . ' 2>&1 &');
if (strpos(strtolower($result), 'error') !== false || strpos(strtolower($result), 'traceback') !== false) {
$scenario->setlog('solarman error [commande]-----' . $result);
return;
}
$scenario->setlog('solarman info [commande] OK, retour: ' . $result);
sleep(8); // pause de qq secondes avant d'envoyer la suite
Oui , par exemple 10 pour avec 10% de la puissance totale, je pense qu’il y a une erreur dans le scale factor car dans le fichier de conf du plugin il est bien à 1 (pour la lecture du paramètre )
J’ai un onduleur Deye SUN6K et j’aimerais lire quelques infos afin d’adapter le courant de charge des batteries.
J’ai pu récupérer la doc modbus mais j’avoue que je ne suis pas super confortable avec tout ça.
Je voudrais dans un premier temps lire les données.
J’ai vu que le code est 0x03 pour la lecture mais pas de distinction entre lecture d’un registre simple ou multiple.
J’ai essayé d’adapter le script ci-dessus tant bien que mal, il semble s’exécuter mais pas de données en retour dans les logs.
Je suis preneur d’un coup de main.
ci-dessous les registres que j’aimerais lire : j’ai fait un test sur le 320 (pas sur que ce soit en Hexa)
ci-dessous la modif à apporter au script que j’ai effectuée :
//parametres pour écrire sur votre onduleur
$modbus = 3; // commande ecriture en modbus pour votre onduleur en decimal
// 16 (0x10 en héxa) correspond à l’écriture d’un unique ou plusieurs registres qui se suivent: « write multiple holding registers »
// 6 (0x06 en héxa) correspond à l’écriture d’un unique registre: « write holding register » non-used chez Deye
// 3 (0x03 en héxa) correspond à l’écriture d’un unique ou plusieurs registres qui se suivent : « write holding register »
$ipclewifi = ‹ x.x.x.x ›;
$portclewifi = ‹ yyyy ›;
$serialclewifi = ‹ 123456 ›;
$mbslaveid = ‹ 1 ›;
$registre = 0x00140; //1er registre à lire pour moi (le 320 de la doc)
Pour la lecture tu n’as pas besoin d’appliquer ce script, regarde dans les fichiers de configuration du plugin s’il n’y a pas déjà ton onduleur ou un qui y ressemble
désolé pour la réponse tardive.
Merci pour ce retour.
J’ai effectivement pas mal d’information avec le fichier deye_hybrid mais je n’ai pas le paramétrage du courant de charge max autorisé. (depuis l’appli : « Set Battery Max Charging Current »
J’ai l’information du courant actuel tiré par la batterie.
Si je ne peux pas le lire (je voulais commencer prudemment ), je peux éventuellement m’inspirer de la puissance prélevée depuis le Grid et calculé le courant disponible.
Dans ce cas, pour effectuer une écriture du registre, il faut que je positionne le modbus=16 dans le script proposé et trouver le bon registre.
[2024-08-12 09:01:11][SCENARIO] – Début : Scenario lance manuellement.
[2024-08-12 09:01:11][SCENARIO] - Exécution du sous-élément de type [action] : code
[2024-08-12 09:01:11][SCENARIO] Exécution d’un bloc code
[2024-08-12 09:01:11][SCENARIO] % envoyé = la valeur que tu souhaites envoyer à ton onduleur ça peut être récupéré par un tag par exemple
[2024-08-12 09:01:11][SCENARIO] solarman [commande envoyée] : nice -n 19 /usr/bin/python3 /var/www/html/plugins/solarman/ressources/commandes.py --ipclewifi x.x.x.x --portclewifi xxxx --serialclewifi xxxxx --mbslaveid 1 --registre 210 --modbus 3
[2024-08-12 09:01:11][SCENARIO] solarman info [commande] OK, retour:
[2024-08-12 09:01:19][SCENARIO] Fin correcte du scénario
La saisie du registre en hexa apparait en décimal dans les logs. Ca correspond bien.
La requête est bien reçu par l’onduleur.
merci.
Mais comme je voulais essayer la lecture d’un registre, c’est pour ça que je n’ai rien mis. Dans ton exemple, c’était bien pour envoyer une valeur ?
Je vais essayer en mode écriture pour voir.
Excuse moi mais je ne comprends rien à ce que tu veux. Tu veux lire ou écrire ? Pour lire et comme je te l’ai déjà écrit tu n’as pas à passer par le script, le plugin gère ça. Si tu veux écrire alors là oui le script peut te servir. Mais il ne faut pas tout mélanger, ne pas vouloir lire avec un script qui est prévu pour écrire, les commandes modbus ne sont pas les mêmes et il n’est pas prévu pour interpréter le retour de l’onduleur