SMA Sunny Boy: information status

Bonjour,

Je voudrais une clarification sur l’information « statut » fourni par le plugin.
Cette information représente t’elle le statut réel de l’onduleur ?
A la lecture du code, j’ai plutôt l’impression que c’est le statut du dialogue entre le plugin et l’onduleur.
Peux tu confirmer.
L’information semble pourtant bien présente dans le json que tu récupères.

Salut,

Effectivement, c’est juste une indication du statut du plugin…
Je peux remplacer cette information par le statut de l’onduleur.
Par contre je ne trouve pas l’information dans le json, tu peux me donner la reference?
Ce devrait être ‹ v6180_08214800 › non?

Je suis a l’etranger jusqu’en fin de semaine et n’ai pas acces a l’onduleur.
Reponse probablement dimanche.

1 « J'aime »

Tu as un/des PR sur Github

1 « J'aime »

Salut,

Je viens de regarder tes PR, a la ligne 78 il faudrait garder ceci afin de ne pas traiter un équipement inactif:

$eqLogic->getIsEnable() == 0

donc comme ceci:

if ($eqLogic->getIsEnable() == 0) {
				continue;
			}

OK ?

Si c’est pour remplacer ce bloc que j’ai mis en commentaire: C’est OK

//if (($_eqLogic_id != null && $_eqLogic_id != $eqLogic->getId()) || $eqLogic->getIsEnable() == 0) {
//	continue;
//}

Bonjour,
Voici pour l’information statut ey autre.
Dans les valeurs que récupère de l’onduleur (lire data plus loin dans le texte), tu as des séquences comme celles ci-dessous.

            "6180_08214800":
            {
                "1":
                [
                    {
                        "val":
                        [
                            {
                                "tag": 307
                            }
                        ]
                    }
                ]
            },

Comme nous avons une nouvelle installation, j’ai regardé tout ce qui était disponible dans l’interface de l’onduleur.
Dans l’onglet valeurs instantannées, tu as le bouton « Exporter toutes les valeurs instantannées »
Tu obtiens une page html comme celle-ci (rien que le début)

J’ai retrouvé dans cette page des valeurs présentent comme point d’entrée d’un tag.
Pour toutes les valeurs « Ok » dans la page html, j’ai retrouvé dans data des information tag 307.
J’en ai déduit que 307 était le code pour indiquer Ok.
J’ai procédé de même pour 2 ou 3 autres valeurs intéressantes.
De cette manière, je parviens à obtenir un statut de différentes parties de l’onduleur.

J’ai traduit cela dans le code:
a) récupération des valeurs

  			$status_general = $json['result'][$InverterKey]['6180_08214800'][$typeID]['0']['val']['0']['tag'];
  			$status_inverter = $json['result'][$InverterKey]['6180_08414C00'][$typeID]['0']['val']['0']['tag'];
  			$status_webconnect = $json['result'][$InverterKey]['6180_084B1E00'][$typeID]['0']['val']['0']['tag'];
  			$status_fonction = $json['result'][$InverterKey]['6180_08412800'][$typeID]['0']['val']['0']['tag'];
  			//$status_relais = $json['result'][$InverterKey]['6180_08416400'][$typeID]['0']['val']['0']['tag'];
  			//log::add(__CLASS__, 'debug',"Etat_relais  $status_relais");     (51: Fermé; 311: Ouvert)

b) affichage
J’ai ajouté une nouvelle commande « production »
J’ai réutilisé la commande statut mais en donnant une information de l’élément non Ok.
Je n’ai pas encore vu des valeurs autres que Ok pour les informations Général, Onuleur et WebConnect.

              	else if(($DeviceType==10 || $DeviceType==20) && $cmdLogicalId == 'production') {
              		if ($status_fonction == '569') {
              			$status_fonction = 'Active';
              		} else if ($status_fonction == '1295') {
              			$status_fonction = 'Veille';
              		} else {
              			$status_fonction = 'Inactive';
              		}
              		$eqLogic->checkAndUpdateCmd($cmd, $status_fonction);
              	}
              	else if($cmdLogicalId == 'status') {
              		$status = '';
              		if(($DeviceType==10 || $DeviceType==20)) {
              			if ($status_general != '307') {$status = 'NOK Général';}
              			else if (($status_inverter != '307') && ($status == '')) {$status = 'NOK Onduleur';}
              			else if (($status_webconnect != '307') && ($status == '')) {$status = 'NOK WebConnect';}
              			else {$status = 'OK';}
              		} else {
              			$status = 'OK';
              		}
              		$eqLogic->checkAndUpdateCmd($cmd, $status);
              	} 

J’ai essayé de limiter l’effet des commandes Production et Statut aux seuls onduleurs.

Si tu as des questions n’hésites pas à revenir vers moi.