Seite 1 von 2

DS18b20 per MQTT mit ID abfragen

Verfasst: 13. Mär 2021 17:37
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

Re: DS18b20 per MQTT mit ID abfragen

Verfasst: 14. Mär 2021 00:53
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.

Re: DS18b20 per MQTT mit ID abfragen

Verfasst: 14. Mär 2021 13:29
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

Re: DS18b20 per MQTT mit ID abfragen

Verfasst: 15. Mär 2021 18:04
von Limbi
Keiner eine Idee?

Re: DS18b20 per MQTT mit ID abfragen

Verfasst: 16. Mär 2021 05:57
von udo1toni
Das JSONPATH Statement scheint korrekt zu sein. Ich muss mal schauen, ob ich irgendwo ein passendes Objekt in meiner Testumgebung einbauen kann.

Re: DS18b20 per MQTT mit ID abfragen

Verfasst: 16. Mär 2021 15:07
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.

Re: DS18b20 per MQTT mit ID abfragen

Verfasst: 19. Mär 2021 14:50
von Limbi
Noch folgender Hinweis:

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

Kann sich das gegenseitig behindern?

Re: DS18b20 per MQTT mit ID abfragen

Verfasst: 5. Apr 2021 14:33
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!

Re: DS18b20 per MQTT mit ID abfragen

Verfasst: 6. Apr 2021 09:31
von udo1toni
Leider bin ich noch nicht dazu gekommen... (bzw. Ich hab‘s glatt vergessen...) Sorry.


Gesendet von iPad mit Tapatalk

Re: DS18b20 per MQTT mit ID abfragen

Verfasst: 6. Apr 2021 10:48
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