Comment faire reconnaitre des sensors MQTT

Forum dédié au protocole MQTT : fonctionnement, intégration ...
Pour les questions concernant le plugin de FlyingDomotic, merci d'utiliser le sous-forum dédié.
Vieux Zebre
Messages : 8
Inscription : 14 août 2020, 22:53
Localisation : Antilles

Comment faire reconnaitre des sensors MQTT

Message par Vieux Zebre »

Bonjour,
Nouveau venu sur ce forum, Je butte sur un probleme depuis 2 jours, et je tourne en rond sans trouver de solution.
J'ai installé Domoticz sur un PI, j'ai mis sur le meme PI le serveur MQTT Mosquitto, depuis 2 autres ordis (Ubuntu, et Win10) tous sur le meme reseau domestique, les echanges se font tres bien, (publications, abonnements). y compris les echanges MQTT du serveur vers et depuis Domoticz.
Mais comment faire reconnaitre par Domoticz les données d'un mimiD1 avec un SHT30 qui envoi parfaitement ses données à mosquitto (je m'y abonne depuis les autres ordi sans pb)
J'ai cree un objet virtuel (capteur temp et humidité),
Je comprend que domoticz doit les associer à l'IDX 5, mais comment faire ce lien avec le wemos D1 concerné ?
faut il obligatoirement utiliser ESPeasy ou similaire ?, sinon ou trouver un code Arduino qui fasse le lien ?
j'ai l'impression que ce qui me manque c'est un bout de code dans le wemos qui dise à domoticz "C'est moi le capteur dont tu attends les données !!!
excusez ma facon d'expliquer les choses, mais je suis loin d'etre un spécialiste, et tous les tutos que je trouve me paraissent inachevés.
merci de votre aide, en fait ce que je souhaiterais surtout c'est des tutos plus détaillés.
merci d'avance les amis
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Comment faire reconnaitre des sensors MQTT

Message par vil1driver »

Salut,

J'ai peu joué avec mqtt mais ce que je sais c'est que c'est un moyen de transport d'un message.

Message qui n'est pas standardisé.
Il se peux simplement que ton wemos ne parle pas le 'domoticz'

Il y a fort à parier que ton salut se trouve en espeasy.. Que je ne connais que de lectures..

D'ailleurs je suis surpris qu'en connaissant son existence tu n'ais pas encore fait l'essai ;)

Autrement il est toujours bon d'indiquer dans un sos les logs de Domoticz et en l'occurrence le message mqtt. ça peut grandement aiguiller.

Bien venu
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
mike913
Messages : 159
Inscription : 18 oct. 2014, 10:22
Localisation : Morsang / Orge - Essonne
Contact :

Re: Comment faire reconnaitre des sensors MQTT

Message par mike913 »

Bonjour,
Je n'utilise ni MQTT ni espeasy
voici le code que j'utilise pour un DHT22

Code : Tout sélectionner

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Version pour ESP8266
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiUdp.h>
#include <WiFiClient.h>
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Version
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
String script = "DHT22-4.055";
String host = "Domo-05";
String dest = "http://192.168.6.218";
String sondes = "DHT-22";
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Domoticz
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
String domo =  "http://192.168.6.8:8088";
String device = "xx";		// a remplacer ar le numero du device
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Variables DHT22
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#include "DHTesp.h"
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
#define DHTPIN 2        // what digital pin we're connected to. If you are not using NodeMCU change D6 to real pin
DHTesp dht;
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Variables WiFi
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
String ssid = "SSID";
String password = "PSK";
WiFiClient client;
HTTPClient http;
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Timers
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
unsigned long CurrentMillis  = 0;       // Millisseconde courante
unsigned long NextMillis  = 0;          // Millisseconde courante
unsigned long JourMillis  = 600000;		// 10 minutes
unsigned long delai = 86400000;         // 24 heures (24*60*60000)
#define INTERVAL 120000 ;
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Evoie des données
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
int Send(String URL)
{
  int OK = 0;
  if (http.begin(URL))
  {
    int httpCode = http.GET();
    OK = httpCode;
    if (httpCode > 0)
    {
      Serial.printf("[HTTP] GET... code: %d\n", httpCode);
      if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY)
      {
        String payload = http.getString();
        Serial.println(payload);
      }
    }
    else
    {
      Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
    }
    http.end();
  }
  return OK;
}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Procedure Connexion
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
void connexion(String msg)
{
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("Connexion Wifi...");
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
}
//===========================================================================
//  SETUP
//===========================================================================
void setup()
{
  Serial.begin(115200);
  delay(10);
  dht.setup(DHTPIN, DHTesp::DHT22);
  connexion("Connexion");
  delay(1000);
}
//  ===========================================================================
//  Boucle principale
//  ===========================================================================
void loop()
{
  CurrentMillis = millis() ;
  if (CurrentMillis > NextMillis)
  {
    if (WiFi.status() != WL_CONNECTED)
    {
      connexion("Reconnexion");
      Serial.println("Connexion Perdue");
    }
    else
    {
      float h = dht.getHumidity();
      float t = dht.getTemperature();
      if (isnan(t) || isnan(h))
      {
        delay(2000);
        Serial.println("Erreur Sonde");
      }
      else
      {
        int hum_stat;
        if ( h > 70 )
        {
          hum_stat = 3;
        }
        else if ( h < 30 )
        {
          hum_stat = 2;
        }
        else if ( h >= 30 & h <= 45 )
        {
          hum_stat = 0;
        }
        else if ( h > 45 & h <= 70 )
        {
          hum_stat = 1;
        }
        String url = domo;
        url += "/json.htm?type=command&param=udevice&idx=";
        url += device;
        url += "&nvalue=0&svalue=";
        url += String(t); url += ";";
        url += String(h); url += ";";
        url += String(hum_stat); url += ";";
        Serial.println(url);
        NextMillis = CurrentMillis + INTERVAL ;
      }
    }
  }
  if (CurrentMillis > JourMillis)
  {
    connexion("Reconnexion");
    JourMillis = CurrentMillis + delai ;
  }
}
Il suffit de remplacer le XX par l'ID de ton capteur virtuel
DS718+ 2 x 3To(SHR) - Firmware: DSM 7.0.1-42218
DS712+ 2 x 4To (SHR) - Firmware: DSM 6.2.4-25556
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox Delta
https://meteo.folcke.net
https://wiki.folcke.net
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Comment faire reconnaitre des sensors MQTT

Message par vil1driver »

mike913 utilise simplement l'api http de Domoticz.
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
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: Comment faire reconnaitre des sensors MQTT

Message par Chrominator »

Est-ce que tu as lu le wiki domoticz concernant MQTT ?
Il y a là assez d'explications pour mener à bien ton projet.

Pour ma part et éviter la programmation, j'ai trouvé l'utilisation de node-RED très pratique et puissante.
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
Vieux Zebre
Messages : 8
Inscription : 14 août 2020, 22:53
Localisation : Antilles

Re: Comment faire reconnaitre des sensors MQTT

Message par Vieux Zebre »

merci pour vos réponses,
et particulierement pour ton code Mike913, effectivement je pense que la solution est de ce type,
car aussi simple d'emploi que puisse etre Espeasy, il integre assez peu de capteurs je trouve,
et la solution je pense est d'envoyer par du code Arduino la chaine qui va bien, et notament le fameux index atribué par domoticz.
Je vais creuser un peu dans ce sens.
Encore merci
Vieux Zebre
Messages : 8
Inscription : 14 août 2020, 22:53
Localisation : Antilles

Re: Comment faire reconnaitre des sensors MQTT

Message par Vieux Zebre »

vil1driver a écrit : 15 août 2020, 11:58 mike913 utilise simplement l'api http de Domoticz.
Effectivement c'est plus simple, et ca fonctionne, par contre avec MQTT les données des capteurs restent disponibles pour d'autres clients que domoticz, et c'est ça que je souhaite justement.

Cordialement
patrick ;)
Vieux Zebre
Messages : 8
Inscription : 14 août 2020, 22:53
Localisation : Antilles

Re: Comment faire reconnaitre des sensors MQTT

Message par Vieux Zebre »

Chrominator a écrit : 15 août 2020, 12:11 Est-ce que tu as lu le wiki domoticz concernant MQTT ?
Il y a là assez d'explications pour mener à bien ton projet.

Pour ma part et éviter la programmation, j'ai trouvé l'utilisation de node-RED très pratique et puissante.
Ca fait un moment que je souhaite en savoir un peu plus sur Node red, mais je ne connais pas du tout.
Répondre