Gestion des Groupes et Binding avec Deconz

Ok merci, je testerai sur une installation propre.

Salut je suis super intéressée également par les groupes comment écrivez-vous votre script?

Un exemple avec curl dans un scénario avec un bloc CODE:

$url_Deconz = 'http://192.168.1.xxx';
$cle_API_deCONZ = 'ABCDEFGH';
$groupe = 5;
$url = $url_Deconz."/api/".$cle_API_deCONZ."/groups/".$groupe."/action";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array(
        'on' => true,
        'bri' => 255,
        'transitiontime' => 0
    )));
curl_exec($ch);
curl_close($ch);

J’ai modestement essayé de modifier le plugin pour la remontée des groupes.

C’est loin d’être complet et certainement pas très propre mais je peux au moins piloter les groupes.
(suppression, onglet noeud etc. non testé)

Les retours d’états des groupes sont limités, on a que l’info (any_on et all_on). https://github.com/dresden-elektronik/deconz-rest-plugin/issues/2638, il faudrait certainement s’inspirer de ce que fait Phoscon pour récupérer « bri » et « ct ».

Ne sachant pas si il est permis de partager ces modif sur le forum, je ne publie pas le fichier diff mais je l’ai sous le coude :slight_smile:

Bonjour,
Tu peux l’envoyer dans un ticket et je regarde a mon retour de vacance

Tu as envoyé ca en public faut faire une demande de support, par contre envoi tout le code ca sera plus simple je pense.

Oui j’ai vu ça trop tard, je regarde comment on fait et je t’envoie tout ça.

Je ne vois pas comment envoyer des fichiers via la demande de support (ni sur jeedom ni sur le market).
Un petit coup de pouce pour m’aiguiller ?

Tu peux pas c’est quand je vais repondre

C’est fait merci

C’est bon j’ai réussi : les curseurs des groupes reflètent la moyenne des curseurs de chaque ampoule de ce même groupe.

Il faudrait peut être améliorer l’algorithme car en cas de changement sur une ampoule d’un groupe, le widget de ce groupe met environ 2 secondes pour mettre à jour les curseurs bri ou ct.
Mais c’est tout à fait utilisable.

Bonjour,

Je suis intéressé pour ce développement des groupes avec les lampes sous Deconz.
Pouvez-vous me dire si cela sera intégré ?

Merci.

Bonjour.

Je ne partage pas la finalité de cette moyenne.
Exemple deux ampoules dimmables dans un groupe. Lorsque les deux sont au même niveau d’éclairement alors OK. Mais si on en éteint une et que l’on laisse l’autre à 100% on affiche 50 % au niveau du groupe ?
Pour ma part ce qui s’affiche doit être au pire le reflet de la réalité (je préfère les retours directs bien sur) sinon c’est générateur de complexité.
domotique = aide pour rendre transparent à l’utilisateur des fonctionnements qui pourraient être compliqués et pas l’inverse.

Hello,
Je tente de faire la même chose avec les scènes et cela ne marche pas…

$url_Deconz = 'http://127.0.0.1:8484';
$cle_API_deCONZ = 'XXXXX';
$group = 3; // groupe
$light = 3; // Chambre
$scene = 4; // Levée de soleil
$url = $url_Deconz."/api/".$cle_API_deCONZ."/groups/".$light."/scenes/".$scene;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array(

  'name' => Levée de soleil

      
    )));
curl_exec($ch);
curl_close($ch);

De plus, je suis étonné qu’on ne puisse pas appliquer une scène à une lumière plutôt qu’à un groupe.

Vous avez des idées ?
Merci par avance.

La j’ai pas le niveau pour répondre, mais pourquoi tu gères pas ça par jeedom ? c’est pas plus simple pour toi ?

J’ai avancé sur le sujet !!!

Avant de proposer les modifications @Loic , je propose à ceux que ça intéresse (et qui ont acheté le plugin) de leur envoyer le plugin modifié en message privé pour le tester. Des amateurs ?

Liste des modifications :

  • Ajout de la synchro des groupes (il faut les créer avec Phoscon)

  • Ajout d’une case « Désactiver synchro » dans la configuration de la gateway :
    Si cochée, vous devrez faire une synchro manuelle lors de l’inclusion ou si des modifications sont faites dans Phoscon. L’avantage de la désactivation est une diminution de la charge système lorsque beaucoup de lumières sont présentes.

  • Légère modification du code qui gère la recherche d’images :
    En ajoutant le « modelid » dans le nom du fichier, il est directement associé à l’équipement correspondant lors de sa création. Par exemple : Color temperature light&LTG002_Spot Philips Hue GU10 White Ambiance.png

image

1 « J'aime »

Moi je suis complètement pour essayer car pour le moment je passe par le script et c’est chiant a mettre en place

Je viens de t’envoyer le lien en MP :wink:

1 « J'aime »

Pour info j’utilise toujours en complément un script.

Celui-ci me permet d’interfacer mes interrupteurs physiques (en filaire avec un IPX800) et DeConz avec une réaction instantanée.
J’aimerais à terme le sortir de Jeedom et le mettre sur un RPI dédié à mon éclairage, car aujourd’hui si Jeedom tombe, je sors les bougies…

Ce script me permet, en faisant un appui long sur le poussoir, de faire varier l’intensité et la température.

Le script dans un bloc code :

Dépliez moi
const GROUPE = array (
	"Entree"		=> array (
      "numero"			=> 2,
      "declancheur"		=> array("#[Maison][IPX800V4][Interrupteur Chambre Nord Droit]#", "#[Maison][IPX800V4][Interrupteur Entrée Droit]#","#[Maison][IPX800V4][I25]#"),
      "etat"   			=> "#[Aucun][Spot Entrée 1][Etat 0b]#",
      "en_cours" 		=> "Groupe_entree_Lance"
      ),
  	"Table"		=> array (
      "numero"			=> 11,
      "declancheur"		=> array("#[Maison][IPX800V4][Interrupteur Baie Gauche]#"),
      "etat"   			=> "#[Aucun][Spot Table 1][Etat 0b]#",
      "en_cours" 		=> "Groupe_table_Lance"
      ),
	"Tv"				=> array (
      "numero"			=> 5,
      "declancheur"		=> array("#[Maison][IPX800V4][I13]#"),
      "etat"   			=> "#[Aucun][Spot Tv 1][Etat 0b]#",
      "en_cours" 		=> "Groupe_tv_Lance"
      ),
  	"Chambre Ouest"		=> array (
      "numero"			=> 28,
      "declancheur"		=> array("#[Maison][IPX800V4][I21]#"),
      "etat"   			=> "#[Aucun][Lumière Chambre Ouest][Etat 0b]#",
      "en_cours" 		=> "Groupe_Chambre_Ouest_Lance"
      ),
    "Chambre Est"		=> array (
      "numero"			=> 14,
      "declancheur"		=> array("#[Maison][IPX800V4][I23]#"),
      "etat"   			=> "#[Aucun][Lumière Chambre Est][Etat 0b]#",
      "en_cours" 		=> "Groupe_Chambre_Est_Lance"
      ),
  	"Cuisine"			=> array (
      "numero"			=> 10,
      "declancheur"		=> array("#[Maison][IPX800V4][I16]#"),
      "etat"   			=> "#[Aucun][Spot Cuisine 1][Etat 0b]#",
      "en_cours" 		=> "Groupe_cuisine_Lance"
      ),
  	"Salle De Bain"		=> array (
      "numero"			=> 12,
      "declancheur"		=> array("#[Maison][IPX800V4][I18]#"),
      "etat"   			=> "#[Aucun][Spot SDB 1][Etat 0b]#",
      "en_cours" 		=> "Groupe_salle_de_bain_Lance"
      ),
  	"Chambre Nord"		=> array (
      "numero"			=> 13,
      "declancheur"		=> array("#[Maison][IPX800V4][Interrupteur Chambre Nord Droit]#"),
      "etat"   			=> "[Aucun][Lumière Chambre Nord][Etat 0b]",
      "en_cours" 		=> "Groupe_chambre_nord_Lance"
      ),
  	"Salon"		=> array (
      "numero"			=> 6,
      "declancheur"		=> array("#[Maison][IPX800V4][I15]#"),
      "etat"   			=> "#[Aucun][Spot Tv 1][Etat 0b]#",
      "en_cours" 		=> "Groupe_salon_Lance"
      ),
  	"Chambre Parents"	=> array (
      "numero"			=> 16,
      "declancheur"		=> array("#[Maison][IPX800V4][I29]#"),
      "etat"   			=> "#[Aucun][Lumière Chambre Parents 1][Etat 0b]#",
      "en_cours" 		=> "Groupe_chambre_parents_Lance"
      ),
  	"Couloir"		=> array (
      "numero"			=> 18,
      "declancheur"		=> array("#[Maison][IPX800V4][I17]#", "#[Maison][IPX800V4][I22]#", "#[Maison][IPX800V4][I27]#"),
      "etat"   			=> "#[Aucun][Spot Couloir 1][Etat 0b]#",
      "en_cours" 		=> "Groupe_couloir_Lance"
      ),
  	"Salle D'Eau"	=> array (
      "numero"			=> 17,
      "declancheur"		=> array("#[Maison][IPX800V4][I31]#"),
      "etat"   			=> "#[Aucun][Spot SDO 1][Etat 0b]#",
      "en_cours" 		=> "Groupe_salle_d_eau_Lance"
      ),
);

$trigger = $scenario->getRealTrigger();
foreach(GROUPE as $key=>$value) {
  if (in_array($trigger, GROUPE[$key]["declancheur"]) == 1)
  {
    $groupe = GROUPE[$key]["numero"];
    $Scenario_Lance = GROUPE[$key]["en_cours"];
    $Etat_Groupe = GROUPE[$key]["etat"];// id du retour d'état ampoule deconz cmd::byId("#308#")->execCmd();
    break;
  }
}

if ($scenario->getData($Scenario_Lance) == 0)
{
    $scenario->setData($Scenario_Lance, '1');
    $url_Deconz = 'http://127.0.0.1:8484';
    $cle_API_deCONZ = 'XXXXXXXXXX';
    $ch = curl_init($url_Deconz."/api/".$cle_API_deCONZ."/groups/".$groupe."/action");
	//curl_setopt($ch, CURLOPT_PORT, '8484');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');

    //usleep(200000);
    if (cmd::byString($trigger)->execCmd() == 0 && cmd::byString($Etat_Groupe)->execCmd() == 0) // Si l'interrupteur repasse à 0 après x micro seconde alors on allume avec la luminosité max
    {
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array(
            'on' => true,
            'ct' => 375,
            'bri' => 255,
            'transitiontime' => 0
        )));
        curl_exec($ch);
    }

    elseif (cmd::byString($trigger)->execCmd() == 1) // Sinon si on garde l’interrupteur appuyé on fait varier la luminosité
    {
        $bri = 2;
        do
        {
            if ($bri >=255){$bri=255;}
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array(
                'on' => true,
                'bri' => $bri,
                'transitiontime' => 4
            )));
            curl_exec($ch);

            if($bri == 2){usleep(700000);}else{usleep(350000);}
            $bri = $bri + 25;
            }
         while (cmd::byString($trigger)->execCmd() == 1 && $bri < 255);
      
        if (cmd::byString($trigger)->execCmd() == 1)
            $ct = 153;
            do //Puis, si l’appuie est toujours en cours on fait varier la température
            {
                if ($ct >=454){$ct=454;}
                curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array(
                'ct' => $ct,
                'transitiontime' => 4
                )));
                curl_exec($ch);
                if($ct == 153){usleep(700000);}else{usleep(350000);}
                $ct = $ct + 25;
            }
            while (cmd::byString($trigger)->execCmd() == 1 && $ct < 454);
        }


    else // Sinon on éteint
    {
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array(
            'on' => false,
            'ct' => 375,
            'bri' => 0,
            'transitiontime' => 0
        )));
        curl_exec($ch);
    }

    curl_close($ch);
}
$scenario->setData($Scenario_Lance, '0');

Les déclencheurs :

1 « J'aime »

Je ne reprends pas le plugin :slight_smile: !

Mon but est simplement d’essayer d’ajouter la gestion des groupes sur la branche stable, ça m’évitera de faire la modif à chaque mise à jour du plugin…
Et comme cela peut servir à d’autres, ça serait cool !!!

Le plus gros problème c’est que DeConz, via la websocket, ne fournit qu’un retour all_on et all_off pour les groupes.
J’ai donc ajouté un bout de code qui calcul la moyenne des paramètres bri et ct de toutes les lumières des groupes.
Par exemple sur un groupe de deux ampoules, si l’une et éteinte et l’autre allumée à 100%, le groupe affiche comme état 50%.

Mais j’ai besoin de retour sur ce que j’ai fait, car ça fonctionne chez moi mais peut-être pas sur d’autres installations. De plus je pense qu’il y a moyen d’améliorer ce que j’ai fait.

N’hésitez pas à me demander si vous voulez tester !