Page 1 sur 1

Comment faire reconnaitre des sensors MQTT

Publié : 14 août 2020, 23:12
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

Re: Comment faire reconnaitre des sensors MQTT

Publié : 15 août 2020, 00:06
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

Re: Comment faire reconnaitre des sensors MQTT

Publié : 15 août 2020, 07:12
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

Re: Comment faire reconnaitre des sensors MQTT

Publié : 15 août 2020, 11:58
par vil1driver
mike913 utilise simplement l'api http de Domoticz.

Re: Comment faire reconnaitre des sensors MQTT

Publié : 15 août 2020, 12:11
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.

Re: Comment faire reconnaitre des sensors MQTT

Publié : 15 août 2020, 20:05
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

Re: Comment faire reconnaitre des sensors MQTT

Publié : 15 août 2020, 20:10
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 ;)

Re: Comment faire reconnaitre des sensors MQTT

Publié : 15 août 2020, 20:12
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.