Autoriser une requête si un data-l2key présent

Bonjour à tous,

Je reviens avec une nouvelle question.
J’essaye depuis un petit temps de faire fonctionner une condition si uniquement le paramètre data-l2key=« ModuleAdresse » de 01 à 20 est utilisé dans les équipements.

<div class="form-group">
                                <label class="col-sm-3 control-label" >{{ Adresse du module }}</label>
                                <div class="col-sm-3">
                                    <select class="eqLogicAttr" data-l1key="configuration" data-l2key="ModuleAdresse" placeholder="option"/>
                                        <option value=>A configurer</option>
                                        <option value="01">{{01}}</option>
                                        <option value="02">{{02}}</option>
                                        <option value="03">{{03}}</option>
                                        <option value="04">{{04}}</option>
                                        <option value="05">{{05}}</option>
                                        <option value="06">{{06}}</option>
                                        <option value="07">{{07}}</option>
                                        <option value="08">{{08}}</option>
                                        <option value="09">{{09}}</option>
                                        <option value="0A">{{10}}</option>
                                        <option value="0B">{{11}}</option>
                                        <option value="0C">{{12}}</option>
                                        <option value="0D">{{13}}</option>
                                        <option value="0E">{{14}}</option>
                                        <option value="0F">{{15}}</option>
                                        <option value="10">{{16}}</option>
                                        <option value="11">{{17}}</option>
                                        <option value="12">{{18}}</option>
                                        <option value="13">{{19}}</option>
                                        <option value="14">{{20}}</option>
                                    </select>
                                </div>
                                <label class="col-sm-3 control-label" >{{ Type de module }}</label>
                                <div class="col-sm-3">
                                    <select class="eqLogicAttr" data-l1key="configuration" data-l2key="ModuleType" placeholder="option"/>
                                        <option value="relais">{{sorties relais}}</option>
                                        <option value="dimmable">{{sorties dimmable}}</option>

                                    </select>
                                </div>
                            </div>

Pour vous donner plus d’info, la fonction que j’éxecute, est la suivante:

public function statut_receiveMod() {
     	sleep(2);
        $changed = false;
      	$host = config::byKey (strtolower('IPAddress'),'dobiss');
        $port = config::byKey (strtolower('Port'),'dobiss');
      	$NumberId = config::byKey (strtolower('NumberId'),'dobiss');
        $AddresseModule = $this->getConfiguration('ModuleAdresse');
        $SortieModule = $this->getConfiguration('ModuleOutput');
     

        $fp1 = fsockopen($host, $port, $errno, $errstr);
        if (!$fp1) {
            echo "ERROR: $errno - $errstr<br />\n";
        } else {
          //$hex = hex2bin("af01ff".$AddresseModule."0000000100ffffffffffffaf");
          $hex1 = hex2bin("af01ff010000000100ffffffffffffaf");
          $rgb1 = hexdec($hex1);
          $hex2 = hex2bin("af01ff020000000100ffffffffffffaf");
          $rgb2 = hexdec($hex2);
        sleep(1);
        
        if ("exemple data-l2key="ModuleAdresse"" présent 01){
        fwrite($fp1, $hex1);
		$data_receive1 = bin2hex(fread($fp1, 1024));
        $data_module1=fopen("/var/www/html/plugins/dobiss/data/data_module1.txt","w+");
        if (!$data_module1){
          echo "Erreur d'ouverture du fichier";
        }
        fwrite($data_module1,$data_receive1);
        fclose($data_module1);
        }
        
        if ("exemple data-l2key="ModuleAdresse"" présent 02){
        fwrite($fp1, $hex2);
		$data_receive2 = bin2hex(fread($fp2, 1024));
        $data_module2=fopen("/var/www/html/plugins/dobiss/data/data_module2.txt","w+");
        if (!$data_module2){
          echo "Erreur d'ouverture du fichier";
        }
        fwrite($data_module2,$data_receive2);
        fclose($data_module2);
        
        }
        fclose($fp1);
			
        }   
        
    }

comment afficher uniquement les « ModuleAdresse » utilisé ?

Merci d’avance pour votre aide.

MeeThyX

Salut,

Pas certain de comprendre ta question.

Si ta fonction statut_receiveMod est une méthode de ta class eqlogic:

if ($this->getConfiguration('ModuleAdresse', 'NOT_CONFIGURED') != 'NOT_CONFIGURED') {
// une config existe
...
}

le 2ème argument de la méthode $this->getConfiguration() est la valeur par défaut à retourner si la config n’existe pas, par défaut cela retourne une chaine vide; dans mon exemple je retourne une chaine explicite à tester mais tu peux y mettre ce que tu veux tant que c’est différent d’une configuration plausible.

Ah de nouveau un grand merci Mips.

Oui je comprend comme ça.
mon erreur était que je faisait directement
if($this->getConfiguration(‹ ModuleAdresse ›) == 01){
}

Je ne mettait pas d’argument ensuite. Je vais être honnête, je ne savais pas.

Merci

Bonsoir,

J’aurais une nouvelle demande.

Suivant la ligne de requete ci-dessous, pour mon équipement.
327 test11 {« createtime »:« 2021-06-24 20:24:13 »,« ModuleAdresse »:« 01 »,« ModuleType »:« relais »,« ModuleOutput »:« 8 »,« device »:« lumiere »,« autorefresh »:"",« updatetime »:« 2021-06-24 21:58:23 »}

J’arrive en suivant la condition ci-dessous à exporter le data du module domotique.

if ($this->getConfiguration("ModuleAdresse", "01") == "01"){
          
            fwrite($fp1, $hex1);
            $data_receive1 = bin2hex(fread($fp1, 1024));
            $data_module1=fopen("/var/www/html/plugins/dobiss/data/data_module1.txt","w+b");
            if (!$data_module1){
              echo "Erreur d'ouverture du fichier 1";
            }
            fwrite($data_module1,$data_receive1);
            fclose($data_module1);
        } 

J’obtiens ceci dans mon fichier mis à jour toutes les 5 sec via le demon.
af01ff010000000100ffffffffffffafffffffffffffffffffffffffffffffff000000000000000000010000ffffffffffffffffffffffffffffffffffffffff

Les champs qui m’interressent sont 000000000000000000010000 auquel je peux déjà retrouver le statut de la lampe via le requete ci-dessous

public function statut_RefreshState() {
        $file_module1="/var/www/html/plugins/dobiss/data/data_module1.txt";
        if (file_exists($file_module1)) {
           $lines = file($file_module1);
		   $count = count($lines);
           foreach ($lines as $line_num => $line) {
             printf($line);
           }
 
        }
        $changed = false;
        if ($this->getConfiguration("ModuleAdresse", "01") == "01" && $this->getConfiguration("ModuleOutput", "8") == "8"){
        if ($line[81] != 0) {
			$changed = $this->checkAndUpdateCmd('state', 1) || $changed;
		}
        if ($line[81] == 0) {
            $changed = $this->checkAndUpdateCmd('state', 0) || $changed;
        }
        }
    }

Ce que j’aimerais, c’est pouvoir retrouver l’id (327) de l’équipement. Est ce que c’est possible?

Le but serait de mettre à jour l’info du statut concerné automatiquement.

Merci à vous pour votre retour.
MeeThyX

J’ajoute un petit peu plus d’info.

En activant la commande marche ou arrêt, ma fonction me retourne bien l’état mais pas via le demon (5s)
Si par exemple j’appuie sur un bouton mural et pas via jeedom, rien ne change.

public function execute($_options = array()) {

        $eqlogic = $this->getEqLogic(); //récupère l'éqqlogic de la commande $this
        $AddresseModule = $this->getConfiguration('ModuleAdresse');

		switch ($this->getLogicalId()) {	//vérifie le logicalid de la commande 			
			case 'on': 
				$marche = $eqlogic->allumer();
                $marche = $eqlogic->statut_RefreshState();
            	//$marche = $eqlogic->statut_receiveMod1();
            	//$marche = $eqlogic->statut_receiveMod2();

				break;
            case 'off': 
				$arret = $eqlogic->eteindre();
                $arret = $eqlogic->statut_RefreshState();
            	//$arret = $eqlogic->statut_receiveMod1();
            	//$arret = $eqlogic->statut_receiveMod2();

				break;
            	
		}
     }