Je pense que c’est dans le fichier nommé relaynet.class.php, je vois bien une section où il y a :
// on va changer l’état d’un relais
mais après pour décrypter !!!
<?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';
class relaynet extends eqLogic {
public static function cron() {
foreach (eqLogic::byType('relaynet',true) as $relaynet) {
log::add('relaynet', 'debug', 'pull cron');
$relaynet->getInformations();
}
}
public function preUpdate() {
if ($this->getConfiguration('addr') == '') {
throw new Exception(__('L\'adresse ne peut être vide',__FILE__));
}
if ($this->getConfiguration('port') == '') {
throw new Exception(__('Le porrt ne peut être vide',__FILE__));
}
}
public function preSave() {
$this->setLogicalId($this->getConfiguration('addr'));
}
public function postSave() {
$number = 1;
while ($number <= 8) {
$com = 1;
while ($com <= 5) {
switch ($com) {
case '1' :
$type = 'status';
$name = 'Relais ' . $number;
$request = '0';
$generictype = 'ENERGY_STATE';
break;
case '2' :
$type = 'relais';
$request = '0';
$name = 'Relais ' . $number . ' Off';
$generictype = 'ENERGY_OFF';
break;
case '3' :
$type = 'relais';
$request = '1';
$name = 'Relais ' . $number . ' On';
$generictype = 'ENERGY_ON';
break;
case '4' :
$type = 'input';
$request = '0';
$name = 'Input ' . $number;
break;
case '5' :
$type = 'relais';
$request = 'P';
$name = 'Impulsion ' . $number;
break;
}
$cmdId = $type.$number.$request;
$cmdlogic = relaynetCmd::byEqLogicIdAndLogicalId($this->getId(),$cmdId);
if (!is_object($cmdlogic)) {
log::add('relaynet', 'debug', 'Information non existante, création');
$newrelaynet = new relaynetCmd();
$newrelaynet->setEqLogic_id($this->getId());
$newrelaynet->setEqType('relaynet');
if ($type == 'relais') {
$newrelaynet->setType('action');
$newrelaynet->setSubType('other');
} else {
$newrelaynet->setType('info');
$newrelaynet->setSubType('binary');
}
$newrelaynet->setIsVisible(1);
$newrelaynet->setIsHistorized(0);
$newrelaynet->setLogicalId($cmdId);
$newrelaynet->setName( $name );
$newrelaynet->setConfiguration('name', $name);
$newrelaynet->setConfiguration('type', $type);
$newrelaynet->setConfiguration('number', $number);
$newrelaynet->setConfiguration('request', $request);
$newrelaynet->setConfiguration('value', $request);
if ($com <= 3) {
$newrelaynet->setDisplay('generic_type',$generictype);
}
$newrelaynet->save();
}
$com++;
}
$number++;
}
$cmdlogic = relaynetCmd::byEqLogicIdAndLogicalId($this->getId(),'refresh');
if (!is_object($cmdlogic)) {
log::add('relaynet', 'debug', 'Rafraichir non existant, création');
$newrelaynet = new relaynetCmd();
$newrelaynet->setEqLogic_id($this->getId());
$newrelaynet->setEqType('relaynet');
$newrelaynet->setType('action');
$newrelaynet->setSubType('other');
$newrelaynet->setIsVisible(1);
$newrelaynet->setIsHistorized(0);
$newrelaynet->setLogicalId('refresh');
$newrelaynet->setName('Rafraichir');
$newrelaynet->setConfiguration('request', 'refresh');
$newrelaynet->save();
}
$this->getInformations();
}
/*public function alphatobin($etat){
if(strpos($etat,'on') !== false){
return "1";
}elseif(strpos($etat,'off') !== false){
return "0";
}elseif(strpos($etat,'L') !== false){
return "0";
}elseif(strpos($etat,'H') !== false){
return "1";
}else{
return $etat;
}
}*/
public function interactRelaynet($addr, $type, $number, $request) {
$elogic = self::byLogicalId($addr, 'relaynet');
$cmdId = $type.$number.$request;
$cmdlogic = relaynetCmd::byEqLogicIdAndLogicalId($elogic->getId(),$cmdId);
$port = $elogic->getConfiguration('port');
$port = preg_replace('/\s/','',$port);
log::add('relaynet', 'debug', 'interact ' . $type . $number . ' sur ' . $addr . ':' . $port);
$socket_client = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$err = socket_connect($socket_client, $addr, $port);
if ($err === FALSE) {
log::add('relaynet', 'error', 'Erreur de connexion ' . $err);
}
if ($type == 'relais'){ // on va changer l'état d'un relais
if ($request == '1'){
$msg = 'L'.$number.'.\r\n.';
}
if ($request == '0'){
$msg = 'D'.$number.'.\r\n.';
}
if ($request == 'P'){
$msg = 'P'.$number.'.\r\n.';
}
$taille = strlen($msg);
log::add('relaynet', 'debug', 'interact msg ' . $msg . ' taille ' . $taille);
if(socket_send($socket_client, $msg, $taille, 0x100) !== FALSE) {
if($request != 'P') {
$infoId = 'status'.$number.'0';
$infologic = relaynetCmd::byEqLogicIdAndLogicalId($elogic->getId(),$infoId);
$infologic->setConfiguration('value', $request);
$infologic->save();
$infologic->event($request);
}
} else {
log::add('relaynet', 'error', 'Erreur lors de l\'envoi de paquet');
}
} else { // on va chercher une info
if ($type == 'status') { // on requête l'état d'un relais
$msg = 'R'.$number;
} else { // on requête l'état d'un input
$msg = 'I'.$number;
}
$taille = strlen($msg);
if(socket_send($socket_client, $msg, $taille, 0x100) !== FALSE){
$string = socket_read($socket_client,11100);
if(strpos($string,'on') !== false){
$value = "1";
}elseif(strpos($string,'off') !== false){
$value = "0";
}elseif(strpos($string,'L') !== false){
$value = "0";
}elseif(strpos($string,'H') !== false){
$value = "1";
}else{
$value = $string;
}
$cmdlogic->setConfiguration('value', $value);
$cmdlogic->save();
$cmdlogic->event($value);
} else {
log::add('relaynet', 'error', 'Erreur lors de l\'envoi de paquet');
}
}
socket_close($socket_client);
}
public function getInformations() {
$addr = $this->getConfiguration('addr');
log::add('relaynet', 'info', 'getInformations ' . $addr);
foreach ($this->getCmd() as $cmd) {
log::add('relaynet', 'debug', 'Vérification ' . $cmd->getName());
if($cmd->getConfiguration('type') === "input" || $cmd->getConfiguration('type') === "status"){
$type = $cmd->getConfiguration('type');
$number = $cmd->getConfiguration('number');
relaynet::interactRelaynet($addr,$type,$number,'0');
log::add('relaynet', 'debug', 'Vérification ' . $type . $number . ' sur ' . $addr);
}
}
return ;
}
}
class relaynetCmd extends cmd {
public function execute($_options = null) {
switch ($this->getType()) {
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 peuvent ê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 ($this->getLogicalId() != 'refresh') {
relaynet::interactRelaynet(
$eqLogic->getLogicalId() ,
$this->getConfiguration('type') ,
$this->getConfiguration('number'),
$request );
}
}
$eqLogic->getInformations();
}
}
?>