AZ Delivery ESP8266 + AZ Delivery 4-Relais Modul + IOBroker

Hallo Leute,

vorab schon einmal vielen Dank das es euch gibt :slight_smile:

Ich stehe vor folgenden problem. Ich habe schon soviel Codes ausprobiert und ich komme einfach nicht zum Erfolg, da ich in der Programmierung auch einfach eine Null bin :slight_smile:

Folgende Situation
Ich habe von AZ Delivery das NodeMCU V3 ESP8266 12-F, daran soll ein AZ Delivery 4-Relais Modul angesteuert werden.
Das Relais habe ich an den Ausgängen D1 + D2 sowie D5 + D6 gehangen.
Das ganze Möchte ich per MQTT Server vom IOBroker ansteuern.

Wie gesagt, ich habe schon einige Codes ausprobiert. Entweder stand die verbind zum IOBroker, aber ich konnte nichts schalten, oder ich konnte per Weboberfläche die Ausgänge schalten, dann bestand aber keine Verbindung mehr zum IOBroker. Ich hoffe jetzt auf eure Hilfe, das ihr mir evtl. einen kurzen Code zu Verfügung stellen könnt, wo ich meine 4 Ausgänge am Relais per MQTT Server ansteuern kann. Bitte auch nicht nur mit einem Ausgang, ich weiß nicht wo ich die anderen Ausgänge dazuschreiben soll.
Für eure Hilfe bedanke ich mich bereits im Voraus

VG

Ich habe es mal als Schreibübung genutzt.

Kompiliert und tut bei mir was es soll. Für mehr, fehlt mehr Info von dir.

#include <ESP8266WiFi.h>   // ESP8266 WLAN Bibliothek
#include <PubSubClient.h>  // MQTT Biblithek

WiFiClient espClient;                   // WLAN Objekt erstellen
PubSubClient MQTT_client(espClient);    // MQTT Objekt erstellen

const char*    ssid = "Your_WiFi_SSID";
const char*    password = "Your_WiFi_PW";
const char*    MQTT_SERVER = "192.168.178.32";     // IP des MQTT Brokers (z.b. IP des Raspberry PI)
const uint16_t MQTT_PORT = 1883;

const uint8_t  Pins[] = {D1, D2, D5, D6};          // Pins an denen die Relais angeschlossen sind
const char*    HOSTNAME = "ESP8266_4CH_Board";     // Einzigartiger Name im Netz
// Topic wird nach dieser Syntax generiert HOSTNAME/CHx/COMMAND_TOPIC bzw. HOSTNAME/CHx/STATE_TOPIC
// Beispiel "ESP8266_4CH_Board/CH2/Command"
// Auf CommandTopics wird reagiert (subscripe), auf StateTopics wird gesendet (publish)
const char*    COMMAND_TOPIC = "Command";
const char*    STATE_TOPIC = "State";
const char*    ON_COMMAND = "On";
const char*    OFF_COMMAND = "Off";
const char*    TOGGLE_COMMAND = "Toggle";
const bool     RELAY_LOW_ACTIVE = false;
const uint32_t MQTT_RECONNECT_TIME = 5000;         // in Millisekunden

const uint8_t  NUM_CHANNEL = sizeof(Pins);
struct Channel {
  uint8_t pin {0};
  bool state {RELAY_LOW_ACTIVE? true : false};
} ch[NUM_CHANNEL];

uint32_t MQTT_timestamp;

void setup() {
  Pin_init();
  WiFi.begin(ssid, password);
  MQTT_client.setServer(MQTT_SERVER, MQTT_PORT);
  MQTT_client.setCallback(MQTT_callback);
}

void loop() {
  WiFi_handle();
  MQTT_handle();
  Relay_handle();
}

void WiFi_handle(){  //blockiert bis WiFi Verbindung steht
  if (WiFi.status() != WL_CONNECTED) {
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
    };
  }
}

void MQTT_handle(){
  if (!MQTT_client.connected()) {
    if (millis() - MQTT_timestamp > MQTT_RECONNECT_TIME) {
      MQTT_timestamp = millis();
      if (MQTT_client.connect(HOSTNAME)) {
        MQTT_Topics();
      }
    }
  } else MQTT_client.loop();
}

void MQTT_Topics(){ // abonierten Topics
  uint16_t topicSize = strlen(HOSTNAME) + strlen(COMMAND_TOPIC) + 20; // + etwas Puffer für Hardcoded Text s.u.
  char topic[topicSize];
  for(uint8_t i=0; i<NUM_CHANNEL; i++){
    snprintf(topic,topicSize,"%s%s%d%s%s",HOSTNAME,"/CH",i+1,"/",COMMAND_TOPIC);  
    MQTT_client.subscribe(topic);  
  }
}

void MQTT_callback(char* intopic, byte* payload, unsigned int length) {  // wird bei Nachrichten Eingang auf den abbonierten Kanälen ausgeführt    
  char message[length+1];
  for(uint16_t i=0; i<length; i++) message[i] = (char)payload[i];
  message[length]='\0';
  for(uint8_t i=0; i<NUM_CHANNEL; i++){
    uint16_t topicSize = strlen(HOSTNAME) + strlen(COMMAND_TOPIC) + 20; // + etwas Puffer für Hardcoded Text s.u.
    char temporaryTopic[topicSize];
    snprintf(temporaryTopic,topicSize,"%s%s%d%s%s",HOSTNAME,"/CH",i+1,"/",COMMAND_TOPIC);  
    if(strcmp(intopic,temporaryTopic)==0){
      if(strcmp(message,ON_COMMAND)==0){ ch[i].state=true; Serial.println(ON_COMMAND);}
      if(strcmp(message,OFF_COMMAND)==0){ ch[i].state=false; Serial.println(OFF_COMMAND);} 
      if(strcmp(message,TOGGLE_COMMAND)==0){ ch[i].state = !ch[i].state; Serial.println(TOGGLE_COMMAND);}
      topicSize = strlen(HOSTNAME) + strlen(STATE_TOPIC) + 20; // + etwas Puffer für Hardcoded Text s.u.
      snprintf(temporaryTopic,topicSize,"%s%s%d%s%s",HOSTNAME,"/CH",i+1,"/",STATE_TOPIC);  
      MQTT_client.publish(temporaryTopic,ch[i].state? ON_COMMAND : OFF_COMMAND);
    }
  }
}

void Relay_handle(){
  for(uint8_t i=0; i<NUM_CHANNEL; i++) digitalWrite(ch[i].pin,RELAY_LOW_ACTIVE? !ch[i].state : ch[i].state);
}

void Pin_init(){
  for(uint8_t i=0; i<NUM_CHANNEL; i++){
    ch[i].pin = Pins[i];
    digitalWrite(ch[i].pin,ch[i].state);
    pinMode(ch[i].pin,OUTPUT);
  }
}

Hallo,

vielen Dank schon einmal für deine Mühe. Ich habe den Code soweit schon einmal übertragen.
Das erste was mir auffällt, ist das die Relais direkt angezogen werden, das sollte erst beim schalten geschehen, als im Ruhemodus Relais nicht angezogen.

IOBroker
Kanäle wurden soweit alle eingebunden. Wenn ich jetzt allerdings über die VIS Oberfläche einen Schalter betätige, wird der Status unter den IOBroker Objekten geändert ( sprich geht auf 1 wenn ich einschalte und auf 0 wenn ich wieder ausschalte )
Aber die Relais schalten nicht sofort.
Die Relais haben irgendwann ganz sporadisch ganz kurz angezogen und sind wieder abgefallen.

Ich denke das ist nur noch eine Kleinigkeit für dich :slight_smile:

Dann sind deine Relais Low Aktiv. Das musst du angeben im Sketch.

…
const bool     RELAY_LOW_ACTIVE = false;
…

ändern in

…
const bool     RELAY_LOW_ACTIVE = true;
…

Mit IObroker kenne ich mich mit aus. Ich selber nutze openHAB.

Eine Änderung im Sketch ist nicht nötig. Der Code reagiert prompt auf MQTT Nachrichten. Getestet mit MQTT.fx

Wenn es Verzögerungen gibt, dann auf MQTT-Broker oder IObroker Seite.

Hallo,

wenn ich das von false in true ändere, tut sich nichts. Die Relais werden nur ganz kurz ausgeschalter, würde sagen 1 Sekunde und dann gehen die Relais wieder an

Stimmt. Da hatte ich noch ein Bock drin. Sorry. (Hatte nur RELAY_LOW_ACTIVE = false; getestet)

Jetzt sollte es funktionieren:

#include <ESP8266WiFi.h>   // ESP8266 WLAN Bibliothek
#include <PubSubClient.h>  // MQTT Biblithek

WiFiClient espClient;                   // WLAN Objekt erstellen
PubSubClient MQTT_client(espClient);    // MQTT Objekt erstellen

const char*    ssid = "Your_WiFi_SSID";
const char*    password = "Your_WiFi_PW";
const char*    MQTT_SERVER = "192.168.178.32";     // IP des MQTT Brokers (z.b. IP des Raspberry PI)
const uint16_t MQTT_PORT = 1883;

const uint8_t  Pins[] = {D1, D2, D5, D6};          // Pins an denen die Relais angeschlossen sind
const char*    HOSTNAME = "ESP8266_4CH_Board";     // Einzigartiger Name im Netz
// Topic wird nach dieser Syntax generiert HOSTNAME/CHx/COMMAND_TOPIC bzw. HOSTNAME/CHx/STATE_TOPIC
// Beispiel "ESP8266_4CH_Board/CH2/Command"
const char*    COMMAND_TOPIC = "Command";
const char*    STATE_TOPIC = "State";
const char*    ON_COMMAND = "On";
const char*    OFF_COMMAND = "Off";
const char*    TOGGLE_COMMAND = "Toggle";
const bool     RELAY_LOW_ACTIVE = true;
const uint32_t MQTT_RECONNECT_TIME = 5000;         // in Millisekunden

const uint8_t  NUM_CHANNEL = sizeof(Pins);
struct Channel {
  uint8_t pin {0};
  bool state {false};
} ch[NUM_CHANNEL];

uint32_t MQTT_timestamp;

void setup() {
  Pin_init();
  WiFi.begin(ssid, password);
  MQTT_client.setServer(MQTT_SERVER, MQTT_PORT);
  MQTT_client.setCallback(MQTT_callback);
}

void loop() {
  WiFi_handle();
  MQTT_handle();
  Relay_handle();
}

void WiFi_handle(){  //blockiert bis WiFi Verbindung steht
  if (WiFi.status() != WL_CONNECTED) {
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
    };
  }
}

void MQTT_handle(){
  if (!MQTT_client.connected()) {
    if (millis() - MQTT_timestamp > MQTT_RECONNECT_TIME) {
      MQTT_timestamp = millis();
      if (MQTT_client.connect(HOSTNAME)) {
        MQTT_Topics();
      }
    }
  } else MQTT_client.loop();
}

void MQTT_Topics(){ // abonierten Topics
  uint16_t topicSize = strlen(HOSTNAME) + strlen(COMMAND_TOPIC) + 20; // + etwas Puffer für Hardcoded Text s.u.
  char topic[topicSize];
  for(uint8_t i=0; i<NUM_CHANNEL; i++){
    snprintf(topic,topicSize,"%s%s%d%s%s",HOSTNAME,"/CH",i+1,"/",COMMAND_TOPIC);  
    MQTT_client.subscribe(topic);  
  }
}

void MQTT_callback(char* intopic, byte* payload, unsigned int length) {  // wird bei Nachrichten Eingang auf den abbonierten Kanälen ausgeführt    
  char message[length+1];
  for(uint16_t i=0; i<length; i++) message[i] = (char)payload[i];
  message[length]='\0';
  for(uint8_t i=0; i<NUM_CHANNEL; i++){
    uint16_t topicSize = strlen(HOSTNAME) + strlen(COMMAND_TOPIC) + 20; // + etwas Puffer für Hardcoded Text s.u.
    char temporaryTopic[topicSize];
    snprintf(temporaryTopic,topicSize,"%s%s%d%s%s",HOSTNAME,"/CH",i+1,"/",COMMAND_TOPIC);  
    if(strcmp(intopic,temporaryTopic)==0){
      if(strcmp(message,ON_COMMAND)==0){ ch[i].state=true; Serial.println(ON_COMMAND);}
      if(strcmp(message,OFF_COMMAND)==0){ ch[i].state=false; Serial.println(OFF_COMMAND);} 
      if(strcmp(message,TOGGLE_COMMAND)==0){ ch[i].state = !ch[i].state; Serial.println(TOGGLE_COMMAND);}
      topicSize = strlen(HOSTNAME) + strlen(STATE_TOPIC) + 20; // + etwas Puffer für Hardcoded Text s.u.
      snprintf(temporaryTopic,topicSize,"%s%s%d%s%s",HOSTNAME,"/CH",i+1,"/",STATE_TOPIC);  
      MQTT_client.publish(temporaryTopic,ch[i].state? ON_COMMAND : OFF_COMMAND);
    }
  }
}

void Relay_handle(){
  for(uint8_t i=0; i<NUM_CHANNEL; i++) digitalWrite(ch[i].pin,RELAY_LOW_ACTIVE? !ch[i].state : ch[i].state);
}

void Pin_init(){
  for(uint8_t i=0; i<NUM_CHANNEL; i++){
    ch[i].pin = Pins[i];
    digitalWrite(ch[i].pin,RELAY_LOW_ACTIVE? !ch[i].state : ch[i].state);
    pinMode(ch[i].pin,OUTPUT);
  }
}

Hallo,
so jetzt sind die Relais beim einschalten tatsächlich aus.
Bleibt jetzt halt nur mein problem beim IOBroker schalten. Das sich kein Relais bewegt wenn ich im IOBroker schalte

Hier ist das 1. Bild, wenn im IOBroker das erste Relais ausgeschaltet ist

Hier ist das 2. Bild, wenn ich im IOBroker das erste Relais eingeschaltet habe

Aber du kanntest dich ja leider mit dem IOBroker nicht, aber vielleicht hat ja noch jemand einen Hinweis für mich. Ach so, ich schaltet im IOBroker, den Command Kanal. Zum testen hab ich aber auch schon den State ausprobiert, da passiert auch nichts

Command ist auch zum schalten. Der ESP hat diese Kanäle abonniert.
State wird vom ESP veröffentlicht, darauf musst du mit IObroker reagieren.

Bei openHAB kann man im MQTT Thing ein StateTopic und CommandTopic angeben und mit Items darauf entsprechend reagieren.

Dann lag ich mit dem Command ja schon richtig. Aber leider kommt halt keine Rückmeldung am Relais an

Das ist für mich nicht verständlich. Was für eine Rückmeldung soll am Relais ankommen? Relais schalten, so wie ihr Eingang beschalten wird. Das Relais meldet nichts und bekommt keine Meldung

Sorry falsch ausgedrückt.

Das Relais wird nicht ein- und ausgeschaltet

Damit ioBroker die Werte an den MQTT Server überträgt, musst du schon einen MQTT Client (Adapter) konfigurieren und über das Zahnrad rechts vom Wert (drauf klicken) konfigurieren.

Da in deinem Screenshot die Zahnrädchen noch so "blass" sind, scheinst Du das noch nicht getan zu haben.

Normalerweise sieht das so aus:

Wenn man das korrekt gemacht hat, kommen die geänderten Werte auch auf dem ESP8266 an:

Der Code zu diesem Beispiel:

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <iostream>

#include "MQTT_Network.h"

// Redefine max package size of mqtt client
#ifdef MQTT_MAX_PACKET_SIZE
  #undef MQTT_MAX_PACKET_SIZE
#endif
#define MQTT_MAX_PACKET_SIZE 1024

//////////////////////////////////////////////////////////////////////////////
///  Global constants
///
//////////////////////////////////////////////////////////////////////////////
constexpr unsigned int MAX_WLAN_CONNATTEMPTS {20};
constexpr unsigned int MAX_MQTT_CONNATTEMPTS {5};
constexpr unsigned int MQTT_CONNECT_DELAY_MS {5000};

const std::vector<const char *> topics {"iobroker/0_userdata/0/relais/1", "iobroker/0_userdata/0/relais/2",
                                        "iobroker/0_userdata/0/relais/3", "iobroker/0_userdata/0/relais/4"};

//////////////////////////////////////////////////////////////////////////////
/// Global variables/objects
///
//////////////////////////////////////////////////////////////////////////////
WiFiClient espClient;                 // Non Secure Client. Fast but unsecure.
PubSubClient mqttClient(espClient);   // MQTT Client connection object
bool wifiIsConnected {false};

//////////////////////////////////////////////////////////////////////////////
/// Function forward declaration
///
//////////////////////////////////////////////////////////////////////////////
bool wificonnect();
bool mqttConnect();
void subscribeTopics(PubSubClient &, const std::vector<const char *> &);
void subCallback(char *, uint8_t *, unsigned int);

//////////////////////////////////////////////////////////////////////////////
/// Main Program
///
//////////////////////////////////////////////////////////////////////////////
void setup() {
  /* Initialize serial output for debug */
  rst_info *rinfo = ESP.getResetInfoPtr();   // get the Reason for Reset
  // Serial.setDebugOutput(true);
  Serial.begin(74880);
  std::cout << "\nResetInfo.reason = " << (*rinfo).reason << std::endl;

  mqttClient.setServer(MQTT_BROKER, MQTT_UNSECURE_PORT);
  mqttClient.setCallback(subCallback);   // Set Callback funktion
  wifiIsConnected = wificonnect();
  if (wifiIsConnected == true) {
    std::cout << "WLAN Connnection established\n";
  } else {
    std::cout << "WLAN Connnection error\n";
  }
}

void loop() {
  // Main loop. Attempt to re-connect to MQTT broker if connection drops, and service the mqttClient task.
  if (wifiIsConnected == true && mqttClient.connected() == false) {
    if (mqttConnect() == false) {
      std::cout << "MQTT Connect failed\n";
      delay(100);
    }
  }
  mqttClient.loop();
}

//////////////////////////////////////////////////////////////////////////////
/// @brief Try to estabish a WiFi connection. Returns true (1) if successfull.
///        Otherwise, false (0) is returned if the maximum number of connection
///        attempts fails.
///
/// @return true
/// @return false
//////////////////////////////////////////////////////////////////////////////
bool wificonnect() {
  unsigned int numOfConnAttempts = 0;

  //  Connect to local WiFi access point
  // Static IP address configuration
  IPAddress ip(STAT_IP_OCT_1, STAT_IP_OCT_2, STAT_IP_OCT_3, STAT_IP_HOST);
  IPAddress subnet(STAT_NET_MASK_1, STAT_NET_MASK_1, STAT_NET_MASK_1, STAT_NET_MASK_2);
  IPAddress gateway(STAT_IP_OCT_1, STAT_IP_OCT_2, STAT_IP_OCT_3, STAT_IP_GW);
  IPAddress dns(STAT_IP_OCT_1, STAT_IP_OCT_2, STAT_IP_OCT_3, STAT_IP_GW);

  // WiFi.persistent(false);
  WiFi.mode(WIFI_STA);   // WiFi mode station (connect to wifi router only)
  WiFi.config(ip, dns, gateway, subnet);
  WiFi.hostname(DEVICENAME);   // DHCP Hostname (useful for finding device for static lease)
  WiFi.begin(WLAN_SSID, WLAN_PWD);

  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
    ++numOfConnAttempts;
    if (numOfConnAttempts == MAX_WLAN_CONNATTEMPTS) { return false; }
  }

  // When WiFi connection is complete, debug log connection info
  char ipAddress[16];
  IPAddress ipo = WiFi.localIP();
  snprintf(ipAddress, 15, "%d.%d.%d.%d", ipo[0], ipo[1], ipo[2], ipo[3]);
  std::cout << std::endl << "Connected, IP address: " << ipAddress << std::endl;
  return true;
}

//////////////////////////////////////////////////////////////////////////////
/// @brief Connecting the mqtt Client
///
/// @return true  Connect successful
/// @return false Connect failed
//////////////////////////////////////////////////////////////////////////////
bool mqttConnect() {
  bool connected = true;
  unsigned int act_attempt = 0;

  while (!mqttClient.connected()) {   // Attempt to connect
    std::cout << "Attempting MQTT broker connection...";
    delay(1);
    if (mqttClient.connect(MQTT_CID, MQTT_USER, MQTT_PWD)) {
      std::cout << "connected\n";
      subscribeTopics(mqttClient, topics);   // Once connected, resubscribe
    } else {
      std::cout << "Failed, rc = " << mqttClient.state() << ". Trying again in " << MQTT_CONNECT_DELAY_MS / 1000
                << " seconds...\n";
      ++act_attempt;
      if (act_attempt == MAX_MQTT_CONNATTEMPTS) {
        connected = false;
        break;
      }
      delay(MQTT_CONNECT_DELAY_MS);   // Wait for MQTT_CONNECT_DELAY_MS between retries
    }
  }
  return connected;
}

//////////////////////////////////////////////////////////////////////////////
/// @brief If the connection to the MQTT server was successful,
///        the topics are subscribed to in this function.
///
/// @param client   Handle to mqtt client
/// @param tp       Vector with pointers to the topics
//////////////////////////////////////////////////////////////////////////////
void subscribeTopics(PubSubClient &client, const std::vector<const char *> &tp) {
  std::cout << "Subscribing the following topics:\n";
  for (auto i = tp.begin(); i != tp.end(); ++i) {
    client.subscribe(*i);
    std::cout << *i << std::endl;
  }
}

//////////////////////////////////////////////////////////////////////////////
/// @brief MQTT Callback routine. You can react to changed topic values here
///
/// @param topic     subscribet mqtt topic
/// @param payload   mqtt data as char array
/// @param length    lenght of payload char array
//////////////////////////////////////////////////////////////////////////////
void subCallback(char *topic, uint8_t *payload, unsigned int length) {
  std::cout << "Received message [" << topic << "] ";
  char msg[length + 1];
  memcpy(msg, payload, length);
  msg[length] = '\0';
  // convert char array to a number
  // In this example, the values received may only be "true" or "false". Any other value generates an error.
  unsigned int value = (strcmp(msg, "true") == 0) ? 1U : (strcmp(msg, "false") == 0) ? 0U : 255U;
  if (value > 1) {
    std::cout << "Error: Value is neither true nor false!\n";
  } else {
    std::cout << value << std::endl;
  }
}

Es wurde nur der reine Empfang der Daten und deren Anzeige implementiert, nicht das Schalten von Relais. Aber wenn die Werte erst mal da sind, ist das ja ne einfache Nummer....

So nebenbei ... was für einen MQTT Server verwendest du?

Sorry,
bin jetzt erst wieder dazu gekommen. Ich nutze vom IOBroker den MQTT Broker/Client V5.1.0 als Server und den MQTT-Client V1.7.0

Ich habe jetzt den Client noch soweit gerichtet und die Verbindung zum Server hergestellt. Zahnrad ist dunkel. Aber leider tut sich immer noch nichts an meinen Relais. Es wird weiterhin nur im IOBroker angezeigt, das ich geschaltet habe

Ich glaube wenn Du den MQTT Broker/Cient v5.1.0 verwendest, sollte der MQTT-Client V1.7.0 nicht notwendig sein.

Ich verwende den MQTT-Client V1.7 weil ich mosquitto als eigenständigen MQTT Server installiert habe.

Am besten Du holst Dir mal ein Programm wie den MQTT Explorer

und probierst mal aus, ob Du die Topics welche in ioBroker gepublished wurden, auch mit dem MQTT Explorer Client abonnieren kannst. Erkunde, was das Programm anzeigt, wenn Du in ioBroker die Werte änderst. . Wenn das funktioniert, sollte das auch mit dem ESP Programm hinhauen.

Ich hab jetzt den MQTT Explorer für Windows installiert, aber leider verbindet der sich überhaupt nicht mit dem ESP

Anonyme Verbindung beim Brocker zugelassen? Beim mosquitto muss man dies tun (zumindest über openHAB)

IP vom Brocker stimmt im ESP Sketch?

Aus technischer Sicht verbindet der Explorer sich auch nicht mit dem ESP sondern mit dem MQTT-Broker. Dort abonniert er Topics oder veröffentlicht Werte über Topics.
Ebenso wie der ESP selbst. Der Broker ist sozusagen der Mittelsmann.

Siehst du den Werte im Explorer, wenn du im IObroker schaltest?

okay, das hab ich dann falsch verstanden, hab versucht mich direkt mit dem ESP zu verbinden.

Also MQTT Explorer läuft :slight_smile:
Es werden mir alle 4 Kanäle angezeigt, darunter jeweils 1 State

Wenn ich jetzt aber versuche das erste Relais zu schalten, wird im IOBroker eine 1 fürs einschalten und eine 0 fürs ausschalten angezeigt, so wie vorher auch schon. Im MQTT Explorer, ändert sich aber am Status nichts. Also doch noch irgendwo wohl ein Fehler in meiner Konfiguration im IOBroker !!!?????

Wo? Wie? Bitte detaillierter Antworten.

Du kannst im Explorer bestimmt auch einen Wert auf ein Topic veröffentlichen (Publish).

Veröffentliche doch mal den Wert On auf das Topic ESP8266_4CH_Board/CH1/Command im Explorer.

Der Explorer soll sich nicht mit dem ESP verbinden sondern mit dem MQTT Server von ioBroker.

Du musst doch erst mal feststellen, ob die für den ESP benötigten Topics abonniert werden können. Wenn alles richtig konfiguriert ist, dann müssen sich die Werte im Explorer ändern, wenn sie in ioBroker verändert werden.

Wenn das funktioniert, dann kannst Du mit dem ESP weiter machen. Vorher hat das keinen Zweck.

Die Frage ist auch, wie du den Wert änderst.

Wichtig ist, dass "Bestätigt" angewählt ist!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.