Keros : Mon projet, mon matos & des infos

Décrivez votre installation de Domotique : ce que vous gérez, quels sont les points forts de votre config.
Illustrez par des photos, partagez et faites nous envie !
Répondre
Keros
Messages : 4628
Inscription : 23 juil. 2019, 20:57

Keros : Mon projet, mon matos & des infos

Message par Keros »

Bonjour à tous,

Ça va faire bientôt faire un an que je me suis lancé dans la domotique et mon projet grossi au fur et à mesure.

Depuis longtemps, je voulais tester un Raspberry Pi. Me voilà donc dans l'aventure avec DomoticZ :D

Sommaire
Dernière modification par Keros le 19 juil. 2020, 22:32, modifié 19 fois.
Keros
Messages : 4628
Inscription : 23 juil. 2019, 20:57

Keros : Ma domotique

Message par Keros »

Ma domotique

Chronologie de mon projet domotique (mise à jour au fur et à mesure).
  • Janvier 2019 - Définition du projet
Je ne me souviens plus très bien le moment où j'ai commencé à réfléchir sur mon projet, mais l'idée me trottait dans la tête depuis l'été 2018 : je montais à l'étage pour ouvrir les fenêtres de toit, mais ce n'était pas forcément le bon moment.
En début d'année, je ne suis lancé dans la recherche d'information : Quelle box ? Quels protocole(s) ? Quels capteurs ?
En parallèle : Qu'est-ce que j'ai besoin ? Qu'est-ce que je voudrais faire ? Qu'est-ce que je pense vouloir faire plus tard ?

  • Mai 2019 - Lancement du projet
Finalement je suis tombé sur DomoticZ. Un petit Raspberry Pi 3B+ et c'est parti !!

Pour démarrer mon besoin de relever de températures, j’ai choisi de partir sur le protocole ZigBee avec l'interface Zigate en version wifi (afin d'optimiser son emplacement).

Au passage, un grand MERCI à Pipiche pour tout le travail qu'il réalise sur le plugin et sa disponibilité sur le forum.

  • Juin 2019 - Capteurs Xiaomi : Température, Inondation et Bouton
J'ai choisi de partir sur des capteurs de la marque Xiaomi Aqara pour le tarif (~10€) et leur esthétique. C'est parti avec 8 capteurs de température, 4 sondes d’inondations et 4 boutons :D

Mon premier script a été de basculer un interrupteur virtuel lorsque la température extérieure était inférieur à la température intérieure > cela me permettait de savoir si c'était le bon moment pour ventiler.

  • Juillet 2019 - Carte relais sur GPIO
C'est bien d'avoir des infos dans DomoticZ, mais il faut aussi de pouvoir faire des actions : j'ai ajouté une carte relais sur mon Raspberry Pi. Je peux couper mon surpresseur en cas de fuite d'eau.
J'ai également domotisé la centrale de ma piscine : programmation depuis DomoticZ en fonction de la température et commande de Marche/Arrêt / Auto depuis un bouton Xiaomi.

  • Août 2019 - Relevé consommation électrique
J'ai ajouté un module USB pour récupérer les informations du compteur électrique. C'était sur l'ancien compteur. Depuis je suis passé au Linky et ça fonctionne toujours.

  • Septembre 2019 - Communication par SMS
J'ai mis SMS Gateway Ultimate sur un vieux téléphone qui reste à la maison pour avoir une action depuis l'extérieur si besoin. Plus d'infos

Edit décembre 2021 : J'ai remplacé ce système par une clé 3G.
  • Octobre 2019 - Information météo
Ayant la possibilité de recevoir des infos par SMS, j'ai mis en place le script de papoo / deennoo pour être prévenu avant de rentrer du travail en cas de givre de lendemain. Plus d'infos
J'en ai profité pour m'envoyer la météo du jour au réveil et la météo du lendemain le soir. À l'époque, c'était sur DarkSky

  • Novembre 2019 - Prises connectées
Entre temps, je me suis équipé de prise Ikea qui sont compatible avec la Zigate. Pour une dizaine d'euros, cela fonctionne très bien.
Je me suis également lancé dans le "hacking" de Sonoff avec ESPEasy.

  • Novembre 2019 - Imprimante 3D
J'ai profité des promos du 11.11 sur AliExpress pour me lancer dans l'impression 3D : j'ai commandé une Creality Ender 3 Pro.
J'en suis super content :P

  • Décembre 2019 - RFlink
Je me suis lancé dans la fabrication d'un RFLink. Même s'il n'était pas mis à jour depuis plus de 2 ans (à l'époque...). Il semblait que cela allait avancer (voir ici)... Au moment où j'écris ces lignes (10 mois après) toujours pas de mises à jour depuis 2.5 ans ...
Le RFlink me sert à commander des relais achetés 3-4€ en chine.

  • Janvier 2020 - Migration sur ssd
Suite aux problèmes avec les cartes SD, j'ai migré mon Raspberry pi 3 sur un disque dur M2 fixé sur un shield. Le montage est propre. Je me sers de la carte SD pour enregistrer tous les jours un backup de DomoticZ et de mon paramétrage. On ne sait jamais ...

Edit juin 2020 : J'ai bien fait d'avoir cette sauvegarde, elle m'a permis de remonter mon DomoticZ sur une nouvelle installation.
  • Mars 2020 - Fenêtre de toit FAKRO
Comme je l'ai écrit plus haut, mes sondes de température me permettent de connaitre le meilleur moment pour ouvrir mes fenêtres afin de ventiler. En été, tous les soirs, je reçois un sms me disant que je peux ouvrir mes velux.

Refaisant complètement l'isolation de mon étage, j'en ai profité pour remplacer les velux de 30 ans. Je cherchais une solution motorisée et il semblerait que le protocole de communication de Velux soit "légèrement" fermé. Plus d'infos
J'ai demandé à mon couvreur de m'installer du Fakro. Alors oui il m'a fait payer deux fois la main d’œuvre comme c'était la première fois qu'il en installait, mais ils sont commandables en Zwave. Et tant qu'a y être, j'ai pris fenêtre et volet motorisés.
Le seul problème que j'y vois est la conception du volet qui peut être détruit si il est fermé et qu'on ouvre la fenêtre. Je prévois de faire un tuto là dessus (il faut que je finalise le fonctionnement).

  • Mai 2020 - Suivi de débit internet
Suite à une baisse de débit internet, je monitore mon Ping, de download et mon upload. Au moins je pourrais voir s'il y a de nouveau une baisse de débit. J'ai fait cela avec un script sh et une tache cron alors qu'il y avait un plugin directement dans DomoticZ :? On en apprend tous les jours :D

  • Juin 2020 - Plantage complet du Rapsberry
Je faisais différents essais car ma connexion wifi n'était pas stable. J'ai passé ma Zigate en USB et pour cela, j'ai eu besoin d'un hub USB. J'en avais un vieux avec une alimentation externe (donc nickel pour le raspberry). Sauf que le Hub plantait et à générer des doucis au niveau du Raspberry.
Je me suis retrouver avec le Raspberry bloqué au boot :shock:
J'ai essayé de faire une sauvegarde complète du disque dur avant formatage, impossible :twisted:
Les données ? Pas les droits > impossible de tout récupérer :twisted:
Heureusement que j'ai Backintime qui tourne tous les jours et j'ai pu recollé le dossier domoticz et quelques config (GPIO en particulier).
En résumé : 20 heures d'enregistrements de perdu, beaucoup de temps passer.
Je vais prévoir un Raspberry avec une carte sd en secours et en plus de mon backup sur carte SD, il faut que colle ça sur mon NAS.

  • Juillet 2020 - Sécurisation des sauvegardes sur le NAS
Voilà, après avoir galérer pour avoir les droits en écriture sur le partage cifs, je suis en train de copier tout mon système sur le NAS. Il ne restera plus qu'à automatiser la tache toutes les weekend et ce sera bon :mrgreen:

  • Août 2020 - Retour d'info onduleur
Depuis le début, mon Raspberry est protégé par un onduleur : c'était tellement une évidence pour moi que je ne l'avais pas mentionné dans mon matériel > c'est corrigé.
Donc je viens d'en profiter pour récupérer les infos de l'onduleur via un câble USB. J'ai installé un serveur NUT et le plugin NUT dans DomoticZ.

  • Novembre 2020 - Ajout prise BlitzWolf
Depuis le temps que j'en cherchais des pas chères :mrgreen: J'ai profité du Single Day chinois pour acheter des prises BlitzWolf EU BW-SHP13 en Zigbee avec mesure de la consommation électrique. Petite déception au départ, les widgets de consommations électriques restaient à 0 >> Il faut activer la récupération des infos dans la page d'admin du plugin de la Zigate (voir le wiki du plugin pour plus d'infos).
La conso électrique et le bouton sont vraiment un plus par rapport aux prises Ikea ;)

  • Janvier 2021 - Travail sur le Wiki FR de la ZiGate
Depuis le début, j'utilise le plugin de Pipiche pour la ZiGate et je souhaitais y apporter ma petite pierre à l'édifice. J'ai pu m'occupé de la documentation en français. Le Wiki est en ligne, les modifs de l'interface sont dans le canal Béta (pour le moment) et voici son retour.

  • Mars 2021 - Mesure de niveau dans des cuves
J'ai deux cuves d'eau pour lesquelles je souhaite suivre l'évolution du remplissage. Ne souhaitant avoir de capteurs à ultrason pour éviter les problématiques de rouille, je suis parti avec des capteurs de mesure de pression. Il faut un troisième capteur de pression absolue afin d'avoir une info relative et précise.

  • Mai 2021 - Passage de mes scripts en DzVents
J'avais commencé en LUA et le DzVents étant plus facile sur certains points, j'ai repris tous mes scripts. Cela m'a permis d'en regrouper certain et de les optimiser

  • Juillet 2021 - Installation module de consomation électrique
J'ai ajouté un wattmettre pour quivre la consomation électrioque d'un moteur afin de détecter, si possible, un colmatage d'un filtre. Plus d'infos.

  • Décembre 2021 - Migration de la communication via SMS sur une clé 3G
J'ai remplacé mon système de SMS via un vieux téléphone par une clé 3G branchée en USB Plus d'infos.

  • Avril 2022 - Instalaltion climatisation
J'ai fait installer une climatisation Gree et elle est commandable via DomoticZ. Plus d'infos.

  • Octobre 2022 - Remonté des logs sur un autre serveur
J'ai installé Loki et Grafana sur un serveur avec Docker et j'ai rajouté Promtail sur le Pi pour récupérer le fichier de logs de Domoticz et pousser les logs sur un autre serveur.

  • Mai 2023 - Remplacement de l'alimentation
La LED rouge du Pi scintillait Plus d'infos.

  • A venir plus tard
- Continuer les travaux dans la maison :mrgreen:
- Sécurisation des backups sur le NAS Fait
- Préparer un Raspberry de secours (suite plantage juin 2020) Fait
- Refaire mon installation domotique / informatique proprement dans une baie
- Pousser plus loin le rafraichissement / réchauffement de la maison Fait
- Améliorer la gestion du remplissage de mes cuves Fait
Dernière modification par Keros le 25 nov. 2020, 21:55, modifié 23 fois.
Keros
Messages : 4628
Inscription : 23 juil. 2019, 20:57

Keros : Mon matériel

Message par Keros »

Mon matériel
  • DomoticZ
DomoticZ en version stable 2022.1

  • Box
Raspberry PI 3B+ en version Buster
Montage sur SSD
Protégé derrière un onduleur

  • Protocole Zigbee
Passerelle : ZiGate USB V1 firmware OptiPDM

Équipements Xiaomi : capteurs de température, capteurs d'inondation, boutons
Équipements Ikea : prises connectées
Équipements BlitWolf : prises connectées
Équipements Tuya : Télécommande 3 bouton, sirène, wattmettre sur rail DIN
Équipements Sonoff : module ZBmini

  • Protocole Zwave
Passerelle : Aeotec ZW090 "Z-Stick" GEN5

Équipements Fakro : Fenêtre de toit FTU-V ZWave, Volet ARM ZWave

  • Protocole 433 MHz
Passerelle : RFLink (fabriqué en DIY)

Équipements chinois : Relais sans fil 1 contact, Relais sans fil 2 contacts

Le RfLink déconnant, j'ai remplacé les relais par des ZbMBmini

  • Protocole Wifi
Équipements Sonoff : Prises flashées sous ESPEasy

  • Relaiboard
Passerelle : GPIO

  • Arduino
Passerelle : USB

Équipements : Capteurs de pression pour fluide et BMP280

  • Téléinfo compteur électrique
Passerelle : USB

  • Notification par SMS
Passerelle : SMS Gateway Ultimate remplacée par clé 3G avec RaspiSMS

  • Données météo
API : Darksky et OpenWeatherMap

  • Protocole MQTT
Climatiseur Gree : Modules intérieur de type console

  • Et encore d'autre à venir :lol:
Dernière modification par Keros le 15 août 2020, 19:51, modifié 8 fois.
Keros
Messages : 4628
Inscription : 23 juil. 2019, 20:57

Keros : Ma philosophie sur le forum

Message par Keros »

Ma philosophie sur le forum

EDIT au 16/12/2020 : Voir mon message concernant ma modération

J'ai beaucoup appris sur ce forum. Je trouvais normal de passer du temps à mon tour pour partager mon expérience et essayer de guider les gens dans ce merveilleux monde de la domotique.

Ce monde est grand et complexe, en particulier quand on aborde la programmation.

Aider, ce n'est pas FAIRE à votre place !

Il serait possible de vous donner le script qui fonctionne, mais quand ça ne veut pas, on peut y passer un moment voir ici

Je pense que c'est à vous de rechercher, analyser, comprendre. Je serai là pour vous aiguiller, vous pousser vers la solution mais je ne veux pas vous la donner : c'est à vous de la trouver. Et vous aurez la satisfaction d'avoir compris et d'y être arrivé ;)



Pourquoi j'écris ceci ? C'est surtout suite à ce sujet.
didi a écrit : 29 mai 2020, 11:57 Dommage que tu ne puisses daigner céder quelques lignes de code fonctionnel

Je comprends l'attente de la personne et sa "frustration" mais ça remarque fait mal. Quelques messages plus loin, Neutrino (un modérateur), est venu faire un petit rappel qui me conforte dans ma philosophie :
Neutrino a écrit : 31 mai 2020, 23:14 Juste un petit rappel.
Cela peut agacer certains, mais sur ce forum, le but est de s'entraider. Nous ne sommes pas un SAV.
Nous sommes plusieurs à participer activement, plus ou moins régulièrement, mais toujours dans une approche de faire apprendre.
Donc parfois (souvent :roll: ), comme Keros je préfère mettre sur une piste plutôt que donner la réponse directement.

On ne demande pas la Lune, surtout pas la reconnaissance, mais des efforts et du partage.
Nous serons très heureux de t'aider, mais il va falloir commencer ton script toi-même et lire lire lire lire.
Il y a plein d'exemples et de documentation sur ce forum et le blog.
Tu pourras poster ton script final s'il fonctionne ou en cours de débogage pour qu'on t'aide.
Mais on ne le rédigera pas pour toi.

Les modos ici font très rarement la police, car ce n'est pas nécessaire.
Ce genre de commentaire :
"Dommage que tu ne puisses daigner céder quelques lignes de code fonctionnel"
n'est pas utile.
Dispo en MP pour en discuter si besoin afin de ne pas polluer le sujet.

Soyez bienveillants envers les uns les autres ;)
D'ailleurs, il me semble que j'entends souvent cette dernière phrase ... Peut-être ?? :roll: :lol:
Dernière modification par Keros le 23 juin 2020, 01:02, modifié 6 fois.
Keros
Messages : 4628
Inscription : 23 juil. 2019, 20:57

Keros : Mes tutoriels

Message par Keros »

Mes tutoriels

Liste de mes tutoriels :
Ce tutoriel explique comment récupérer les informations météo depuis l'API du site OpenWeatherMap.
Ce tutoriel explique comment configurer RaspiSMS pour que DomoticZ puisse recevoir des SMS et en envoyer.
Dernière modification par Keros le 23 juin 2020, 01:02, modifié 7 fois.
Keros
Messages : 4628
Inscription : 23 juil. 2019, 20:57

Keros : Débuter en programmation

Message par Keros »

Mes conseils pour débuter en programmation

Comme je l'ai écrit plus haut, le monde de la domotique est grand et la programmation permet de le rendre quasiment infini. Maintenant, comment commencer ?

  • En 1, il faut lire, lire et relire
Comme le disait mon prof de math en seconde :
M. Carry a écrit :"Ce n'est pas en regardant une cassette de karaté pendant 2 heures à la télé, que vous saurez faire du karaté après !
:lol:

Par où commencer alors :
C'est peut-être barbant, mais beaucoup de vos questions pour débuter trouverons des réponses dans ces quatre liens.

Après, toute la documentation est dans le https://www.domoticz.com/wiki.

Je rajoute un petit condensé des réponses qui reviennent "souvent" : Mes explications sur des points de programmation

Et un lien vers un lexique des commandes LUA qui permet d'avoir les bonnes syntaxes.

Il faut lire, lire et relire.

  • En 2, il faut se faire la main
Ton but est de fermer ton store quand il y a trop de vent ? (ou un autre exemple ...)

> Ne te lance pas dans le copier-coller d'un script que tu ne comprends pas. :arrow: Commence doucement :
  1. Affiche un texte "Hello world" (par exemple) dans les logs de DomoticZ > tu pourras faire du débogage (petite aide : utilise la fonction Time)
  2. Créer un bouton virtuel et quand tu appuid dessus tu fais apparaitre ton texte "Hello world" dans les log > Tu auras compris comment fonctionne l’exécution ;) (petite aide : il faudra remplacer la fonction Time par D-----)
  3. Créer un deuxième bouton virtuel et commande le second à partir du premier > Tu auras fait ton premier script fonctionnel !
  4. Créer un troisième device virtuel, mais du type Dimmer. Mets une condition que le second soit allumé seulement si la valeur du dimmer est supérieure à la moitié : tu auras compris la syntaxe pour faire des contritions. (petite aide : n'hésite pas à mettre des print() un peu partout pour comprendre ce qu'il se passe dans ton programme)
  5. Améliore ton dernier script pour prendre en compte le dimmer si et seulement si le premier bouton est activé.
Voilà, en 5 petites étapes, on peut commencer à avoir un programme complexe.

  • En 3, écrit ce que tu veux faire sur un papier
Ne te lance pas tout de suite à écrire ou copier du code. Écrit d'abord avec des mots ce que tu souhaites faire : "si j’appuie sur le bouton et que la lumière est éteinte, alors j'allume la lumière sinon j'éteins la lumière".

  • En 4, regarde les exemples
La programmation est, pour moi, un ensemble de briques que l'on assemble pour arriver à construire ce dont nous avons besoin.

Je vais faire une analogie : Toutes les maisons sont différentes. Tu ne peux pas en copier une et la poser sur ton terrain : tu auras forcément des choses qui feront qu'elle sera différentes (une exposition différente, une arrivée d'eau dans une autre configuration, etc ...). Et si tu ne les adaptes pas, elle risque de ne pas fonctionner correctement.
Ces briques dont je parle, il faut comprendre ce dont elles ont besoin pour fonctionner, ce qu'elles font, et ce qu'elles donnent à la fin. Tu pourras les assembler en mettant le ciment qui va bien pour les lier entre elles.
  • En 5, trouves les briques dont tu as besoin
Cherche dans ce forum, sur le wiki, sur un moteur de recherche : quelqu'un d'autre à certainement déjà poser la question ou expliquer comment faire.
Si tu as du mal à trouver la fonction que tu as besoin, pose la question sur le forum.
Dernière modification par Keros le 01 août 2020, 23:21, modifié 10 fois.
Keros
Messages : 4628
Inscription : 23 juil. 2019, 20:57

Keros : Pourquoi mon programme ne fonctionne pas ?

Message par Keros »

Mes conseils pour déboguer son programme

Le but ici est de vous donner des pistes pour que vous puissiez analyser et trouver où se trouve votre problème.

Il serait impossible de lister toutes les erreurs qu'il peut y avoir : pour donner un "a" ou un "A" peut avoir des résultats différents. Alors imaginez sur des scripts de 20, 50, 100 lignes :shock:

Je vais essayer de faire plusieurs parties :
  1. Le principe d'un programme
  2. Comment vérifier ce qu'il ce passe ?
  3. Déboguer votre programme
  4. Les pistes de recherche
  5. Résoudre le problème
Mes explications vont se baser sur le langage LUA appliqué à DomoticZ mais vous pouvez très bien les adapter pour le DzVents ou d'autres langages de programmation.


  • 1. Le principe d'un programme

Alors comment fonctionne les scripts ? Pour simplifier, il y a 4 étapes :

A - L’exécution du programme

Un programme doit être exécuté. Dans DomoticZ, il peut être lancer suite au changement d'un widget (Device), d'une variable (Variable) ou en fonction du temps (Time). (voir les différents types de script en lua sur le blog)


B - Les données d'entrées

Pour fonctionner, un programme a besoin d'avoir des informations. Cela peut être sur quel bouton on a appuyé, quel est la valeur d'une sonde ou autre.

C - Les calculs

Avec les données d'entrées, le programme réalise des calculs. Ce n'est pas forcément des calculs au sens mathématique : cela peut être des conditions (si la valeur de la sonde est supérieure à ...)

D - Les actions de sortie

C'est bien que le programme ait réalisé des calculs, mais encore faut-il qu'il en fasse quelque chose : allumer une lampe, fermer un relai, mettre à jour une info, etc ...


  • 2. Comment vérifier ce qu'il ce passe ?

Vous l'aurez compris, un programme est une boite noire : il prend des choses en entrée, on secoue, et il en ressort quelque chose à la fin.

Sauf qu'est-ce qu'il ce passe à l'intérieur ?

Pour le savoir, on réalise ce que l'on appelle le débogage. L'idée est remontée des informations au programmeur en cours d’exécution* du programme. Je mets un * car il y a une petite subtilité concernant la mise à jour des devices (j'y reviendrais plus loin).

Ces informations de débogage sont écrites dans les logs de DomoticZ (Configuration / Log). Ce sont des petites lignes qui s'ajoute lorsqu'il y a une action dans DomoticZ. Et quand il y a une erreur dans un programme, il y a généralement une ou plusieurs lignes en rouge vous indiquant qu'il y a une erreur.

Le programme ne fonctionne pas ("On l'avait remarqué"), maintenant on sait qu'il y a une erreur ... Reste maintenant à comprendre pourquoi il y a une erreur.
En utilisant la commande Print("Hello world"), on peut afficher le texte Hello World dans les log. On peut également faire un print d'une variable > cela permet de savoir ce qu'elle contient. La puissance du débogage est là !!


  • 3. Déboguer votre programme

Alors pourquoi un programme ne fonctionnerait pas ?

Vous aurez compris qu'il y a quelque chose qui ne se passe pas correctement dans l'une des 4 étapes listées au-dessus.

Le débogage va vous permettre de vérifier à chaque étape que votre programme contient les bonnes informations pour fonctionner.

Ma méthode pour déboguer est de partir de la fin et de remonter au début pour analyse ce qu'il se passe.

Je vais prendre l'exemple simple d'une ampoule que je cherche à allumer :

A l'endroit où j'ai mon code pour allumer la lumière, je mets un Print('Lumière allumée')

# Le texte "Lumière allumée" s'affiche dans les logs > c'est la commande de mon allumage qui pose problème. Est-ce que cela fonctionne manuellement depuis DomoticZ, est-ce que j'ai bien écrit ma commande ?

# Le texte "Lumière allumée" ne s'affiche pas dans les logs > là le problème est au niveau du programme : la commande n'est pas atteinte. Pourquoi ? Généralement la condition n'est pas validée. Faites un Print des valeurs de la condition et regarder avec quelles informations le programme travaille.

# Et ainsi de suite, on remonte pour analyser toutes les étapes du programme.


  • 4. Les pistes de recherche

Avec un débogage "complet", vous devrez pouvoir suivre toutes les étapes du programme dans les logs et connaitre (voir) toutes les variables.

Je vais essayer de lister les points à vérifier / contrôler :
  1. Vérifier que le programme s’exécute : un print au début et à la fin de votre script permettra de vérifier qu'il est bien exécuté dans sa totalité.
  2. Vérifier les conditions if xxxx then xxxxx else xxxx end : un print dans les conditions permet de savoir quelle partie de la condition est exécutée.
  3. La condition ne fonctionne pas correctement ? Il faut vérifier que les données de la condition sont bonnes. Un print avec la valeur de la variable avant la condition permet de savoir avec quelle information elle travaille.
  4. La valeur n'est pas bonne ? Vérifier que le nom de la variable est bonne : un espace de trop, une majuscule en plus ou en moins, un tiret différent ou maquant, etc ... Il faut exactement le même nom Quelques fois, il ne faut pas hésiter à revenir dans le device pour faire un copier/coller du nom.
  5. Vérifier que vous n'avez pas deux variables avec le même nom.
  6. Vérifier que la syntaxe des commandes est correct.
  7. Vérifier que vos conditions sont logiques (tester si X < 5 et X > 10 ne fonctionnera jamais).
  8. Vérifier que vos conditions correspondent bien aux infos retournées par les devices ("On" est différent de "Open", etc ...).
  9. Si le script est enregistré dans un fichier LUA, vérifier que le nom est du type script_device_XXX.lua ou script_time_XXX.lua ou autre en fonction du type de script (ne s'applique pas pour les scripts enregistrés dans les Évènements de DomoticZ).
  10. Si le script est enregistré dans un fichier LUA et que vous avez un problème d'exécution sur un script, essayer de dupliquer un script existant (et fonctionnel) et y mettre votre code.
Dernière modification par Keros le 25 juin 2020, 19:39, modifié 13 fois.
Keros
Messages : 4628
Inscription : 23 juil. 2019, 20:57

Keros : Le blocky

Message par Keros »

Mon avis sur le Blocky

Le blocky est un langage de programmation dans DomoticZ qui est ludique. Il permet de faire des choses simples sans avoir à écrire du code.

Maintenant, si votre programme commence un petit peu à ce compliqué, le blocky ressemble à ceci :

Image5.jpg
Image5.jpg (22.97 Kio) Consulté 17964 fois
On perd très vite la simplicité du départ :? De plus, ce n'est pas forcément évident de déboguer le programme.

Mon avis sur le Blocky : c'est un langage très bien pour découvrir la programmation et comprendre le fonctionnement des conditions. Maintenant si votre programme sort du simple "If Then Else", commencer à regarder le LUA. Oui, c'est compliqué au début, mais une fois que vous aurez compris l'idée de la syntaxe, vous pourrez faire des choses beaucoup plus poussées et complexes.

Regardez ma partie Débuter en programmation, je vous y donne quelques pistes pour commencer doucement ;)
Dernière modification par Keros le 23 juin 2020, 01:02, modifié 5 fois.
Keros
Messages : 4628
Inscription : 23 juil. 2019, 20:57

Keros : Mon choix de passer du LUA au DzVents

Message par Keros »

Mon choix de passer du LUA au DzVents



J'ai débuté la programmation en LUA. Lors de mes premières recherches, je trouvais le DzVents compliqué avec la première partie liée au déclencheur un peu complexe.
Au fil du temps, et de la complexité de mes programmes, le DzVents me semblait pouvoir répondre à mes besoins sur deux-trois que je liste ci-dessous ; j'ai sauté le pas et j'ai essayé :mrgreen:

  • Les avantages que j'y ai trouvés
  • On peut mélanger des déclenchements par devices ou par timer dans un même script.
  • Il est facile d'écrire des timers se déclenchant toutes les X minutes. Jusque-là, je bricolais en lua pour limiter les exécutions aux minutes 00. En DzVents j'écris every hours et c'est fait.
  • J'avais des actions sur des compteurs pour lesquels j'étais obligé de passer via l'API Json pour récupérer et écrire des infos. Le DzVents m'évite de passer par la couche Json.
  • Le DzVents permet de gérer les réponses aux appels Json. Je veux dire par là, que le programme lance l'appel, s'arrête et se relance lorsque la réponse est revenue. En LUA, j'avais les scripts qui tournaient plus de 10 secondes (avec l'erreur dans les logs) car la réponse ne revenait pas rapidement.
  • La fonction d'historique sur les devises m'a permis de faire 2-3 choses.

  • Explications - Partie déclencheurs
Comme je l'ai dit précédemment, la notion des déclencheurs est complétement différente que pour les scripts LUA : on a un petit peu de mal au départ.

Je vais essayer de donner une explication en présentant plusieurs possibilités de lancement. Alors oui, dans cet exemple, je ne fais rien avec le retour des infos du Json : c'est pour un principe.

Code : Tout sélectionner

return {
	on = {
                devices = { 'bouton1', 'bouton2'},
		timer = { 'every hour' },
                httpResponses = { 'Json-devices' }
	},


execute = function(domoticz, item)
      
      if item.trigger == 'bouton1' then
      
        domoticz.log("J'ai appuyer sur le bouton 1 !!", dz.LOG_INFO)
        
      elseif item.trigger == 'bouton2' then

        domoticz.log("J'ai appuyer sur le bouton 1 !!", dz.LOG_INFO)

      end
      
      
      if (item.isTimer) or (item.isDevice) then

          domoticz.openURL({
            url = 'http://127.0.0.1:8080/json.htm?type=devices',
            callback = 'Json-devices'
        })

      end
      
      if (item.isHTTPResponse) then
          if (item.ok) then
            domoticz.log("J'ai bien reçu un Json !!", dz.LOG_INFO)
          end
      end
    end
}
En premier, on définit quels déclencheurs vont exécuter le script. Dans ce cas d'exemple, il y a :
  • Des dispositifs : bouton1 et bouton2
  • Un timer qui sera toutes les heures
  • Une réponse HTTP que j'ai appelé Json-devices
Dès que l'un des déclencheurs va se produire, l'exécute sera lancé avec :
  • domoticz qui sera le nom de la variable utiliser pour nommer DomoticZ (certains l'appel juste dz car c'est plus rapide à écrire)
  • item qui sera le déclencheur qui aura lancé l'exécution. Vous pouvez y mettre le nom que vous voulez : dans les scripts exemple, vous pouvez trouver Item, Device, Timer. J'ai choisi d'utiliser item dans tous mes scripts : comme ça, quel que soit le script, mon déclencheur a le même nom item.
Ta partie "script" commence à partir de là.

Je fais faire des choses différentes en fonction du nom du déclencheur (item.trigger).

Ensuite, si le déclencheur est un Dispositif ou un Timer, alors je lance une requête Json. Mais une fois l'url lancée, on "arrête" le script.

On attend la réponse, pour utiliser le déclencheur HttpResponses et faire la dernière partie du script.

  • Explications - Partie requêtes URL
Je rencontrais des erreurs en LUA du type :

Code : Tout sélectionner

2021-05-04 23:00:13.444 Error: EventSystem: Warning!, lua script /home/pi/domoticz/scripts/lua/script_time_openMeteo.lua has been running for more than 10 seconds
Mon interprétation a été que le script tourne un moment car la réponse à l'API extérieure se fait attendre...
Le programme fonctionne, néanmoins, pour éviter ce messages j'ai transformé mon script en DzVents en utilisant la fonction httpResponses. Le wiki explique bien le principe.

Pour résumer et l'appliquer à notre cas :
  • Tu as une première partie du script déclenchée par un timer. Tu y mets la partie de programme LUA jusqu'au moment de l'appel Json (il faut évidement transformer le LUA en DzVents)
  • Ensuite, tu as une deuxième partie qui se déclenchera au retour de l'appel Json. Tu y mets la fin de ton programme (remplissage de widget et autres...)
Petite subtilité : le callback = 'trigger'. En fait, le retour de l'appel Json est identifié avec l'indication du callback. C'est cette indication qui déclenche le httpResponses. Par contre, si dans deux scripts différents, tu utilises la même valeur de callback, les deux httpResponses vont se lancer ... Normalement à ce moment-là, tu devrais avoir une erreur ;)
Pour éviter que cela se produise, j'ai mis le nom de mon script en callback : chaque script = son callback

Dernière modification par Keros le 18 juin 2020, 04:20, modifié 1 fois.
Keros
Messages : 4628
Inscription : 23 juil. 2019, 20:57

Re: Keros : Mon projet et des infos

Message par Keros »

Mes sauvegardes

Mon système fonctionne sous un Raspberry Pi 3B+.

Après avoir parcouru le forum, j'ai lu qu'il y a avait des risques de défaillances des cartes SD. J'ai donc migré mon système sur un SSD. Maintenant, le SSD n'est pas infaillible et les plantages peuvent arriver :mrgreen:

Il faut donc Sauvegarder, Sauvegarder et ... Sauvegarder.

Pour cela, j'utilise le logiciel BackinTime : https://github.com/bit-team/backintime Il fait des sauvegardes incrémentales et je le trouve simple d'utilisation.

Je fais deux sauvegardes :
  • Sur une carte SD - Quotidienne
Je sauvegarde tous les jours mon dossier DomoticZ sur ma carte SD.
  • Sur un NAS - Mensuel
Je sauvegarde tout le contenu de mon système sur un partage CIFS de mon NAS.


Attention : je ne dis pas que c'est le meilleur moyen pour faire des sauvegardes. C'est celui que j'ai trouvé et qui me convient.
Dernière modification par Keros le 07 déc. 2020, 18:31, modifié 4 fois.
Répondre