Seite 1 von 2
ESP8266 Temp Wert wird nicht angezeigt
Verfasst: 17. Mär 2023 14:01
von Maverick-811
Hallo zusammen.
Ich versuche gerade ein Thing mit einem ESP8266 Temperatur Wert zu erzeugen.
Die Bridge mit MQTT ist als Thing eingebunden und funktioniert.
Der ESP8266 gibt den Wert zum MQTT Broker weiter. Kann ich über MQTT Explorer sehen.
Wenn ich nun ein Thing erstelle (siehe unten) an ist alles Online, aber als Wert wird NULL angezeigt.
So erstelle ich das Thing:
Unter Einstellungen „THINGS“ auswählen
+ (rechts unten) drücken
MQTT Binding auswählen
Generic MQTT Thing auswählen
Label ändern z.B. ESP8266-102 (eindeutiges Label)
Bridge auswählen „MQTT Broker“ (wird links unten angezeigt)
Create Thing drücken
Things Auswahl, dort sollte jetzt „ESP8266-102“ angezeigt werden
„ESP8266-102“ auswählen
Channels (oben Mitte) drücken
ADD Channel auswählen
Channel Identifer eintragen z.B. „ESP826102Temp“
Label eintragen z.B. „ESP8266-102 Temp“
Channel type auswählen “ Number Value“
In „MQTT State Topic“ wird „esp8266-102/temp“ eingetragen
(wie mit Arduino unter „client.publish“ steht!!!
„Create“ und „Save (Ctrl-S)“ drücken
Channel auswählen
„Add Link to Item“
„Create a new Item“ auswählen
„Link“ Button drücken
Save (Ctrl-S)
„Model“ auswählen
„Add Location“ zB. Unter Musikzimmer ESP8266-102
„Create Points from Thing“ dann Musikzimmer auswählen
Select All
Add Points to Model
Select All
Was habe ich übersehen oder falsch gemacht.
Es funktioniert mit zwei unterschiedlichen ESP8266 nicht.
Ich hoffe, ihr könnt mir helfen.
Gruß
Horst
Re: ESP8266 Temp Wert wird nicht angezeigt
Verfasst: 17. Mär 2023 14:20
von Maverick-811
Ich habe gerade noch einen Versuch gemacht und habe unter Add Link nicht Number sondern String ausgewählt und da wird der Wert angezeigt.
Jetzt meine Frage: Warum funktioniert Number nicht?
Gruß
Horst
Re: ESP8266 Temp Wert wird nicht angezeigt
Verfasst: 17. Mär 2023 22:18
von udo1toni
Zunächst einmal hast Du übersehen, dass es viel sinnvoller gewesen wäre, das Thing in Form von Code zu präsentieren.
Der zweite Punkt: ESP8266 ist erst mal nur ein Microcontroller. Welche Firmware nutzt Du?
Kannst Du mal eine konkrete Payload des Topics esp8266-102/temp zeigen?
Re: ESP8266 Temp Wert wird nicht angezeigt
Verfasst: 18. Mär 2023 16:40
von Maverick-811
Hallo,
auf dem ESP8266-01 (um genau zu sein) läuft ein selbst geschriebenes (natürlich auch abgeschrieben) Programm welches alle 30 Sek. den Wert abfragt und veröffentlicht.
Hier die wichtigen Zeilen aus dem Programm:
Code: Alles auswählen
if (client.connect("esp8266-102", user, passwd)) {
Serial.println("connected");
client.subscribe("esp8266-102/temp");
dtostrf(temperatur, 6, 2, temperatur_str);
client.publish("esp8266-102/temp", temperatur_str);
Das Daten am MQTT Broker ankommen, sehe ich mit dem „MQTT Explorer“ und mit „MQTT.fx“.
Subscibe: esp8266-102/temp
esp8266-102
temp = 20.63
Das ist der Code vom Thing (ich hoffe, dass ich es richtig verstanden habe)
Code: Alles auswählen
UID: mqtt:topic:a02032baab:00d6728db9
label: ESP8266-102
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:a02032baab
channels:
- id: ESP8266102Temp
channelTypeUID: mqtt:number
label: ESP8266-102 Temp
description: ""
configuration:
stateTopic: esp8266-102/temp
- id: Text
channelTypeUID: mqtt:string
label: Text
description: ""
configuration:
stateTopic: esp8266-102/temp
Was verstehst Du unter kontreter Payload bzw. wo finde ich das?
Gruß
Horst
Re: ESP8266 Temp Wert wird nicht angezeigt
Verfasst: 18. Mär 2023 20:38
von udo1toni
Die Payload ist der Inhalt der Message. Die Frage ist, ob die Payload tatsächlich ausschließlich arabische Ziffern und einen einzelnen Punkt enthält.
Re: ESP8266 Temp Wert wird nicht angezeigt
Verfasst: 19. Mär 2023 00:42
von Maverick-811
Hallo,
hier ist ein Bild (Dateianhang) vom MQTTfx und da werden 2 Ziffern vor dem Punkt und 2 Ziffern danach angezeigt.
Was mir noch aufgefallen ist:
Ich habe ja noch mehr von diesen ESP8266 z.B. mit Temp und Humi und die funktionieren.
Hier der Code
Code: Alles auswählen
UID: mqtt:topic:a02032baab:15008bfb64
label: Musikzimmer
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:a02032baab
channels:
- id: MusikzimmerHumi
channelTypeUID: mqtt:number
label: Musikzimmer Humi
description: ""
configuration:
stateTopic: esp8266-158/humi
- id: MusikzimmerTemp
channelTypeUID: mqtt:number
label: Musikzimmer Temp
description: ""
configuration:
stateTopic: esp8266-158/temp
und ein Bild vom MQTT Explorer (siehe Dateianhang.
Ich hoffe, Du kannst mir weiterhelfen
Gruß
Horst
Re: ESP8266 Temp Wert wird nicht angezeigt
Verfasst: 19. Mär 2023 07:51
von udo1toni
Kann es sein, dass Du den selben Channel zweimal abfragst, also einmal als String und zusätzlich noch als Number? Das ist vermutlich nicht gut (auch wenn es eigentlich mit mqtt funktionieren sollte, aber nur zur Sicherheit...)
Eventuell gibt es auch ein Problem bei der Datenübernahme in die Items, da käme es auf den exakten Itemtyp an.
Es handelt sich bei den Messwerten ja zum einen um eine Temperatur und zum anderen um die Luftfeuchte.
openHAB hat UoM integriert (Units of Measurement), das bedeutet, man bekommt in einem Item Status eventuell nicht nur den Wert angezeigt, sondern zusätzlich auch die Einheit (bitte nicht verwechseln mit der Einheit, die man per Formatierung mit ausgeben lässt).
Das mqtt Binding unterstützt für number Channel auch UoM, dazu muss man unter den Advanced Options im betreffenden Channel die Einheit im Klartext angeben, also in diesem Fall °C bzw. % (ohne sonstige Erweiterungen, z.B. keine Anführungszeichen).
Wenn Du die Einheit so angibst, kannst Du den Channel mit einem Item vom Typ Number:Temperature bzw. Number:Dimensionless verlinken und hast automatisch die Einheit mit dabei stehen. Wenn du allerdings versuchst, einen UoM channel mit einem Nicht-UoM Item zu verlinken (oder auch umgekehrt), dann kann das zu Problemen führen.
Re: ESP8266 Temp Wert wird nicht angezeigt
Verfasst: 19. Mär 2023 12:04
von Maverick-811
Guten Morgen,
Kann es sein, dass Du den selben Channel zweimal abfragst, also einmal als String und zusätzlich noch als Number? Das ist vermutlich nicht gut (auch wenn es eigentlich mit mqtt funktionieren sollte, aber nur zur Sicherheit...)
dass habe ich nur gemacht, um zu zeigen, dass es mit String geht und mit Number nicht. Natürlich möchte ich nur Number verwenden!
Ich habe einen Test mit UoM gemacht, als im Fele ein "C" eingetragen, aber leider ohne Erfolg.
Code: Alles auswählen
UID: mqtt:topic:a02032baab:e2d87fd8c2
label: Test
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:a02032baab
channels:
- id: Test1
channelTypeUID: mqtt:number
label: Test1
description: ""
configuration:
stateTopic: esp8266-102/temp
unit: C
Da ich mit einigen ESP8266 mit BME280 die Temperatur und Humidity abfrage und dies funktioniert und mit den ESP8266 mit DS18B20 nur die Temperatur abfrage und diese nicht funktionieren, werde ich mal im Arduino Forum die Frage nach Unterschieden stellen.
Melde mich wieder.
Gruß
Horst
Re: ESP8266 Temp Wert wird nicht angezeigt
Verfasst: 19. Mär 2023 14:40
von udo1toni
Nein, C ist Coulomb, Du möchtest °C
Wenn es hartnäckig nicht funktionieren sollte, lösche das Thing und lege es neu an (unbedingt mit einer anderen UID!), vermutlich ist dann beim ersten Anlegen etwas schief gegangen...
Re: ESP8266 Temp Wert wird nicht angezeigt
Verfasst: 19. Mär 2023 18:10
von Maverick-811
So, mit Erfolgsmeldung zurück.
Der Fehler lag daran, dass das ESP8266 einen Wert mit einer Leerstelle am Anfang sendet.
So " 12.50" (ohne die Anführungsstriche)
Ich habe den Befehl
dtostrf(temperatur, 6, 2, temperatur_str);
durch
dtostrf(temperatur, 1, 2, temperatur_str);
ersetzt.
Dabei weiß ich nicht, was die "1" bedeutet. In der Beschreibung soll die Ziffer die Länge des String festlegen. Aber warum dann "1"?
Keine Ahnung, ist mir auch gerade egal.
Falls jemand genaueres wissen möchte, der kann im Arduino Forum nachschauen.
Gruß und Danke (an Alle)
Horst