Gestion des Groupes et Binding avec Deconz

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 !

Bonjour,

Je veux bien tester également.

Pour ceux qui veulent tester, envoyez-moi la première fonction du fichier deconz/core/class/deconz.class.php.
Par exemple : public static function xxxxxxxxx

Je vous renverrai un lien pour télécharger le plugin modifié. :slight_smile:

Installation effectuée sans pb.

RAS niveau fonctionnement, tout me semble ok.

Veux-tu que je teste des choses en particulier ?

Penses-tu que dans une future évolution du plugin il serait possible d’avoir accès, dans Jeedom, aux scènes associées au groupes dans l’App Phoscon d’autant qu’elles remontent dans les infos brutes transmises à Jeedom.

Ok super merci. Pour les tests je ne sais pas trop, j’ai ajouté ça :

  • Ajout de la synchro des groupes (il faut les créer avec Phoscon)
    En retour d’information on a le « any_on » et la moyenne des paramètres bri et ct de toutes les lumières du groupe.
  • 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

Si déjà cela fonctionne chez toi sans bug, c’est pas mal…

Pour les scènes c’est jouable uniquement si ça a vocation à être inclue en stable, car à titre perso je ne m’en sers pas et je ne vais pas développer un projet parallèle.
Si la modif des groupes fonctionne bien, je la proposerai à Loïc et s’il est ok pour merger mes modifs, on avisera ! :slight_smile:

1 « J'aime »

Juste un petit truc, lors de la création des commandes les champs surlignés en jaune dans l’image ci-dessous sont vides.

Si tu sauvegardes, ces champs se remplissent avec la commandes « Curseur » ce qui provoque une erreur, les commandes du groupes ne sont plus utilisables.