Arduino & Domoticz
Arduino & Domoticz
Bonjour,
Je suis un jeune utilisateur de Domoticz, et je fais des montages sous Arduino
Actuellement, j'ai conçu un contrôleur de débit d'eau qui ferme la vanne principale en cas de dépassement d'un débit défini.
A noter que ce contrôleur est piloté par plusieurs zones d'arrosage donc plusieurs débit différents. Chaque surconsommation donne lieu à une information visuelle sur mon LCD " Fuite Zone 1 " ou " zone 2 " etc...
Plusieurs Zones, un seul débitmètre, une seule Vanne Principale . Cette dernière n'est fermée que si la zone en "défaut" est activée, ce qui n'interdit pas l'arrosage sur les autres zones
Toutes ces précisions pour vous demander conseil sur le mode opératoire de transférer ces informations sur mon Domoticz et ainsi être averti par Mail d'une " Fuite sur Zone "x " "
Ce n'est pas une solution "clé en main" que je recherche, mais seulement un aiguillage pour ne pas me perdre dans des solutions scabreuses.
Merci par avance pour votre éclairage
A noter que j'utilise un PI 3B+ avec un SSD pour sauvegarde
Je suis un jeune utilisateur de Domoticz, et je fais des montages sous Arduino
Actuellement, j'ai conçu un contrôleur de débit d'eau qui ferme la vanne principale en cas de dépassement d'un débit défini.
A noter que ce contrôleur est piloté par plusieurs zones d'arrosage donc plusieurs débit différents. Chaque surconsommation donne lieu à une information visuelle sur mon LCD " Fuite Zone 1 " ou " zone 2 " etc...
Plusieurs Zones, un seul débitmètre, une seule Vanne Principale . Cette dernière n'est fermée que si la zone en "défaut" est activée, ce qui n'interdit pas l'arrosage sur les autres zones
Toutes ces précisions pour vous demander conseil sur le mode opératoire de transférer ces informations sur mon Domoticz et ainsi être averti par Mail d'une " Fuite sur Zone "x " "
Ce n'est pas une solution "clé en main" que je recherche, mais seulement un aiguillage pour ne pas me perdre dans des solutions scabreuses.
Merci par avance pour votre éclairage
A noter que j'utilise un PI 3B+ avec un SSD pour sauvegarde
Re: Arduino & Domoticz
Bonjour Bobardui et bienvenu sur le forum
Je viens de déplacer ton sujet dans la section dédiée au DIY.
Tu aurais quel moyen de communication entre ton système et ton serveur DomoticZ ?
Si tu as du Wifi et que ton montage peut communiquer dessus, tu peux utiliser l'API de DomoticZ pour envoyer des infos.
Tu as aussi les petites cartes à base d'ESP 32 (wemos D1 mini par exemple) avec une puce wifi sur lesquels on peut mettre ESPEasy ou Tasmota. Il faudrait alors que ton fonctionnement d'arrosage soit réécrit sous forme de règles.
Je viens de déplacer ton sujet dans la section dédiée au DIY.
Tu aurais quel moyen de communication entre ton système et ton serveur DomoticZ ?
Si tu as du Wifi et que ton montage peut communiquer dessus, tu peux utiliser l'API de DomoticZ pour envoyer des infos.
Tu as aussi les petites cartes à base d'ESP 32 (wemos D1 mini par exemple) avec une puce wifi sur lesquels on peut mettre ESPEasy ou Tasmota. Il faudrait alors que ton fonctionnement d'arrosage soit réécrit sous forme de règles.
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 vais communiquer en filaire avec une connexion sur un GPIO du raspberry si cela est possible, et ainsi éviter les quelques problèmes de communication en Wifi
Maintenant reste à savoir comment faire pour qu'une information provenant d'un arduino Uno soit lue et traduite vers Domoticz
Merci de votre aide
Je vais communiquer en filaire avec une connexion sur un GPIO du raspberry si cela est possible, et ainsi éviter les quelques problèmes de communication en Wifi
Maintenant reste à savoir comment faire pour qu'une information provenant d'un arduino Uno soit lue et traduite vers Domoticz
Merci de votre aide
Re: Arduino & Domoticz
Bonjour Bobardui,
Dans des montages similaires au tiens, j'ai utilisé la librairie MySensors sur l'arduino, par câble usb, en coupant le fil d'alim si l'arduino a déjà sa propre alimentation.
Les gpio de la plupart des arduinos sont en 5v, et ceux des pi sont en 3v3.
Je ne sais pas si c'est un bon conseil que je te donne, parce que j'ai l'impression que MySensors devient "old school". Mais enfin cela fonctionne très bien, et très simple a mettre en œuvre avec domoticz. Tu pourras garder ton code, simplement y déclarer avec la librairie tes objets que tu veux voir apparaître.
Dans des montages similaires au tiens, j'ai utilisé la librairie MySensors sur l'arduino, par câble usb, en coupant le fil d'alim si l'arduino a déjà sa propre alimentation.
Les gpio de la plupart des arduinos sont en 5v, et ceux des pi sont en 3v3.
Je ne sais pas si c'est un bon conseil que je te donne, parce que j'ai l'impression que MySensors devient "old school". Mais enfin cela fonctionne très bien, et très simple a mettre en œuvre avec domoticz. Tu pourras garder ton code, simplement y déclarer avec la librairie tes objets que tu veux voir apparaître.
Re: Arduino & Domoticz
Bonjour petrapi,
J'aimerai connaitre le langage utilisé par Arduino pour envoyer une info à Domoticz, et à ce sujet, pourrais-tu m'envoyer un exemple de code Arduino (à partir d'un de tes montages ) qui me permettrait de comprendre et ainsi faire des essais sans mettre en péril les deux applications
Actuellement je dispose d'une information " Fuite Zone 1 " que je souhaite avoir en alerte Mail de Domoticz
Je te joint l'intégralité du code Arduino, qui peut servir à d'autres utilisateurs
J'aimerai connaitre le langage utilisé par Arduino pour envoyer une info à Domoticz, et à ce sujet, pourrais-tu m'envoyer un exemple de code Arduino (à partir d'un de tes montages ) qui me permettrait de comprendre et ainsi faire des essais sans mettre en péril les deux applications
Actuellement je dispose d'une information " Fuite Zone 1 " que je souhaite avoir en alerte Mail de Domoticz
Je te joint l'intégralité du code Arduino, qui peut servir à d'autres utilisateurs
Code : Tout sélectionner
//detection de fuite avec bouton de réactivation pour plusieurs Zones avec plusieurs seuils de débit maxi lcd 20X4
#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 = 5000; // 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:
//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
// 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++;
}
Re: Arduino & Domoticz
Je viens de retrouver ce sujet qui se rapproche de ce que tu cherches à faire.
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
Le sujet retrouvé par Keros et intéressant oui, c'est bon a savoir merci ^^.
Et du coup Mysensors est potentiellement une sur-couche inutile.
Enfin si tu veux un exemple voici toujours:
J'ai adapté le code a ton cas, sans le tester.
A noter que soit tu créées autant d'objets de type "S_WATER_LEAK" que tu as de zones, soit tu utilises un seul "S_INFO" dans lequel tu met le texte que tu veux.
Dans domoticz, tu ajoutes un Matériel de type MySensors, tu configures le nom du port, et normalement tes "nodes" apparaissent dans les dispositifs.
Et du coup Mysensors est potentiellement une sur-couche inutile.
Enfin si tu veux un exemple voici toujours:
Code : Tout sélectionner
// Enable debug prints to serial monitor
//#define MY_DEBUG
// 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
//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);
//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);
}
//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"));A noter que soit tu créées autant d'objets de type "S_WATER_LEAK" que tu as de zones, soit tu utilises un seul "S_INFO" dans lequel tu met le texte que tu veux.
Dans domoticz, tu ajoutes un Matériel de type MySensors, tu configures le nom du port, et normalement tes "nodes" apparaissent dans les dispositifs.
Re: Arduino & Domoticz
Bonjour,
Merci pour votre retour,
Si je comprends bien, je dois ajouter un code dans l'arduino, mais aussi créer un code dans Domoticz.
Si c'est bien cela, à quel endroit je dois ajouter un code dans Domoticz ?
Je dois me faire une schématique de fonctionnement pour avancer et ne pas dépendre que des autres.
Y a-t-il des tutos qui expliquent les modes de programmation ?
Merci pour votre retour,
Si je comprends bien, je dois ajouter un code dans l'arduino, mais aussi créer un code dans Domoticz.
Si c'est bien cela, à quel endroit je dois ajouter un code dans Domoticz ?
Je dois me faire une schématique de fonctionnement pour avancer et ne pas dépendre que des autres.
Y a-t-il des tutos qui expliquent les modes de programmation ?
Re: Arduino & Domoticz
Avec MySensors non tu ajoutes seulement du code coté arduino.
Après dans domoticz tu utilises l'interface normalement pour ajouter un "matériel", dans la liste disponible tu sélectionnes Mysensors.
Après dans domoticz tu utilises l'interface normalement pour ajouter un "matériel", dans la liste disponible tu sélectionnes Mysensors.
Re: Arduino & Domoticz
Re
Je mélange peut-être un peu tout.....mais j'ai lu à quelque part que les pin "TX " et " RX " pouvaient être utilisés pour transférer des informations ?
Est-ce une solution ?
Si oui où trouver les modes opératoires pour mettre en œuvre cette possibilité ?
Je mélange peut-être un peu tout.....mais j'ai lu à quelque part que les pin "TX " et " RX " pouvaient être utilisés pour transférer des informations ?
Est-ce une solution ?
Si oui où trouver les modes opératoires pour mettre en œuvre cette possibilité ?