DS18b20 per MQTT mit ID abfragen

Die alternative Firmware für ESP8266 based devices

Moderatoren: seppy, udo1toni

Antworten
Limbi
Beiträge: 7
Registriert: 13. Mär 2021 17:23

DS18b20 per MQTT mit ID abfragen

Beitrag von Limbi »

Hallo zusammen,

bin seit kurzem von Pimatic zu Openhab umgestiegen. Warum ich mich so lange mit Pimatic gequält habe, keine Ahnung!!
Habe trotz meines nicht allzu hohen IT-Technikverständnis schon ein paar Sachen hinbekommen.

Habe mir nun nach dem folgenden Problem die Augen bereits wund geschaut und gelesen. :D :

Ich nutze OH3 auf dem Raspi. Über einen Sonoff Basic werden 2 DS18B20 Sensoren ausgelesen und über Tasmota an MQTT gesendet. In OH habe ich bereits die Chanels sowie die Items dazu angelegt. Dass funktioniert super.
Hier mal eine Übersicht:

Code: Alles auswählen

UID: mqtt:topic:MQTTBroker:Sonoff_SW_1
label: SONOFF_SW_1
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:MQTTBroker
channels:
  - id: Sonoff_ST_1
    channelTypeUID: mqtt:switch
    label: Sonoff_ST_1
    description: ""
    configuration:
      commandTopic: cmnd/tasmota_06805C/POWER
      stateTopic: stat/tasmota_06805C/POWER
  - id: tempi
    channelTypeUID: mqtt:number
    label: tempi
    description: ""
    configuration:
      transformationPattern: JSONPATH:$.DS18B20_2.Temperature
      stateTopic: tele/tasmota_06805C/SENSOR
      unit: °C
  - id: TEMPVALUE
    channelTypeUID: mqtt:number
    label: TEMPVALUE
    description: ""
    configuration:
      transformationPattern: JSONPATH:$.DS18B20_1.Temperature
      stateTopic: tele/tasmota_06805C/SENSOR
      unit: °C
Nun ist ja das Problem, dass z.B. bei Ausfall eines Sensors oder evtl beim Reboot die Nummern der Sensoren wechseln. Es sind später etwa 8 Sensoren geplant.Um das zu verhindern möchte ich mit den IDs der Sensoren arbeiten.

Über MQTT.fx wird folgendes empfangen:

Code: Alles auswählen

{"Time":"2021-03-13T17:35:37","DS18B20_1":{"Id":"000007524F1E","Temperature":20.4},"DS18B20_2":{"Id":"0014527B2BFF","Temperature":20.4},"TempUnit":"C"}
Wie um alles in der Welt bekomme ich die ID zugeordnet??

Besten Dank und liebe Grüße
Limbi

Benutzeravatar
udo1toni
Beiträge: 6246
Registriert: 11. Apr 2018 18:05
Answers: 67
Wohnort: Darmstadt

Re: DS18b20 per MQTT mit ID abfragen

Beitrag von udo1toni »

Was Du suchst ist die indirekte Adressierung, also einen Knoten nicht über seinen Namen zu identifizieren, sondern über einen (eindeutigen) Wert in einem Der Felder, die im Konten selbst gespeichert sind. Konkret:
Dein JSON sieht aufgehübscht so aus:

Code: Alles auswählen

{
	"Time": "2021-03-13T17:35:37",
	"DS18B20_1": {
		"Id": "000007524F1E",
		"Temperature": 20.4
	},
	"DS18B20_2": {
		"Id": "0014527B2BFF",
		"Temperature": 20.4
	},
	"TempUnit": "C"
}
Um den Knoten anzusprechen, dessen wert Id = 0014527B2BFF ist, lautet der JSONPATH Ausdruck:

Code: Alles auswählen

$.[?(@.Id='0014527B2BFF')].Temperature
Das Fragezeichen bedeutet, dass hier ein Filter angewender wird (eben der Ausdruck in der Klammer). das @ steht für das aktuelle Objekt. Es werden also alle Knoten übergeben, in denen das Element .Id dem angegeben Wert entspricht. da es nur einen Knoten pro Id gibt, kommt auch nur ein Wert zurück.
openHAB2.5.10 in einem Debian-Container (Proxmox, LXC)

Limbi
Beiträge: 7
Registriert: 13. Mär 2021 17:23

Re: DS18b20 per MQTT mit ID abfragen

Beitrag von Limbi »

udo1toni hat geschrieben: 14. Mär 2021 00:53 Das Fragezeichen bedeutet, dass hier ein Filter angewender wird (eben der Ausdruck in der Klammer). das @ steht für das aktuelle Objekt. Es werden also alle Knoten übergeben, in denen das Element .Id dem angegeben Wert entspricht. da es nur einen Knoten pro Id gibt, kommt auch nur ein Wert zurück.
Danke für die Erklärung!! Von der Idee her war ich knapp dran :-) Hatte einen ähnlichen Ausdruck schon getestet, allerdings war in dem Beispielschnipsel den ich hatte hinter dem $ zwei Punkte => $..[XXX

Leider hat es noch nicht geklappt.
Habe Probeweise mal einen Sensor belassen wie er war und habe einen Sensor mit Deinem Codeschnipsel angepasst.
Der angepasste funktioniert leider nicht:

Code: Alles auswählen

UID: mqtt:topic:MQTTBroker:Sonoff_SW_1
label: SONOFF_SW_1
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:MQTTBroker
channels:
  - id: Sonoff_ST_1
    channelTypeUID: mqtt:switch
    label: Sonoff_ST_1
    description: ""
    configuration:
      commandTopic: cmnd/tasmota_06805C/POWER
      stateTopic: stat/tasmota_06805C/POWER
  - id: tempi
    channelTypeUID: mqtt:number
    label: tempi
    description: ""
    configuration:
      transformationPattern: JSONPATH:$.DS18B20_2.Temperature
      stateTopic: tele/tasmota_06805C/SENSOR
      unit: °C
  - id: TEMPVALUE
    channelTypeUID: mqtt:number
    label: TEMPVALUE
    description: ""
    configuration:
      transformationPattern: JSONPATH:$.[?(@.Id='000007524F1E')].Temperature
      stateTopic: tele/tasmota_06805C/SENSOR
      unit: °C
Das Error Log hat hierzu folgendes ausgeworfen:

Code: Alles auswählen

2021-03-14 13:23:27.531 [WARN ] [t.generic.ChannelStateTransformation] - Executing the JSONPATH-transformation failed: An error occurred while transforming JSON expression.
Wo steckt dieser verdammte Fehler?!?!

Gruß Limbi

Limbi
Beiträge: 7
Registriert: 13. Mär 2021 17:23

Re: DS18b20 per MQTT mit ID abfragen

Beitrag von Limbi »

Keiner eine Idee?

Benutzeravatar
udo1toni
Beiträge: 6246
Registriert: 11. Apr 2018 18:05
Answers: 67
Wohnort: Darmstadt

Re: DS18b20 per MQTT mit ID abfragen

Beitrag von udo1toni »

Das JSONPATH Statement scheint korrekt zu sein. Ich muss mal schauen, ob ich irgendwo ein passendes Objekt in meiner Testumgebung einbauen kann.
openHAB2.5.10 in einem Debian-Container (Proxmox, LXC)

Limbi
Beiträge: 7
Registriert: 13. Mär 2021 17:23

Re: DS18b20 per MQTT mit ID abfragen

Beitrag von Limbi »

Da wäre ich überaus dankbar! Das ist so das letzte "Fitzelchen" das mich noch stört, dann hat openhab für mich deutlich gegenüber Pimatic gesiegt.

Limbi
Beiträge: 7
Registriert: 13. Mär 2021 17:23

Re: DS18b20 per MQTT mit ID abfragen

Beitrag von Limbi »

Noch folgender Hinweis:

JSON Path Transformation ist installiert, sowie Binary to JSON Transformation.

Kann sich das gegenseitig behindern?

Limbi
Beiträge: 7
Registriert: 13. Mär 2021 17:23

Re: DS18b20 per MQTT mit ID abfragen

Beitrag von Limbi »

udo1toni hat geschrieben: 16. Mär 2021 05:57 Das JSONPATH Statement scheint korrekt zu sein. Ich muss mal schauen, ob ich irgendwo ein passendes Objekt in meiner Testumgebung einbauen kann.
Hattest du mal Zeit danach zu schauen?

Frohe Ostern noch!

Benutzeravatar
udo1toni
Beiträge: 6246
Registriert: 11. Apr 2018 18:05
Answers: 67
Wohnort: Darmstadt

Re: DS18b20 per MQTT mit ID abfragen

Beitrag von udo1toni »

Leider bin ich noch nicht dazu gekommen... (bzw. Ich hab‘s glatt vergessen...) Sorry.


Gesendet von iPad mit Tapatalk
openHAB2.5.10 in einem Debian-Container (Proxmox, LXC)

Limbi
Beiträge: 7
Registriert: 13. Mär 2021 17:23

Re: DS18b20 per MQTT mit ID abfragen

Beitrag von Limbi »

udo1toni hat geschrieben: 6. Apr 2021 09:31 Leider bin ich noch nicht dazu gekommen... (bzw. Ich hab‘s glatt vergessen...) Sorry.
Kein Problem. Das ist im Moment das einzige was mich noch vom kompletten Umstieg von Pimatic zu Openhab abhält

Antworten