domotisation cuve 1000L
Re: domotisation cuve 1000L
bonjour
effectivement j'ai mis 2 secondes sur le programme et je n'ai plus de problème de compilation.
en revanche pour le coté remonté d'information, j'ai essaye de brancher un capteur entre le 5V et la borne 1 (en contact) mais le capteur n'apparait pas avec la fléche verte et je vais avoir besoins d'aide je pense
effectivement j'ai mis 2 secondes sur le programme et je n'ai plus de problème de compilation.
en revanche pour le coté remonté d'information, j'ai essaye de brancher un capteur entre le 5V et la borne 1 (en contact) mais le capteur n'apparait pas avec la fléche verte et je vais avoir besoins d'aide je pense
Re: domotisation cuve 1000L
Par contre je viens de m'apercevoir de quelque chose je ne sait pas si c'est moi ou si il faut que je modifie
dans le programme il avait été écrit de la manière suivante:
/************* Definitions liées à la fonction mesure de niveau d'eau ***********************************/
#define BROCHE_NIVEAU_0 1 // broche sur laquelle le capteur le plus bas est connecté sur l'arduino
#define BROCHE_NIVEAU_1 4
#define BROCHE_NIVEAU_2 3
#define BROCHE_NIVEAU_3 7
#define BROCHE_NIVEAU_4 5
#define BROCHE_NIVEAU_5 6
#define BROCHE_NIVEAU_6 2
#define BROCHE_NIVEAU_7 8
#define BROCHE_NIVEAU_8 9
#define BROCHE_NIVEAU_9 10 // broche sur laquelle le capteur le plus haut est connecté sur l'arduino
mais 9 et 10 sont deja utilisée par le nrf?
dans le programme il avait été écrit de la manière suivante:
/************* Definitions liées à la fonction mesure de niveau d'eau ***********************************/
#define BROCHE_NIVEAU_0 1 // broche sur laquelle le capteur le plus bas est connecté sur l'arduino
#define BROCHE_NIVEAU_1 4
#define BROCHE_NIVEAU_2 3
#define BROCHE_NIVEAU_3 7
#define BROCHE_NIVEAU_4 5
#define BROCHE_NIVEAU_5 6
#define BROCHE_NIVEAU_6 2
#define BROCHE_NIVEAU_7 8
#define BROCHE_NIVEAU_8 9
#define BROCHE_NIVEAU_9 10 // broche sur laquelle le capteur le plus haut est connecté sur l'arduino
mais 9 et 10 sont deja utilisée par le nrf?
Re: domotisation cuve 1000L
bon voila j'ai modifié le code (si peux comparé à ce qui as été fait pas vous tous)
remplacement des pin 9 et 10 par A0 et A1
y a du nouveau mais encore un blocage de domoticz
quand je met en place un niveau d'eau fictif maintenant il apparait dans les dispositif comme un capteur de mesure mais impossible d'appuyer sur la fléche verte
pareil il affiche la valeur en kw/h
pour le moment la sonde de température n'est pas connecté (car problème d'acheminement) est ce que ca pourrait venir du fait que le capteur n'est pas complet d'ou l'impossibilité de l'ajouter ?
une idée ?
remplacement des pin 9 et 10 par A0 et A1
Code : Tout sélectionner
/************* Definitions liées à la fonction mysensors ***********************************/
#define DUREE_VEILLE_EN_SECONDES 3600
#define TEMPERATURE_CHILD_ID 1
#define NIVEAU_CHILD_ID 2
MyMessage msg_niveau(NIVEAU_CHILD_ID, V_VOLUME);
MyMessage msg_temperature(TEMPERATURE_CHILD_ID, V_TEMP);
/************* Definitions liées à la fonction mesure de température ***********************************/
#define BROCHE_BUS_ONE_WIRE 12 // broche sur laquelle la broche data du DS18b20 est connectée sur l'arduino
#define BROCHE_ALIMENTATION_ONE_WIRE 13 // broche sur laquelle la broche VCC du DS18b20 est connectée sur l'arduino
#define MAX_ATTACHED_DS18B20 1
OneWire oneWire(BROCHE_BUS_ONE_WIRE);
DallasTemperature sensors(&oneWire);
/************* Definitions liées à la fonction mesure de niveau d'eau ***********************************/
#define BROCHE_NIVEAU_0 1 // broche sur laquelle le capteur le plus bas est connecté sur l'arduino
#define BROCHE_NIVEAU_1 4
#define BROCHE_NIVEAU_2 3
#define BROCHE_NIVEAU_3 7
#define BROCHE_NIVEAU_4 5
#define BROCHE_NIVEAU_5 6
#define BROCHE_NIVEAU_6 2
#define BROCHE_NIVEAU_7 8
#define BROCHE_NIVEAU_8 A0
#define BROCHE_NIVEAU_9 A1 // broche sur laquelle le capteur le plus haut est connecté sur l'arduino
unsigned char entreesNiveauEau[] = { // tableau contenant la liste des entrées des capteurs de niveau
BROCHE_NIVEAU_0,
BROCHE_NIVEAU_1,
BROCHE_NIVEAU_2,
BROCHE_NIVEAU_3,
BROCHE_NIVEAU_4,
BROCHE_NIVEAU_5,
BROCHE_NIVEAU_6,
BROCHE_NIVEAU_7,
BROCHE_NIVEAU_8,
BROCHE_NIVEAU_9
};
// niveau logique sur la broche reliée au capteur de niveau lorsque celui-ci ne détecte pas d'eau
#define ETAT_CAPTEUR_AU_REPOS LOW
unsigned char mesurerNiveauEau() {
unsigned char nbEntrees = sizeof(entreesNiveauEau) / sizeof(entreesNiveauEau[0]);
unsigned char niveau = 0;
for (int i=0; i<nbEntrees; i++) { // pour chaque capteur
if (digitalRead(entreesNiveauEau [i]) == ETAT_CAPTEUR_AU_REPOS) { // si le capteur ne détecte pas d'eau
if (i < (nbEntrees + 1)) { // si on n'est pas sur le dernier capteur
if (digitalRead(entreesNiveauEau[i]) == ETAT_CAPTEUR_AU_REPOS) { // si le capteur suivant ne détecte pas d'eau
break; // on sort de la boucle if
}
}
}
niveau++;
}
return niveau;
}
unsigned char mesurerNiveauEauSimple() {
unsigned char nbEntrees = sizeof(entreesNiveauEau) / sizeof(entreesNiveauEau[0]);
unsigned char niveau = 0;
for (int i=0; i<nbEntrees; i++) { // pour chaque capteur
niveau = niveau * 2; // décalage bit à bit de un bit vers la gauche
if (digitalRead(entreesNiveauEau[i]) != ETAT_CAPTEUR_AU_REPOS) { // si le capteur ne détecte pas d'eau
niveau = niveau+1; // positionne le bit le plus à droite à 1
}
}
return niveau;
}
void setup(void){
// configuration liée à la mesure de température
DeviceAddress sensorDeviceAddress;
pinMode(BROCHE_ALIMENTATION_ONE_WIRE, OUTPUT); // configure la broche en sortie pour pouvoir alimenter le ds18b20
digitalWrite(BROCHE_ALIMENTATION_ONE_WIRE, HIGH); // alimente le ds18b20
sleep(100); // attend 100ms pour permettre au ds18b20 de démarrer tranquillement (temps mis au pif, en cas de problème, vérifier dans le datasheet)
sensors.begin(); // Activation des capteurs
sensors.getAddress(sensorDeviceAddress, 0); // Récupère l'adresse du premier capteur du bus
sensors.setResolution(sensorDeviceAddress, 12); // Configure la résoluton de la mesure
// configuration liée à la mesure de niveau
unsigned char nbEntrees = sizeof(entreesNiveauEau) / sizeof(entreesNiveauEau[0]);
for (int i=0; i<nbEntrees; i++) { // pour chaque capteur
pinMode(entreesNiveauEau[i], INPUT_PULLUP); // configure la broche en entrée avec un pullup
}
}
void presentation()
{
// Emission du nom du module
sendSketchInfo("Etat de la cuve d'eau", "1.0");
// Presentation des fonctions
present(NIVEAU_CHILD_ID, S_WATER, "Niveau d'eau");
present(TEMPERATURE_CHILD_ID, S_TEMP, "Température d'eau");
}
void loop(void){
float temperature;
digitalWrite(BROCHE_ALIMENTATION_ONE_WIRE, HIGH); // alimente le ds18b20
sleep(100); // attend 100ms pour permettre au ds18b20 de démarrer tranquillement (temps mis au pif, en cas de problème, vérifier dans le datasheet)
sensors.requestTemperatures(); // Déclenche la lecture des capteurs 1wire
temperature = sensors.getTempCByIndex(0); // Récupère la température en celsius du premier capteur
Serial.print("La température est: "); // Affichage dans la liaison de debug
Serial.print(temperature);
Serial.println(" C°");
send(msg_niveau.set(temperature, 2)); // envoi de la valeur sur le résuea mysensors
unsigned char niveauEau = mesurerNiveauEau(); // récupère le niveau d'eau
Serial.print("Le niveau est : ");
Serial.print(niveauEau);
Serial.println(" C°");
send(msg_niveau.set(niveauEau));
digitalWrite(BROCHE_ALIMENTATION_ONE_WIRE, LOW); // coupe l'alimentation du ds18b20 pour économiser la batterie
sleep(DUREE_VEILLE_EN_SECONDES * 2);
}quand je met en place un niveau d'eau fictif maintenant il apparait dans les dispositif comme un capteur de mesure mais impossible d'appuyer sur la fléche verte
pareil il affiche la valeur en kw/h
pour le moment la sonde de température n'est pas connecté (car problème d'acheminement) est ce que ca pourrait venir du fait que le capteur n'est pas complet d'ou l'impossibilité de l'ajouter ?
une idée ?
Re: domotisation cuve 1000L
Je ne pense pas que l'absence du capteur de température puisse poser un problème.
Pour la flèche verte, je n'ai jamais rencontré de cas où l'appui n'était pas possible.
Pour les kw/h, je pense qu'il faut modifier la configuration du compteur qqpart dans l'interface de domoticz, je ne sais plus où. J'avais trouvé le truc en passant du temps sur ce forum...
Pour la flèche verte, je n'ai jamais rencontré de cas où l'appui n'était pas possible.
Pour les kw/h, je pense qu'il faut modifier la configuration du compteur qqpart dans l'interface de domoticz, je ne sais plus où. J'avais trouvé le truc en passant du temps sur ce forum...
Re: domotisation cuve 1000L
j'ai regardé dans la configuration domoticz des capteurs il n'y a rien pour résoudre mon problème
tu as bien les compteurs eau ect et les prix au m3 ou kw/h mais rien pour mon capteur
tu as bien les compteurs eau ect et les prix au m3 ou kw/h mais rien pour mon capteur
Re: domotisation cuve 1000L
bonjour a tous
je viens de comparer les programmes du capteur original et celui crée ici par la cuve
dans l'original il y a une ligne comme ca
Serial.println(metric?" cm":" in");
et dans celui crée ça donne ça
Serial.print("Le niveau est : ");
en fait il faudrait découpe en litre par capteur de 0 a 1000L et que le capteur envoie cette information
quelqu'un sait comment faire?
merci a tous
je viens de comparer les programmes du capteur original et celui crée ici par la cuve
dans l'original il y a une ligne comme ca
Serial.println(metric?" cm":" in");
et dans celui crée ça donne ça
Serial.print("Le niveau est : ");
en fait il faudrait découpe en litre par capteur de 0 a 1000L et que le capteur envoie cette information
quelqu'un sait comment faire?
merci a tous
Re: domotisation cuve 1000L
bonjour a tous
j'ai reçu aujourd'hui une sonde ds18b20 pour pouvoir faire mes tests a la maison et une nouvelle fois impasse pour moi
domoticz ne vois pas du tout la partie température et pour le niveau d'eau ca m'affiche:
Niveau d'eau RFXMeter RFXMeter counter 10.000 kWh
14 sensors V2 00000001 1 Niveau d'eau General Percentage -127.00%
et bien entendu toujours le même soucis impossible d'ajouter le dispositif via la flèche verte.
Je me suis rendu compte que les pins qui était défini pour la sonde de température était en conflit avec le nrf de mysensors j'ai donc modifier ses pin par A2 et A3
je remet le code modifié si defois quelqu’un peut me dépanner .
merci à tous
j'ai reçu aujourd'hui une sonde ds18b20 pour pouvoir faire mes tests a la maison et une nouvelle fois impasse pour moi
domoticz ne vois pas du tout la partie température et pour le niveau d'eau ca m'affiche:
Niveau d'eau RFXMeter RFXMeter counter 10.000 kWh
14 sensors V2 00000001 1 Niveau d'eau General Percentage -127.00%
et bien entendu toujours le même soucis impossible d'ajouter le dispositif via la flèche verte.
Je me suis rendu compte que les pins qui était défini pour la sonde de température était en conflit avec le nrf de mysensors j'ai donc modifier ses pin par A2 et A3
je remet le code modifié si defois quelqu’un peut me dépanner .
Code : Tout sélectionner
#define MY_DEBUG
#define MY_DEBUG_VERBOSE_SIGNING
#define MY_NODE_LOCK_FEATURE
// Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_NRF5_ESB
//#define MY_RADIO_RFM69
//#define MY_RADIO_RFM95
#include <MySensors.h>
#include <OneWire.h>
#include <DallasTemperature.h>
/************* Definitions liées à la fonction mysensors ***********************************/
#define DUREE_VEILLE_EN_SECONDES 3600
#define TEMPERATURE_CHILD_ID 1
#define NIVEAU_CHILD_ID 2
MyMessage msg_niveau(NIVEAU_CHILD_ID, V_VOLUME);
MyMessage msg_temperature(TEMPERATURE_CHILD_ID, V_TEMP);
/************* Definitions liées à la fonction mesure de température ***********************************/
#define BROCHE_BUS_ONE_WIRE A3 // broche sur laquelle la broche data du DS18b20 est connectée sur l'arduino
#define BROCHE_ALIMENTATION_ONE_WIRE A2 // broche sur laquelle la broche VCC du DS18b20 est connectée sur l'arduino
#define MAX_ATTACHED_DS18B20 1
OneWire oneWire(BROCHE_BUS_ONE_WIRE);
DallasTemperature sensors(&oneWire);
/************* Definitions liées à la fonction mesure de niveau d'eau ***********************************/
#define BROCHE_NIVEAU_0 1 // broche sur laquelle le capteur le plus bas est connecté sur l'arduino
#define BROCHE_NIVEAU_1 4
#define BROCHE_NIVEAU_2 3
#define BROCHE_NIVEAU_3 7
#define BROCHE_NIVEAU_4 5
#define BROCHE_NIVEAU_5 6
#define BROCHE_NIVEAU_6 2
#define BROCHE_NIVEAU_7 8
#define BROCHE_NIVEAU_8 A0
#define BROCHE_NIVEAU_9 A1 // broche sur laquelle le capteur le plus haut est connecté sur l'arduino
unsigned char entreesNiveauEau[] = { // tableau contenant la liste des entrées des capteurs de niveau
BROCHE_NIVEAU_0,
BROCHE_NIVEAU_1,
BROCHE_NIVEAU_2,
BROCHE_NIVEAU_3,
BROCHE_NIVEAU_4,
BROCHE_NIVEAU_5,
BROCHE_NIVEAU_6,
BROCHE_NIVEAU_7,
BROCHE_NIVEAU_8,
BROCHE_NIVEAU_9
};
// niveau logique sur la broche reliée au capteur de niveau lorsque celui-ci ne détecte pas d'eau
#define ETAT_CAPTEUR_AU_REPOS LOW
unsigned char mesurerNiveauEau() {
unsigned char nbEntrees = sizeof(entreesNiveauEau) / sizeof(entreesNiveauEau[0]);
unsigned char niveau = 0;
for (int i=0; i<nbEntrees; i++) { // pour chaque capteur
if (digitalRead(entreesNiveauEau [i]) == ETAT_CAPTEUR_AU_REPOS) { // si le capteur ne détecte pas d'eau
if (i < (nbEntrees + 1)) { // si on n'est pas sur le dernier capteur
if (digitalRead(entreesNiveauEau[i]) == ETAT_CAPTEUR_AU_REPOS) { // si le capteur suivant ne détecte pas d'eau
break; // on sort de la boucle if
}
}
}
niveau++;
}
return niveau;
}
unsigned char mesurerNiveauEauSimple() {
unsigned char nbEntrees = sizeof(entreesNiveauEau) / sizeof(entreesNiveauEau[0]);
unsigned char niveau = 0;
for (int i=0; i<nbEntrees; i++) { // pour chaque capteur
niveau = niveau * 2; // décalage bit à bit de un bit vers la gauche
if (digitalRead(entreesNiveauEau[i]) != ETAT_CAPTEUR_AU_REPOS) { // si le capteur ne détecte pas d'eau
niveau = niveau+1; // positionne le bit le plus à droite à 1
}
}
return niveau;
}
void setup(void){
// configuration liée à la mesure de température
DeviceAddress sensorDeviceAddress;
pinMode(BROCHE_ALIMENTATION_ONE_WIRE, OUTPUT); // configure la broche en sortie pour pouvoir alimenter le ds18b20
digitalWrite(BROCHE_ALIMENTATION_ONE_WIRE, HIGH); // alimente le ds18b20
sleep(100); // attend 100ms pour permettre au ds18b20 de démarrer tranquillement (temps mis au pif, en cas de problème, vérifier dans le datasheet)
sensors.begin(); // Activation des capteurs
sensors.getAddress(sensorDeviceAddress, 0); // Récupère l'adresse du premier capteur du bus
sensors.setResolution(sensorDeviceAddress, 12); // Configure la résoluton de la mesure
// configuration liée à la mesure de niveau
unsigned char nbEntrees = sizeof(entreesNiveauEau) / sizeof(entreesNiveauEau[0]);
for (int i=0; i<nbEntrees; i++) { // pour chaque capteur
pinMode(entreesNiveauEau[i], INPUT_PULLUP); // configure la broche en entrée avec un pullup
}
}
void presentation()
{
// Emission du nom du module
sendSketchInfo("Etat de la cuve d'eau", "1.0");
// Presentation des fonctions
present(NIVEAU_CHILD_ID, S_WATER, "Niveau d'eau");
present(TEMPERATURE_CHILD_ID, S_TEMP, "Température d'eau");
}
void loop(void){
float temperature;
digitalWrite(BROCHE_ALIMENTATION_ONE_WIRE, HIGH); // alimente le ds18b20
sleep(100); // attend 100ms pour permettre au ds18b20 de démarrer tranquillement (temps mis au pif, en cas de problème, vérifier dans le datasheet)
sensors.requestTemperatures(); // Déclenche la lecture des capteurs 1wire
temperature = sensors.getTempCByIndex(0); // Récupère la température en celsius du premier capteur
Serial.print("La température est: "); // Affichage dans la liaison de debug
Serial.print(temperature);
Serial.println(" C°");
send(msg_niveau.set(temperature, 2)); // envoi de la valeur sur le résuea mysensors
unsigned char niveauEau = mesurerNiveauEau(); // récupère le niveau d'eau
Serial.print("Le niveau est : ");
Serial.print(niveauEau);
Serial.println(" C°");
send(msg_niveau.set(niveauEau));
digitalWrite(BROCHE_ALIMENTATION_ONE_WIRE, LOW); // coupe l'alimentation du ds18b20 pour économiser la batterie
sleep(DUREE_VEILLE_EN_SECONDES * 2);
}merci à tous
Re: domotisation cuve 1000L
Avant de vouloir tout faire fonctionner en même temps, je te propose d'y aller par étapes :
1. S'assurer que domoticz gère bien les capteurs en remonter de fausses valeurs chaque seconde avec la boucle loop suivante :
Et là, il faut que tu arrives à voir les deux capteurs dans domoticz et cliquer sur la fameuse flèche verte. Ca ne sert à rien de vouloir aller plus loin avant.
Une fois les deux capteurs rangés dans les devices utilisés, il doit être possible de modifier la config du capteur niveau dans la page mesures (pour avoir des litres et non des kwh)
2. ajouter le code de lecture de la température et s'assurer que la valeur de température mesurée est bien affichée dans les traces de debug du moniteur arduino, puit s'assurer que la valeur est bien remontée à domoticz
3. idem pour le niveau.
1. S'assurer que domoticz gère bien les capteurs en remonter de fausses valeurs chaque seconde avec la boucle loop suivante :
Code : Tout sélectionner
void loop(void){
float temperature = 12.3;
int niveau = 10;
send(msg_temperature.set(temperature, 2));
send(msg_niveau.set(niveau));
delay(1000);
Une fois les deux capteurs rangés dans les devices utilisés, il doit être possible de modifier la config du capteur niveau dans la page mesures (pour avoir des litres et non des kwh)
2. ajouter le code de lecture de la température et s'assurer que la valeur de température mesurée est bien affichée dans les traces de debug du moniteur arduino, puit s'assurer que la valeur est bien remontée à domoticz
3. idem pour le niveau.
Re: domotisation cuve 1000L
bonjour
désole de te répondre que maintenant j'ai pas forcement été très dispos
on va y aller pas a pas effectivement
le bout de code que tu m'a donné je l'injecte tout seul dans l'arduino c'est ca?
désole de te répondre que maintenant j'ai pas forcement été très dispos
on va y aller pas a pas effectivement
le bout de code que tu m'a donné je l'injecte tout seul dans l'arduino c'est ca?
Re: domotisation cuve 1000L
bonjour a tous
je me permet de faire remonter le post pour la domotisation de ma cuve de 1000L
je n'ai toujours pas reussi a faire communiquer avec domoticz
pour la partie code est il possible juste de modifier le code de base (https://www.mysensors.org/build/distance) en remplaçant le ping du capteur par une vérification du capteur engagé?
en fait je suppose qu'il faudrait remplacer la fonction metric qui calcul le ping par une constante qui prend le plus élevé
merci a tous
je me permet de faire remonter le post pour la domotisation de ma cuve de 1000L
je n'ai toujours pas reussi a faire communiquer avec domoticz
pour la partie code est il possible juste de modifier le code de base (https://www.mysensors.org/build/distance) en remplaçant le ping du capteur par une vérification du capteur engagé?
en fait je suppose qu'il faudrait remplacer la fonction metric qui calcul le ping par une constante qui prend le plus élevé
merci a tous