[Store] Plug in Total watts

Utilitaires développés par les utilisateurs

Re: [Store] Plug in Total watts

Messagepar jluc2808 » 26 Déc 2022 13:16

@merguez07, oui ce serait une bonne solution

comment on fait cela ?
jluc2808
 
Messages : 502
Inscription : 30 Jan 2021

Re: [Store] Plug in Total watts

Messagepar merguez07 » 26 Déc 2022 18:25

jluc2808 a écrit:Comment on fait cela ?


La magie d'OPA95 a opéré. je te laisse tester le code qu'il propose


Code : Tout sélectionner
<?php




// V1.0 : Script d'addition des valeurs des consommations electriques instantannée et cumulée
// V1.1 : Simplification du code
// V1.2 : Rajout de commentaires dans les pages Web
// V1.3 : Correction des problèmes d'accents
// V1.4 : compléments OPA95 pour une gestion par période
//*********************************************************************************************************
//             Lecture du mode
//*********************************************************************************************************
$mode = getArg("mode"); //lecture mode
    //mode=listi : on affiche une page html contenant la liste des peripheriques mesurant la puissance instantanee
    //mode=listc : on affiche une page html contenant la liste des peripheriques mesurant la puissance cumuleée
    //mode différent de listi et listc: on fait la somme des valeurs des peripheriques concernés

//*********************************************************************************************************
//             Etablissement de la liste des peripheriques mesurant la puissance instantanée ou cumulée
//*********************************************************************************************************

if ($mode == 'listi' ||$mode == 'listc'  ) 
   {
    $url = "http://localhost/api/get?action=periph.list&show_notes=1";
    $periph_list = sdk_json_decode(httpQuery($url,'GET')); //liste de tous les peripheriques
      $titrei = "Votre liste de périphériques mesurant la puissance instantanée :";
    $titrei=utf8_decode($titrei);
      $titrec = "Votre liste de périphériques mesurant la puissance cumulée :";
    $titrec=utf8_decode($titrec);
    $action = "Cocher les périphariques à sélectionner, puis, faire un copier/coller de la sélection vers VAR1";
    $action=utf8_decode($action);
   
      //Affichage de la page Web de selection desperipheriques
      //code en-tête html
    $html .= <<<EOT
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
    <head>
        <meta charset="utf-8">
        <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
        <style>
            body {
                font-size: 14px;
                font-family: 'Roboto', sans-serif;
            }
            input[type="text"] {
                font-family: 'Roboto', sans-serif;
            }
            ul {
                list-style: symbols;
            }
        </style>
    </head>
EOT;
      $html .= "<body><br/><p>";
      if ($mode == 'listi'){$html .=$titrei;}
       else {$html .=$titrec;
    }
    $html .= "</p><br/><input id=\"device_list\" type=\"text\" size=\"100\" name=\"device_list\" value=\"\" onclick=\"this.select();\" ><br/>";
    $html .= "<ul class=\"elements\"><br/>";
    foreach($periph_list["body"] as $device){
        $Lunit=strtolower($device['unit']); // on met en minuscule pour eviter les problemes de casse
        if ((($mode == 'listi') && ($Lunit == "w" || $Lunit == "kw"))|| (($mode == 'listc') && ($Lunit == "wh" || $Lunit == "kwh"))){
            $device_list .= $device['periph_id'].",";
            $devices_names .= $device['periph_id']." = ".$device['name']."<br>";
            $html .= "<li><input type=\"checkbox\" value=\"".$device['periph_id']."\"> " . $device['periph_id'] . " = " . $device['name'] . "</li><br/>";
        }
    }
    $html .= "</ul>";
    $html .= <<<EOT
        <script type="text/javascript">
            var elems = document.querySelectorAll('.elements input[type="checkbox"]');

            [].forEach.call(elems, function(elem) {
                elem.addEventListener('change', function (e) {
                    e.preventDefault();
                    sync_input();
                }, false);
            });

            function sync_input() {
                var elements_activated = [];

                [].forEach.call(elems, function(e) {
                    if(e.checked) {
                        elements_activated.push(e.getAttribute('value'));
                    }
                });

                document.querySelector('#device_list').setAttribute("value", elements_activated.join(', '));
            }

            sync_input();
        </script>
EOT;
    $html .="<div style=\"font-weight: bold;color: red;\">" . $action . "</div>";
    $html .= "</body><br/></html>";

    echo utf8_encode($html);
    die();
}


$periphs = getArg("periphIds", $mandatory = true, $default = '');
$tabPeriphs = explode(",", $periphs);
$periph_value = getValue($periph_id, true);
$unit_periph_id=strtolower($periph_value[unit]);
$puiss=0;

$mem = str_replace(',','-','mem'.$periphs);

foreach($tabPeriphs as $periphId) {
    $arrValue = getValue($periphId, /*$value_text*/ true);
    $unit=strtolower($arrValue[unit]);
    $value=$arrValue[value];
    if ($unit!=$unit_periph_id){
        if (substr($unit, 0, 1)=="k"){
            $value=$value*1000;
        } else {
            $value=$value/1000;
        }
    }
    $puiss=$puiss+$value;
}

$cumul = loadVariable($mem);
if (count($cumul)<2){
  foreach (array('jour','jour_1','sem','sem_1','mois','mois_1','annee','annee_1') as $key)
    {$cumul[$key] = 0;}
  $cumul['date']=time();
}

if (substr($unit_periph_id,strlen($unit_periph_id)-1,1)=="h"){
  $puisscum=$puiss;
} else {
  $puissinst=$puiss;
}

$year = date('Y');
$month = date('m');
$day = date('d');
$week = date('W');
$savedyear = date('Y',$cumul['date']);
$savedmonth = date('m',$cumul['date']);
$savedday = date('d',$cumul['date']);
$savedweek = date('W',$cumul['date']);

if ($savedday!=$day) {
  $cumul['jour_1']= $cumul['jour'];
  $cumul['jour']= $puiss;
}
else $cumul['jour'] += $puiss;

if ($savedweek!=$week) {
  $cumul['sem_1']= $cumul['sem'];
  $cumul['sem']= $puiss;
}
else $cumul['sem'] += $puiss;

if ($savedmonth!=$month) {
  $cumul['mois_1']= $cumul['mois'];
  $cumul['mois']= $puiss;
}
else $cumul['mois'] += $puiss;

if ($savedyear!=$year) {
  $cumul['annee_1']= $cumul['annee'];
  $cumul['annee']= $puiss;
}
else $cumul['annee'] += $puiss;
$cumul['date'] = time();

saveVariable($mem,$cumul);

// Affichage des resultats
// Generation du XML
sdk_header('text/xml');
$xml = '<?xml version="1.0" encoding="UTF-8"?>';
$xml .= '<root>';
$xml .= '<Pinst>'.$puissinst.'</Pinst>' ;
$xml .= '<Pcumul>'.$puisscum.'</Pcumul>' ;
$xml .= '<Pjour>'.$cumul['jour'].'</Pjour>' ;
$xml .= '<Psem>'.$cumul['sem'].'</Psem>';
$xml .= '<Pmois>'.$cumul['mois'].'</Pmois>';
$xml .= '<Pannee>'.$cumul['annee'].'</Pannee>';
$xml .= '<Pjour_1>'.$cumul['jour_1'].'</Pjour_1>';
$xml .= '<Psem_1>'.$cumul['sem_1'].'</Psem_1>';
$xml .= '<Pmois_1>'.$cumul['mois_1'].'</Pmois_1>';
$xml .= '<Pannee_1>'.$cumul['annee_1'].'</Pannee_1>';
$xml .= '<Timestamp>'.$cumul['date'].'</Timestamp>';
$xml .= '<Date>'.date('Y-m-d H:i:s',$cumul['date']).'</Date>';
$xml .='</root>';
   
echo $xml;


?>
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [Store] Plug in Total watts

Messagepar opa95 » 26 Déc 2022 20:09

merguez07 a écrit:
jluc2808 a écrit:omment on fait cela ?


La magie d'OPA95 a opéré. je te laisse tester le code qu'il propose


Merci Merguez07 pour la mise en ligne.
Prière de signaler les erreurs.
Bonne fin d'année
:)
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 871
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: [Store] Plug in Total watts

Messagepar jluc2808 » 26 Déc 2022 23:01

super et merci pour le code
il y a une erreur quand la liste des codeId est avec un blanc après la virgule, pour éviter cela
il faut remplacer

Code : Tout sélectionner
$mem = str_replace(',','-','mem'.$periphs);

par
Code : Tout sélectionner
$mem = str_replace(',','-','mem'.str_replace(' ', '',$periphs));
jluc2808
 
Messages : 502
Inscription : 30 Jan 2021

Re: [Store] Plug in Total watts

Messagepar jluc2808 » 26 Déc 2022 23:08

après test et correction du php
le résultat est mitigé
<?xml version="1.0" encoding="UTF-8"?><root><Pinst></Pinst><Pcumul>60.35</Pcumul><Pjour>603.5</Pjour><Psem>603.5</Psem><Pmois>603.5</Pmois><Pannee>603.5</Pannee><Pjour_1>0</Pjour_1><Psem_1>0</Psem_1><Pmois_1>0</Pmois_1><Pannee_1>0</Pannee_1><Timestamp>1672092189</Timestamp><Date>2022-12-26 23:03:09</Date></root>

les valeurs Pjour, Psem Pmois Pannee ne font pas le bon cumul

si j'envoi la commande 3 minutes après j'ai

<?xml version="1.0" encoding="UTF-8"?><root><Pinst></Pinst><Pcumul>60.35</Pcumul><Pjour>844.9</Pjour><Psem>844.9</Psem><Pmois>844.9</Pmois><Pannee>844.9</Pannee><Pjour_1>0</Pjour_1><Psem_1>0</Psem_1><Pmois_1>0</Pmois_1><Pannee_1>0</Pannee_1><Timestamp>1672092374</Timestamp><Date>2022-12-26 23:06:14</Date></root>
jluc2808
 
Messages : 502
Inscription : 30 Jan 2021

Re: [Store] Plug in Total watts

Messagepar opa95 » 26 Déc 2022 23:12

Bonsoir jluc2808
Je regarde demain.
Bonne nuit.
:)
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 871
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: [Store] Plug in Total watts

Messagepar opa95 » 27 Déc 2022 00:37

Bonsoir jluc2808
jluc2808 a écrit:après test et correction du php
le résultat est mitigé
<?xml version="1.0" encoding="UTF-8"?><root><Pinst></Pinst><Pcumul>60.35</Pcumul><Pjour>603.5</Pjour><Psem>603.5</Psem><Pmois>603.5</Pmois><Pannee>603.5</Pannee><Pjour_1>0</Pjour_1><Psem_1>0</Psem_1><Pmois_1>0</Pmois_1><Pannee_1>0</Pannee_1><Timestamp>1672092189</Timestamp><Date>2022-12-26 23:03:09</Date></root>

les valeurs Pjour, Psem Pmois Pannee ne font pas le bon cumul

si j'envoi la commande 3 minutes après j'ai

<?xml version="1.0" encoding="UTF-8"?><root><Pinst></Pinst><Pcumul>60.35</Pcumul><Pjour>844.9</Pjour><Psem>844.9</Psem><Pmois>844.9</Pmois><Pannee>844.9</Pannee><Pjour_1>0</Pjour_1><Psem_1>0</Psem_1><Pmois_1>0</Pmois_1><Pannee_1>0</Pannee_1><Timestamp>1672092374</Timestamp><Date>2022-12-26 23:06:14</Date></root>

L'erreur vient d'une sommation même lorsqu'aucune nouvelle mesure n'est validée.
J'ai déplacé le traitement de $periphs, car il ne doit pas y avoir d'espaces, même pour le explode.
Si tu veux imposer la raz des registres sans recharger, va dans la fenêtre test et met mode=raz pour une mesure, puis remets l'ancienne valeur.
J'ai rajouté un totalisateur global.
Voici le code :
Bonne nuit.
:)
Code : Tout sélectionner
<?php

// V1.0 : Script d'addition des valeurs des consommations electriques instantannée et cumulée
// V1.1 : Simplification du code
// V1.2 : Rajout de commentaires dans les pages Web
// V1.3 : Correction des problèmes d'accents
// V1.4 : Sommation par jour, semaine,mois,annee
//*********************************************************************************************************
//             Lecture du mode
//*********************************************************************************************************
$mode = getArg("mode"); //lecture mode
    //mode=listi : on affiche une page html contenant la liste des peripheriques mesurant la puissance instantanee
    //mode=listc : on affiche une page html contenant la liste des peripheriques mesurant la puissance cumuleée
    //mode différent de listi et listc: on fait la somme des valeurs des peripheriques concernés
    //mode raz: remise à zero des mémoires

//*********************************************************************************************************
//             Etablissement de la liste des peripheriques mesurant la puissance instantanée ou cumulée
//*********************************************************************************************************

if ($mode == 'listi' ||$mode == 'listc'  ) 
   {
    $url = "http://localhost/api/get?action=periph.list&show_notes=1";
    $periph_list = sdk_json_decode(httpQuery($url,'GET')); //liste de tous les peripheriques
      $titrei = "Votre liste de périphériques mesurant la puissance instantanée :";
    $titrei=utf8_decode($titrei);
      $titrec = "Votre liste de périphériques mesurant la puissance cumulée :";
    $titrec=utf8_decode($titrec);
    $action = "Cocher les périphériques à sélectionner, puis, faire un copier/coller de la sélection vers VAR1";
    $action=utf8_decode($action);
   
      //Affichage de la page Web de selection desperipheriques
      //code en-tête html
    $html .= <<<EOT
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
    <head>
        <meta charset="utf-8">
        <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
        <style>
            body {
                font-size: 14px;
                font-family: 'Roboto', sans-serif;
            }
            input[type="text"] {
                font-family: 'Roboto', sans-serif;
            }
            ul {
                list-style: symbols;
            }
        </style>
    </head>
EOT;
      $html .= "<body><br/><p>";
      if ($mode == 'listi'){$html .=$titrei;}
       else {$html .=$titrec;
    }
    $html .= "</p><br/><input id=\"device_list\" type=\"text\" size=\"100\" name=\"device_list\" value=\"\" onclick=\"this.select();\" ><br/>";
    $html .= "<ul class=\"elements\"><br/>";
    foreach($periph_list["body"] as $device){
        $Lunit=strtolower($device['unit']); // on met en minuscule pour eviter les problemes de casse
        if ((($mode == 'listi') && ($Lunit == "w" || $Lunit == "kw"))|| (($mode == 'listc') && ($Lunit == "wh" || $Lunit == "kwh"))){
            $device_list .= $device['periph_id'].",";
            $devices_names .= $device['periph_id']." = ".$device['name']."<br>";
            $html .= "<li><input type=\"checkbox\" value=\"".$device['periph_id']."\"> " . $device['periph_id'] . " = " . $device['name'] . "</li><br/>";
        }
    }
    $html .= "</ul>";
    $html .= <<<EOT
        <script type="text/javascript">
            var elems = document.querySelectorAll('.elements input[type="checkbox"]');

            [].forEach.call(elems, function(elem) {
                elem.addEventListener('change', function (e) {
                    e.preventDefault();
                    sync_input();
                }, false);
            });

            function sync_input() {
                var elements_activated = [];

                [].forEach.call(elems, function(e) {
                    if(e.checked) {
                        elements_activated.push(e.getAttribute('value'));
                    }
                });

                document.querySelector('#device_list').setAttribute("value", elements_activated.join(', '));
            }

            sync_input();
        </script>
EOT;
    $html .="<div style=\"font-weight: bold;color: red;\">" . $action . "</div>";
    $html .= "</body><br/></html>";

    echo utf8_encode($html);
    die();
}


$periphs = getArg("periphIds", $mandatory = true, $default = '');
$periphs = trim($periphs);
$tabPeriphs = explode(",", $periphs);
$periph_value = getValue($periph_id, true);
$unit_periph_id=strtolower($periph_value[unit]);

$mem = str_replace(',','-','mem'.$periphs);
$now =time();

$cumul = loadVariable($mem);
if ( ($mode=='raz') || (count($cumul)<2) ) {
  foreach (array('total','jour','jour_1','sem','sem_1','mois','mois_1','annee','annee_1') as $key)
    {$cumul[$key] = 0;}
  $cumul['date']=$now;
}

$puiss=0;

foreach($tabPeriphs as $periphId) {
  $arrValue = getValue($periphId, /*$value_text*/ true);
  $unit=strtolower($arrValue[unit]);
  $value=$arrValue['value'];
  $timeval = strtotime($arrValue['change']);
  if ($unit!=$unit_periph_id){
      if (substr($unit, 0, 1)=="k"){
          $value=$value*1000;
      } else {
          $value=$value/1000;
      }
  }
  if ($timeval > $cumul['date']) {
    $puiss += $value;
    $cumul['total'] += $puiss;
  }
}

if (substr($unit_periph_id,strlen($unit_periph_id)-1,1)=="h"){
  $puisscum=$puiss;
} else {
//  $puissinst=$puiss;
  $puissinst=$value;
}

$year = date('Y');
$month = date('m');
$day = date('d');
$week = date('W');
$savedyear = date('Y',$cumul['date']);
$savedmonth = date('m',$cumul['date']);
$savedday = date('d',$cumul['date']);
$savedweek = date('W',$cumul['date']);

if ($savedday!=$day) {
  $cumul['jour_1']= $cumul['jour'];
  $cumul['jour']= 0;
}
else $cumul['jour'] += $puiss;

if ($savedweek!=$week) {
  $cumul['sem_1']= $cumul['sem'];
  $cumul['sem']= 0;
}
else $cumul['sem'] += $puiss;

if ($savedmonth!=$month) {
  $cumul['mois_1']= $cumul['mois'];
  $cumul['mois']= 0;
}
else $cumul['mois'] += $puiss;

if ($savedyear!=$year) {
  $cumul['annee_1']= $cumul['annee'];
  $cumul['annee']= 0;
}
else $cumul['annee'] += $puiss;
$cumul['date'] = $now;

saveVariable($mem,$cumul);

// Affichage des resultats
// Generation du XML
sdk_header('text/xml');
$xml = '<?xml version="1.0" encoding="UTF-8"?>';
$xml .= '<root>';
$xml .= '<Pinst>'.$puissinst.'</Pinst>' ;
$xml .= '<Pcumul>'.$puisscum.'</Pcumul>' ;
$xml .= '<Total>'.$cumul['total'].'</Total>' ;
$xml .= '<Pjour>'.$cumul['jour'].'</Pjour>' ;
$xml .= '<Psem>'.$cumul['sem'].'</Psem>';
$xml .= '<Pmois>'.$cumul['mois'].'</Pmois>';
$xml .= '<Pannee>'.$cumul['annee'].'</Pannee>';
$xml .= '<Pjour_1>'.$cumul['jour_1'].'</Pjour_1>';
$xml .= '<Psem_1>'.$cumul['sem_1'].'</Psem_1>';
$xml .= '<Pmois_1>'.$cumul['mois_1'].'</Pmois_1>';
$xml .= '<Pannee_1>'.$cumul['annee_1'].'</Pannee_1>';
$xml .= '<Timestamp>'.$cumul['date'].'</Timestamp>';
$xml .= '<Date>'.date('Y-m-d H:i:s',$cumul['date']).'</Date>';
$xml .='</root>';
   
echo $xml;


?>
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 871
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: [Store] Plug in Total watts

Messagepar jluc2808 » 27 Déc 2022 01:18

merci , mais je pense qu'il faudra reprendre cela demain, même si les valeurs ont changées, on doit faire l'addition des delta et pas des cumuls
le dernier test je trouve des valeurs qui sont anormales comme Pinst alors que je suis sur les cumul en Kwh

<?xml version="1.0" encoding="UTF-8"?><root><Pinst>7.52</Pinst><Pcumul></Pcumul><Total>0</Total><Pjour>0</Pjour><Psem>0</Psem><Pmois>0</Pmois><Pannee>0</Pannee><Pjour_1>0</Pjour_1><Psem_1>0</Psem_1><Pmois_1>0</Pmois_1><Pannee_1>0</Pannee_1><Timestamp>1672099875</Timestamp><Date>2022-12-27 01:11:15</Date></root>

bonne nuit à toi aussi
jluc2808
 
Messages : 502
Inscription : 30 Jan 2021

Re: [Store] Plug in Total watts

Messagepar jluc2808 » 27 Déc 2022 11:27

bonjour,

j'ai pas tout testé mais la plupart des commandes fonctionnent
j'ai ajouté en plus du raz le terme reset qui veut dire pareil
et debug pour avoir les données sauvegardées du dernier polling
et la fonction set avec jour / mois / annee / total pour mettre une valeur dans les données correspondantes

Code : Tout sélectionner
<?php




// V1.0 : Script d'addition des valeurs des consommations electrique instantannees et cumulees
// V1.1 : Simplification du code
// V1.2 : Rajout de commentaires dans les pages Web
// V1.3 : Correction des problèmes d'accents
// V1.4 : compléments OPA95 pour une gestion par période
// V1.5 : ajout de reset, set, debug, ajustement de jour/mois/année, suppression des blancs dans $periphs
//*********************************************************************************************************

$mode = getArg("mode");
$debug = getArg("debug", $mandatory = false, $default = false );      // par défaut pas de debug
    //mode=listi : on affiche une page html contenant la liste des peripheriques mesurant la puissance instantanee
    //mode=listc : on affiche une page html contenant la liste des peripheriques mesurant la puissance instantanee
    //mode différent de listi et listc: on fait la somme des valeurs des peripheriques concernes

//*********************************************************************************************************
//             Etabli la liste des peripheriques mesurant la puissance instantanee ou cumulee
//*********************************************************************************************************

if ($mode == 'listi' ||$mode == 'listc'  )  {
    $url = "http://localhost/api/get?action=periph.list&show_notes=1";
    $periph_list = sdk_json_decode(httpQuery($url,'GET')); //liste de tous les peripheriques
    $titrei = "Votre liste de périphériques mesurant la puissance instantanée :";
    $titrei=utf8_decode($titrei);
    $titrec = "Votre liste de périphériques mesurant la puissance cumulée :";
    $titrec=utf8_decode($titrec);
    $action = "Cocher les périphériques à  sélectionner, puis, faire un copier/coller de la sélection vers VAR1";
    $action=utf8_decode($action);
   
    //Affichage de la page Web de selection desperipheriques
    $html .= <<<EOT
    <html>
    <head>
        <meta charset="utf-8">
        <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
        <style>
            body {
                font-size: 14px;
                font-family: 'Roboto', sans-serif;
            }
            input[type="text"] {
                font-family: 'Roboto', sans-serif;
            }
            ul {
                list-style: symbols;
            }
        </style>
    </head>
EOT;
   
    if ($mode == 'listi'){
        $html .= "<body><p>" . $titrei ."</p>";
    } else {
        $html .= "<body><p>" . $titrec . "</p>";
    }
    $html .= "<input id=\"device_list\" type=\"text\" size=\"100\" name=\"device_list\" value=\"\" onclick=\"this.select();\" >";
    $html .= "<ul class=\"elements\">";
    foreach($periph_list["body"] as $device){
        $Lunit=strtolower($device['unit']); // on met en minuscule pour eviter les problemes de casse
        if ((($mode == 'listi') && ($Lunit == "w" || $Lunit == "kw"))|| (($mode == 'listc') && ($Lunit == "wh" || $Lunit == "kwh"))){
            $device_list .= $device['periph_id'].",";
            $devices_names .= $device['periph_id']." = ".$device['name']."<br>";
            $html .= "<li><input type=\"checkbox\" value=\"".$device['periph_id']."\"> " . $device['periph_id'] . " = " . $device['name'] . "</li>";
        }
    }
    $html .= "</ul>";
    $html .= <<<EOT
        <script type="text/javascript">
            var elems = document.querySelectorAll('.elements input[type="checkbox"]');

            [].forEach.call(elems, function(elem) {
                elem.addEventListener('change', function (e) {
                    e.preventDefault();
                    sync_input();
                }, false);
            });

            function sync_input() {
                var elements_activated = [];

                [].forEach.call(elems, function(e) {
                    if(e.checked) {
                        elements_activated.push(e.getAttribute('value'));
                    }
                });

                document.querySelector('#device_list').setAttribute("value", elements_activated.join(', '));
            }

            sync_input();
        </script>
EOT;
    $html .="<div style=\"font-weight: bold;color: red;\">" . $action . "</div>";
    $html .= "</body></html>";

    echo utf8_encode($html);
    die();
}


$periphs = getArg("periphIds", $mandatory = true, $default = '');
$periphs = str_replace(' ','',$periphs);       // enlève les blancs
$tabPeriphs = explode(",", $periphs);
$periph_id =getArg('eedomus_controller_module_id');
$periph_value = getValue($periph_id, true);
$unit_periph_id=strtolower($periph_value[unit]);
$puiss=0;

$mem = str_replace(',','-','mem'.$periphs);

foreach($tabPeriphs as $periphId) {
    $arrValue = getValue($periphId, /*$value_text*/ true);
    $unit=strtolower($arrValue[unit]);
    $value=$arrValue[value];
    if ($unit!=$unit_periph_id){
        if (substr($unit, 0, 1)=="k"){
            $value=$value*1000;
        } else {
            $value=$value/1000;
        }
    }
    $puiss=$puiss+$value;
}

$cumul = loadVariable($mem);
   $year = date('Y');
    $month = date('m');
    $day = date('d');
    $week = date('W');
    $savedyear = date('Y',$cumul['date']);
    $savedmonth = date('m',$cumul['date']);
   $savedday = date('d',$cumul['date']);
    $savedweek = date('W',$cumul['date']);
   $save_cumul_total = $cumul['total'];
   $save_cumul_day = $cumul['jour'];
   $save_cumul_week = $cumul['sem'];
   $save_cumul_month = $cumul['mois'];
   $save_cumul_year = $cumul['annee'];
   
    if (count($cumul)<2 || $mode == 'reset' || $mode == 'raz'){
      foreach (array('total','total_1','jour','jour_1','sem','sem_1','mois','mois_1','annee','annee_1') as $key)
        {$cumul[$key] = 0;}
      $cumul['date']=time();
      $save_cumul_total = 0;
      $save_cumul_day = 0;
      $save_cumul_week = 0;
      $save_cumul_month = 0;
      $save_cumul_year = 0;
    }

   

    if (substr($unit_periph_id,strlen($unit_periph_id)-1,1)=="h"){
      $puisscum=$puiss;
    } else {
      $puissinst=$puiss;
    }
    $cumul['total'] = $puiss;
   
   if ($mode == 'set'){
      $save_cumul_total = getArg("total", $mandatory = false, $default = $cumul['total']);
      $save_cumul_day = getArg("jour", $mandatory = false, $default = 0);
      $save_cumul_week = getArg("sem", $mandatory = false, $default = 0);
      $save_cumul_month = getArg("mois", $mandatory = false, $default = 0);
      $save_cumul_year = getArg("annee", $mandatory = false, $default = 0);
    }
   
    if ($savedday!=$day) {
      $cumul['jour_1']= $cumul['jour'];
     $cumul['total_1'] = $cumul['total'];
      $cumul['jour']= 0;
    }
    else $cumul['jour'] = $puiss - $save_cumul_total;

    if ($savedweek!=$week) {
      $cumul['sem_1']= $cumul['sem'];
      $cumul['sem']= 0;
    }
    else $cumul['sem'] += $cumul['jour'];

    if ($savedmonth!=$month) {
      $cumul['mois_1']= $cumul['mois'];
      $cumul['mois']= 0;
    }
    else $cumul['mois'] += $cumul['jour'];

    if ($savedyear!=$year) {
      $cumul['annee_1']= $cumul['annee'];
      $cumul['annee']= 0;
    }
    else $cumul['annee'] += $cumul['jour'];
    $cumul['date'] = time();

    saveVariable($mem,$cumul);

    // Affichage des resultats
    // Generation du XML
    sdk_header('text/xml');
    $xml = '<?xml version="1.0" encoding="UTF-8"?>';
    $xml .= '<root>';
    $xml .= '<Pinst>'.$puissinst.'</Pinst>' ;
    $xml .= '<Pcumul>'.$puisscum.'</Pcumul>' ;
   $xml .= '<Ptotal>'.$cumul['total'].'</Ptotal>' ;
    $xml .= '<Pjour>'.$cumul['jour'].'</Pjour>' ;
    $xml .= '<Psem>'.$cumul['sem'].'</Psem>';
    $xml .= '<Pmois>'.$cumul['mois'].'</Pmois>';
    $xml .= '<Pannee>'.$cumul['annee'].'</Pannee>';
if ($debug) {
   $xml .= '<SavePtotal>'.$save_cumul_total.'</SavePtotal>' ;
   $xml .= '<SavePjour>'.$save_cumul_day.'</SavePjour>' ;
    $xml .= '<SavePsem>'.$save_cumul_week.'</SavePsem>';
    $xml .= '<SavePmois>'.$save_cumul_month.'</SavePmois>';
    $xml .= '<SavePannee>'.$save_cumul_year.'</SavePannee>';
}   
   $xml .= '<Ptotal_1>'.$cumul['total_1'].'</Ptotal_1>';
    $xml .= '<Pjour_1>'.$cumul['jour_1'].'</Pjour_1>';
    $xml .= '<Psem_1>'.$cumul['sem_1'].'</Psem_1>';
    $xml .= '<Pmois_1>'.$cumul['mois_1'].'</Pmois_1>';
    $xml .= '<Pannee_1>'.$cumul['annee_1'].'</Pannee_1>';
    $xml .= '<Timestamp>'.$cumul['date'].'</Timestamp>';
    $xml .= '<Date>'.date('Y-m-d H:i:s',$cumul['date']).'</Date>';
    $xml .='</root>';
       
    echo $xml;


?>




note: désolé je ne suis pas là pendant 3 jours donc je pourrais reprendre que le 30/01 si besoin
jluc2808
 
Messages : 502
Inscription : 30 Jan 2021

Re: [Store] Plug in Total watts

Messagepar opa95 » 29 Déc 2022 09:19

Bonjour jluc2808
jluc2808 a écrit:bonjour,
j'ai pas tout testé mais la plupart des commandes fonctionnent
j'ai ajouté en plus du raz le terme reset qui veut dire pareil
et debug pour avoir les données sauvegardées du dernier polling
et la fonction set avec jour / mois / annee / total pour mettre une valeur dans les données correspondantes
note: désolé je ne suis pas là pendant 3 jours donc je pourrais reprendre que le 30/01 si besoin

J'ai repris ta proposition en rajoutant un stockage horaire et réécrivant certaines parties pour une meilleure maintenabilité.
J'ai complété les informations du mode debug.
Pour les capteurs de type compteur, c'est OK : il permettent en outre d'estimer la puissance correspondante (calcul de Pinst).
Pour le mode "set", je ne sais pas exactement ce que tu souhaites : pour heure, jour, semaine, mois et année; la logique serait qu'une modification de heure devrait réagir automatiquement sur jour, semaine..., une modification sur mois devrait réagir sur année.
Pour total, la modification ne semble pas indispensable, l'intérêt serait de créer une correction permanente liée par exemple à la remise à 0 d'un des capteurs et au désir de maintenir la continuité des valeurs. Actuellement on peut utiliser un pseudo capteur : actionneur renvoyant une valeur fixe à inclure dans la liste des capteurs, mais on pourrait envoyer directement la valeur de correction dans la liste des capteurs (par exemple sous la forme @valeur) ou dans VAR2 (&offset=[VAR2].
Pour les capteurs de type puissance, c'est en cours de test avec recalcul des consommations.
Contacte moi en mp à ton retour
Bonne année :)
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 871
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: [Store] Plug in Total watts

Messagepar domojabe » 04 Avr 2023 10:56

opa95 a écrit:Bonjour jluc2808
jluc2808 a écrit:bonjour,
j'ai pas tout testé mais la plupart des commandes fonctionnent
j'ai ajouté en plus du raz le terme reset qui veut dire pareil
et debug pour avoir les données sauvegardées du dernier polling
et la fonction set avec jour / mois / annee / total pour mettre une valeur dans les données correspondantes
note: désolé je ne suis pas là pendant 3 jours donc je pourrais reprendre que le 30/01 si besoin

J'ai repris ta proposition en rajoutant un stockage horaire et réécrivant certaines parties pour une meilleure maintenabilité.
J'ai complété les informations du mode debug.
Pour les capteurs de type compteur, c'est OK : il permettent en outre d'estimer la puissance correspondante (calcul de Pinst).
Pour le mode "set", je ne sais pas exactement ce que tu souhaites : pour heure, jour, semaine, mois et année; la logique serait qu'une modification de heure devrait réagir automatiquement sur jour, semaine..., une modification sur mois devrait réagir sur année.
Pour total, la modification ne semble pas indispensable, l'intérêt serait de créer une correction permanente liée par exemple à la remise à 0 d'un des capteurs et au désir de maintenir la continuité des valeurs. Actuellement on peut utiliser un pseudo capteur : actionneur renvoyant une valeur fixe à inclure dans la liste des capteurs, mais on pourrait envoyer directement la valeur de correction dans la liste des capteurs (par exemple sous la forme @valeur) ou dans VAR2 (&offset=[VAR2].
Pour les capteurs de type puissance, c'est en cours de test avec recalcul des consommations.
Contacte moi en mp à ton retour
Bonne année :)


Bonjour Opa95

Je découvre ce développement et je suis très intéressé par la partie cumul... Or celle-ci n'est pas distribué sur la version qui est sur le store (la 1.3).
Quand je cherche à utiliser les scripts cités dans vos derniers échanges avec Jluc j'obtiens diverses erreurs (déjà de syntaxe) et mes connaissances ne me permettent paqs de les corriger.
Penses tu publier une version stable avec les cumuls prochainement ?

Merci d'avance pour ton retour
domojabe
 
Messages : 2
Inscription : 07 Nov 2018

Re: [Store] Plug in Total watts

Messagepar opa95 » 04 Avr 2023 11:14

Bonjour domojabe
domojabe a écrit:Bonjour Opa95

Je découvre ce développement et je suis très intéressé par la partie cumul... Or celle-ci n'est pas distribué sur la version qui est sur le store (la 1.3).
Quand je cherche à utiliser les scripts cités dans vos derniers échanges avec Jluc j'obtiens diverses erreurs (déjà de syntaxe) et mes connaissances ne me permettent paqs de les corriger.
Penses tu publier une version stable avec les cumuls prochainement ?

Merci d'avance pour ton retour

Je travaille sur 3 ou 4 scripts au gré des urgences et de mes disponibilités (famille, santé), je n'ai donc pas repris ce script récemment.
J'avais modifié pas mal de choses, mais je ne sais plus où il en est.
Je vais vérifier l'état de ma version actuelle et te tenir au courant. :)
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 871
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: [Store] Plug in Total watts

Messagepar domojabe » 04 Avr 2023 12:37

Re Opa95
Et merci de ton contact rapide.
J'ai bien reçu ton msg privé... mais impossible d'y répondre !
J'ai installé le script officiel (version 1.3) qui est sur le store, mais ma recherche concerne les cumuls journaliers et j'ai vu dans tes échanges avec JLuc que vous avez avancé sur ce sujet.
J'ai essayé de prendre en compte les scripts du forum en copier / coller... mais je suis totalement novice sur ce sujet. J'obtiens même des erreurs de syntaxe.

Si tu veux m'envoyer en msg privé un email en direct j'essaierais de te répondre par mail moi aussi...
pour faciliter les échanges...
domojabe
 
Messages : 2
Inscription : 07 Nov 2018

Re: [Store] Plug in Total watts

Messagepar Zef29 » 27 Mai 2023 09:41

Bonjour,

Merci pour ce script très utile !
J'ai une 2° box dans mon sous-sol et je me suis rendu compte que les périphériques concernés ne sont pas pris en compte dans le script installé sur la 1°.
Une solution ?
Merci d'avance.
Zef29
 
Messages : 68
Inscription : 18 Jan 2015

Précédent

Retour vers Outils tiers

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 28 invité(s)