RETEX - DomoMG - Une suite domotique sous Jeedom - EPISODE 2

Liste des épisodes publiés :
Présentation de la saga DomoMG
EPISODE 1

Bonjour à tous,

Je présuppose pour la suite, que vous avez installées et appréhendées les suggestions de l’épisode 1, soit l’installation d’un atelier logiciel comportant : un éditeur de code, une passerelle SSH et un client FTP … à minima.

Pour aller plus loin nous allons commencer à créer une arborescence sur le Jeedom qui devra commencer par /var/www/html/mg .
Le répertoire « var/www/html/mg » nous servira de racine pour toute la suite des installations, il nous servira de référence unique. Vous pourrez éventuellement changer son nom ultérieurement quand vous serez à l’aise avec tous les codes.

Ensuite il va falloir downloader et recopier (aprés avoir changé le suffixe .txt en .rar) dans le répertoire racine mg/. (avec FileZila) les fichiers suivants :

Pour terminer cette partie, en SSH faites :

sudo chmod -R 777 /var/www/html/mg

pour « ouvrir » tous les droits sur cette arborescence.


Maintenant créez votre premier script que vous appellerez « TAB_tabulator » et qui devra contenir ( TAB correspondant au groupe de script) :

/************************************************************************************************************************
TAB Tabulator - 192
************************************************************************************************************************/
include_once getRootPath() . '/mg/mg.class.php'; mg::init();

// ******************************************** Suite du code du scénario ***********************************************
include_once getRootPath() . '/mg/tabulator/TAB_tabulator.php';

une bonne pratique est de faire précéder le nom d’un code correspondant au groupe suivi du nom du script puis son N° et de mettre le log en « temps réel ».

Activez le script et lancez le …

Dans votre navigateur lancez : http://xxx.xxx.xxx.xxx/mg/tabulator/tabulator.html en replaçant les xxx par votre adresse IP.

Vous devriez voir ça si je n’ai rien oublié (et vous non plus ! :slight_smile: ) , mais comme je n’ai pu procéder à aucun test d’install … (je n’ai pas accès à un autre site vierge avec une ip différente) vous me direz :face_with_head_bandage: :

Et rassurez vous, TABULATOR est aussi accessible depuis Jeedom via un widget dédié :

Je vais rapidement passer en revue les différentes tables que je vous ais fournies (mais vous pourrez en créez autant que vous voudrez pour vos propres besoins).
image

  • « tabParams » (une ligne par paramètre, 2 clefs) : C’est le coeur de DomoMG, vous trouverez ici TOUS les paramétres généraux utilisés par vos script.
  • « tabVolets » (une ligne par volet, 1 clefs) : Tous ce qui est nécessaire à la gestion des volets.
  • « tabUsers » (une ligne par user, 1 clefs) : Une table consacrée au client réseau ainsi qu’aux « users » de domoMG .
  • « tabconso » (une ligne par appareil, 1 clefs) : Tous les appareils de votre suivi de consommation seront indexés ici.
  • « tabChauffages » (une ligne par chauffage, 1 clefs) : Tous les chauffages gérés par le système seront paramétrés ici.
  • "tabpassword (une ligne par appareil, 1 clefs) Table des password du système d’alerte.
  • « tabTooltips » (une ligne par chauffage, 1 clefs) : Dans cette table on trouvera tous les tooltips visible sur la ligne de tête des tableaux de paramétrage, cela permet de se retrouver sans trop de soucis pour comprendre à quoi servent tous ces paramètres :slight_smile: .
  • « tabAlertes » (une ligne par appareil, 2 clefs) Le système de surveillance des équipements regroupe ici ces informations.
  • « tabWidgets » (une ligne par colonne et par table) Le dernier goodies (pour le dernier épisode), la gestion compléte de TOUS vos widgets sera centralisée ici (tout en permettant une customisation individuel selon les règles de Jeedom).

Cet outil que j’ai appelé le TABULATOR :slight_smile: en hommage à la bibliothèque utilisée comporte les fonctionnalités suivantes :

REMARQUE Selon le tableau l’accès aux données est donné par UNE ou DEUX clefs (TABULATOR en reconnait quatre au maximum) appelé KEY_1 et KEY_2 dans les tableaux voir les tooltips pour connaitre précisément la signification de ce que contiennent ces colonnes.
image

  • Manipulation des lignes :

    • Insertion (le « + »,
    • Effacement (la poubelle),
    • Déplacement (la « poignée » sur la gauche des lignes),
      image
  • Fonctionnalitée des colonnes :
    - Manipulation des colonnes via un menu contextuel accessible en tête de chaque colonne,

    • Déplacement gauche/droite,

    • Insertion,

    • Suppression

    • Renommage
      image

    • Classement normal/inversé sur chaque colonne par clic sur l’enTête,

    • Recherche dans les colonnes (selon paramétrage),

    • Possibilité de mettre des cases à cocher,

    • Filtrage paramétrable de la saisie (numérique, entier, boolean, string, date), (selon paramétrage),
      image

  • Les fonctions avec les boutons en haut du tableau :

    • « reload » en haut, permet de recharger la page, à utiliser systématiquement si la page est chargée depuis longtemps selon le navigateur.
    • « Reset » réinitialise les filtres de colonnes
    • Choix du théme de l’affichage : custom / Midnight / Standard
    • RestaureSav : Restaure la dernière sauvegarde du tableau sur le disque (la date de cette dernière est affichée en haut à droite du tableau par sécurité)
    • RestaureLast : Restauration du tableau en l’état AVANT son dernier enregistrement (pratique quand on se croise les doigts en cours de paramétrages), vous me direz que ces deux fonctions font un peu « ceinture et bretelles », c’est vrai, mais le paramètrage est un domaine TRES sensibles ou la plus grande prudence s’impose.
    • Liste déroulante de choix de la table à afficher, pour l’instant : ‹ tabParams ›, ‹ tabVolets ›, ‹ tabUser ›, ‹ tabConso ›, ‹ tabChauffages ›, ‹ tabPassword ›, ’ tabTooltips’, ‹ _alertes ›, ‹ tabWidgets ›.
    • Enregistrement : Validation et enregistrement de la table.
    • Sauvegarde : Sauvegarde sur le disque (dans mg/tabulator/sav) de la version courante du tableau.

étudiez biens toutes ces tables mais EVITEZ de les modifier pour l’instant de manière à ce que les épisodes suivants ne butent sur un mauvais paramétrages. Nous les verrons peu ou prou toutes en détail d’ici la fin de la saga.


Dernier points : l’accès à ces paramétrages… ce qui permettra d’aborder rapidement la CLASS « mg » et son usage :

Pour accéder aux paramétrages de « tabParams » il existe une fonction :
mg::getParam($section, $name, $valDefaut=null, $remDefaut=null)

Pour les autres tables vous avez des exemples en pur PHP dans la deuxième partie du script ci-dessous

créez un scénario de test et dans le bloc-code collez ceci, sauvegarder, lancez le et regardez les logs :

include_once getRootPath() . '/mg/mg.class.php'; mg::init();

$log = mg::getParam('log', 'timeLine'); // Permet d'envoyer les messages dans le log du scénario ET dans un log dédié _TIMELINE

mg::messageT('', "! Exemple de lecture de tabParams via la fonction getParams de la class 'mg'");
// Exemple de lecture de tabParams via la fonction dédiée
$path = mg::getParam("system", "pathRef"); 
$laveLinge = mg::getParam("confort", "destinatairesLaveLinge");
mg::message($log, "Path de domoMG : $path - Destinataire alerte laveLinge $laveLinge");

mg::messageT('', '! Exemple de lecture de tableau de paramétrage en PHP');
            
// Exemple de lecture des autres tables en PHP
$tabUsers = mg::getVar('tabUser');
mg::message($log, "Téléphone de MG : ".$tabUsers['Tel-MG']['tel']." - l'IP de la 'lampe Oeuf' est ".mg::getVar('tabUser')['Lampe Oeuf']['IP']);

Dans ce petit scénario vous verrez aussi un mini exemple de l’usage de la fonction « Message » de la class « mg »
Résultat :

LA CLASS mg:
J’en parlerez peu, elle est assez documenté pour vous permettre de vous débrouiller avec (NB notepad++ peu afficher la liste des fonctions, pratique).

Le meilleurs moyen pour être à l’aise avec, c’est d’utiliser le script ci dessus pour essayer les fonctions en vous aidant de la fonction Message et des logs (très documentés dans cette class !!! ).
Dans les épisodes suivants, la class « mg » sera omniprésente dans tous les scripts proposés.


Petit bonus du jour, deux utilitaires indispensable, essayer ces deux liens (en remplaçant les x par votre IP (pour le deuxième munissez vous des login et mot de passe de BdD fournis par jeedom dans « configuration/ [OS/DB » :

Maintenant c’est à vous jusqu’au prochain épisode !!! pour travailler sur les consommations électriques.

6 « J'aime »

Bonjour

Et merci pour tout ce que tu nous partages !
Je remarque un n° de tel en clair dans la copie écran class mg, il vaudrait peut-être mieux le supprimer :wink:

Merci @RVDomo !!! :+1:

Bonjour à tous,

bravo déjà pour ton tuto, Nous aimerions attirer l’attention sur le faite que ces procédures sont risquées, et quel donnerons le droit a notre support de refuser les tickets des utilisateur ayant fait ces modifications lier de loin ou de prêt a cela.

Si tu peux @m.georgein mettre un petit message d’alerte sur ton tuto.

Cordialement l’équipe Jeedom.

Procédures risquées ??? Lesquelles :nerd_face:?

Donc mettre un message d’alerte, pourquoi pas, mais pour dire quoi :roll_eyes:???

  • Qu’il ne faut plus utiliser les blocs codes PHP dans Jeedom :disappointed_relieved:???
  • Qu’il est déconseillé d’utiliser une class « non officielle », donc d’utiliser un plugin :sob:non officiel (la majorité).
  • Je passerais sur le fait que mon système n’implique l’installation d’aucune dépendance source de la majorité des problèmes (NB : une class n’est pas une dépendance et ne peut impacter le système):mask:

Donc acte, chacun pourra prendre connaissance du message de @Alexandre à titre d’avertissement :face_with_head_bandage: et l’interpréter à sa sauce . :thinking:

En faite tes modifications sont tellement poussé que le support n’a pas la competence pour aider en cas de soucis.

Et pour information tous ce qui est code : widget, bloc code dans les scénarios, script… ne sont PAS COUVERT par le support.

1 « J'aime »

Merci @Loic, il parait évident en effet que tous ce qui ressort de la customisation ne peut être couvert par le support, tu en fais déjà assez !

Par ailleurs, je ne l’ai sans doute pas assez précisé dans mes comm, mais DomoMG ne MODIFIE RIEN DANS JEEDOM OU DANS DEBIAN, il travaille en parallèle, et pourrait d’ailleurs aussi bien fonctionner sur d’autres système moyennant un minimum de paramétrage …

Mais mon incompréhension venez de cette comm’ d’ @Alexandre qui dans ce cas là devrait accompagner 99.78 % des messages de ce forum, bourré à craquer de code PHP, de script JS pour les widgets et autres goodies !

J’ai pris toutes mes précautions pour que mon système n’interfère jamais avec le fonctionnement de Jeedom (aucune dépendance à installer entre autre) et en plus de cinq ans je ne pense pas avoir fait appel au support plus d’une ou deux fois, et encore, cela concernait des beta Jeedom ou peut être le plugin zombie Zwave :face_with_symbols_over_mouth:!!!

Attention à ne pas confondre attention avec reproche !

Les widgets ne donne pas d’accès plus simple à la base de données qui est le cœur de Jeedom.

J’attire donc l’attention, loin de moi l’idée de dire que c’est nul ou autre.

Le seul truc que je ne comprend pas c’est pourquoi pas un plugin ? Enfin bref j’ai donné l’information c’est tout !

Bonne journée

Ha @Alexandre !!! Les difficultés de la communication écrites :slight_smile: , je viens seulement de comprendre que tu parlais d’ « adminer » que, c’est vrai j’ai fournis hier en download.

ALORS JE LE DIS HAUT ET FORT !!!
@Alexandre** A RAISON !!! **
ADMINER EST DANGEREUX A UTILISER.

CONSIDEREZ-LE COMME UN DERNIER RECOURS EN CAS DE SOUCI.

:wink:

Il est encore plus dangereux de le laisser sur son jeedom …

J’espère que personne ne crashera son Jeedom a tenter des trucs comme çà :coffee:

En lisant, le sujet, je me pose la question suivante :
Sachant que maitriser tous les coins et recoins de Jeedom est déjà pas une tâche simple, le fait de réencapsuler beaucoup de config, ça rends pas les choses plus dures à maitriser ?

  • Une autre interface à apprendre
  • Un abstraction qui masque les concepts jeedom

Quand on voit qu’un simple scénario mal construit ça mets déjà à genoux le serveur, on peut avoir vite fait de plus voir le problème du tout en passant par cette interface, non ?

Les dangers de « adminer », on en parle par ici (et dans bien d’autres) :

Deplacer info entre 2 virtuels - Plugins / Programmation - Communauté Jeedom

Docker - Gestion de la base de donnée - Matériel Jeedom - Hardware / Docker DIY (Faire soi-même) - Communauté Jeedom

@kiboost n’exagérons rien, si je me souviens bien il était fournis avec Jeedom il y a quelques année … Et je suis sur que toi même tu l’utilises !!!
Je me demande d’ailleurs, qui ici, parmi les devs ne l’utilise pas !!!

Et pour en revenir à DomoMG, ceux qui éventuellement l’utiliserons, sont par définitions des users avertis, voir des devs, ce n’est pas, par définition, un plugin clefs en mains !!!

Et viré pour question de sécurité justement. Et non je ne l’utilise pas …

Après chacun fait ce qu’il veux sur son système, des trucs les plus simples au plus tordus :kissing_smiling_eyes:

C’est vrai que la question mérite d’être posée.

N’utilisant que peu de plugin de « confort », j’ai été amené à développer a peu près toutes les fonctions nécessaires à la domotique en laissant à Jeedom, qui le fait très bien (avec quelques plugin de protocole) le soin de gérer le moteur de communication.

Seulement on s’aperçoit très vite que chaque fonction à son panel de paramètres, difficilement accessible (script PHP, json ou autres) et que ces paramètres doivent être partagés par plusieurs fonction, exemple :

  • le chauffage déconne (script chauffage)
  • je dois envoyer un message au proprio (paramètres communication (éventuellement plusieurs) + coordonnées users)
  • Vérifier l’état de(s) passerelle de pilotage des équipements (paramètrages de maintenance)
  • Remettre en route la cheminée (paramètrages stock de bois :), recherche des allumettes … :slight_smile: )
  • etc …

Par exemple, il y a une heure @pifou m’a signalé que j’avais laissé un mdp en clair dans la class mg, mdp utilisé dans une bonne dizaine de fonctions, il m’a fallu moins de 10 secondes pour déplacer ce mdp dans la table générale de paramétrage et le rendre ainsi accessible facilement pour des modifs ultérieures.

Au début, j’avais mis en place un fichier .ini (doublé de fonction get… et set…) pour centraliser mes paramètres et les rendre accessible de partout. C’était mieux, mais pas très pratique au quotidien.

Comme j’utilise beaucoup les variables « tableaux » natives du PHP, l’idée m’est venue naturellement de créer une interface transparente pour les manipuler de manière confortable, transparente et sécurisé (ceinture et bretelles :slight_smile: )

TABULATOR en est à sa troisième version, et au fur et à mesure j’ai étendu son usage, le dernier concerne le paramétrage de mes widgets.

Exemple ce matin j’ai voulu augmenter de qq px l’espace au dessus des titres de certains widget (J’en ai plus de 80 sur mon design principal (écran 27 " :), mais pas toujours de la même valeur. Avec ce système je n’ai pas hésité est ça été réglé en 1- 2 mn.
image

Pour le coté apprentissage, il n’y en a pas, un tableau, tous le monde le comprends naturellement depuis Multiplan et Excel :slight_smile:

Par contre quand tu utilises 12 plugins tu te demandes vite à quel endroits tu dois gérer tel ou tel paramètre, et quand il faut faire une modif en série …

Coté sécurité, j’ai essayé de blinder avec deux systèmes de sauvegarde (BdD et disque)

Le dernier point que tu abordes avec raison est la charge système éventuelle.

La encore j’ai essayé d’alléger cette charge, traditionnellement, dès que l’on à besoin d’un paramètre on fait un appel en BdD (et cela des milliers de fois).
Avec mon système on charge un tableau de variables une seule fois au lancement du script.
Honnètement cela ne doit pas faire une baisse drastique du trafic, mais pour certaines routines … Peut être…

Et si je me réfère à ce forum, le besoin existe, il y a pléthore de sujet traitant de la copie de paramètres d’un plugin à un autre (les IP par exemple).

Si je me réfère à mon exploit j’ai 135 paramètres « généraux » MAIS x fois plus de paramètres dédiés (par pièce, par équipements, par users, par fonctionnalités) … quand on centralise on est impressionné par le résultat.

Mais le débat reste ouvert !!!

1 « J'aime »

Là ça m’intéresse, quand tu dis sécurité, tu veux dire vs des attaques extérieures ou les fonction d’Adminer qui partiraient en vrille et pèterais la BdD ???

Adminer, comme je suppose l’ensemble de tes outils, c’est clairement orienté développement, on utiliser adminer pour formatter une bdd, vider une table, mettre à jour tout et n’importe quoi, avec une syntaxe (SQL pour adminer, PHP pour ton framework) que tout le monde ne maitrise pas.

Au contraire, jeedom a vocation à donner une interface simple et intuitive - c’est pas non plus le système domotique le plus ‹ user friendly › mais on essaye - tu va sur le market, tu télécharge le plugin qui va bien, tu clic sur ‹ activer › et ça marche :slight_smile:

Du coup oui, le forum ici rassemble beaucoup de développeurs et utilisateurs confirmés, mais il ne faut pas oublier la majorité des utilisateurs, qui ont acheté la box smart de base clé en main et ne savent pas ( ou juste ne veulent pas ) y mettre les mains. Ils nous lisent aussi, et ça me semble normal de mettre les avertissements qui vont bien :wink: d’ailleurs, je suggère aussi de déplacer ce sujet dans une section plus adaptée ( programmation ? )

Ce type de sujet me fait progresser, il faut qu’il reste accessible au commun des mortels.

1 « J'aime »

+1, pourquoi ne pas le traiter comme un plugin ou jeedom en version bêta-> pas de support. Basta.

A remarquer que si adminer est proscrit par certain PuttY lui est recommandé par les mêmes, et pourtant … c’est de la dynamite !!! 3 sec montre en main pour péter une machine par inadvertance !!!
Franchement tu imagines Mr Michu au clavier de putty sans avoir peur ? Pourtant pas une discussion ici qui n’y fait référence à un moment ou un autre !

Les codes que je proposent ont pour but (ils sont documentés contrairement à ceux de Jeedom et aux coutume du logiciel libre) de permettre à quelqu’un d’à l’aise avec le code de mettre en œuvre sa propre solution perso rapidement sans se noyer dans le forum ou dans l’étude de class non documentée.

Tout cela est dans les premières lignes de ma comm’ sur le sujet.

Ca franchement … c’est vrai dans 5% des cas :), et dans la mesure ou le plugin est maintenu ! C’est la raison dailleurs qui fait que j’en utilise un minimum (je sais, je vais me faire haïr :frowning: )
Tapes Zwave dans la recherche du forum … ou « plugin obsolète », c’est instructif !

Autant le core, malgrès toutes les critiques que je lis ici et là est fiable et s’installe en un clic, autant les plugins …

Malheureusement ce que je propose est « hors cadre », destiné à des dev plus ou moins débutant voulant mettre en œuvre leur solution en un minimum de temps grâce à une boite à outils documentée traitant de l’ensemble des sujets.

Donc ni pour Mr Michu (sauf si il est passionné), ni pour les geek qui ne compte pas leurs temps.

Oui, j’ai la sensation d’avoir le c… entre dex strapontins, mais j’aurais adoré avoir cette boite à outils quand j’ai commencé la domotique …