Besoin renseignement création plugin

Bonsoir à tous,
Je suis actuellement en train d’essayer de créer un plugin pour ma domotique mais j’avoue que ce n’est pas si simple malgré le magnifique tuto de « ZygOm4t1k » auquel je remerçie.

Je bloque sur quelque point.
1°) J’aimerais appeler une fonction si un bouton de mon équipement est activé.

Pour l’instant je commande mes éclairages, prises via le plugin script en python avec le code suivant.

# coding: utf-8

import socket
import time

hote = "10.254.108.3"
port = 1001
DATA1 = bytearray.fromhex('ed4331ffffffffffffffffffffffafaf010801')
DATA2 = bytearray.fromhex('af01ff010000000100ffffffffffffaf')

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.settimeout(5)   # 5 seconds
try:
	socket.connect((hote, port))

	socket.send(DATA1)
	socket.send(DATA2)

	print '0'
	data = socket.recv(1024)

except socket.error, exc:
    print "Caught exception socket.error : %s" % exc

socket.close()

mais fonctionne aussi comme ceci en php

<?php
/* Allumer */
$host = "tcp://10.254.108.3";
$port = 1001;
$fp = fsockopen($host, $port, $errno, $errstr);
if (!$fp) {
    echo "ERROR: $errno - $errstr<br />\n";
} else {
  $hex = hex2bin("ed4331ffffffffffffffffffffffafaf010801");
  $rgb = hexdec($hex);

fwrite($fp, $hex);

fclose($fp);
}
?>

Je suppose que la fonction a appeler se trouvera dans le fichier class.php ?

2°) si je reprend ma ligne data $hex = hex2bin(« ed4331ffffffffffffffffffffffafaf010801 »);
010801 => module 1 sortie 8 allumé
j’aimerais utiliser les paramètres que j’ai renseigné dans configuration plugin (ip, port)
dans l’équipement (numéro du module et sortie)



Pourriez-vous me mettre sur la voie?

Je vous remercie d’avance pour votre aide.
MeeThyX

Bonjour,

Qu’entends tu par un bouton ? Une commande tu veux dire ?

Pour récupérer une configuration dans le plugin :
config::byKey('tonnomdeconfiguration', 'tonpluginid')

Pour récupérer une configuration d’un équipement dans ta class eqLogic :
$this->getConfiguration(‘tonnomdeconfiguration’)

Ah super merci à toi.
Oui je voulais dire une commande.

Je les ai ajouté dans le fichier class.php

public function postSave() {
            
        $on = $this->getCmd(null, 'on');
		if (!is_object($on)) {
			$on = new dobissCmd();
			$on->setName(__('On', __FILE__));
		}
		$on->setEqLogic_id($this->getId());
		$on->setLogicalId('on');
		$on->setType('action');
		$on->setSubType('other');
		$on->save();
      
      
        $off = $this->getCmd(null, 'off');
		if (!is_object($off)) {
			$off = new dobissCmd();
			$off->setName(__('off', __FILE__));
		}
		$off->setEqLogic_id($this->getId());
		$off->setLogicalId('off');
		$off->setType('action');
		$off->setSubType('other');
		$off->save();
      
      
        $state = $this->getCmd(null, 'state');
		if (!is_object($state)) {
			$state = new dobissCmd();
			$state->setName(__('State', __FILE__));
		}
		$state->setLogicalId('state');
		$state->setEqLogic_id($this->getId());
		$state->setType('info');
		$state->setSubType('string');
		$state->save();

    }

En espérant que ce que j’ai fait est correct.
Je serais attentif à vos remarques. :grin:

Je pensais faire comme ceci

public function allumer() {
        le script php modifié avec les lien venant des config
    }
  
  	public function eteindre() {
		idem pour éteindre
		
    }

par contre je ne sais pas ou je pourrais appeler la fonction si on execute la commande « on ».
Peut-être avec la fonction execute?

C’est dans la class cmd

Regarde la : https://github.com/mguyard/Jeedom-Diagral_eOne/blob/55bbf8389ef936177bcb9e11c3e7b6bf16680c6e/core/class/Diagral_eOne.class.php#L1831

merci mguyard :smirk:

Désolé d’abuser de ton temps mais je reçois toujours un message « 500 internal error »

J’essaie de comprendre la plupart du temps par moi-même mais je t’avoue que je galère un peu.

Merci

Pourtant je crée simplement deux actions et une info et suite aux actions j’aimerais démarrer mon php pour commander la lampe.

Tu trouveras la raison de ton erreur 500 dans le log http de Jeedom

Voici ce que je trouve dans le log http. Pourrais-tu m’expliquer?

thrown in /var/www/html/core/class/cmd.class.php on line 2539, referer: https://00000000.00.000000.0000/index.php?v=d&m=dobiss&p=dobiss
[Sat Jun 05 16:25:11.335090 2021] [php7:error] [pid 81659] [client 10.12.0.1:41362] PHP Fatal error:  Uncaught Error: Call to a member function eteindre() on null in /var/www/html/plugins/dobiss/core/class/dobiss.class.php:213
Stack trace:
#0 /var/www/html/core/class/cmd.class.php(1104): dobissCmd->execute(NULL)
#1 /var/www/html/core/ajax/cmd.ajax.php(88): cmd->execCmd(NULL)
#2 {main}

Je fait un truc contraire mais je ne voit pas ou est le problème

Merci

Tu affectes ta variable nommée $eqlogic mais tu essaies d’exécuter la fonction éteindre ou allumer sur une variable que tu nommes $eqLogic.
Php est sensible à la casse : $eqlogic n’est pas égal à $eqLogic !

A+
Bernard

1 « J'aime »

Merci Bernard,

Je pensais qu’il fallait cette variable à chaque demande de fonction.
Je n’avais pas compris le sens de $eqLogic
Je vais modifier cela.

Voilà mes commandes fonctionnent parfaitement. Merci

Ici je rencontre un petit problème, je n’arrive pas à faire mémoriser les paramètres spécifiques.

J’ai pourtant un petit tuto mais je loupe un truc.

	<legend><i class="fas fa-cogs"></i> {{Paramètres spécifiques}}</legend>
                            <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="type" placeholder="option"/>
                                        <option value="00">{{00}}</option>
                                        <option value="01">{{01}}</option>
                                        <option value="02">{{02}}</option>
                                    </select>
                                </div>
                            </div>
                                <div class="form-group">
                                <label class="col-sm-3 control-label" >{{ Sortie du module }}</label>
                                <div class="col-sm-3">
                                    <select class="eqLogicAttr" data-l1key="configuration" data-l2key="type" placeholder="option"/>
                                      <option value="00">{{00}}</option>
                                      <option value="01">{{01}}</option>
                                      <option value="02">{{02}}</option>
                                    </select>
                                </div>
                            </div>

Hello,

Tu dois pas mettre le même data-l2key car c’est le nom de la configuration en DB.

Bonjour,
Voilà super ca fonctionne.

Je vais maintenant attribuer les paramètres dans la config + addresse modules et sorties et faire en sorte que tout cela modifie automatiquement mon script via les commande que tu m’as donné
Pour récupérer une configuration dans le plugin :
config::byKey('tonnomdeconfiguration', 'tonpluginid')

Pour récupérer une configuration d’un équipement dans ta class eqLogic :
$this->getConfiguration(‘tonnomdeconfiguration’)

Je vais m’inspirer de ton projet pour le réaliser.

Merci à vous pour votre aide.

J’ai pu attribuer les paramètres config et eqLogic et tout fonctionnent correctement.

Je vais maintenant rajouter le statut reel et la possibilité de choisir un icon en fonction de la sortie utilisée (eclairage, prise, extracteur, etc…)
En fonction de l’icon, je modifierais directement les nom de commandes et rajoute si module dimmable.

J’ai compris le principe et je vous remercie.
Je reviendrais si de nouveau besoin d’info.

A + :blush:

Bon voilà j’ai une petite question.
Je viens de rajouter un script qui permet de retourner la valeur de la sortie du module domotique.
Cette valeur est 1 ou 0 (variable $data_receive) que j’aimerais assigner à mon input state ($input).
Comment puis-je faire?

J’ai trouvé entre temps

comment je pourrais récupérer la valeur de mon input data-l2key=« ModuleType » pour l’utiliser sur la variable $TypeModule = « relais »; dans le php en dessous?

          <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=>A configurer</option>
                                        <option value="relais">{{relais}}</option>
                                        <option value="dimmable">{{dimmable}}</option>

                                    </select>
                                </div>
                            </div>
                            <div class="form-group">
                                <label class="col-sm-3 control-label" >{{ Sortie du module }}</label>
                                <div class="col-sm-3">
                                    <select class="eqLogicAttr" data-l1key="configuration" data-l2key="ModuleOutput" placeholder="option"/>
                                            <?php
                                      		$TypeModule = "relais";
											$MaxSortieModuleRelais = 12;
											$MaxSortieModuleDimmable = 4;
                                            // $ta_variable c'est ta fameuse variable avec ton nombre de fichiers
											if ($TypeModule == "relais"){
                                              for($i = 1; $i <= $MaxSortieModuleRelais; $i++)
                                              {
                                                  echo '<option value="'.dechex($i +(-1)).'">'.$i.'</option>';
                                              }}
                                            if ($TypeModule == "dimmable"){
                                              for($i = 1; $i <= $MaxSortieModuleDimmable; $i++)
                                              {
                                                  echo '<option value="'.dechex($i +(-1)).'">'.$i.'</option>';
                                              } 
                                            }
                                            ?>
                                    </select>
                                </div>
                            </div>

j’ai essayé $_post ou $Type = $this->getConfiguration(‹ ModuleType ›); mais cela ne fonctionne pas.

merci

j’ai trouvé
$TypeModule = $eqLogic->getConfiguration(‹ ModuleType ›);