domotisation cuve 1000L

Un forum dédie à vos questions concernant l'intégration à Domoticz des capteurs et gateway mysensors.org
dd91
Messages : 96
Enregistré le : 18 nov. 2014, 13:06

Re: domotisation cuve 1000L

Message par dd91 » 19 nov. 2018, 16:38

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

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


dd91
Messages : 96
Enregistré le : 18 nov. 2014, 13:06

Re: domotisation cuve 1000L

Message par dd91 » 19 nov. 2018, 19:47

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?

dd91
Messages : 96
Enregistré le : 18 nov. 2014, 13:06

Re: domotisation cuve 1000L

Message par dd91 » 20 nov. 2018, 15:54

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

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);


}
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
Capture 4.PNG
Capture 4.PNG (21.56 Kio) Vu 1765 fois
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 ?

domdom
Messages : 62
Enregistré le : 20 mai 2016, 10:48
Localisation : Ille-et-Vilaine

Re: domotisation cuve 1000L

Message par domdom » 20 nov. 2018, 20:51

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...

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


dd91
Messages : 96
Enregistré le : 18 nov. 2014, 13:06

Re: domotisation cuve 1000L

Message par dd91 » 21 nov. 2018, 18:34

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

dd91
Messages : 96
Enregistré le : 18 nov. 2014, 13:06

Re: domotisation cuve 1000L

Message par dd91 » 23 nov. 2018, 18:07

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

dd91
Messages : 96
Enregistré le : 18 nov. 2014, 13:06

Re: domotisation cuve 1000L

Message par dd91 » 12 déc. 2018, 22:08

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 .

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

domdom
Messages : 62
Enregistré le : 20 mai 2016, 10:48
Localisation : Ille-et-Vilaine

Re: domotisation cuve 1000L

Message par domdom » 18 déc. 2018, 23:52

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 :

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);
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.

dd91
Messages : 96
Enregistré le : 18 nov. 2014, 13:06

Re: domotisation cuve 1000L

Message par dd91 » 08 janv. 2019, 20:14

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?

dd91
Messages : 96
Enregistré le : 18 nov. 2014, 13:06

Re: domotisation cuve 1000L

Message par dd91 » 26 avr. 2019, 15:07

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

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre