Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

problème de fonction

Cette partie est dédiée à la programmation sur le logiciel JEEDOM
ffisoft57
Timide
Messages : 138
Inscription : 12 juin 2017, 18:35

problème de fonction

Message par ffisoft57 » 16 sept. 2019, 14:42

bonjour a tous

j'arrive a passe ma fonction dans le public function RefreshInformation()

dans le public function toHtml($_version = 'dashboard') la fonction passe bien, pourquoi ??

merci de votre aide

Mips2648
Actif
Messages : 932
Inscription : 08 sept. 2018, 17:09

Re: problème de fonction

Message par Mips2648 » 16 sept. 2019, 18:45

Bonjour,

je propose que tu relises ton message et que tu nous dises ce que tu y as compris...
Développeur et auteur des plugins suivants, (entre autre Arlo, Solaredge, Design Image, Gotify...) et aidant sur plein d'autres!

Si vous voulez contribuer, un don fait toujours plaisir : https://paypal.me/mips2648

ffisoft57
Timide
Messages : 138
Inscription : 12 juin 2017, 18:35

Re: problème de fonction

Message par ffisoft57 » 17 sept. 2019, 09:12

je m'explique :

dans ma class il y a une fonction : public function toHtml($_version = 'dashboard') dans laquelle j'appel une une fonction : private function formatWattHours($value)

cette fonction je voudrais l'appelle dans public function RefreshInformation() mais il me met une erreur

quelqu'un pour m'explique pq ??

merci

Mips2648
Actif
Messages : 932
Inscription : 08 sept. 2018, 17:09

Re: problème de fonction

Message par Mips2648 » 17 sept. 2019, 10:35

Peux-tu montrer le code? parce que cela peut être du à plein de chose.
1/ Je suppose que tu parles de la fonction toHtml de ton eqLogic (et pas de la cmd), mais tu pourrais préciser ce que veut dire "ma class", on ne peut pas deviner.
2/ ta fonction refreshinsformation, ou est-elle? quelle class?
3/ comment fais-tu l'appel?
4/ et quelle "erreur"? ca aiderait si tu le message. ou vois-tu cette erreur?
Développeur et auteur des plugins suivants, (entre autre Arlo, Solaredge, Design Image, Gotify...) et aidant sur plein d'autres!

Si vous voulez contribuer, un don fait toujours plaisir : https://paypal.me/mips2648

ffisoft57
Timide
Messages : 138
Inscription : 12 juin 2017, 18:35

Re: problème de fonction

Message par ffisoft57 » 17 sept. 2019, 13:42

voici la fonction ou ca marche :
public function toHtml($_version = 'dashboard')
{
$replace = $this->preToHtml($_version);
if (!is_array($replace)) {
return $replace;
}
$version = jeedom::versionAlias($_version);
$replace['#forecast#'] = '';
$replace['#batteries#'] = '';
$replace['#pinces#'] = '';
if ($version != 'mobile') {

$l = 0;


$forcast_template = getTemplate('core', $version, 'forecast', 'enphase_prod');
$cmd = $this->getCmd(null, 'nbpanneau');
if (is_object($cmd)) {
$nbr = $cmd->execCmd();
}

for ($i = 1; $i < $nbr + 1; $i++) {
$replacepaninfo = array();
$replacepaninfo['#num#'] = $i;

$nbrserie = $this->getCmd(null, 'pan' . $i . 'nbserie');
$replacepaninfo['#nbrserie#'] = is_object($nbrserie) ? $nbrserie->execCmd() : '';

$lastwatt = $this->getCmd(null, 'pan' . $i . 'lastwatt');
$replacepaninfo['#lastwatt#'] = is_object($lastwatt) ? $lastwatt->execCmd() : '';

$maxwatt = $this->getCmd(null, 'pan' . $i . 'maxwatt');
$replacepaninfo['#maxwatt#'] = is_object($maxwatt) ? $maxwatt->execCmd() : '';

$replace['#forecast#'] .= template_replace($replacepaninfo, $forcast_template);
}


$nbserie = $this->getCmd(null, 'nbserie');
$replace['#nbserie#'] = is_object($nbserie) ? $nbserie->execCmd() : '';

$nbpanneau = $this->getCmd(null, 'nbpanneau');
$replace['#nbpanneau#'] = is_object($nbpanneau) ? $nbpanneau->execCmd() : '';

$ver_soft = $this->getCmd(null, 'ver_soft');
$replace['#ver_soft#'] = is_object($ver_soft) ? $ver_soft->execCmd() : '';

$now = $this->getCmd(null, 'now');
$replace['#now#'] = $this->formatWatt(is_object($now) ? $now->execCmd() : '');

$daily = $this->getCmd(null, 'daily');
$replace['#daily#'] = $this->formatWattHours(is_object($daily) ? $daily->execCmd() : '');

$SevenDays = $this->getCmd(null, 'SevenDays');
$replace['#SevenDays#'] = $this->formatWattHours(is_object($SevenDays) ? $SevenDays->execCmd() : '');

$lifetime = $this->getCmd(null, 'lifetime');
$replace['#lifetime#'] = $this->formatWattHours(is_object($lifetime) ? $lifetime->execCmd() : '');

$replace['#lastime#'] = date("H:i d/m");

if ($this->getConfiguration('acb') == '1') {

$l = $l + 5;

$batteries_template = getTemplate('core', $version, 'batteries', 'enphase_prod');

$nbbat = $this->getCmd(null, 'nbbat');
$replaceb['#nbbat#'] = is_object($nbbat) ? $nbbat->execCmd() : '';

$bwnow = $this->getCmd(null, 'bwnow');
$replaceb['#pbat#'] = $this->formatWatt(is_object($bwnow) ? $bwnow->execCmd() : '');

$bwhnow = $this->getCmd(null, 'bwhnow');
$replaceb['#cap#'] = $this->formatWattHours(is_object($bwhnow) ? $bwhnow->execCmd() : '');

$pourcentage = $this->getCmd(null, 'percentFull');
$replaceb['#percent#'] = ($pourcentage ? $pourcentage->execCmd() : '');

$replace['#batteries#'] .= template_replace($replaceb, $batteries_template);
}


if ($this->getConfiguration('eim') == '1') {

$l = $l + 7;

$pinces_template = getTemplate('core', $version, 'pinces', 'enphase_prod');

$pnow = $this->getCmd(null, 'pnow');
$replacep['#pnow#'] = $this->formatWatt(is_object($pnow) ? $pnow->execCmd() : '');

$cnow = $this->getCmd(null, 'cnow');
$replacep['#cnow#'] = $this->formatWatt(is_object($cnow) ? $cnow->execCmd() : '');

$cnnow = $this->getCmd(null, 'cnnow');
$replacep['#cnnow#'] = $this->formatWatt(is_object($cnnow) ? $cnnow->execCmd() : '');

$volt = $this->getCmd(null, 'volt');
$replacep['#volt#'] = ($volt ? $volt->execCmd() : '');

$amp = $this->getCmd(null, 'amp');
$replacep['#amp#'] = ($amp ? $amp->execCmd() : '');

$pdaily = $this->getCmd(null, 'pdaily');
$replace['#pdaily#'] = $this->formatWattHours(is_object($pdaily) ? $pdaily->execCmd() : '');

$pSevenDays = $this->getCmd(null, 'pSevenDays');
$replace['#pSevenDays#'] = $this->formatWattHours(is_object($pSevenDays) ? $pSevenDays->execCmd() : '');

$plifetime = $this->getCmd(null, 'plifetime');
$replace['#plifetime#'] = $this->formatWattHours(is_object($plifetime) ? $plifetime->execCmd() : '');

$replace['#pinces#'] .= template_replace($replacep, $pinces_template);
}
$replace['#ligne#'] = $l;


return $this->postToHtml($_version, template_replace($replace, getTemplate('core', $version, 'current', 'enphase_prod')));
}
}
ma fonction est celle la :
private function formatWattHours($value)
{
$unit = array(
0 => '',
3 => 'k',
6 => 'M',
9 => 'G',
12 => 'T',
15 => 'P',
18 => 'E',
21 => 'Z',
24 => 'Y',
);

for ($u = 0; $u <= 24; $u += 3) {
$result = $value / pow(10, $u);

if (!isset($best) || ($result >= 1 && $result < $best['converted'])) {
$best = array(
'initial' => $value,
'converted' => $result,
'rounded' => round($result, 2),
'prefixUnit' => $unit[$u],
);
}
}

return $wattHours = $best['rounded'] . ' ' . $best['prefixUnit'] . 'Wh';
}
private function formatWatt($value)
{
$unit = array(
0 => '',
3 => 'k',
6 => 'M',
9 => 'G',
12 => 'T',
15 => 'P',
18 => 'E',
21 => 'Z',
24 => 'Y',
);

for ($u = 0; $u <= 24; $u += 3) {
$result = $value / pow(10, $u);

if (!isset($best) || ($result >= 1 && $result < $best['converted'])) {
$best = array(
'initial' => $value,
'converted' => $result,
'rounded' => round($result, 2),
'prefixUnit' => $unit[$u],
);
}
}

return $wattHours = $best['rounded'] . ' ' . $best['prefixUnit'] . 'W';
}
}

et je voudrais utilisé ma fonction dans celle la :
public function RefreshInformation()
{
while (true) {
foreach (eqLogic::byType('enphase_prod') as $Equipement) {
if ($Equipement->getIsEnable()) {
// Recuperation des infos des X panneau
log::add('enphase_prod', 'debug', 'Recuperation des infos des X panneau');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $Equipement->getConfiguration('ip') . '/api/v1/production/inverters');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, $Equipement->getConfiguration('user') . ":" . $Equipement->getConfiguration('pass'));
$response = curl_exec($ch);
curl_close($ch);

$json_data = json_decode($response, true);
$c = count($json_data);
log::add('enphase_prod', 'debug', 'Nombre entree ' . $c);
for ($p = 1; $p <= intval($c); $p++) {
$i = $p - 1;

log::add('enphase_prod', 'debug', 'Recuperation des infos du panneau ' . $p);
$Equipement->checkAndUpdateCmd('pan' . $p . 'nbserie', $json_data[$i]["serialNumber"]);
log::add('enphase_prod', 'debug', 'Recuperation numero de serie du panneau ' . $p . ' : ' . $json_data[$i]["serialNumber"]);
$Equipement->checkAndUpdateCmd('pan' . $p . 'lastwatt', $json_data[$i]["lastReportWatts"]);
log::add('enphase_prod', 'debug', 'Recuperation derniere puissance du panneau ' . $p . ' : ' . $json_data[$i]["lastReportWatts"]);
$Equipement->checkAndUpdateCmd('pan' . $p . 'maxwatt', $json_data[$i]["maxReportWatts"]);
log::add('enphase_prod', 'debug', 'Recuperation max de puissance du panneau ' . $p . ' : ' . $json_data[$i]["maxReportWatts"]);
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $Equipement->getConfiguration('ip') . '/api/v1/production');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, $Equipement->getConfiguration('user') . ":" . $Equipement->getConfiguration('pass'));
$response = curl_exec($ch);
curl_close($ch);

$json_data = json_decode($response, true);




$Equipement->checkAndUpdateCmd('now', $json_data['wattsNow']);
//$Equipement->checkAndUpdateCmd('winow', formatWatthours($json_data['wattsNow']));
log::add('enphase_prod', 'debug', 'Energie instantané : ' . $json_data['wattsNow']);
$Equipement->checkAndUpdateCmd('daily', $json_data['wattHoursToday']);
//$Equipement->checkAndUpdateCmd('widaily', formatWatthours($json_data['wattHoursToday']));
log::add('enphase_prod', 'debug', 'Energie produit du jour : ' . $json_data['wattHoursToday']);
$Equipement->checkAndUpdateCmd('lifetime', $json_data['wattHoursLifetime']);
//$Equipement->checkAndUpdateCmd('wilifetime', formatWatthours($json_data['wattHoursLifetime']));
log::add('enphase_prod', 'debug', 'Energie produit depuis le mise en service :' . $json_data['wattHoursLifetime']);
$Equipement->checkAndUpdateCmd('SevenDays', $json_data['wattHoursSevenDays']);
log::add('enphase_prod', 'debug', 'Energie produit sur 7 jours : ' . $json_data['wattHoursSevenDays']);

if ($Equipement->getConfiguration('eim') == '1' or $Equipement->getConfiguration('acb') == '1') {

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $Equipement->getConfiguration('ip') . '/production.json');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, $Equipement->getConfiguration('user') . ":" . $Equipement->getConfiguration('pass'));
$response = curl_exec($ch);
curl_close($ch);

var_dump(json_decode($response));
$json_data = json_decode($response);

if ($Equipement->getConfiguration('eim') == '1') {

//----------Pinces Production----------------------------------------------------------------------------------
$Equipement->checkAndUpdateCmd('pnow', $json_data->{"production"}[1]->{"wNow"});
log::add('enphase_prod', 'debug', 'Energie instantané Pinces : ' . $json_data->{"production"}[1]->{"wNow"});
$Equipement->checkAndUpdateCmd('pdaily', $json_data->{"production"}[1]->{"whToday"});
log::add('enphase_prod', 'debug', 'Energie produit du jour Pinces: ' . $json_data->{"production"}[1]->{"whToday"});
$Equipement->checkAndUpdateCmd('plifetime', $json_data->{"production"}[1]->{"whLifetime"});
log::add('enphase_prod', 'debug', 'Energie produit depuis le mise en service Pinces:' . $json_data->{"production"}[1]->{"whLifetime"});
$Equipement->checkAndUpdateCmd('pSevenDays', $json_data->{"production"}[1]->{"whLastSevenDays"});
log::add('enphase_prod', 'debug', 'Energie produit sur 7 jours Pinces : ' . $json_data->{"production"}[1]->{"whLastSevenDays"});
//-----------Pinces Total Consommation---------------------------------------------------------------------------------
$Equipement->checkAndUpdateCmd('cnow', $json_data->{"consumption"}[0]->{"wNow"});
log::add('enphase_prod', 'debug', 'Conso instantané Pinces : ' . $json_data->{"consumption"}[0]->{"wNow"});
$Equipement->checkAndUpdateCmd('volt', $json_data->{"consumption"}[0]->{"rmsVoltage"});
log::add('enphase_prod', 'debug', 'Tension Pinces : ' . $json_data->{"consumption"}[0]->{"rmsVoltage"});
$Equipement->checkAndUpdateCmd('amp', $json_data->{"consumption"}[0]->{"rmsCurrent"});
log::add('enphase_prod', 'debug', 'Intensité Pinces : ' . $json_data->{"consumption"}[0]->{"rmsCurrent"});
//-----------Pinces Net Consommation---------------------------------------------------------------------------------
$Equipement->checkAndUpdateCmd('cnnow', $json_data->{"consumption"}[1]->{"wNow"});
log::add('enphase_prod', 'debug', 'Conso net instantané Pinces : ' . $json_data->{"consumption"}[1]->{"wNow"});
}
if ($Equipement->getConfiguration('acb') == '1') {
$Equipement->checkAndUpdateCmd('nbbat', $json_data->{"storage"}[0]->{"activeCount"});
log::add('enphase_prod', 'debug', 'Nombre de batterie : ' . $json_data->{"storage"}[0]->{"activeCount"});
$Equipement->checkAndUpdateCmd('bwnow', $json_data->{"storage"}[0]->{"wNow"});
log::add('enphase_prod', 'debug', 'Puissance batterie instantanée : ' . $json_data->{"storage"}[0]->{"wNow"});
$Equipement->checkAndUpdateCmd('bwhnow', $json_data->{"storage"}[0]->{"whNow"});
log::add('enphase_prod', 'debug', 'Capacité Restante : ' . $json_data->{"storage"}[0]->{"whNow"});
$Equipement->checkAndUpdateCmd('percentFull', $json_data->{"storage"}[0]->{"percentFull"});
log::add('enphase_prod', 'debug', 'Pourcentage : ' . $json_data->{"storage"}[0]->{"percentFull"});
}
}
}
}
$Equipement->refreshWidget();
$tdr = $Equipement->getConfiguration('tdr');
sleep($tdr);
}
self::deamon_stop();
}

Mips2648
Actif
Messages : 932
Inscription : 08 sept. 2018, 17:09

Re: problème de fonction

Message par Mips2648 » 17 sept. 2019, 14:13

Tu appelles une fonction globale, elle n'existe pas.

Code : Tout sélectionner

formatWattHours
c'est une fonction de la class eqlogic; donc dans ton code ca va donner

Code : Tout sélectionner

$equipement->formatWatthours(...
mais ca me parait pas clean ce code...
on ne fait pas un while(true) qui va tourner a vie, ce vraiment une très mauvaise pratique (oui j'ai vu le sleep)
de toute facon ca va finir par bloquer car ton script va avoir une durée max d'execution et va se faire tuer.
tu dois en faire un cron qui va tourner tout les x temps, au lieu de boucler et sleep.

y a d'autres trucs mais vmt trop long à faire un code review via post de forum désolé
Développeur et auteur des plugins suivants, (entre autre Arlo, Solaredge, Design Image, Gotify...) et aidant sur plein d'autres!

Si vous voulez contribuer, un don fait toujours plaisir : https://paypal.me/mips2648

ffisoft57
Timide
Messages : 138
Inscription : 12 juin 2017, 18:35

Re: problème de fonction

Message par ffisoft57 » 17 sept. 2019, 20:00

bonsoir et merci ca fonctionne

juste avec un cron c'est minimum 1 minute de rafraîchissement alors que je veux choisir entre 10s/20s/30s/40s/50s

je veux laisse le choix a l'utilisateur le taux de rafraîchissement

après j'ai une autre question je suis en V3 de jeedom mais apparemment en V4 la fonction refreshWidget() ne marche plus ??


vous vez des pistes svp ??

Mips2648
Actif
Messages : 932
Inscription : 08 sept. 2018, 17:09

Re: problème de fonction

Message par Mips2648 » 17 sept. 2019, 20:23

Si, la fonction refreshWidget() fonctionne en v4.
Développeur et auteur des plugins suivants, (entre autre Arlo, Solaredge, Design Image, Gotify...) et aidant sur plein d'autres!

Si vous voulez contribuer, un don fait toujours plaisir : https://paypal.me/mips2648

Répondre

Revenir vers « Développements sur Jeedom »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 6 invités