CAPTEUR PHOTOELECTRIQUE - 2 présents, 1 seul affiché [RESOLU partiellement]

Forum dédie aux capteurs et gateway mysensors.org
lamaisondelou69
Messages : 24
Inscription : 16 mars 2020, 18:58

CAPTEUR PHOTOELECTRIQUE - 2 présents, 1 seul affiché [RESOLU partiellement]

Message par lamaisondelou69 »

Bonjour et merci pour ce forum très utile, riche d'inspiration !
Je rencontre une difficulté que je ne parviens pas à surmonter.
Matériel : Arduino UNO avec 2 cellules photoélectriques (photorésistance + résistance 10Kohms) avec Shield Ethernet W5100.
Domoticz V2020.2 sur Raspberry 3B.

Sur Domoticz, dans la partie Matériels, je vois bien mon Noeud Light Sensor avec les 2 fils avec CHILD_ID 14 et 15. Les 2 remontent des valeurs identiques à celles vues dans le moniteur série de l'Arduino.

Mais dans la partie Dispositifs, je ne vois qu'une ligne Light Level correspondante, et en cliquant plusieurs fois sur Rafraîchir, il m'affiche tantôt la valeur de la sonde 1, tantôt la valeur de la sonde 2.

Je ne vois pas sur quoi agir pour faire apparaître dans les Dispositifs mes 2 sondes.

Ci-joint le code de l'Arduino.

Code : Tout sélectionner

// Enable debug prints to serial monitor
#define MY_DEBUG

// Enable gateway ethernet module type
#define MY_GATEWAY_W5100

// Enable Soft SPI for NRF radio (note different radio wiring is required)
// The W5100 ethernet module seems to have a hard time co-operate with
// radio on the same spi bus.
#if !defined(MY_W5100_SPI_EN) && !defined(ARDUINO_ARCH_SAMD)
#define MY_SOFTSPI
#define MY_SOFT_SPI_SCK_PIN 14
#define MY_SOFT_SPI_MISO_PIN 16
#define MY_SOFT_SPI_MOSI_PIN 15
#endif

// Enable MY_IP_ADDRESS here if you want a static ip address (no DHCP)
#define MY_IP_ADDRESS XXXX

// The port to keep open on node server mode / or port to contact in client mode
#define MY_PORT X

// The MAC address can be anything you want but should be unique on your network.
// Newer boards have a MAC address printed on the underside of the PCB, which you can (optionally) use.
// Note that most of the Arduino examples use  "DEAD BEEF FEED" for the MAC address.
#define MY_MAC_ADDRESS X,X,X,X

// Enable inclusion mode
#define MY_INCLUSION_MODE_FEATURE
// Enable Inclusion mode button on gateway
//#define MY_INCLUSION_BUTTON_FEATURE
// Set inclusion mode duration (in seconds)
#define MY_INCLUSION_MODE_DURATION 60
// Digital pin used for inclusion mode button
//#define MY_INCLUSION_MODE_BUTTON_PIN  3

// Set blinking period
#define MY_DEFAULT_LED_BLINK_PERIOD 300

#if defined(MY_USE_UDP)
#include <EthernetUdp.h>
#endif
#include <Ethernet.h>
#include <MySensors.h>
#include <SPI.h>

// Déclaration des variables
#define NB_CP 2                //<<<<<<<< indiquer ici le nombre de capteurs photo-électriques            
byte CP_PIN[NB_CP] = {0,1};    //<<<<<<<< indiquer ici les numéros de pin analogiques des capteurs photo-électriques
#define ANALOG_PIN 14          //<<<<<<<< si ARDUINO UNO, indiquer 14 (nb de pins digitaux + 1). si ARDUINO MEGA, indiquer 54

uint32_t SLEEP_TIME_CP = 3000;   //<<<<<< indiquer ici le temps de repos entre 2 lectures capteurs photo-électriques

MyMessage msg_CP(NB_CP, V_LIGHT_LEVEL);
int lastLightLevel[NB_CP];
int lightlevel[NB_CP];

void before()
{
  
}

void setup()
{
	// Setup locally attached sensors
  Serial.begin(9600);
}

void presentation()
{
	// Present locally attached sensors here
  // Send the sketch version information to the gateway and Controller
  // Send the sketch version information to the gateway and Controller
    sendSketchInfo("Light Sensor", "1.0");

    // Register all sensors to gateway (they will be created as child devices)
    for (int k = 0; k < NB_CP; k++){
      int CHILD_ID_LIGHT = CP_PIN[k] + ANALOG_PIN;
      present(CHILD_ID_LIGHT, S_LIGHT_LEVEL);
      delay(250);
    }
  
}

void loop()
{
	// Send locally attached sensors data here
  for (int k = 0; k < NB_CP; k++)
    {
  //int16_t lightLevel = (1023-analogRead(CP_PIN[k]))/10.23;
  int lightLevel = (analogRead(CP_PIN[k]))/10.23;
  Serial.print(F("Light"));
  Serial.print(CP_PIN[k]);
  Serial.print(F("= "));
  Serial.println(lightLevel);
  if (lightLevel != lastLightLevel[k]) {
        send(msg_CP.setSensor(CP_PIN[k] + ANALOG_PIN).set(lightLevel));
        lastLightLevel[k] = lightLevel;
    }
  sleep(SLEEP_TIME_CP);
    }
}

void receive(const MyMessage &message)
{
  // We only expect one type of message from controller. But we better check anyway.
  
}
J'ai tenté avec d'autres CP, en faisant un montage à blanc sur breadboard (au cas où mon montage soudé soit en cause), aucun changement. J'ai tenté avec un code plus "barbare", en reprenant celui du site mysensors et en dupliquant toutes les lignes, même problème. Je vois toujours mes 2 sondes dans Matériel, et 1 seule ligne dans Dispositifs.

Avez-vous une idée pour que Domoticz m'affiche mes 2 sondes dans Dispositifs ?
Merci d'avance.
Dernière modification par lamaisondelou69 le 03 mai 2020, 19:18, modifié 2 fois.
dokho
Messages : 685
Inscription : 28 déc. 2014, 19:32

Re: CAPTEUR PHOTOELECTRIQUE - 2 présents, 1 seul affiché

Message par dokho »

Salut,

Comme ça vite fait au premier coup d'oeil je dirais que t'as pas déclaré le nb de capteur:
#define NB_CP 2 <--- il faut enlever le #

Et le ou les (je ne sais pas comment fonctionnent ces capteurs) numéro de pin:
#define ANALOG_PIN 14 <--- il faut enlever le #

vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: CAPTEUR PHOTOELECTRIQUE - 2 présents, 1 seul affiché

Message par vil1driver »

Salut,

dokho,
Le # est normal
Tu confonds avec // (commentaires)
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
lamaisondelou69
Messages : 24
Inscription : 16 mars 2020, 18:58

Re: CAPTEUR PHOTOELECTRIQUE - 2 présents, 1 seul affiché

Message par lamaisondelou69 »

Bonjour Dokho,
Merci de ta réponse, mais dans le code Arduino, ce sont les / qui servent pour les commentaires.
Les # sont bien pris en compte.
lamaisondelou69
Messages : 24
Inscription : 16 mars 2020, 18:58

Re: CAPTEUR PHOTOELECTRIQUE - 2 présents, 1 seul affiché

Message par lamaisondelou69 »

Bonjour vil1driver,
Navré pour le doublon. Je tapais ma réponse pendant que tu postais la tienne :-)
dokho
Messages : 685
Inscription : 28 déc. 2014, 19:32

Re: CAPTEUR PHOTOELECTRIQUE - 2 présents, 1 seul affiché

Message par dokho »

Oh punaise autant pour moi, j'étais en bash
lamaisondelou69
Messages : 24
Inscription : 16 mars 2020, 18:58

Re: CAPTEUR PHOTOELECTRIQUE - 2 présents, 1 seul affiché

Message par lamaisondelou69 »

Par hasard, j'ai changé le type de message défini à la ligne MyMessage en remlçant V_LIGHT_LEVEL par V_LEVEL (le premier type renvoie une valeur de type pourcentage, la seconde de type lux (unité de mesure d'éclairement ou quantité de lumière reçue par une surface).

Et là miracle, mes 2 sondes apparaissent !
Bon évidemment, il faut que je m'intéresse maintenant aux valeurs renvoyées proprement dite qui semblent incorrectes (47 lux en fin d'après-midi, c'est clairement faux !)
Mais ça résoud temporairement mon problème.

Maintenant, pourquoi ???
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: CAPTEUR PHOTOELECTRIQUE - 2 présents, 1 seul affiché

Message par vil1driver »

Domoticz manque de cohérence encore et toujours..

En principe c'est la présentation qui cré les dispositifs..

En fin tant mieux si tu t'en es sorti de cette façon mais c'est pas vraiment logique selon ce que j'ai connu..
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Répondre