Hallo Leute, ich bin am verzweifeln. Ich versuche ein 16-fach Relaisboard mit einem Arduino Mega mit Ethernet Shield über mqtt zu steuern. Sprich Befehl von ioBroker an den Mega schicken und schalten. Temperaturwerte übermittelt der Mega ohne Probleme an den Broker. Nur mit der Steuerung will es nicht klappen. Hab schon viel gelesen und versucht. Den Code habe ich unter anderem hier im Forum gefunden. Nur will der ums verrecken nicht klappen und ich weiß nicht woran es liegt. >:(
Kann mich bitte jemand aufklären wie ich das lösen kann???
Danke im voraus
Andre
void callback(char* topic, byte* payload, unsigned int length) {
// In order to republish this payload, a copy must be made
// as the orignal payload buffer will be overwritten whilst
// constructing the PUBLISH packet.
// Allocate the correct amount of memory for the payload copy
byte* p = (byte*)malloc(length);
if ((strcmp(topic, "Relaiskarte/Relais_1") == 0) && (payload[0] == '1'))
{digitalWrite(Relais_1, LOW);}
if ((strcmp(topic, "Relaiskarte/Relais_1") == 0) && (payload[0] == '0'))
{digitalWrite(Relais_1, HIGH);}
// Copy the payload to the new buffer
memcpy(p,payload,length);
MQTTclient.publish(topic, p, length);
// Free the memory
free(p);
Also beim Kompilieren kommt keine Fehlermeldung. Der Mega ist quasi verbunden, kann ja auch meine Messwerte sehen. Aber in umgekehrter Reihenfolge passiert nichts. Habe einen wemos d1 mini mit ESPEasy am laufen, da kann ich mit dem ioBroker einen Befehl schicken und der wemos reagiert darauf. Nur der Mega reagiert nicht auf meine Befehle. Schreibfehler habe ich schon x-mal nachgesehen. Es muß quasi diese callback Funktion sein, die meine Befehle vom ioBroker nicht annimmt, warum auch immer.
Grüße Andre
So jetzt habe ich eine Verbindung. Habe client.subscribe("Relaiskarte"); in client.subscribe("Relaiskarte/#"); umbenannt. Jetzt habe ich das Problem daß er hin und her schaltet. Der zweite Kanal (Relais 2) bringt mir nun ständig eine Rückmeldung, d.h. er sendet ständig eine Bestätigung. Wie kann ich das so einstellen daß er nur eine Bestätigung sendet wenn sich der Wert ändert?
Grüße Andre
Ohne Code lässt sich wenig sagen, aber der PubSubClient sendet nur zum Broker. Wenn Nachrichten ankommen, werden die über callback() behandelt. Kommen also stets Steuerbefehle, so liegt das am Broker. Lad Dir mal den MQTT-Spy, dann mit Deinem Netzwerk verbinden und den Datenverkehr mal überprüfen.
Ich habe mal eine Library geschrieben, um viele unabhängige lichter über MQTT zu steuern, ohne sich den Code aufzublähen. Müsstest Du sogar direkt benutzen können, nur halt zwischen aus und an hin- und herschalten, PWM werden die Relais nicht mögen
So Leute, tut mir leid daß es so lange gedauert hat mit antworten. Weihnachten
Also ich habe mal rum gesucht und hab bei ioBroker einen Haken gefunden bei "Sende auch Zustände (ack=true):" Diesen entfernt und auf einmal funktionierte die Sache. Lag also nicht am Code nur am Broker
Danke nochmal an DerLehmi für den Denkanstoß und an alle anderen für die guten Ideen!