Probleme mit der Sensor.yaml und !include

dh1ok

New member
Hallo liebes Forum,

ich hatte vor der 2023.6 in der config.yaml einige Sensoren nach folgendem Schema angelegt

YAML:
sensor:
  - platform: command_line
    name: "Luftdata PM10"
    command: 'curl http://IP-Adresse/data.json'
    value_template: "{{ value_json.sensordatavalues[0].value | round(2) }}"
    unit_of_measurement: "µg/m³"
  - platform: command_line
    name: "Luftdata PM2.5"
    command: 'curl http://IP-Adresse/data.json'
    value_template: "{{ value_json.sensordatavalues[1].value | round(2) }}"
    unit_of_measurement: "µg/m³"

Nun soll man ich ja die Sensoren in eine eigene "sensor.yaml" auslagern. Dazu habe ich in meine configuration.yaml folgende Zeilen integriert:

YAML:
sensor: !include sensor.yaml

und eine sensor.yaml im /config/ Verzeichnis hinzugefügt.

Wenn ich nun aber den Code von oben in die sensor.yaml einfüge, erhalte ich eine Fehlermeldung:

Code:
Cannot quick reload all YAML configurations because the configuration is not valid:
Invalid config for [sensor]: required key not provided @ data['platform']. Got None.
(See /config/configuration.yaml, line 10)
.

In der Zeile 10 der config.yaml steht meine neue !include Anweisung zur sensor.yaml. Wenn ich die Datei leere kommt keine Fehlermeldung. HA scheint die Datei also zu finden. Ich vermute mal die Schreibweise ist auch falsch. Mein Problem ist, ich kann die Fehlermeldung nicht interpretieren. Vielleicht könnte mir einer auf die Sprünge helfen damit die Sensoren wieder funktioniern?

Gruß Olaf
 
Zuletzt bearbeitet von einem Moderator:
Hallo Olaf,

die "Schreibweise" der Sensoren ist ab 06.2023 geändert. Kann man auch in der Doku nachlesen. Ich habe das neue System leider auch noch nicht verstanden. Die alten Sensoren laufen im Moment noch, es gibt nur eine Warnung. Ab 08.2023 soll es dann wohl nur noch nach dem neuen System gehen. Vielleicht kann uns ja jemand das neue System der Sensoren erklären. Da werden wohl mehr Fragen kommen, besonders ab 08.2023, wenn dann bei vielen nichts mehr läuft, die die Warnungen ignoriert haben.
Gruß
Speedy
 
Das eine hat mit dem anderen nichts zu tun. ;)

Auslagern musst du gar nichts, du kannst gerne, wenn du möchtest.

Wenn du es jedoch tust, wie in deinen Fall, die Sensoren in einer sensor.yaml abzulegen.
Hat die Zeile
Code:
sensor:
in der sensor.yaml nichts mehr zu suchen.

Zum Thema command_line.

Bei der alten Konfiguration, handelt es sich um die Sensor Integration unter Verwendung der Platform command_line.

Neu ist, dass command_line eine eigene Integration wird, das heisst alle command_line Sensoren kommen jetzt in die command_line.yaml, falls du die Konfiguration aufteilen tust und in der configuration.yaml folgende Zeile steht.
Code:
command_line: !include command_line.yaml
Oder beginnen in der configuration.yaml mit der Zeile
Code:
command_line:


Alte Konfiguration:
Code:
# Example configuration.yaml entry
sensor:
  - platform: command_line
      command: SENSOR_COMMAND

Neu configuration:
Code:
# Example configuration.yaml entry
command_line:
  - sensor:
      command: SENSOR_COMMAND

Die Dokumentation der Command Line Integration findest du hier:
https://www.home-assistant.io/integrations/command_line/
 
Zuletzt bearbeitet:
Alte Konfiguration:
Code:
# Example configuration.yaml entry
sensor:
  - platform: command_line
      command: SENSOR_COMMAND

Neu configuration:
Code:
# Example configuration.yaml entry
command_line:
  - sensor:
      command: SENSOR_COMMAND

Die Dokumentation der Command Line Integration findest du hier:
https://www.home-assistant.io/integrations/command_line/
Hallo !
Also muß ich nur die Zeilen "sensor" und "command line" tauschen (natürlich "- platform:" wegfallen lassen). Verstehe ich das jetzt richtig ?
Gruß
Speedy
 
Hallo !
Vielen Dank für Eure schnelle Hilfe! Ich werde die Anregungen heute leider nicht umsetzen können, aber ich werde hier berichten.
 
Hallo !

Das hat jetzt wunderbar funktioniert. Ich habe die zwei command_line Sensoren in die configuration.yaml integriert und sie laufen jetzt auch wieder:

YAML:
command_line:
    - sensor:
        name: "Luftdata PM10"
        command: 'curl http://192.168.xxx.104/data.json'
        value_template: "{{ value_json.sensordatavalues[0].value | round(2) }}"
        unit_of_measurement: "µg/m³"

    - sensor:
        name: "Luftdata PM2.5"
        command: 'curl http://192.168.xxx.104/data.json'
        value_template: "{{ value_json.sensordatavalues[1].value | round(2) }}"
        unit_of_measurement: "µg/m³"

Damit habe ich jetzt meinen Feinstaubsensor wieder online.

Jetzt habe ich aber weiteree Sensoren, die ich wieder integrieren möchte und zwar meine Wetterstation (Meteohub). Ich hatte hierfür die Platform tcp benutzt :

Wenn ich folgende Abfrage in meinen Browser eingebe:

HTML:
http://192.168.xxx.101/meteolog.cgi?type=xml&quotes=1&mode=data&sensor=th0

erhalte ich folgende Antwort:

JSON:
<TH date="20230609081003" id="th0" temp="22.4" hum="62" dew="14.8" lowbat="0" />

Daher hatte ich folgenden Code der configuration.yaml hinzugefügt:

YAML:
sensor:
    - platform: tcp
      name: aussentemperatur
      host: 192.168.xxx.101
      port: 80
      payload: '/meteolog.cgi?type=xml&quotes=1&mode=data&sensor=th0'
      timeout: 6
      value_template: "{{ value_json[‘TH’][‘temp’] }}"
      unit_of_measurement: "°C"

Das scheint aber irgendwie keine Daten zurück zu geben. In den Protokollen steht:

Code:
 Logger: homeassistant.components.tcp.common
Source: components/tcp/common.py:133
Integration: tcp (documentation, issues)
First occurred: 17:54:00 (7 occurrences)
Last logged: 17:57:00
Timeout (10 second(s)) waiting for a response after sending
'/meteolog.cgi?type=xml&quotes=1&mode=data&sensor=th0' to 192.168.xxx.101 on port 80

Aus der Doku zur TCP- Integration habe ich das Beispiel herangezogen und entsprechend angepasst:

YAML:
sensor:
    - platform: tcp
      name: aussentemperatur
      host: 192.168.xxx.101
      port: 80
      payload: "/meteolog.cgi?type=xml&quotes=1&mode=data&sensor=th0"
      timeout: 10
      value_template: '{{ value.split ("\="")[3] }}'
      unit_of_measurement: "°C"

Ich dachte ich könnte den String, der zurück kommt, anhand der Zeichenfolge " =" " aufsplitten und hätte dadurch den Wert für die Temperatur.

Hat jemand eine Idee wo der Fehler ist?
 
Zuletzt bearbeitet:
Nun soll man ich ja die Sensoren in eine eigene "sensor.yaml" auslagern. Dazu habe ich in meine configuration.yaml folgende Zeilen integriert:

YAML:
sensor: !include sensor.yaml

Von der Vorgehensweise bin ich komplett abgekommen.
Das hat halt den Nachteil, das zusammenhängender Code unübersichtlich an verschiedenen Stellen gespeichert wird.
Ich mach das jetzt mit "Packages".
https://www.home-assistant.io/docs/configuration/packages
Die Vorgehensweise hat den Vorteil, das man den Code nicht nach Integrationen sortiert, sondern nach logischen Zusammenhängen.
Integrationen können mehrfach in verschiedenen Dateien vorkommen.
In der configuration.yaml gibts dann nur noch einen Eintrag unter "homeassistant:"
YAML:
homeassistant:
  packages: !include_dir_named packages
Hier wird der ganze Ordner "packages" (unter /config) eingebunden.
Jetzt kann man einfach im Ordner packages verschiedene Yaml-Dateien einfügen (ohne jede einzeln in die configuration.yaml einzutragen).
Ich hab da z.B. klima.yaml, gartenbewaesserung.yaml, buero.yaml, wetter.yaml, rollaeden.yaml usw.
Da dort so Einträge wie "sensor:" und "automation:" etc. mehrfach vorkommen können, stehen die Einträge jetzt sortiert nach logischem Zusammenhang in den yamls und nicht nach Integration. Ausserdem muss man nicht, wie z.B. beim Include einer sensor.yaml den Eintrag "sensor:" in der Datei weglassen. Man kann also direkt aus irgendwechen Beispielen oder Dokus den Code in eine neue yaml abspeichern und es funktioniert.
 
Hallo blurrrr

so einfach war es dann doch leider nicht. Ich habe das value_template bereits geändert

YAML:
 "{{ value_json['TH']['temp'] }}"

Jetzt kommt keine Fehlermeldung mehr. Aber jetzt habe ich diese Meldung:

[/ATTACH]
 

Anhänge

  • Screenshot 2023-06-22 191052.jpg
    Screenshot 2023-06-22 191052.jpg
    7,4 KB · Aufrufe: 6
Tja, dann wird das wohl daran liegen, dass keine "Zahl" zurückliefert wird. Denke am einfachsten dürfte es mit den Entwickler-Werkzeugen werden, da kannst Du dann einfach das gewünschte eintragen (in Deinem Fall eben {{ value_json['TH']['temp'] }}) und siehst sofort das Ergebnis.
 
Hllo Blurrrr und Giftfrosch,

genau das habe ich schon vermutet und habe den Code um die float(0) Anweisung erweitert. In den Entwicklerwerkzeugen kann ich sehen, dass der Zustand des Sensors nach der Änderung immer noch "unknown" ist. Also habe ich mal meinen String in den Template-Editor eingegeben:

YAML:
{## Imitate available variables: ##}
{% set my_test_json = {
  <TH date="20230609081003" id="th0" temp="22.4" hum="62" dew="14.8" lowbat="0" />
} %}

Der Template-Editor meldet mir aber sofort zurück, dass er:

Code:
TemplateSyntaxError: unexpected '<'

das < Zeichen nicht mag.

Also hab ich den Aufruf zur Wetterstation dahingehend abgeändert, dass kein xml als Antwort zurückgeliefert wird, sondern nur die Daten:

HTML:
http://192.168.xxx.101/meteolog.cgi?quotes=1&mode=data&sensor=th0

Das hier wird dann zurückgeliefert:

HTML:
20230624160228 th0 28.2 34 10.8 0

Ich dachte, ich könnte mir dann mit split den String aufteilen und dann eben im Array den entsprechenden Wert raussuchen:

YAML:
value_template: "{{value.split (' ')[3] | float(0) }}"

Aber auch das gelingt mir nicht. Irgendwie ist da der Wurm drin. Vielleicht müsste man zuerst das th0 ausschneiden, bevor man die Rückgabe aufsplittet und dann in eine float umwandelt? Würde das gehen?

Danke für Eure Mühe
 
So also ich konnte nun erfolgreich die Sensoren aus Meteohub in HomeAssistant integrieren. Hierzu musste ich folgende drei Sensoren nach meinem Feinstaubsensor zusätzlich anlegen:

YAML:
command_line:
    - sensor:
        name: "Luftdata PM10"
        command: 'curl http://192.168.xxx.104/data.json'
        value_template: "{{ value_json.sensordatavalues[0].value | round(2) }}"
        unit_of_measurement: "µg/m³"

    - sensor:
        name: "Luftdata PM2.5"
        command: 'curl http://192.168.xxx.104/data.json'
        value_template: "{{ value_json.sensordatavalues[1].value | round(2) }}"
        unit_of_measurement: "µg/m³"
        
    - sensor:
        name: "aussentemperatur"
        command: 'curl http://192.168.xxx.101/meteolog.cgi?mode=data'
        value_template: "{{value.split (' ')[10]}}"
        unit_of_measurement: "°C"

    - sensor:
        name: "luftfeuchtigkeit"
        command: 'curl http://192.168.xxx.101/meteolog.cgi?mode=data'
        value_template: "{{value.split (' ')[11]}}"
        unit_of_measurement: "%"
        
    - sensor:
        name: "taupunkt"
        command: 'curl http://192.168.xxx.101/meteolog.cgi?mode=data'
        value_template: "{{value.split (' ')[12]}}"
        unit_of_measurement: "°C"

Der http-Aufruf:
HTML:
http://192.168.xxx.101/meteolog.cgi?mode=data

ergibt eine Antwort ähnlich wie diese hier:

Code:
20230721140026 thb0 23.8 43 10.5 977.2 1011.7 1 0
20230721140026 th0 23.9 43 10.6 0
20230721140026 wind0 248 2.1 0.5 24.0 0
20230721140026 t0 24.0 0
20230721140026 rain0 0.0 529.2 0.0 0

Es werden also alle Sensor-Daten auf einmal abgerufen. Nun nur noch die gewünschten Daten extrahieren und aufbereiten...

Wetter.jpg

Grüße und Dank an Alle die mir hier geholfen haben.
 

Zurzeit aktive Besucher

Keine Mitglieder online.

Letzte Anleitungen

Statistik des Forums

Themen
6.115
Beiträge
59.425
Mitglieder
6.160
Neuestes Mitglied
gonzo12345
Zurück
Oben