RETEX - DomoMG - Une suite domotique sous Jeedom

Présentation de la saga DomoMG

Liste des épisodes publiés :

EPISODE 1 - L’atelier de développement
EPISODE 2 - Installation - la class ‹ mg › - TABULATOR
EPISODE 3 - Le suivi des consommations électriques
EPISODE 4 - Le chauffage

tous les codes de DomoMG sont sur le GitHub


Bonjour à tous,

Je me propose de publier ici l’ensemble des codes PHP, JS, SQL et HTML de ma domotique.
L’idée est de faire partager mon expérience (plus de 5 ans), mes méthodes et mes outils pour permettre à ceux qui découvrent ce hobby que l’on peut monter un projet ultra complet en ne s’appuyant QUE sur un minimum de plugin (essentiellement les protocoles de comm’) et bien sur le core de Jeedom et … pas mal d’heure de travail !!! L’avantage étant de d’être le plus autonome possible et d’avoir un système le plus résilient possible.
Par exemple, le passage à la V4 / Debian10 ne m’a pris que quelques heures pour adapter quelques routines.

Tous mes codes sont documentés (à minima) et ne devraient pas poser de problème à toute personnes ayant quelques connaissances en informatique et … une certaine pugnacité !!!

Voici la liste des « épisodes » que je compte publier si vous êtes interessés :

  1. Présentation des outils de développement indispensable, des méthode et des prérequis.

  2. Le code de la ‹ class › d’utilitaires que j’utilise comportant une centaine d’outils : centre de messagerie centralisée (log, sms, vocal, tel, telegramme, etc…), système d’alerte, pilotage compet de de JPI, sonos, fulyKiosk, lecture d’agenda .ics (google), éphéméride solaire, etc (voir la liste ci-après).



    Toutes ces fonction documente les logs automatiquement pour les rendre plus lisibles :

  3. La problématique majeure de la maintenance de nos installation étant, à mon sens, le paramétrage (on manipule des centaines de paramètres, souvent commun à plusieurs programmes) il est vital d’avoir un outils permettant de les regrouper et les manipuler facilement, pour cela j’utilise un système de tableau permettant de visualiser, maintenir et modéliser facilement tous ces paramètres sans aucune programmation spécifique.



    image
    image
    image

  4. Avec ces prérequis on passera au vif du sujet avec un système de suivi des consommations électriques de tous vos appareillages détaillés sur les 12 derniers mois, moyenne mensuelle, coût et autres plus l’accès direct au graph de consommation et de puissance ainsi qu’un ON/OFF sur chaque équipement. Cela s’accompagnera d’un outil de suivi des HC/HP et d’une routine permettant de gérer facilement la puissance et la consommation des équipements qui ne fournissent pas ces commandes.


  5. Nous passerons ensuite à la gestion des chauffages qui permet : l’autoApprentissage des caractéristiques des pièces pour avoir la température désirée à une certaine heure, la gestion de l’ouverture des portes pour économiser le chauffage/climatisation ET pour encourager à l’aération lorsque il est arrêté.

  6. Un programme de gestion des « users », aussi bien présence d’humain que d’appareillage informatique sur le réseau (via téléphone, IP, MAC, routeur, Bluetooth, geofence). Dans la foulée il y aura aussi des programmes pour gérer un système d’alarme complet.


    image

  7. La gestion des lumières avec essentiellement une gestion centralisée des lumières par pièces (avec réglages proportionnel global, type d’ambiance paramétrable, extinction automatique ou baisse progressive si peu/pas d’activité, etc) et une ‹ minuterie › totalement paramétrable pour les lieux de passages ou l’extérieur.

  8. Un programme de reconnaissance vocale et de pilotage de l’ENSEMBLE de votre domotique avec un MINIMUM de paramétrage (donc un minimum de galère :slight_smile: ) qui travaille directement sur la base SQL pour interpréter vos demandes.
    Reconnaissance vocale sans paramétrages … Retour d’expérience

  9. Pour les sportifs, un programme permettant de visualiser en temps réels vos sorties rando, jogging, vélo. Pratique pour rassurer les conjoints :slight_smile:



  10. Divers outils comme une gestion de boite aux lettres, du portier Doorbird, de la machine à laver (pour vous avertir quand elle à finie), des frigos et congélateur, etc
    image

  11. Un programme centralisant les informations météo locales (vos capteurs), de l’aéroport le plus proche (via METAR), et de météo France avec vocalisation éventuelle de la synthèse des résultats.
    image

  12. Une gestion complète du compresseur de la piscine (nombre de cycles paramétrable, durée selon la température, prévention du gel et des vents violent).

  13. Une gestion complète des volets : ouverture/fermeture individualisée et proportionnelle selon la position du soleil, la saison, l’heure, le vent, la présence, etc.
    Les widget visualisent en temps réel la position des volets AINSI que l’état de l’ouverture des ouvrants …

  14. Enfin quelques outils de maintenance : surveillance des logs, de la machine Jeedom, de TOUS les équipements (dernière communication, batterie, etc), utilitaire de gestion ZWave, utilitaire d’export des scénarios Jeedom, gestion des snapshots VMware, sauvegarde paramètrable des tables SQL, etc …
    image
    Sans oublier une log de timeLine centralisée :

[2021-01-09 23:00:01][INFO] : Volets - Fermeture générale, time > 23:00 | Alarme | Aube.
[2021-01-09 23:00:01][INFO] : Volets - Fermeture générale des volets - groupe : Salon, Chambre, Etage.
[2021-01-10 00:00:03][INFO] : Reveil - Programmé pour 10/01/2021 08:30
[2021-01-10 00:56:52][INFO] : NuitSalon - Passage à NuitSalon (2).
[2021-01-10 01:10:35][INFO] : Informatique - Arrèt.
[2021-01-10 02:45:04][INFO] : Piscine - Arrêtée le 10/01/2021 à 02h45mn
[2021-01-10 03:30:04][INFO] : Daily - Repose des droits et maintenance OS OK.
[2021-01-10 05:01:18][INFO] : Daily - Repose des droits et maintenance OS OK.
[2021-01-10 05:01:21][INFO] : Daily - Sav tables BdD.
[2021-01-10 05:02:14][INFO] : Daily - Backup Jeedom OK.
[2021-01-10 05:15:03][INFO] : Export des Scénarios terminé.
[2021-01-10 07:08:02][INFO] : NuitExt - Passage à l'AubeExt (2).
[2021-01-10 08:19:21][INFO] : NuitExt - Passage au JourExt (0).
[2021-01-10 08:30:02][INFO] : Reveil - Lancement.
[2021-01-10 08:31:36][INFO] : Volets - Ouverture générale du matin.
[2021-01-10 08:31:36][INFO] : Volets - Ouverture générale des volets - groupe : Salon.
[2021-01-10 08:31:37][INFO] : NuitSalon - Passage à SoirSalon (1).
[2021-01-10 08:31:37][INFO] : Informatique - Remise en route.
[2021-01-10 08:45:02][INFO] : Volets - Ouverture générale des volets - groupe : Chambre.
[2021-01-10 08:45:25][INFO] : Volets - Ouverture générale des volets - groupe : Salon.
[2021-01-10 09:00:01][INFO] : Reveil - Annonce vocale.
[2021-01-10 09:06:01][INFO] : Salon : RATIO ==> Delta température : 2.4 - Durée : 02h41mn ==> RatioJour : 0.89 - NewratioMoyen : 0.64 (sur les 3 derniers jours)
[2021-01-10 09:54:01][INFO] : RdCSdB : RATIO ==> Delta température : 0.2 - Durée : 01h29mn ==> RatioJour : 0.13 - NewratioMoyen : 0.5 (sur les 3 derniers jours)
[2021-01-10 10:00:01][INFO] : Reveil - Arrêt radio SdB et Sonos.

Exemple d’export de scénario « bloc code » :

/***********************************************************************************************************************/
													function VO_Volets_Jour_Nuit__29()
/***********************************************************************************************************************/
Sheduler : */5 * * * * *

Trigger (0) : #[Maison][Général][NbMvmt]# > 1
Trigger (1) : #[Maison][Général][NbPortes]# >0
Trigger (2) : #variable(NuitSalon)#
Trigger (3) : #variable(NuitExt)#
Trigger (4) : #variable(Alarme)#
Trigger (5) : #[Extérieur][Températures][VentFort]# >0

/************************************************************************************************************************
Volets Jour_Nuit - 29
************************************************************************************************************************/
include_once getRootPath() . '/mg/mg.class.php'; mg::init();

$InfLumExt = '#[Extérieur][Eclairages][Luminosité]#';	
$InfLumInt = '#[Salon][Eclairages][Luminosité]#';	
$infMvmtEtg = '#[Etage][Mouvements][NbMvmt]#';

$equipGeneralMaison = '#[Maison][Général]#';
$equipMvmtSalon = '#[Salon][Mouvements]#';
$EquipReveil = '#[Chambre][*Reveil chambre]#';
$equipMeteoFrance = '#[Extérieur][Températures]#';

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

15 Un .js et un .css UNIQUE centralisant les codes de TOUS mes widgets (une centaine) permettant unemaintenance/évolutivité grandement facilitées. Tous ces widgets supportent une vingtaine de paramètres facultatifs, sont « multiState » c’est à dire capable d’afficher aussi si ils sont désactivés (grisé) ou hors ligne (barré).
image

Soit en tout une quarantaine de script PHP / 11000 lignes / 600 kO.

Tous ces programmes sont fournis EN L’ETAT, il tournent chez moi depuis des années sans soucis mais si vous désirez les utiliser il vous faudra vous en rendre maître !!!
Seuls les points 1 à 3 sont incontournables pour utiliser ces programmes (ce sont les « fondations »), les points 4 à 15 peuvent être ou ne pas être exploités sans soucis.

Dites moi ce que vous pensez du projet et si vous êtes intéressé …

19 « J'aime »

Merci et bravo

Incroyable @m.georgein !

Ce que tu propose est excellent, merci d’avance pour tes tutos que je vais suivre assiduement :slight_smile:

Compte tenu de la quantité d’info, du fonctionnement par chapitre, etc, sous quelle forme penses-tu archiver tout cela ?

Peut-être un blog ? Qu’en dis-tu ?

(Sur le forum tu peux faire des articles y faisant référence à chaque sortie par exemple…)

Je pense indexer chaque chapitre dans le texte actuel comme je l’ai fait avec la VR (épisode 8)

Bonjour,

Le cas particulier du suivi sportif m’intéresse.
Triathlète à mes heures perdues, je suis régulièrement en vadrouille.
Je paye un abonnement à Strava juste pour ça pour que madame puisse me suivre à la volée surtout en mer quand je pars nager à 6h le matin l’été…

Je suis surtout intéressé par le fait que tu sembles avoir une plateforme « locale ». Tu peux en dire plus ? Je faisais la remarque que je n’ai jamais trouvé un Traccar pour les smartwatches ce qui est logique car toute l’intelligence est le traitement de données pour la charge, les entrainements, la fatigue etc.

Au plaisir de te croiser sur un Marseille-Cassis… un jour !

Bonjour,
Félicitations pour ce travail. De mon côté, je suis intéressé par la gestion du portier DoorBird. L’utilises tu comme un visiophone, avec déclenchement de la caméra suite à appuie sur la sonnette puis possibilité de communiquer via Jeedom?

:+1: bravo

Marseille-Cassis … j’aimerais bien, mais ma spécialité ets plutôt la rando au long cours !!!

Mon prog ne pas se substituer à un vrai suivi sportif malheureusement, personnellement j’utilise Garmin pour ça.

Par contre il permet de suivre à distance nos pérégrination sur une carte en utilisant son smartphone sur lequel un petit module sous MacroDroid envoi régulièrement à Jeedom un certains nombre de paramètres permettant d’afficher une carte du déplacement, le temps passé en entrainement, la distance et la vitesse moyenne. En bonus un calcul des temps de pause et un système d’alerte par sms si aucun mouvement depuis plus de x mn alors que la connexion est active.

1 « J'aime »

L’usage que j’en ai est minimaliste, si quelqu’un sonne ou si un mouvement est détecté, ma tablette affiche la caméra doorbird pendant x mn et revient au design général au bout de yy mn.
L’interaction vocale n’est pas ouverte, à ma connaissance, dans l’API doorbird.
Par contre un boutons sur l’image de la caméra me permet d’ouvrir le portail en cas de besoin.

Merci @olive, venant de toi c’est un joli compliment :star_struck: :grin: :grin:

1 « J'aime »

Mais de rien j’aime les gens qui partage et mettent les mains dans le cambouis, et quand l’on vois ça, cela fait plaisir et motive notre communauté.

Hello, joli boulot :slight_smile:
est-ce que c’est un simple tableur genre excel pour la gestion des paramètres, ou bien un plugin jeedom spécifique ? Pour le point 3 c’est vrai que l’on voudrait parfois utiliser un paramètre « global » et l’appliquer sur plusieurs plugins / commandes / objets / scénarios, je ne vois guère que les variables de scénario pour faire cela et encore…
Mon conseil, pour le code tu devrais le publier sur Github, mise en forme et partage collaboratif :slight_smile:

1 « J'aime »

+1 (sauf si tu n’es pas fan…)

Il s’agit bien, comme le montre les printscreen d’un système de tableau, mais pas d’Excel, il s’agit d’un script PHP/JS/CSS qui génère automatiquement un « tableau » depuis une variable tableau PHP (éventuellement json), celui ci permettant ensuite de le modifier / l’enrichir à loisir, ajout, suppression, déplacement de lignes ou de colonnes.

Le formatage individuel des colonnes étant lui aussi paramétrés (boolean, string, entier, float). J’y est aussi ajouté des tooltips permettant de documenter individuellement les colonnes de chaque tableau et un système de recherche de manière à faciliter encore le travail de paramétrage.
Avec l’appui de fonctions de type getParam(« chauffage », « tempSdB ») et setParam(« chauffage », « tempSdB », 18), cela permet de créer/gérer/partager l’ensemble des paramètres de tous nos programmes.

Pour le gitHub, je ne suis effectivement pas fan, beaucoup de mise en œuvre / prise en compte pour peu de bénéfice. Les « jeedomiens » sont ici et je ne m’intéresse que peu au plugin de niche :frowning:

J’utilise déjà ce principe. Mais comment fais tu pour historiser la position en db et tracé cela ?
J’utilise déjà cela sur garmin livelink et strava beacon pour la position à mes proches…

Soit patient :slight_smile: attend l’épisode 9 de la saga !!!

Mais pour faire simple l’histo est automatique avec jeedom si l’on met à jour une commande info
Après c’est du retraitement classique, calcul de distance, pondération temporelle, etc
Au final je génère une page html (accessible donc aussi hors jeedom) en utilisant la librairie leaflet, l’opensource de openstreetmap. Les différents fond de carte son free, là j’en utilise 6-8 au choix.

La vrai difficulté dans ce jeux c’est de distinguer ce que fait le user à l’instant t, entrainement, aller chercher du pain, sieste, trajet voiture, etc … Puisque j’essaye de faire un système sans interaction obligatoire de l’utilisateur. Dans mon cas et celui de ma femme cela marche dans 99 % des cas au final. Il resterais peut être à peaufiner le nettoyage pour enlever les points « accidentel » ou les trajets trop court ou non significatif.

L’avantage de se passer de plugin c’est la possibilité de peaufiner jusqu’à … l’équilibre ! :slight_smile:

on est nombreux ici, pas seulement les développeurs, à avoir un compte github, du coup si tu n’y va pas et si tu es ok, je peux le mettre sur mon compte :wink:
Au final donc, aucun plugin, c’est des scripts perso ou des scénarios en mode code ?

Bonsoir à tous

Super travail, très abouti à mon sens.
Le seul hic c’est pour moi pas super accessible pour le jeedomien moyen que je suis, mais peut être dans quelques années sauf si la saga propose du pas à pas :+1:

Non, aucun plugin, je n’aime pas trop le concept pour les fonctionnalités de « confort », c’est un peu l’histoire de la mouche et du marteau, d’autant qu’a lire le forum, après install du plugin chacun s’efforce de broder autour pour l’améliorer :slight_smile: Alors autant prendre le problème à la base à mon sens.
Evidemment pour un non professionnel c’est un peu l’angoisse de la page blanche quand on démarre. D’où ma démarche, fournir un kit complet de domotique qui fonctionne et à chacun après de l’adapter en l’utilisant comme canevas.

Et oui c’est du pur PHP/JS/CSS entièrement en « bloc code » pour reprendre la terminologie jeedom (même si je n’utilise ces bloc code que pour appeler des script.php tout à fait classique.

1 « J'aime »

Bonjour, j’ai lu avec intérêt les 1ers échanges de ce topic. C’est prometteur! J’attends avec hâte l’épisode 1.
Merci pour le partage, la démarche & le concept !