Presentation rendu tablette en V4

Bonjour a tous,
Je prends un rapide moment pour vous présenter mon interface tablette/design en V4 dans laquelle j’ai réussi a faire pas mal de customisation.
Peut être cela pourra en inspirer certains, et d’autres voudrons savoir comment j’ai fait certaines des tuiles.
Du coup, plutot que de tout documenter (la flemme) n’hésitez pas a poser des question… de toutes facons je reste chez moi :slight_smile:
Je mettrais egalement un lien pour une rapide video des differents menus.
Voici quelques images.
2 3 4 Annotation 2020-04-13 210847

3 J'aimes

Video youtube

Hello,

Merci pour le partage.
J’aime bien l’historique de Door Bell, tu fais ça comment ?
Les différents horaires sont cliquables pour avoir la photo correspondante ?

l’historique est une rotation de d’affectation de variable a un événement donné.
Les log ne sont pas cliquables, mais j’aime bien l’idée… a creuser.
En gros, j’ai un événement (sonette, panne edf, panne internet etc… ) que j’affecte a une variable « log new »
Ensuite je procédé a la rotation en affectant
log 5 = log 4
log 4 = log 3
log 3 = log 2
log 2 = log 1
log 1 = log new
Il y a probablement possibilité de simplifier avec la commande « event » dans les scenario sans passer par les variables…
Ensuite j’ai un tableau fait des 5 virtuels info qui sont affiché dans un tableau.
Pour la photo, je recupere sur mon doorbird, la derniere image via l’api.
Au passage, j’envoie la photo et le message sur mon tel en notification via pushover.

voici le scenar log update :

- Nom du scénario : log update
- Mode du scénario : provoke
    - Evènement : 



    
    ACTION
     (variable) Affectation de la variable : log5 à variable(log4)
     (variable) Affectation de la variable : log4 à variable(log3)
     (variable) Affectation de la variable : log3 à variable(log2)
     (variable) Affectation de la variable : log2 à variable(log1)
     (variable) Affectation de la variable : Log1 à variable(Lognew)

Et le scenario sonette :

- Nom du scénario : Sonette
- Objet parent : thoiry
- Mode du scénario : provoke
    - Evènement : #[thoiry][Thoiry][Sonnerie]# = 1



    
    ACTION
     #[Security devices][Alarme Z+][Door chime]# - Options : {"enable":"1","background":"0"}
     #[Etage 0][Sonette Blyss][On]# - Options : {"enable":"1","background":"0"}
     #[Aucun][pushover][Alerte Alarme]# - Options : {"enable":"1","background":"0","title":"sonette","message":"quelqu'un a la porte"}
     gotodesign - Options : {"enable":"1","background":"0","plan_id":"39"}
     (variable) Affectation de la variable : lognew à #sjour# #jour# @ formatTime(#time#) -Door Bell
     #[Aucun][lametric Notifications][sonette]# - Options : {"enable":"1","background":"0"}
     #[thoiry][GHTTS][GH talk]# - Options : {"enable":"0","background":"0","title":"","message":"Quelqu'un sonne a la porte."}
     (scenario) start de [Programmé][log update]
     #[Security devices][door][Start record]# - Options : {"enable":"1","background":"0"}
     #[Security devices][Front][Start record]# - Options : {"enable":"1","background":"0"}
     #[Exterieur][Camera Front][Enregistrer]# - Options : {"enable":"1","background":"0","title":"1","message":"#[Aucun][pushover][Alerte Alarme]#"}
     #[Exterieur][Camera Doorbird][Enregistrer]# - Options : {"enable":"1","background":"0","title":"1","message":"#[Aucun][pushover][Alerte Alarme]#"}
     #[Aucun][Image doorbell][Rafraichir]# - Options : {"enable":"1","background":"0"}
         
        DANS 2
        FAIRE
         #[Security devices][door][Stop record]# - Options : {"enable":"1","background":"0"}
         #[Security devices][Front][Stop record]# - Options : {"enable":"1","background":"0"}
    
    SI #[thoiry][Weather Forecast][Coucher du soleil]# < #time# or #[thoiry][Weather Forecast][Lever du soleil]#>#time#
    ALORS
     #[Exterieur][Lum Facade][On]# - Options : {"enable":"1","background":"0"}
         
        DANS 5
        FAIRE
         #[Exterieur][Lum Facade][Off]# - Options : {"enable":"1","background":"0"}
    SINON
    
    DANS 5
    FAIRE
     gotodesign - Options : {"enable":"1","background":"0","plan_id":"34"}

1 J'aime

quelques precisions supplémentaires :

  • Le menu est uniquement en html. Les images avaient tendance a ralentir les chargement du coup, j’ai mis le minimum.
  • Les fonction d’extinction des lumieres sont base en code, pour aller chercher uniquement les lumieres allumées pour ne pas surcharger l’ozwave.
  • idem pour les etages, je ne selectionne par le code, que les lumieres qui presentent la carateristique d’etre a l’etage en question.
  • La liste des lumieres allumées utilise le meme code, sauf qu’il n’y a pas d’action d’extinction.
  • Le chauffage est basé sur les thermostatiques spiritz qui ont l’avantage de remonter la temperature, le % d’ouverture de vanne, et d’etre en « flirs », c’est a dire en mode reponse instantané. Le petit triangle et la couleur montrent que l’ordre a bien ete pris en compte.
  • L’extinction automatique est géré dans les options : le point gris ou rouge signal qu’il y a une extinction automatique programmé (rouge).
  • Les tuiles sont uniquement que du code HTML/CSS (c’est rapide)
  • l’affichage des couleurs dans les jauge m’a obligé de désactiver un css dans le core master - Je n’ai pas réussi a supplanter le CSS de base des highcharts…

Pourquoi en anglais ?

Eric

mon epouse est anglaise. Personne n’est poarfait… :smiley:

Bonsoir Fred. Je suis loin d’avoir ton niveau. Donc forcément, je ne comprends pas tout. Quand tu dis pour la liste des lumières allumées que tu n’utilises que du code ?
Que veux tu dire ?
David

C’est a dire que les scenarios ne permettent pas de filtrer et de n’executer une fonction extinction que sur les elements allumés en une seule commande. A moins de faire une succession de IF - Then… ce qui est un peu peinible. Du coup, il faut rentrer un peu dans le vif pour faire une section code qui viendra recuperer les statut de chaque element lumiere, et faire l’action que sur les module qui sont en etat « allumés ».

Voici le code en question - je l’ai joyeusement pompé et je l’ai trafiqué un peu pour faire ce dont j’ai besoin.
Il est mettre dans un scenario, en ajoutant la section « code » et inserer tel ce qui suit.
Eventuellement ajuster le(s) lieu(x) en fonction du nomenclature des zones en les separant par des virgules, et les mettre entre apostrophes ’

// Limitation à certains objets (en fait des lieux dans la domotique)
$lieux = array('1er étage','autre zone');

// recherche des equipements lumière ( basée sur catégorie = 'light' )
$lumieres = eqLogic::ByCategorie('light');
$scenario->setLog('light : '.$lumieres); 
// balayage des équipements : de type lumière
foreach($lumieres as $lumiere)
{$scenario->setLog('light en cours: '.$lumiere); 
     // ignorer lumière inactives
     if($lumiere->getIsEnable()== false) continue;
     $lieu = $lumiere->getName();
 $scenario->setLog('lieux: '.$lieu);
   // ignorer les lumières n'appartenant pas à la liste des lieux retenus
     if(in_array($lieu, $lieux) )
     {
                 // récupérer toutes les actions pour cet équipement
                 $cmds = cmd::byEqLogicId($lumiere->getId());
                 foreach($cmds as $cmd)
                 {
                     // Commande d'extinction
                     if($cmd->getConfiguration('value') == 'type=setvalue&value=0')
                     {
                         // éxecuter la commande
                         $cmd->execCmd();
                     }
                 }
     }
}

Merci. Je me demandais aussi et surtout comment afficher la liste des lumières allumées.
Aussi avec une section code ?

c’est un peu dans le meme style : Il faut neanmoins la aussi s’assurer que les modules lumieres soient bien flagé type lumiere.
Le code va en créer une variable avec la liste des lumieres :
Il faudra ensuite créer un virtuel de type info qui stypule que sa valeur est variable(lights off) puisque c’est le nom donné a la variable a la fin du script.

voici le code. une fois de plus jouyeuseemnt pompé ailleurs mais je ne sais plus ou :frowning:

// Équipements catégorie Lumière
$cat = eqLogic::ByCategorie('light');
//On récupère les équipements de la catégorie lumière
foreach($cat as $i)
{
//On récupère les commandes des équipements lumière (tableau)
$cmdtab = cmd::byEqLogicId($i->getId());
//On cherche les commandes de la catégorie Light
foreach($cmdtab as $cmd)
   {
//On garde seulement les commandes Etat
if($cmd->getName() == "Etat")
   	{
//On récupère le nom entier de l'équipement
$human = $i->getHumanName();
//On reconstitue la commande avec le nom entier + l'état
$cmd = cmd::byString('#' . $human . '[' . $cmd->getName() . ']#');
//On récupère le statut de la commande.
$statut = $cmd->execCmd();
//On récupère le nom de l'équipement
$equipement = $i->getName();
//On supprime le mot Virtuel
$equipement = str_replace('Virtuel ','', $equipement);
//On sépare les lumières éteintes 0 et allumées 1 
if ($statut > 0)
   		{

//On affecte la variable message avec les lumières éteintes.
if ( empty($message)) 
{
$message = '<br>'.$equipement;
} else {
//A partir de la 2nd j'ajoute les messages.
$message = $message.', '.'<br>'.$equipement;
}
   		}
   	}
   }
}
//On crée le message
if ( !empty($message)) { $message = '<b>Lumieres allumées</b> : '.$message.'.';}
//On log pour avoir une trace
$scenario->setLog($message);
//On affecte la variable Lumières pour pouvoir l'utiliser dans un mail, TTS, SMS...
$scenario->setData('lights off',$message);

Note qu’il y a un moyen plus efficace, c’est d’affecter la valeur directement au virtuel, mais je dois trouver la commande qui correspond a a la fonction event du scenario… :confused: Ca aurait l’avantage de generer un refresh instantané de la veleur, et moins de lourdeur…

en cherchant un peu :
bosquetia a fait un resumé des fonction interessantes :
commandes php

$cmd::byId(471)->event("ma_valeur");
ou
$cmdC = "#[Appart][Elec][Test]#";
$cmd = cmd::byString($cmdC);
$cmd->event(("100"));
ou
cmd::byString("#[EQUIPEMENT]#")->event(("100"));

Du coup, plutot que de passer par la variable, tu remplace
$scenario->setData('lights off',$message);
par :
$cmd::byId(7422)->event($message);
ici le 7422 est le numero a cote de la commande info que tu as créé dans ton virtuel. a toi de le trouver dans ta config.

Top !
Ca fonctionne en effet !

Sauf que ça ne se réactualise pas automatiquement. Sauf si le scénario est relancé.

il faut que tu mettes dans les declencheurs un changement d’etat de tes lampes. pour ca, j’utilise le resumé global qui remonte le nombre total de lampes allumées, ou alors tules rajoutes une a une dans les declencheurs.

Donc j’ai bien maintenant le résumé global des lampes allumées. A partir du virtuel crée, quel déclencheur as-tu configuré ? J’ai essayé l’action sur valeur mais ça ne donne rien. Et toi ?

… je réponds moi meme : j’ai mis action du scénario est valeur différent de … 300. Et ça fonctionne, tant que je n’ ai pas 300 lumières allumées précisément.

je l’ai mis de cette facon :
Capture

@fred Bonjour, j’aime beaucoup ton design, simple et épuré, c’est fonctionnel !

J’aimerais bien réaliser une partie gestion des chauffages dans le même esprit, malheureusement je bute toujours sur des détails ou des problèmes, comme par exemple le rafraîchissement de la page…

Si tu as un peu de temps pour détailler cette partie j’en serais ravi !

Bonjour Mika, merci.

La partie chauffage aura probablement été la partie la plus pénible a réaliser. surtout si tu veux une approche zones (ce qui est le cas chez moi… le chauffage partie communes comporte pres de 10 chauffages - hors de question de les gerer un à un…)
En terme d’update, il faut s’avoir que la valeur d’un virtuel qui change déclenche une MAJ (si toutefois il n’y pas d’erreur sur la page - la moindre erreur de type croix rouge avec une F12 sur chrome - bloquera les mises a jour de la page car les scripts sont potentiellement interrompus.)

Pour ce qui est des chauffages, j’ai un virtuel qui reprend tous les statuts des zones de chauffages et sur lequels j’applique les codes widget : en voici une partie pour l’idée.
Capture

Voila dans les grandes lignes… SI tu as des soucis en particulier, n’hésite pas.

1 J'aime