NEWS
Auslesen von Werten mit ESP8266
-
Ich hoffe der Beitrag ist hier richtig.
Ich möchte MQTT Werte per ESP8266 o. ä. auslesen.
Das funktioniert, mit..... #define RECEIVE_NAME "HomeAussen/Temp" client.subscribe(RECEIVE_NAME); .... void callback(char* topic, byte* payload, unsigned int length) { Str_Temperatur = ""; for (int i = 0; i < length; i++) { // Serial.print((char)payload[i]); Str_Temperatur = Str_Temperatur + (char)payload[i]; // Speicher jedes Zeichen in den String Str_Temperatur Serial.println (Str_Temperatur); }
NUR solange, wie die Daten unter mqtt/0/..... stehen.
Der gesamte Pfad ist dann "mqtt/0/HomeAussen/Temp"Verschiedene Werte wie Solar_Fronius/AktuellerErtrag stehen unter "alias.0."
Wie bitte komme ich mit meinem Code da hin???
Versuch : RECEIVE_NAME "alias/0/Solar_Fronius/AktuellerErtrag"
scheitert. -
@tomtom61 sagte in Auslesen von Werten mit ESP8266:
Wie bitte komme ich mit meinem Code da hin???
Ich nehme an, du nutzt den MQTT Adapter als Broker?
In diesem Fall musst du die Instanzeinstellungen ändern/erweitern. Damit werden auch die Topics unter alias* published.
Edit: nachdem du in das Feld "alias.0.*" eingegeben hast, unbedingt <Enter> drücken!
-
@marc-berg
Super! Vielen Dank!
Wieder ein Fall - "Auf die einfachsten Lösungen kommt man nicht".Hmmm, mal sehen, wie ich das jetzt mache. Einfach den Prefix ändern oder hinzufügen?
Oder komplett rausnehmen?
Ich bin mir sicher, dass dann sämtliche >30 Sensoren mit ca. >100 Datenpunkten sowie unzählige Skripte dann nicht mehr richtig funktionieren. Weil diese natürlich den gesetzten Prefix NICHT senden.
Ich müsste sämtliche Sensoren (ESP8266) umprogrammieren...
Meine Überlegung eine zweite mttq Instanz zu machen und diese dann entsprechend ansprechen.Zum Glück habe ich den ioBroker im Proxmox laufen. Mache gerade per clone eine "Test" Version und teste das mal.
Ich berichte.
Gruß Tom
-
@marc-berg
Es funktioniert soweit. Ich habe eine zweite mttq Instanz angelegt.
Jetzt habe ich das Problem, dass bei Wertänderung im ioBroker der neue Wert nicht übertragen wird. Nur, wenn ich den Wert unter Objekte MANUELL ändere erfolgt eine Übertragung.
Wer weis Rat? -
@tomtom61
Wenn du jetzt noch verrätst, WIE du den Wert änderst, kann dir sicher geholfen werden. Ich vermute, du setzt das Ack Flag, oder setzt im Blockly mit dem falschen Baustein. (Ändere statt Steuere) -
@marc-berg
Im ioBroker werden Daten von ESP8266(s) per mqtt gesendet.
Ich Teste im Moment mit einem sich ständig verändernden Wert - "der Außentemperatur".
Diese wird im ioBroker an "mqtt.0.HomeAussen.Temp" gesendet.Normalerweise lasse ich mir alle Daten nur per VIS anzeigen.
Jetzt möchte ich allerdings Werte - Genaugenommen Final den Akkuladezustand meiner PV-Anlage - auf einer 7-Segment LED Anzeige anzeigen. Zum Testen wie geschrieben jetzt erst einmal die "Außentemperatur".
Hierzu verwende ich erst einmal den
Den [hier]
(https://github.com/knolleary/pubsubclient/blob/master/examples/mqtt_esp8266/mqtt_esp8266.ino
als Muster Publizierten Code.
Mein Code ist durchs Testen chaotisch, deshalb ... Angepasste- Parameter:
Hinzugefügt:
#define RECEIVE_NAME "mqtt.0.HomeAussen.Temp"
geändert:
.... WIFI Zugangsdaten
im Setup
client.setServer(mqtt_server, 1883); //1883 für mqtt Instanz 0
im Loop
// ... and resubscribe
client.subscribe(RECEIVE_NAME);Mit dieser Einstellung wird jede Änderung (Seriell) angezeigt.
Ändere ich nun: Auch zum testen einen sich ständig ändernder Wert....
#define RECEIVE_NAME "alias.0.Solar_Fronius.AktuellerErtrag"
im Setup:
client.setServer(mqtt_server, 1893); //1893 für mqtt Instanz 1Wird der Wert nur EINMAL geändert. Egal auch nach Reset des ESP8266. Der Wert bleibt gleich.
Die Einstellungen beider Instanzen sind bis auf den Port und
gleich.`
- Parameter:
-
Problem gelöst --------------
Es funktioniert mit einer zweiten Instanz - Vermutlich auch mit nur einer (nicht getestet)
Wichtig, dass in den mqqt Einstellungen der Haken bei "Sende auch Zustände (ack=true) angehackt ist.
Des weitern sollte in der Maske der Pfad stehen, in dem die Werte gelesen werden sollen.
In meinem Fall alias.0.*Gruß
Tom