Re: [Sujet officie] Remora : gestion de chauffage par fil pi
Publié : 08 janv. 2016, 07:33
Les modifs a faire sont données juste au dessus
Envoyé de mon A0001 en utilisant Tapatalk
Envoyé de mon A0001 en utilisant Tapatalk
Forum sur Jeedom
https://www.jeedom.com/forum/
Code : Tout sélectionner
08-01-2016 09:06:06 | debug | getTeleinfo
08-01-2016 09:06:08 | debug | Retour
08-01-2016 09:06:08 | debug | Retour Teleinfo _UPTIME valeur 2278
08-01-2016 09:06:11 | debug | getCEStatus
08-01-2016 09:06:11 | debug | getStatus
08-01-2016 09:06:14 | debug | Retour
08-01-2016 09:06:14 | debug | Retour Status zone 1 valeur
08-01-2016 09:06:18 | debug | Retour Status zone 2 valeur
08-01-2016 09:06:20 | debug | Retour Status zone 3 valeur
08-01-2016 09:06:20 | debug | Retour Status zone 4 valeur
08-01-2016 09:06:20 | debug | Retour Status zone 5 valeur
08-01-2016 09:06:20 | debug | Retour Status zone 6 valeur
08-01-2016 09:06:20 | debug | Retour Status zone 7 valeur
08-01-2016 09:06:24 | debug | Retour Status nivdelest valeur
Code : Tout sélectionner
$addr = config::byKey('addr', 'remora', 0);
$devAddr = 'http://' . $addr . '/relais';
$devResult = file($devAddr);
$retour = $devResult[0];
$jsonob = json_decode($devResult);
$result = $jsonob['relais'];
Code : Tout sélectionner
$addr = config::byKey('addr', 'remora', 0);
$devAddr = 'http://' . $addr . '/relais';
$devResult = file_get_contents($devAddr);
$jsonob = json_decode($devResult);
$result = $jsonob->{'relais'};
Non tu n'es pas le seul à avoir des soucis.specimen a écrit :Aucune obligation d'intégrer ces modifs. Je ne les ai faites que parce que cela ne fonctionnait pas (pour moi).
Comme a priori je suis le seul à avoir eu des soucis le mieux est de ne rien changer.
Bonsoir Lunarok. Oui, j'ai le même problème et j'essaie de faire les modifs (c'est ok pour la teleinfo mais pas pour les status) ... du moins pour le moment.lunarok a écrit :@kaktusatomik et @Albinoz vous avez aussi le problème ?
Envoyé de mon A0001 en utilisant Tapatalk
Code : Tout sélectionner
<?php
/* This file is part of Jeedom.
*
* Jeedom is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Jeedom is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Jeedom. If not, see <http://www.gnu.org/licenses/>.
*/
/* * ***************************Includes********************************* */
require_once dirname(__FILE__) . '/../../../../core/php/core.inc.php';
require_once dirname(__FILE__) . '/../../core/php/phpSpark.class.php';
class remora extends eqLogic {
/* * *************************Attributs****************************** */
/* * ***********************Methode static*************************** */
public static function cron() {
$elogic = self::byLogicalId('teleinfo', 'remora');
if ($elogic->getIsEnable() == 1) {
$elogic->getTeleinfo();
}
$elogic = self::byLogicalId('chauffeeau', 'remora');
if ($elogic->getIsEnable() == 1) {
$elogic->getCEStatus();
}
self::getStatus();
}
public function getTeleinfo() {
//https://api.spark.io/v1/devices/[DEVICE_ID]/indexhp?access_token=[ACCESS_TOKEN]
$elogic = self::byLogicalId('teleinfo', 'remora');
log::add('remora', 'debug', 'getTeleinfo ');
if (config::byKey('type', 'remora', 0) == "esp") {
$addr = config::byKey('addr', 'remora', 0);
$devAddr = 'http://' . $addr . '/tinfo';
$devResult = file($devAddr);
//$ticall = $devResult[0];
$ticall =implode($devResult);
} else {
$accessToken = config::byKey('token', 'remora', 0);
$deviceid = config::byKey('deviceid', 'remora', 0);
$spark = new phpSpark();
$spark->setDebug(false);
$spark->setDebugType("TXT");
$spark->setAccessToken($accessToken);
if($spark->getVariable($deviceid, "tinfo") == true) {
$obj = $spark->getResult();
$ticall = $obj['result'];
} else {
log::add('remora', 'error', 'Teleinfo Erreur d\'appel ' . $spark->getError()) . ' source ' . $spark->getErrorSource();
return false;
}
}
log::add('remora', 'debug', 'Retour ' . print_r($tinfo,true));
$tinfo = json_decode($ticall);
foreach($tinfo as $key => $value ) {
log::add('remora', 'debug', 'Retour Teleinfo ' . $key . ' valeur ' . $value);
$remora = self::byLogicalId('teleinfo', 'remora');
$cmdlogic = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),$key);
if (!is_object($cmdlogic)) {
$cmdlogic = new remoraCmd();
$cmdlogic->setName($key);
$cmdlogic->setEqLogic_id($remora->id);
$cmdlogic->setEqType('remora');
$cmdlogic->setLogicalId($key);
$cmdlogic->setType('info');
$cmdlogic->setSubType('numeric');
$cmdlogic->setEventOnly(1);
}
$cmdlogic->setConfiguration('value', $value);
$cmdlogic->save();
$cmdlogic->event($value);
}
return ;
}
public function getCEStatus() {
//https://api.spark.io/v1/devices/[DEVICE_ID]/indexhp?access_token=[ACCESS_TOKEN]
if (config::byKey('type', 'remora', 0) == "esp") {
$addr = config::byKey('addr', 'remora', 0);
$devAddr = 'http://' . $addr . '/relais';
$devResult = file_get_contents($devAddr);
$jsonob = json_decode($devResult);
$result = $jsonob->{'relais'};
} else {
$accessToken = config::byKey('token', 'remora', 0);
$deviceid = config::byKey('deviceid', 'remora', 0);
$spark = new phpSpark();
$spark->setDebug(false);
$spark->setDebugType("TXT");
$spark->setAccessToken($accessToken);
if($spark->getVariable($deviceid, "etatrelais") == true) {
$obj = $spark->getResult();
$result = $obj['result'];
} else {
log::add('remora', 'error', 'Teleinfo Erreur d\'appel ' . $spark->getError()) . ' source ' . $spark->getErrorSource();
return false;
}
}
log::add('remora', 'debug', 'getCEStatus ' . $result);
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($this->getId(),'status');
$remoraCmd->setConfiguration('value', $result);
$remoraCmd->save();
$remoraCmd->event($result);
return ;
}
public function getStatus() {
log::add('remora', 'debug', 'getStatus ');
if (config::byKey('type', 'remora', 0) == "esp") {
$addr = config::byKey('addr', 'remora', 0);
$devAddr = 'http://' . $addr . '/fp';
$devResult = file_get_contents($devAddr);
//$retour = $devResult[0];
$result = json_decode($devResult);
} else {
$accessToken = config::byKey('token', 'remora', 0);
$deviceid = config::byKey('deviceid', 'remora', 0);
$spark = new phpSpark();
$spark->setDebug(false);
$spark->setDebugType("TXT");
$spark->setAccessToken($accessToken);
if($spark->getVariable($deviceid, "etatfp") == true) {
$obj = $spark->getResult();
$result = $obj['result'];
} else {
log::add('remora', 'error', 'Teleinfo Erreur d\'appel ' . $spark->getError()) . ' source ' . $spark->getErrorSource();
return false;
}
}
log::add('remora', 'debug', 'Retour ' . print_r($result,true));
$izone = 1;
while ($izone <= 7) {
if (config::byKey('type', 'remora', 0) == "esp") {
$fp = "fp$izone";
$value = $result->{$fp};
} else {
$value = $result[$izone];
}
$logical = 'zone' . $izone;
log::add('remora', 'debug', 'Retour Status zone ' . $izone . ' valeur ' . $value);
$remora = self::byLogicalId($logical, 'remora');
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'status');
$remoraCmd->setConfiguration('value', $value);
$remoraCmd->save();
$remoraCmd->event($value);
$izone ++;
}
if (config::byKey('type', 'remora', 0) == "esp") {
$devAddr = 'http://' . $addr . '/delestage';
$devResult = file_get_contents($devAddr);
//$retour = $devResult[0];
$json = json_decode($retour);
$result = $json->{'niveau'};;
} else {
if($spark->getVariable($deviceid, "nivdelest") == true) {
$obj = $spark->getResult();
$result = $obj['result'];
} else {
log::add('remora', 'error', 'Teleinfo Erreur d\'appel ' . $spark->getError()) . ' source ' . $spark->getErrorSource();
return false;
}
}
log::add('remora', 'debug', 'Retour Status nivdelest valeur ' . $result);
$remora = self::byLogicalId('global', 'remora');
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'nivdelest');
$remoraCmd->setConfiguration('value', $value);
$remoraCmd->save();
$remoraCmd->event($value);
return ;
}
public function remoraCall($zone,$request) {
log::add('remora', 'debug', 'Recu commande ' . $request . ' vers ' . $zone);
//curl https://api.spark.io/v1/devices/[DEVICE_ID]/fp -d access_token=[ACCESS_TOKEN] -d params=[ORDRES]
$params = $zone.$request;
if (config::byKey('type', 'remora', 0) == "esp") {
$addr = config::byKey('addr', 'remora', 0);
$devAddr = 'http://' . $addr . '?setfp=' . $params;
$devResult = file_get_contents($devAddr);
//$retour = $devResult[0];
//$result = json_decode($retour);
} else {
$accessToken = config::byKey('token', 'remora', 0);
$deviceid = config::byKey('deviceid', 'remora', 0);
$spark = new phpSpark();
$spark->setDebug(false);
$spark->setDebugType("TXT");
$spark->setTimeout("5");
$spark->setAccessToken($accessToken);
if($spark->callFunction($deviceid, "setfp", $params) == true) {
} else {
log::add('remora', 'error', 'Erreur d\'appel ' . $spark->getError()) . ' source ' . $spark->getErrorSource();
return false;
}
}
$logical = 'zone' . $zone;
$remora = self::byLogicalId($logical, 'remora');
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'status');
$remoraCmd->setConfiguration('value', $request);
$remoraCmd->save();
$remoraCmd->event($request);
}
public function remoraRelais($request) {
log::add('remora', 'debug', 'Recu commande relais vers ' . $request);
if (config::byKey('type', 'remora', 0) == "esp") {
$addr = config::byKey('addr', 'remora', 0);
$devAddr = 'http://' . $addr . '?relais=' . $request;
$devResult = file_get_contents($devAddr);
//$retour = $devResult[0];
//$result = json_decode($retour);
} else {
$accessToken = config::byKey('token', 'remora', 0);
$deviceid = config::byKey('deviceid', 'remora', 0);
$spark = new phpSpark();
$spark->setDebug(false);
$spark->setDebugType("TXT");
$spark->setTimeout("5");
$spark->setAccessToken($accessToken);
if($spark->callFunction($deviceid, "relais", $request) == true) {
} else {
log::add('remora', 'error', 'Erreur d\'appel ' . $spark->getError()) . ' source ' . $spark->getErrorSource();
return false;
}
}
$remora = self::byLogicalId('chauffeeau', 'remora');
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'status');
$remoraCmd->setConfiguration('value', $request);
$remoraCmd->save();
$remoraCmd->event($request);
}
public static function populate() {
$izone = 1;
while ($izone <= 7) {
$logical = 'zone' . $izone;
$remora = self::byLogicalId($logical, 'remora');
if (!is_object($remora)) {
log::add('remora', 'info', 'Equipement n existe pas, création ' . $logical);
$remora = new remora();
$remora->setEqType_name('remora');
$remora->setLogicalId($logical);
$remora->setName('Zone ' . $izone);
$remora->setIsEnable(true);
$remora->save();
$remora->setLogicalId('zone' . $izone);
$remora->setConfiguration('zone', $izone);
$remora->save();
//log::add('remora', 'info', print_r($remora,true));
}
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'confort');
if (!is_object($remoraCmd)) {
$remoraCmd = new remoraCmd();
$remoraCmd->setEqLogic_id($remora->getId());
$remoraCmd->setEqType('remora');
$remoraCmd->setLogicalId('confort');
$remoraCmd->setName( 'Confort' );
$remoraCmd->setConfiguration('request', 'C');
$remoraCmd->setType('action');
$remoraCmd->setSubType('other');
$remoraCmd->save();
}
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'arret');
if (!is_object($remoraCmd)) {
$remoraCmd = new remoraCmd();
$remoraCmd->setEqLogic_id($remora->getId());
$remoraCmd->setEqType('remora');
$remoraCmd->setLogicalId('arret');
$remoraCmd->setName( 'Arrêt' );
$remoraCmd->setConfiguration('request', 'A');
$remoraCmd->setType('action');
$remoraCmd->setSubType('other');
$remoraCmd->save();
}
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'eco');
if (!is_object($remoraCmd)) {
$remoraCmd = new remoraCmd();
$remoraCmd->setEqLogic_id($remora->getId());
$remoraCmd->setEqType('remora');
$remoraCmd->setLogicalId('eco');
$remoraCmd->setName( 'Eco' );
$remoraCmd->setConfiguration('request', 'E');
$remoraCmd->setType('action');
$remoraCmd->setSubType('other');
$remoraCmd->save();
}
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'horsgel');
if (!is_object($remoraCmd)) {
$remoraCmd = new remoraCmd();
$remoraCmd->setEqLogic_id($remora->getId());
$remoraCmd->setEqType('remora');
$remoraCmd->setLogicalId('horsgel');
$remoraCmd->setName( 'Hors Gel' );
$remoraCmd->setConfiguration('request', 'H');
$remoraCmd->setType('action');
$remoraCmd->setSubType('other');
$remoraCmd->save();
}
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'status');
if (!is_object($remoraCmd)) {
$remoraCmd = new remoraCmd();
$remoraCmd->setName('Statut');
$remoraCmd->setEqLogic_id($remora->id);
$remoraCmd->setEqType('remora');
$remoraCmd->setLogicalId('status');
$remoraCmd->setType('info');
$remoraCmd->setSubType('string');
$remoraCmd->setEventOnly(1);
$remoraCmd->save();
}
//incrémentation
$izone++;
}
$logical = 'global';
$remora = self::byLogicalId($logical, 'remora');
if (!is_object($remora)) {
log::add('remora', 'info', 'Equipement n existe pas, création ' . $logical);
$remora = new remora();
$remora->setEqType_name('remora');
$remora->setLogicalId($logical);
$remora->setName('Global');
$remora->setConfiguration('zone', '0');
$remora->setIsEnable(true);
$remora->save();
}
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'confort');
if (!is_object($remoraCmd)) {
$remoraCmd = new remoraCmd();
$remoraCmd->setEqLogic_id($remora->getId());
$remoraCmd->setEqType('remora');
$remoraCmd->setLogicalId('confort');
$remoraCmd->setName( 'Confort' );
$remoraCmd->setConfiguration('request', 'C');
$remoraCmd->setType('action');
$remoraCmd->setSubType('other');
$remoraCmd->save();
}
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'arret');
if (!is_object($remoraCmd)) {
$remoraCmd = new remoraCmd();
$remoraCmd->setEqLogic_id($remora->getId());
$remoraCmd->setEqType('remora');
$remoraCmd->setLogicalId('arret');
$remoraCmd->setName( 'Arrêt' );
$remoraCmd->setConfiguration('request', 'A');
$remoraCmd->setType('action');
$remoraCmd->setSubType('other');
$remoraCmd->save();
}
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'eco');
if (!is_object($remoraCmd)) {
$remoraCmd = new remoraCmd();
$remoraCmd->setEqLogic_id($remora->getId());
$remoraCmd->setEqType('remora');
$remoraCmd->setLogicalId('eco');
$remoraCmd->setName( 'Eco' );
$remoraCmd->setConfiguration('request', 'E');
$remoraCmd->setType('action');
$remoraCmd->setSubType('other');
$remoraCmd->save();
}
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'horsgel');
if (!is_object($remoraCmd)) {
$remoraCmd = new remoraCmd();
$remoraCmd->setEqLogic_id($remora->getId());
$remoraCmd->setEqType('remora');
$remoraCmd->setLogicalId('horsgel');
$remoraCmd->setName( 'Hors Gel' );
$remoraCmd->setConfiguration('request', 'H');
$remoraCmd->setType('action');
$remoraCmd->setSubType('other');
$remoraCmd->save();
}
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'nivdelest');
if (!is_object($remoraCmd)) {
$remoraCmd = new remoraCmd();
$remoraCmd->setName('Niveau Délestage');
$remoraCmd->setEqLogic_id($remora->id);
$remoraCmd->setEqType('remora');
$remoraCmd->setLogicalId('nivdelest');
$remoraCmd->setType('info');
$remoraCmd->setSubType('string');
$remoraCmd->setEventOnly(1);
$remoraCmd->save();
}
$logical = 'teleinfo';
$remora = self::byLogicalId($logical, 'remora');
if (!is_object($remora)) {
log::add('remora', 'info', 'Equipement n existe pas, création ' . $logical);
$remora = new remora();
$remora->setEqType_name('remora');
$remora->setLogicalId($logical);
$remora->setName('Téléinfo');
$remora->setIsEnable(true);
$remora->save();
}
$logical = 'chauffeeau';
$remora = self::byLogicalId($logical, 'remora');
if (!is_object($remora)) {
log::add('remora', 'info', 'Equipement n existe pas, création ' . $logical);
$remora = new remora();
$remora->setEqType_name('remora');
$remora->setLogicalId($logical);
$remora->setName('Chauffe-Eau');
$remora->setConfiguration('chauffeeau', '1');
$remora->setIsEnable(true);
$remora->save();
}
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'on');
if (!is_object($remoraCmd)) {
$remoraCmd = new remoraCmd();
$remoraCmd->setEqLogic_id($remora->getId());
$remoraCmd->setEqType('remora');
$remoraCmd->setLogicalId('on');
$remoraCmd->setName( 'Allumer' );
$remoraCmd->setConfiguration('request', '1');
$remoraCmd->setType('action');
$remoraCmd->setSubType('other');
$remoraCmd->save();
}
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'off');
if (!is_object($remoraCmd)) {
$remoraCmd = new remoraCmd();
$remoraCmd->setEqLogic_id($remora->getId());
$remoraCmd->setEqType('remora');
$remoraCmd->setLogicalId('off');
$remoraCmd->setName( 'Eteindre' );
$remoraCmd->setConfiguration('request', '0');
$remoraCmd->setType('action');
$remoraCmd->setSubType('other');
$remoraCmd->save();
}
$remoraCmd = remoraCmd::byEqLogicIdAndLogicalId($remora->getId(),'status');
if (!is_object($remoraCmd)) {
$remoraCmd = new remoraCmd();
$remoraCmd->setName('Statut');
$remoraCmd->setEqLogic_id($remora->id);
$remoraCmd->setEqType('remora');
$remoraCmd->setLogicalId('status');
$remoraCmd->setType('info');
$remoraCmd->setSubType('string');
$remoraCmd->setEventOnly(1);
$remoraCmd->save();
}
return true;
}
}
class remoraCmd extends cmd {
/* * *************************Attributs****************************** */
/* * ***********************Methode static*************************** */
/* * *********************Methode d'instance************************* */
public function execute($_options = null) {
switch ($this->getType()) {
case 'info' :
return $this->getConfiguration('value');
break;
case 'action' :
$request = $this->getConfiguration('request');
switch ($this->getSubType()) {
case 'slider':
$request = str_replace('#slider#', $value, $request);
break;
case 'color':
$request = str_replace('#color#', $_options['color'], $request);
break;
case 'message':
if ($_options != null) {
$replace = array('#title#', '#message#');
$replaceBy = array($_options['title'], $_options['message']);
if ( $_options['title'] == '') {
throw new Exception(__('Le sujet ne peut être vide', __FILE__));
}
$request = str_replace($replace, $replaceBy, $request);
}
else
$request = 1;
break;
default : $request == null ? 1 : $request;
}
$eqLogic = $this->getEqLogic();
$LogicalID = $this->getLogicalId();
if ($eqLogic->getConfiguration('chauffeeau') == 1) {
remora::remoraRelais($request);
} else {
$zone = $eqLogic->getConfiguration('zone');
if ($zone == '0') {
$izone = 1;
while ($izone <= 7) {
remora::remoraCall($izone,$request);
$izone ++;
}
} else {
remora::remoraCall($zone,$request);
}
}
return $request;
}
return true;
}
}
?>
Code : Tout sélectionner
$devResult = file($devAddr);
$retour = implode($devResult);
$result = json_decode($retour, true);
Effectivement cette correction fonctionne. Il faut modifier également la ligneAlbinoz a écrit :Ok , donc c'est bon pour moi. Je récupère les status (fp), le délestage et le statut du relais
En fait, j'ai appliqué la première correction partout :Le paramètre "true" de json_decode permet d'avoir le tableau associatif, et ça change tout (en tout cas chez moi).Code : Tout sélectionner
$devResult = file($devAddr); $retour = implode($devResult); $result = json_decode($retour, true);
Pour la fonction statut, au lieu de la boucle while, j'ai fais une boucle foreach sur le modèle de la fonction teleinfo, et c'est nicket.
Du coup, on doit même pouvoir faire une fonction getDatas ($adresseIpRemora, $page) qui nous retournera le tableau associatif qui va bien.
Par exemple, getDatas(IP, "tinfo"), etc ...
Après pour le délestage, nous avons en fait 2 variables : niveau et zone. Hors le plugin ne prend en compte que le niveau dans "global".
Il faudrait rajouter la variable "zone".
Code : Tout sélectionner
$fp = 'fp'.$izone+1;
Code : Tout sélectionner
$fp = 'fp'.($izone+1);
Code : Tout sélectionner
2016/02/09 14:53:23 [error] 558#0: *82294 FastCGI sent in stderr: "PHP message: PHP Parse error: syntax error, unexpected '}' in /usr/share/nginx/www/jeedom/plugins/remora/core/class/remora.class.php on line 51" while reading response header from upstream, client: ***, server: , request: "GET /index.php?v=d&m=remora&p=remora HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "***", referrer: "http://88.125.136.1/index.php?v=d&p=administration"
Code : Tout sélectionner
if (config::byKey('type', 'remora', 0) == "esp") {
$addr = config::byKey('addr', 'remora', 0);
$devAddr = 'http://' . $addr . '/tinfo';
$devResult = file($devAddr);
$ticall =implode($devResult);
} else {