NEWS
MQTT Server akzeptiert Update nicht ?
-
in deinem programm brauchst du den else zweig nicht .. da bei > 35 der wert gesendet wird und dann der esp schläft und dann neu startet...
selbst das ganze nach dem senden kannst du dir schenken...
also
loop()
{- messen
- senden oder nicht senden
- schlafen
}
reicht
so für mich auf die schnelle, der rest ist ähnlich dem hier.
-
Ja, okay. Da kann ich ein paar Zeilen Code einsparen. Danke Dir soweit. Mal schauen ob das mit dem Haken evtl. geholfen hat.
-
Hat es leider nicht. Sonst vielleicht noch jemand eine Idee woran das liegen könnte ? Wieso wird der Wert korrekt aktualisiert, nachdem ich den Wert im mqtt.0 händisch überschrieben habe ? Sonst nicht...
Danke + Gruß
-
@sloglban
Stimmen die Datenformate überein?Also Datenpunkt = Number und Wert wird als Zahl gesendet?
-
Der pubsubclient auf dem Arduino kann nur Chars senden. Auf der Serverseite ist der Datentyp Zeichenkette. Hab den jetzt mal testweise auf Nummer geändert. Mal sehen ob das hilft.
-
in iobroke brauchst du nur den "datenpunkt" komplett löschen - beim nächsten senden vom esp wird alles angelegt .... ggf mal alles aktualiesieren ( ging hier aber auch so )
hier liegen gerade fünf esp auf dem tisch ..... doch keiner mag mqtt + zeitserver -
Hab ich jetzt alles probiert. Datentyp geändert, Datenpunkt gelöscht. Bleibt leider alles wie gehabt. Eine Aktualisierung läuft durch. Danach meldet sich der ESP weiter zuverlässig im Stundentakt beim ioBroker. Aber es werden keine Daten aktualisiert. Solange bis ich den Wert händisch überschreibe. Dann wird wieder einmal aktualisiert.
Ich werde jetzt mal einen anderen MQTT-Broker testen.
-
@sloglban
wenn es diese lib ist:#include <PubSubClient.h>
muss es funktionieren
sehe gerade:
bei mir in setup()
.
.
.
client.setServer(mqtt_server, mqtt_port);
client.setClient(espClient);und reconnect() sieht so aus ...
void reconnect()
{
// Loop until we're reconnected
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(mqtt_client_id,mqtt_username,mqtt_key))
{
Serial.println("connected");
// IP-Adresse umwandeln und publish
IPAddress localAddr = WiFi.localIP();
char s[16];
sprintf(s, "%d.%d.%d.%d", localAddr[0], localAddr[1], localAddr[2], localAddr[3]);
client.publish(mqtt_topics_ip,s, true);
Serial.println(WiFi.localIP());
}
else
{
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}ach: und in der testphase ist ein gesetztes passwort ggf hinderlich .... ... habe keines.
und da: char feuchtigkeitProzent[2]; setzte man eine 5 ein -
Ich empfehle zum debuggen von solchen Ansätzen immer gerne mosquitto. Wenn du den mosquitto "server/broker" mit -v (verbose) startest, siehst du oft deine möglichen Fehler wenn du dich mit deinem Client darauf verbindest. So habe ich bei mir die fehlende Einstellung zum Benutzernamen und Kennwort beim connect gefunden...
-
das soll auch ganz gut sein ....
http://workswithweb.com/mqttbox.html -
wie das thema jetzt gelöst wurde wurd ich doch gerne erfahren
ggf tritt das problem ja mal hier auch auf . -
Hallo Zusammen,
erstmal Danke für Eure Hilfe ! Ich denke ich habe den "Fehler" jetzt wohl gefunden.
Ich habe zwischenzeitlich mal Mosquitto installiert, um zu sehen, ob der Fehler dort auch auftritt. Hab dann meinen MQTT.0 deaktiviert, und einen MQTT.1 als Client angelegt. Das Verhalten war exakt das gleiche. Also der Publisher schickt pünktlich seine Aktualisierung (retained), und im ioBroker kam nichts an (nur eine Aktualisierung). Außer, ich hatte den Wert im MQTT-Adapter wieder händisch überschrieben.
Und dann ist wohl der Groschen gefallen (wenn es denn der Richtige war
Ich lasse den Wert sowie den Zeitpunkt der letzten Aktualisierung bei mir im VIS anzeigen. Dabei war ich davon ausgegangen, dass der Zeitpunkt der letzten Aktualisierung jedes Mal aktualisiert wird, wenn der Publisher etwas sendet. Dem scheint aber nicht so zu sein. Stattdessen wird die Zeitangabe wohl nur aktualisiert, wenn ein abweichender Wert gesendet wird - was immer dann der Fall ist, wenn jemand den gespeicherten Wert vorher händisch mit einem abweichendem Wert überschrieben hat
Kann das jemand so bestätigen ? Tatsächlich ändern sich die von meinem Publisher gesendeten Werte nur selten....
Ich dachte ich könnte damit die Zuverlässigkeit meines Publishers (ggf. leere Batterie) überwachen. Aber da muss ich mir dann wohl etwas Anderes ausdenken.
Dazu kam auch noch die zwischenzeitliche Verwendung einer Powerbank als Stromversorgung am ESP. Wie ich mittlerweile erfahren hab, schaltet die sich aber aus, sobald nicht mehr genug Strom entnommen wird. Was dann spätestens beim ersten Deep Sleep wohl der Fall war. Dann kamen tatsächlich keine Daten mehr. Aber das konnte ich zu dem Zeitpunkt noch nicht auseinander halten.
You live you learn
Gruß,
Andre
-
@sloglban sagte in MQTT Server akzeptiert Update nicht ?:
Stattdessen wird die Zeitangabe wohl nur aktualisiert, wenn ein abweichender Wert gesendet wird
Das hast du ja so konfiguriert
-
Okay... womit konfiguriere ich das ?
-
@sloglban
publish nur bei Änderung hast du angehakt -
suche mal im www das thema "abschalten der powerbank" .. da gibt es lösungen - einen lastwiederstand kurz vor dem abschalten aktivieren ....
abweichender wert ... ok das mache ich auf dem esp.... und da läuft auch ein zeitserver der sendedatum und uhrzeit überträgt....
durch das einschränken der sendedaten ist das ganze jetzt stabiler , es senden bis zu fünf esp an mqtt - ohne stress .. -
Ahh.... wieder was gelernt. Ich danke Euch !
-