Faire communiquer Jeedom et le MSunPV

Bonjour à tous,
J’ai acheté récemment un routeur solaire Ard-Tek MSunPV, et celui-ci fonctionne parfaitement en autonomie. Mais il était tentant de l’intégrer à Jeedom pour que chacun bénéficie des atouts de l’autre :grin: . Donc voici ce que ça donne, j’ai bien conscience du fait que c’est un peu alambiqué, mais une fois en place ça fonctionne parfaitement bien … Alors courage :rofl: :rofl: :rofl:
Pour y arriver, vous aurez besoin :

  • d’un Jeedom fonctionnel avec le plugin Script et le plugin Mode.
  • D’un MSunPV correctement configuré, avec ici pour l’exemple deux sorties utilisées.

Pour commencer, créer un équipement script « MSunPV » et configurer son actualisation toutes les minutes.

Ensuite, nous allons procéder en deux temps : d’abord récupérer les infos du MSunPV dans Jeedom, puis faire en sorte que Jeedom puisse commander le MSunPV.

  1. Récupérer les infos du MSunPV
    Créer une commande XML/info/autre avec la requête inAns et <l’adresse IP de votre MsunPV>/status.xml

Celle-ci récupère dans le fichier xml du MsunPV l’état des entrées

Créer une commande script/info/numérique qui va récupérer la valeur de l’entrée souhaitée.

Une fois la commande créée, cliquer sur nouveau script (bouton vert), nommer le fichier en mettant bien une extension « .php », puis y mettre le script suivant, en l’adaptant à l’entrée voulue (= le nombre après echo $val ) :

<?php
   require_once '/var/www/html/core/php/core.inc.php';
   // la commande info autre
$cmdinfo = "#[propriété][msunpv][entrées_msunpv]#"; // extraction sous forme valeur1;valeur2
$RetourInfo = cmd::byString($cmdinfo)->execCmd();
// scinde l'info
list($val1, $val2, $val3, $val4, $val5, $val6, $val7, $val8, $val9, $val10, $val11, $val12, $val13, $val14, $val15, $val16) = explode(';', $RetourInfo);
echo $val1;
 ?>

La même logique peut être suivie pour l’état des commandes (mais avec des commandes script/info/autre et non numérique) :

Et avec les compteurs :

Sauf que la petite subtilité pour ces derniers sont qu’ils sont codés en hexadécimal, donc le script pour récupérer une des infos diffère légèrement :

 <?php
   require_once '/var/www/html/core/php/core.inc.php';
   // la commande info autre
$cmdinfo = "#[propriété][msunpv][compteurs_msunpv]#"; // extraction sous forme valeur1;valeur2
$RetourInfo = cmd::byString($cmdinfo)->execCmd();
// scinde l'info
list($val1, $val2, $val3, $val4, $val5, $val6, $val7, $val8) = explode(';', $RetourInfo);
$compteur=hexdec($val4)/10;
echo $compteur;
 ?>

Voilà pour la récupération des infos … Et maintenant la commande !

  1. Commande du MSunPV par Jeedom

La difficulté est qu’une variable de l’API code deux commandes en même temps. Voici un exemple de commande à passer :

curl -X POST -d ‹ parS=10;0;0;0;0;0;0;2; › http://192.168.x.x/index.xml

Dans celle-ci, c’est le 10 qui modifie les deux premières commandes, avec le codage suivant :
image

Donc l’idée est de récupérer l’info actualisée de l’état des deux commandes avant d’en modifier une, en renvoyant le code adapté.
Si par exemple les deux sorties sont en mode auto, la valeur est à 10, et que l’on souhaite passer la sortie 1 en marche forcée, il faut envoyer la valeur 9.

La première étape est d’ajouter, dans l’équipement script précédemment créé, toutes les commandes correspondant à ces différentes valeurs possibles. Par exemple :
Avec à chaque fois le code suivant :

 <?php
   require_once '/var/www/html/core/php/core.inc.php';
   // la commande info autre
$cmdinfo = "#[propriété][msunpv][commandes_msunpv]#"; // extraction sous forme valeur1;valeur2
//$mode_chauffeau = "#[Bureau][Chauffe-eau][Mode]#";
$RetourInfo = cmd::byString($cmdinfo)->execCmd();
$place_pointvirgule = stripos($RetourInfo,';');
// scinde l'info
$RetourInfo = substr($RetourInfo,$place_pointvirgule);

$RetourInfo = 'curl -X POST -d \'parS=0'.$RetourInfo.'\' http://192.168.x.x/index.xml';

shell_exec($RetourInfo);
 ?>

dans lequel on n’adapte que le nombre après parS= dans la commande curl pour qu’il corresponde à la valeur de la commande souhaité, et l’adresse IP par celle de votre MSunPV.

Une fois les commandes ajoutées à l’équipement script, on va créer un équipement Mode pour chaque appareil à contrôler (chez moi, chauffe-eau bureau et chauffe-eau sde studio). Et pour chaque équipement on va créer 3 modes (on, off, auto) en ne mettant aucune action dedans.

Et ensuite il va falloir créer les deux scenarios qui synchronisent les modes des équipement créés avec l’état des commandes du MsunPV. Donc à chaque changement d’état du MsunPV il faudra que ça mette à jour l’état des modes dans Jeedom, et qu’à chaque changement de mode dans Jeedom, cela change l’état des commandes du MsunPV.

Le premier scénario se déclenche à chaque changement d’état des commandes MsunPV :

Puis il actualise toutes les commandes de l’équipement MsunPV, il désactive le scenario que l’on va créer juste après (pour ne pas qu’il y a de boucles sans fin entre les deux scénarios), puis il met à jour l’état des modes Jeedom en fonction de l’état des commandes du MsunPV. Et enfin il réactive le deuxième scénario.


Les plus attentifs auront remarqué que dans le fichier status.xml, le code pour les deux commandes en auto n’est pas ‹ 10 ›, mais ‹ a › …

A noter que comme l’équipement MsunPV s’actualise toute les minutes, il peut y avoir un délai entre le passage de la commande côté MsunPV et son actualisation dans Jeedom (faute d’avoir un push côté MSunPV).

Le deuxième scénario se charge de l’autre sens : en cas de modification du mode dans Jeedom, il modifie l’état de la commande côté MsunPV. Pour le coup, cette mise à jour est instantanée.

Il se déclenche en cas de changement de mode :

Il actualise alors les commande de l’équipement MsunPV pour être sûr de partir de la bonne base, puis désactive temporairement le premier scénario pour éviter les boucles sans fin, puis en fonction de l’état de la commande côté MsunPV et de la modification du mode effectuée côté Jeedom, il renvoie la bonne commande. C’est relativement compliqué du fait qu’il n’y a qu’une valeur qui code pour deux commandes …

Et enfin il réactive l’autre scénario à la fin.



Une fois ça mis en place, une multitude de possibilités s’offrent à vous :

  • ré-utiliser les infos des tores, sondes et compteurs du MsunPV dans Jeedom
    image

  • contrôler les commandes du MsunPV depuis l’interface de Jeedom :
    image

  • et aussi (et surtout ?) Intégrer le fonctionnement du MsunPV à vos scénarios Jeedom. Par exemple, vous pouvez faire en sorte de couper votre chauffe-eau quand vous passez Jeedom en mode vacances, ou alors commander une marche forcée en fonction d’un compteur d’eau en sortie de chauffe-eau intégré à Jeedom (si eau chaude consommée trop importante, passer en marche forcée …), etc …

L’idéal serait sans doute de faire un plugin, mais je n’ai pas encore les compétences pour le faire rapidement ni le temps de m’y pencher réellement. Donc si des bonnes âmes souhaitent s’y lancer à partir de cette base, ce serait top ! Et sinon je regarderai ça en 2032 quand j’aurai le temps :rofl: :rofl: :rofl:

2 « J'aime »

Hello,

Merci pour la communauté.

Je n’ai pas ce routeur mais un non communiquant (tignous). Dommage, sinon j’aurais sûrement passé du temps sur la mise en place d’un plugin à partir de ton travail.

1 « J'aime »

Hello, merci pour le partage. J’espère qu’un dev pourra se pencher dessus car il a l’air top ce routeur

1 « J'aime »

Oui, à mon sens c’est vraiment le bon compromis entre les routeurs à faire soi même (pour lesquels il faut avoir le temps et la compétence…) Et les routeurs grand public (plus chers et sans doute moins souples…). Vraiment très satisfait de mon choix, et hâte d’être en juin pour voir ce que ça donne quand le soleil est là pour de vrai :grin::grin:.

Je ne sais pas si tu as testé mais le 0 ne fonctionne pas. Même éteint sur l’interface ça route quand même

Bonjour,
Effectivement ça n’empêche pas le routage, mais je suppose que ça doit couper les programmations horaires. Et finalement ce n’est pas plus mal dans mon cas, puisque le routage me permet de limiter les injections sur le réseau …

1 « J'aime »

Salut, sais tu si c’est possible de modifier les valeurs dans inject par exemple depuis jeedom ?

Bonjour,
Bonne question, il faudrait peut-être demander à Patrick sur le forum Ard-Tek si ces valeurs peuvent être modifiées par une commande curl . Si c’est le cas alors pas de problème pour commander ça depuis Jeedom …

Après vérification c’est bien ce que je supposais : quand tu mets sur off, seul le routage en cas de surplus continue, les marches forcées commandées directement par le MSunPV (par les programmations horaires par exemple) sont coupées.

Oui j’ai trouvé la solution pour stopper. J’ai mis -3000 dans inject

Du coup je me suis fait des commandes auto manuel et stop avec des variables. Et j’ai fait un widget selon la valeur de la variable

Merci pour ce super travail!!
Je vais bientôt installer mes PV et mon MSunPV!!

Avec plaisir !
Avec quelques semaines de recul, ça fonctionne toujours aussi bien.
J’ai même depuis ajouté un scénario qui, en fonction des prévisions de production du lendemain du plugin Solcast, met le chauffe-eau en marche forcée 0h, 1h, 2h ou 3h à partir de minuit. Comme ça, je ne perds pas en auto-consommation, mais ça me garantie que j’aurai de l’eau chaude quand même …

1 « J'aime »

Bonjour Sylvouille,

Tout d’abord merci pour ton tuto.
J’ai aussi le MsunPV que je trouve Top.

je suis nouveau sur Jeedom et j’aurai voulu appliquer ta mise en place pour gérer mon msunpv avec Jeedom mais j’avoue un peu batailler.

J’ai réussi a faire afficher sur mon dashboard les valeurs voulu de conso, prod…
J’ai cependant perdu le fil a ton point numéro 2, au moment ou tu parle de récupérer les commandes.
effectivement je n’ai pas compris la première étape
« La première étape est d’ajouter, dans l’équipement script précédemment créé, toutes les commandes correspondant à ces différentes valeurs possibles. Par exemple :
Avec à chaque fois le code suivant : »
je ne vois pas ou tu met ce script et dans quel équipement précédemment créé ?
peut être as tu des copies d’écran sur ce niveau la ?
car tu différencie comment le nom de l’équipement pour mettre les scripts a partS=0, …?

Dans ton script il faut juste changer le numéro après partS= de 0 à a(a=10) c’est bien cela
ou il faut mettre toute la chaine de caractère type parS=0;0;0;0;0;0;0;2; puis idem avec parS=1;0;0;0;0;0;0;2; …

j’ai essayé de faire ca pour le moment mais le retour du script etat_commandes_1_2 me met toujours 0 (voir à droite copie écran) quel que soit le numéro après partS

si tu pouvais m’aider pour passer ce cap ce serait cool. (ca m’aidera peut être a comprendre la suite pourquoi on a des noms qui apparaissent type « modes_chauffes_eau », « chauffe_eau », « chauffe_eau_studio »…

Merci à toi, bonne après midi

Bonjour,
je me repond a moi meme (cela peux peut etre aider d’autre personnes)
après y avoir gratté pendant pas mal d’heures je crois que j’ai trouvé les infos qu’il me manquait dans le tuto ci dessus.
=> avant de passer au chapitre 2 / commande du msunpv.
il faut bien créer la récupération de l’etat des commandes du msunpv en cours ( infos recupéré dans le xml crée sous Cmdpos)
il faut donc faire comme la copie d’écran :


j’ai créer etat_commandes_1_2 et etat_commandes_3_4 car j’ai un modèle 4 sorties sur le msunpv.

ensuite on peux passer au chapitre 2 / commande du msunpv.
cette fois, il faudra donc créer les commandes pour piloter le msunpv depuis jeedom
c’est a ce moment la qu’il faut utiliser le script

c’est ma prochaine étape.
en tout cas pour le moment quand j’active une commande sur le msunpv cela change bien l’état sur Jeedom, c’est top merci Sylvouille.

je poursuis ma mise en place.

Ps: si vous voulez remonter l’information du compteur total jour du msunpv vous trouverez un chiffre proche de 2 puissances 32 (4294967296)
si vous voulez afficher le compteur comme sur le msunpv, vous pouvez faire une opération dans le script de Energie produite jour :


c’est a ce moment la :

l’explication est un codage en bit négatif et le msunpv compte en négatif avec une remise a zéro tous les soirs.
il faut donc faire 2^32 - le chiffre enorme remonté par le script.

@ +

Paps

1 « J'aime »

Chez moi j’ai fait comme ceci avec un bloc code qui va chercher les infos

Et pour les actions j’ai fait ceci
pour le mode manuel par exemple

image

1 « J'aime »

Merci c’est bien plus simple a mettre en oeuvre :slight_smile: pour le commun des mortels :slight_smile:

du coup pour les commande tu utilise un virtuel qui lance un bloc code dans ton scenario si j’ai bien capté ?

oui une command action avec ceci


1 « J'aime »

merci ! je vais mettre en application ta solution elle génère moins de requête au msun, car avec l’afficheur companion qui en fait aussi, la solution du dessus « assoie » le msun… (bien que fonctionelle :slight_smile: )

1 « J'aime »