Arduino & Domoticz
Re: Arduino & Domoticz
Je pense que oui, mais je ne l'ai pas testé.
Ce serait un très bon exemple pour commencer à faire des scripts : quand le widget change, je mets une ligne d'info dans les logs. Ensuite, dans un deuxième temps, tu pourras rajouter le code pour envoyer la notification.
Ce serait un très bon exemple pour commencer à faire des scripts : quand le widget change, je mets une ligne d'info dans les logs. Ensuite, dans un deuxième temps, tu pourras rajouter le code pour envoyer la notification.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Re: Arduino & Domoticz
Bonjour Keros
Je n'ai pas tout compris C'est à partir de cela que je dois recherché un changement ?
Je n'ai pas tout compris C'est à partir de cela que je dois recherché un changement ?
Re: Arduino & Domoticz
J'essayais de te guider pour commencer ton script. Cela se rapproche de ce que j'explique dans mon petit guide pour débuter en programmation : commencer très simple (même si cela ne répond pas tout de suite à ton besoin) et ensuite rajouter d'autres fonctions pour arriver à faire ce que tu souhaites.
C'est ton script qui doit se lancer quand il y aura un changement sur ton Widget.
C'est ton script qui doit se lancer quand il y aura un changement sur ton Widget.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Re: Arduino & Domoticz
Bonsoir,
J'ai tenté un script qui me permet l'identification du texte contenu dans mon Widget Mesure " Fuite Zone "
Ci joint la copie d'écran des logs du device
et la copie d'écran des Logs dans " LOG "
Mon problème c'est que dans les logs, il y a beaucoup trop de lignes, et souvent il faut attendre très longtemps pour voir afficher le nouveau changement qui a bien eu lieu dans les logs du Widget
Ai-je loupé quelque chose ?
Ps : comment faire pour lire les logs sur plusieurs minutes ?
J'ai tenté un script qui me permet l'identification du texte contenu dans mon Widget Mesure " Fuite Zone "
Code : Tout sélectionner
return {
on = {
devices = {
'Fuite Zone'
}
},
logging = {
level = domoticz.LOG_INFO,
marker = 'template',
},
execute = function(domoticz, device)
domoticz.log('Fuite Zone' .. device.name .. ' was changed', domoticz.LOG_INFO)
end
}Ai-je loupé quelque chose ?
Ps : comment faire pour lire les logs sur plusieurs minutes ?
-
Flying Domotic
- Messages : 772
- Inscription : 10 mars 2020, 15:26
Re: Arduino & Domoticz
Ton script est correct, et fonctionne.
S'il est déclenché aussi souvent, c'est que le device "Fuite Zone" doit être changé très souvent aussi. Comme les valeurs semblent identiques, il n'est pas impossible qu'un script/évènement extérieur ait tendance à le réécrire à la même valeur en quasi permanence, même lorsqu'il ne change pas.
Peux-tu nous dire qui "écrit" Fuite zone, et à quel intervalle ?
Pour voir le log en complet, tout dépend de la façon dont le deamon a été lancé. C'est (en principe) indiqué dans le fichier domoticz.sh, qui se trouve (toujours en général) dans le répertoire /etc/init.d/domoticz.sh.
Par défaut, la lignes suivante est commentée :
Enlever le commentaire (supprimer le #), enregistrer la modification, mettre à jour le système de gestion de service par la commande
et relancer Domoticz
On devrait ensuite avoir un fichier /tmp/domoticz.txt, qu'on peut visualiser par
On peut aussi ne voir que les 100 dernières lignes par
ou voir les 100 dernières lignes et toutes celles qui arriveront ensuite par
S'il est déclenché aussi souvent, c'est que le device "Fuite Zone" doit être changé très souvent aussi. Comme les valeurs semblent identiques, il n'est pas impossible qu'un script/évènement extérieur ait tendance à le réécrire à la même valeur en quasi permanence, même lorsqu'il ne change pas.
Peux-tu nous dire qui "écrit" Fuite zone, et à quel intervalle ?
Pour voir le log en complet, tout dépend de la façon dont le deamon a été lancé. C'est (en principe) indiqué dans le fichier domoticz.sh, qui se trouve (toujours en général) dans le répertoire /etc/init.d/domoticz.sh.
Par défaut, la lignes suivante est commentée :
Code : Tout sélectionner
#DAEMON_ARGS="$DAEMON_ARGS -log /tmp/domoticz.txt"
Code : Tout sélectionner
sudo systemctl deamon_reloadCode : Tout sélectionner
sudo service domoticz restartCode : Tout sélectionner
cat /tmp/domoticz.tmpCode : Tout sélectionner
tail -n 100 /tmp/domoticz.tmpCode : Tout sélectionner
tail -n 100 -f /tmp/domoticz.tmpRe: Arduino & Domoticz
Pour les logs, merci de regarder la section Bien utiliser le forum pour rédiger votre message.
Normalement, il ne devrait pas y avoir de décalages. Ton DomoticZ tourne sur quel système ?
C'est quoi qui est trop bavard dans tes logs ? C'est le nombre d'exécutions de ton script ? C'est autre chose ?
Normalement, il ne devrait pas y avoir de décalages. Ton DomoticZ tourne sur quel système ?
C'est quoi qui est trop bavard dans tes logs ? C'est le nombre d'exécutions de ton script ? C'est autre chose ?
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Re: Arduino & Domoticz
Re,
Mais autre problème, j'ai modifié
C'est le programme ci jointPeux-tu nous dire qui "écrit" Fuite zone, et à quel intervalle ?
Code : Tout sélectionner
// Enable serial gateway
#define MY_GATEWAY_SERIAL
#include <MySensors.h>
//Definition des NODES:
#define NODE_ID_FUITE_ZONE1 1
#define NODE_ID_FUITE_TEXTE 4
#define NODE_ID_FUITE_SELECTOR 5
//https://www.mysensors.org/download/serial_api_20
// pour une node fuite d'eau il faut utiliser V_TRIPPED ou V_ARMED
MyMessage msgFuiteZone1(NODE_ID_FUITE_ZONE1, V_TRIPPED);
MyMessage msgFuiteTexte(NODE_ID_FUITE_TEXTE, V_TEXT);
MyMessage msgFuiteSelector(NODE_ID_FUITE_SELECTOR, V_PERCENTAGE);
#include <Wire.h> // Bibliothèque pour la communication I2C
#include <LiquidCrystal_I2C.h> // Bibliothèque pour le contrôle de l'écran LCD en mode I2C
LiquidCrystal_I2C lcd(0x27, 20, 4); // Adresse I2C de l'écran LCD 20x4
const int brocheDebit = 2; // Broche de la sonde de débit d'eau
const int brocheElectrovanne = 3; // Broche pour contrôler l'électrovanne
const int brocheBouton = 4; // Broche du bouton-poussoir pour remise à zéro
unsigned int compteImpulsions = 0;
float debitInstantane = 0.0;
float totalLitres = 0.0; // Changement d'unité de litres à mètres cubes
unsigned long tempsPrecedent = 0;
const long intervalle = 500; // Intervalle d'échantillonnage en millisecondes
const unsigned long delaiFermetureElectrovanne = 1000; // Délai de fermeture de l'électrovanne en millisecondes
enum Etat { REPOS,
ACTIF,
STOP };
// tous les éléments contenus dans la structure seront identifiés par un . précédant le nom de l'élément à rechercher
//par exemple, pour identifier le "seuilDebitCoupe", on inscrit "digitalRead(zone.seuilDebitCoupe)"
struct SZone {
const byte broche; // N° de la broche pour information de la zone d'arrosage
const float seuilDebitCoupe; // Débit maxi autorisé
Etat etat; //
unsigned long tempsDebutDebit;
unsigned long tempsDebutEtat;
};
SZone zones[] = {
{5, 1.1, REPOS, 0, 0}, // N° broche , Débit maxi, Etat etat , temps début débit, temps début Etat
{6, 2.1, REPOS, 0, 0},
{7, 3.1, REPOS, 0, 0},
{8, 4.1, REPOS, 0, 0},
{9, 5.1, REPOS, 0, 0},
{10, 6.1, REPOS, 0, 0}
};
void setup() {
lcd.begin(20, 4); // Initialisation de l'écran LCD 16x2
lcd.print("Debit: 0.0 m3/h");
lcd.setCursor(0, 1);
lcd.print("Total: 0.0 m3");
pinMode(brocheDebit, INPUT);
pinMode(brocheElectrovanne, OUTPUT);
pinMode(brocheBouton, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(brocheDebit), compteurImpulsions, FALLING);
}
void loop() {
unsigned long tempsActuel = millis(); // Obtient le temps actuel en millisecondes
if (tempsActuel - tempsPrecedent >= intervalle) {
// calcul et affichage du débit
noInterrupts();
unsigned int compteurLocal = compteImpulsions; // Conversion du nombre d'impulsions en débit instantané en Litres par minute
compteImpulsions = 0;
interrupts();
tempsPrecedent = tempsActuel;
float volume=compteurLocal/450.0; // volume en litre
debitInstantane=volume/intervalle*1000*60; // débit en l/mn
totalLitres += volume;
lcd.clear();
lcd.print("Debit: ");
lcd.print(debitInstantane, 0);
lcd.print(" L/mn");
lcd.setCursor(0, 1);
lcd.print("Total: ");
lcd.print(totalLitres, 0);
lcd.print(" L");
}
for (auto &zone : zones) // effectue le traitement pour toutes les zones
{
if (digitalRead(zone.broche) == HIGH) { //Lecture de l'information de l'arrosage de la Zone
switch (zone.etat) {
case REPOS:
digitalWrite(brocheElectrovanne, HIGH);
if (debitInstantane > zone.seuilDebitCoupe) {
zone.tempsDebutDebit = tempsActuel;
zone.etat = ACTIF;
}
break;
case ACTIF:
if (debitInstantane > zone.seuilDebitCoupe) {
if (tempsActuel - zone.tempsDebutDebit >= delaiFermetureElectrovanne) {
digitalWrite(brocheElectrovanne, LOW);
zone.etat = STOP;
zone.tempsDebutEtat = tempsActuel;
}
} else {
zone.etat = REPOS;
}
break;
case STOP:
const int zoneIndex = &zone - zones + 1;
//lcd.clear(); // Effacer l'écran après le message de démarrage
lcd.setCursor(0, 2);
lcd.print("Fuite Zone "); // Affiche un avertissement de fuite
lcd.print(zoneIndex); // affiche numéro de zone
//A placer a l'endroit de ton code ou tu veux remonter la fuite dans domoticz:
//send(msgFuiteZone1.set(zoneIndex));
char messageFuite[] = "Fuite zone 0";
messageFuite[11] += zoneIndex;
send(msgFuiteTexte.set(messageFuite));
//send(msgFuiteSelector.set(zoneIndex));
//lcd.clear(); // Effacer l'écran après le message de démarrage
//lcd.setCursor(0, 2);
//lcd.print("Fuite Zone"); // Affiche un avertissement de fuite
//lcd.print(&zone - zones + 1); // affiche numéro de zone
//A placer a l'endroit de ton code ou tu veux remonter la fuite dans domoticz:
//send(msgFuiteZone1.set(1));
//send(msgFuiteTexte.set("Fuite zone 1"));
// Nouvelle condition pour la réinitialisation avec maintien de 2 secondes
if (digitalRead(brocheBouton) == LOW) {
if (tempsActuel - zone.tempsDebutEtat >= 2000) {
digitalWrite(brocheElectrovanne, HIGH);
zone.etat = REPOS;
lcd.setCursor(0, 0);
lcd.print(" "); // Efface le texte "Fuite" lors du retour à l'état REPOS
lcd.setCursor(0, 1);
lcd.print(" "); // Efface le texte "Fuite" lors du retour à l'état REPOS
}
} else {
zone.tempsDebutEtat = tempsActuel;
}
break;
}
}
}
}
void compteurImpulsions() {
compteImpulsions++;
}
//Fonction de presentation a rajouter
void presentation()
{
// Present locally attached sensors
present(NODE_ID_FUITE_ZONE1, S_WATER_LEAK);
present(NODE_ID_FUITE_TEXTE, S_INFO);
present(NODE_ID_FUITE_SELECTOR, S_DIMMER);
}
et voici le résultat " Warning " et comme je ne suis pas un pro (eh bien je suis sous l'eau )Par défaut, la lignes suivante est commentée :
CODE : TOUT SÉLECTIONNER
#DAEMON_ARGS="$DAEMON_ARGS -log /tmp/domoticz.txt"
Enlever le commentaire (supprimer le #), enregistrer la modification, mettre à jour le système de gestion de service par la commande
CODE : TOUT SÉLECTIONNER
sudo systemctl deamon_reload
et relancer Domoticz
CODE : TOUT SÉLECTIONNER
sudo service domoticz restart
-
Flying Domotic
- Messages : 772
- Inscription : 10 mars 2020, 15:26
Re: Arduino & Domoticz
En ce qui concerne l'erreur, je me suis trompé dans la commande "deamon_reload". Il faut exécuter
avec un "-" et pas un "_" comme écrit initialement.
Pour le code, je regarde, mais il n'est pas impossible que les mises à jour soient permanentes.
Code : Tout sélectionner
sudo systemctl daemon-reloadPour le code, je regarde, mais il n'est pas impossible que les mises à jour soient permanentes.
Re: Arduino & Domoticz
Ouuuufff !!
Merci....je continue
Merci....je continue
Re: Arduino & Domoticz
Raspberry PI 3B+Normalement, il ne devrait pas y avoir de décalages. Ton DomoticZ tourne sur quel système ?
Petite explication sur mon programme Arduino en amont :
Quand la broche d'information de la zone d'arrosage est activée et que le débit est supérieur au débit paramétré, la " case STOP " est activée avec l'envoi d'une information de "fuite Zone x "
Cette information est désactivée par un " reset " sur la broche 4