kann ein http:URL thing nicht lesen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

rebell21
Beiträge: 125
Registriert: 23. Aug 2024 09:34
Answers: 0

kann ein http:URL thing nicht lesen

Beitrag von rebell21 »

ich habe mit einem ESP32 einen CO2-Sensor gebaut
Der sendet über das Netz einen kleinen JSON String mit dem Messwert

folgendes wird bei der Abfrage der URL http://192.168.2.186/CO2 ausgegeben

Code: Alles auswählen


["939"]peter@localhost:~> curl 192.168.2.186/CO2
["940 ppm"]peter@localhost:~> 


Im browser sieht es so aus
Screenshot_20250201_175529.jpg

Ich scheitere bei der Definition des Items. Das Thing habe ich mit dem http:url Bining erzeugt. Es hat einen Channel

Code: Alles auswählen


  - id: ESP32_CO2
    channelTypeUID: http:number
    label: CO2-Sensor
    description: ""
    configuration:
      mode: READONLY
      unit: ppm
      stateExtension: CO2
      stateTransformation:
        - REGEX:.*\[\"(\d*\"\]).*
Aber das entsprechende Item bleibt immer auf undef. Egal ob ich es als Standord oder REGEX definiere. Ich glaube, dass ich irgendwo die REDEX Expression wieder falsch definiert habe

Der hereinkommende String ist einfach ["940 ppm"]

Wie muss ich das item und die REGEX Expression definieren, um diesen String korrekt zu transformieren ?

Ich habe sowohl die JSONPATH Transformation als auch die REGEX Transformation unter Transformations installiert
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: kann ein http:URL thing nicht lesen

Beitrag von udo1toni »

Schalte bitte mal auf "Rohdaten" um und füge diese Rohdaten hier als Code markiert ein.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

rebell21
Beiträge: 125
Registriert: 23. Aug 2024 09:34
Answers: 0

Re: kann ein http:URL thing nicht lesen

Beitrag von rebell21 »

die Rohdaten sehen wir folgt aus

Code: Alles auswählen


["767 ppm"]


Das kommt auch bei curl 192.168.2.186/CO2 raus

Code: Alles auswählen


peter@openhabian:~$ curl 192.168.2.186/CO2 
["884 ppm"]peter@openhabian:~$ 



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

Re: kann ein http:URL thing nicht lesen

Beitrag von udo1toni »

Das ist kein JSON.

Im Zweifel kannst Du die Zahl mittels REGEX extrahieren: REGEX:.*\"(\d*) pp.*
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

rebell21
Beiträge: 125
Registriert: 23. Aug 2024 09:34
Answers: 0

Re: kann ein http:URL thing nicht lesen

Beitrag von rebell21 »

das klappt leider nicht.

Soll ich die REGEX Transfromation als Status Transformation im Channel eintragen oder als REGEX Transformation in der Auswahlliste im item ?

Ich habe beide probiert.

Egal wo ich diesen Ausdruck eintrage, der Wert des items bleibt immer auf UNDEF

Das thing ist online und scheint zu funktionieren. Es hat einen Channel und ein item vom type Number

Wie kann ich Nachkommastellen in den Items anzeigen ?

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

Re: kann ein http:URL thing nicht lesen

Beitrag von udo1toni »

Also bei mir funktioniert es...
Thing:

Code: Alles auswählen

UID: http:url:test
label: Test per url
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://192.168.178.77/
  delay: 0
  stateMethod: GET
  refresh: 30
  commandMethod: GET
  timeout: 3000
  bufferSize: 2048
channels:
  - id: co2
    channelTypeUID: http:number
    label: CO2
    description: ""
    configuration:
      mode: READONLY
      unit: ppm
      stateExtension: co2
      stateTransformation:
        - REGEX:.*\"(\d*) pp.*
Zugehgöriges Item:

Code: Alles auswählen

label: CO2
type: Number:Dimensionless
category: ""
groupNames: []
tags:
  - Point
Metadata unit:

Code: Alles auswählen

value: ppm
config: {}
rebell21 hat geschrieben: 1. Feb 2025 21:40 Wie kann ich Nachkommastellen in den Items anzeigen ?
Was meinst Du damit? Der Wert wird ohne Nachkommastellen geliefert.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

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

Re: kann ein http:URL thing nicht lesen

Beitrag von udo1toni »

Andere Frage in dem Zusammenhang: Wenn Du das Teil selbst gebaut hast, hast Du ja auch die Kontrolle über den Source Code. Es böte sich dann an, gültiges JSON zu erzeugen, in der Form

Code: Alles auswählen

{"co2": 786,"unit": "ppm"}
wobei schon die unit nicht wirklich gebraucht wird. Das JSON Objekt sollte mit einem Zeilenumbruch abschließen (\n), der fehlt ebenfalls (weshalb der Wert ganz oben beim curl Aufruf "vor" dem Prompt ausgegeben wird, statt in einer eigenen Zeile.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: kann ein http:URL thing nicht lesen

Beitrag von peter-pan »

Wie Udo bereits gesagt hat, wenn du das Teil selbst gebaut hast, hast du auch die Kontrolle über den Source-Code.

Ich habe auch einen ESP32 mit Tasmota geflasht. Da hängt so ein CO²-Sensor dran und ausserdem auch noch ein Thermometer und ein Abstandmesser.
Frag mich aber nicht warum; mir war einfach langweilig :oops:
Browser: http://192.168.178.26/cm?cmnd=Status%2010 - "gehübscht-JSON"

Code: Alles auswählen

StatusSNS	
Time	"2025-02-02T12:52:48"
ANALOG	
A1	974
DHT11	
Temperature	20.3
Humidity	34
DewPoint	3.9
SR04	
Distance	155.7
ESP32	
Temperature	47.2
TempUnit	"C"
Browser: http://192.168.178.26/cm?cmnd=Status%2010 - "String - Rohdaten"

Code: Alles auswählen

{"StatusSNS":{"Time":"2025-02-02T12:52:48","ANALOG":{"A1":974},"DHT11":{"Temperature":20.3,"Humidity":34.0,"DewPoint":3.9},"SR04":{"Distance":155.7},"ESP32":{"Temperature":47.2},"TempUnit":"C"}}
Und einfach über MQTT bzw. Web-UI

Code: Alles auswählen

13:00:06.683 MQT: tele/espv3_02/SENSOR = {"Time":"2025-02-02T13:00:06","ANALOG":{"A1":971},"DHT11":{"Temperature":20.3,"Humidity":34.0,"DewPoint":3.9},"SR04":{"Distance":155.7},"ESP32":{"Temperature":47.8},"TempUnit":"C"}
und als Anzeige im Browser
esp32.jpg
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

rebell21
Beiträge: 125
Registriert: 23. Aug 2024 09:34
Answers: 0

Re: kann ein http:URL thing nicht lesen

Beitrag von rebell21 »

ich programmiere und flashe den ESP32 mit C++ in der arduino IDE.

Ich werde dann mal in dem C++ Programm auf dem ESP32 "richtiges" JSON inkl. \n erzeugen und über http://192..... anbieten. Ich dachte, wenn ich die Rohdaten mit dem tag "application/JSON" auf die Reise schicke, baut der WebServer korrektes JSON daraus. Ich wusste nicht, dass ich die JSON Struktur vorher zusammenbauen muss.

Ist erst mein zweiter Versuch mit dem ESP32. Aber so lernt man


Danke Euch


@peter-pan : apropos DHT22. Welche Erfahrungen hast Du mit den Werten aus dem DHT22 in Bezug auf die Genauigkeit gemacht ? Ich habe große Abweichungen (+-2 °C) bei den Werten vom DHT22, der auch am ESP32 hängt. Verglichen mit den Werten aus einem BME280 und auch mein Homematic Temperatursensor STOH-A liefert ganz andere Werte (auch bis zu 2 °C Differenz). Auch bei der Luftfeuchtigkeit liefert der DHT22 ganz andere Werte als ein BME280. Ich glaube der DHT22 ist eher ein Lügensensor.
Welchen CO2 Sensor setzt Du ein ? Ich habe mal den MH-Z19C versucht.

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: kann ein http:URL thing nicht lesen

Beitrag von peter-pan »

Ichweiss nicht genau was du da wohin auf die Reise schickst.

Ich bin zwar kein Programmierer und kann nur mit Halbwissen helfen, aber müsste es nicht eigentlich doch so sein, dass du einen Wert an einem Sensor abgreifst und diesen dann an einen Broker" publis(c)hst". Das kann eine Funktion in deinem Programm sein oder eben so eine fertige Funktion, wie sie Tasmota anbietet. Ob man einen MQTT-Client noch installieren muss weiss ich nicht so genau. Schaden kann's aber nicht.

Ich hab z.B. ein kleines Bash-Script (@EigelbGeek), dass mir alle 3 Minuten die CPU-Temperatur(vcgencmd) ausliest und über den Broker an OH weiterleitet. Das ist kein JSON-String, sondern ein Einzelwert.
Bash-Script:

Code: Alles auswählen

hab4@raspi58:/usr/local/mqtt_rpi $ cat mqtt_rpi_temperature.sh
#!/bin/bash

# mqtt_broker_ip="192.168.178.76"
mqtt_broker_ip="localhost"
mqtt_broker_port="1883"
mqtt_topic="rpi/temp/RASPI58_Temp"

Temperature=$(/usr/bin/vcgencmd measure_temp | tr -d "a-zA-Z=' ")

# echo $Temperature

mosquitto_pub -h $mqtt_broker_ip -p $mqtt_broker_port -t $mqtt_topic/status -m $Temperature # -d


hab4@raspi58:/usr/local/mqtt_rpi $
crontab:

Code: Alles auswählen

 */3 * * * * bash /usr/local/mqtt_rpi/mqtt_rpi_temperature.sh >/dev/null 2>&1
.things

Code: Alles auswählen

    Thing mqtt:topic:danny:raspi58   "Raspberry 5 /8 GB"     (mqtt:broker:danny )    @ "MQTT2" {
    Channels:
        Type number : temp            "CPU Temp. 5 /8 GB"     [ stateTopic="rpi/temp/RASPI58_Temp/status" ]
    }
.items

Code: Alles auswählen

Number:Temperature CPU_Temp_raspi58               "CPU-OH4-Pi RPi5 / 8 GB[%.1f °C]"           <temperature>        (gEG_Buero)               ["Point"]           { channel="mqtt:topic:danny:raspi58:temp" }
Ich glaube der DHT22 ist eine "abgespeckte" Version vom DHT11. Da hab ich 3 Stück davon noch im Einsatz. Natürlich muss man die evtl. kalibrieren, aber das geht mit Tasmota auch ganz gut.
Was die Messung anbelangt, so muss man natürlich immer mit Abweichungen rechnen.

Deshalb habe ich meine ganzen Themperaturmessungen mittels Sonoff SNZB-02D über "Zigbee2Mqtt" umgestellt (inzwischen 17 Stck). Die melden ihre Werte auch per MQTT an OH(..und gehen alle gleich falsch ;) ). Die haben langlebige Batterien und ein schönes Display. 2 Aqara-Sensoren habe ich auch noch, die erkennen auch den Luftdruck (einer davon ist im Kühlschrank :lol: ). Klappt alles wunderbar.

Aber wie gesagt, über den geflashten ESP32, es reicht aber auch ein esp8266, kommt man leicht an die gewünschten Daten.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Antworten