Per post request Sensordaten an Sensor.Community senden

Hallo,

ich möchte gern meine Wetterstationsdaten meiner selbst gebauten Wetterstation auf sensor.community veröffentlichen. Hierfür habe ich folgenden YAML code geschrieben. (Auszug)

#sensor.community
  - interval: 4min
    then:
      - http_request.post:
        url: 'https://data.sensor.community/static/v1/data.json'        
        headers:
          Content-Type: application/json
          X-Pin: 11
          X-Sensor: esp8266-XXXX
        body: !lambda |-
            return "{\"software_version\": \"ESPHome_Weatherstation_V1.0\", \"sensordatavalues\":[{\"value_type\":\"temperature\",\"value\":\"" + id(bme680_temperature).state + "\"}, {\"value_type\":\"pressure\",\"value\":\"" + id(bme680_pressure).state + "\"}, {\"value_type\":\"humidity\",\"value\":\"" + id(bme680_humidity).state + "\"}]}";

Leider sehe ich meinen Fehler nicht, denn aus dem Installations-Log werde ich nicht schlau, da der Befehl “http_request.post” laut Doku existiert.

INFO ESPHome 2024.2.2
INFO Reading configuration /config/esphome/weatherstation.yaml...
INFO Detected timezone 'Europe/Berlin'
Failed config

interval: [source /config/esphome/weatherstation.yaml:583]
  - interval: 300s
    then: 
      - switch.turn_on: pms_set
      - delay: 30s
      - switch.turn_off: pms_set
  - interval: 60s
    then: 
      - sensor.integration.reset: rain_per_min
  - interval: 4min
    then: 
      - 
        Unable to find action with the name 'http_request.post'.
        http_request.post: 
        url: https://data.sensor.community/static/v1/data.json
        headers: 
          Content-Type: application/json
          X-Pin: 11
          X-Sensor: esp8266-XXXX
        body: !lambda |-
          return "{\"software_version\": \"ESPHome_Weatherstation_V1.0\", \"sensordatavalues\":[{\"value_type\":\"temperature\",\"value\":\"" + id(bme680_temperature).state + "\"}, {\"value_type\":\"pressure\",\"value\":\"" + id(bme680_pressure).state + "\"}, {\"value_type\":\"humidity\",\"value\":\"" + id(bme680_humidity).state + "\"}]}";

Kann mir jemand hierbei auf die Sprünge helfen?

Danke
Thomas

Funktioniert der Post Befehl im Browser?

Prüfe mal den Parameter von Content-Type ? Möglicherweise muss das ein String sein.

Ja, post auf diesen Server geht generell. Aber irgendwie kennt eesphome den Befehl http_request.post nicht.

ersten Fehler gefunden.
Hatte vergessen das Komponentensetup vergessen:

http_request:
  useragent: esphome/device
  timeout: 10s

komme leider nicht weiter. Log meidet jetzt:

[http_request:086]: HTTP Request failed; URL: https://api.sensor.community/v1/push-sensor-data/ ; Error: connection failed; Duration: 1 ms

muss folgendes im header plazieren:

Content-Type: application/json  
X-Pin: 11 
X-Sensor: esp8266-12345678 

und folgendes in data

{
  "software_version": "your_version", 
   "sensordatavalues":[
     {"value_type":"temperature","value":"22.30"},
     {"value_type":"humidity","value":"34.70"}
  ]
} 

wobei 22.30 durch den Sensorstate des Sensors bme680.temperature ersetzt werden muss und 34.70 duch den des bme680.humidity

Abliefern muss ich das ganze an den Endpunkt:

https://api.sensor.community/v1/push-sensor-data/

Meine Lösung war:

- http_request.post:
          url: https://api.sensor.community/v1/push-sensor-data/
          verify_ssl: false
          headers:
            Content-Type: application/json
          body: !lambda |-
            return "{\"software_version\": \"ESPHome v1.0\", \"sensordatavalues\":[{\"value_type\":\"temperature\",\"value\":\"" + id(bme280_temperature).state + "\"}, {\"value_type\":\"pressure\",\"value\":\"" + id(bme280_pressure).state + "\"}, {\"value_type\":\"humidity\",\"value\":\"" + id(bme280_humidity).state + "\"}]}";

Hoffe jemand kann mir da helfen. Stehe auf dem Schlauch.
Danke