Sonstiges Syntax der yaml-Dateien in Home Assistant

bärtiger

New member
Hallo

Ich habe eine Frage zur Syntax der yaml-Dateien in Home Assistant. Ich habe noch kaum Erfahrung mit dem System, möchte die Powerbrain Wallbox von cFos einbinden, stolpere aber bereits bei der Übernahme der yaml-Dateien in Home Assistant. Bereits die 2. Zeile dieser Datei
Code:
- platform: rest
resource: http://192.168.178.50/cnf?cmd=modbus&device=meter1&read=8058q
name:  "cFos Zählerstand"
scan_interval: 10
device_class: energy
unit_of_measurement: kWh
state_class: total
username: admin
password: PASSWORD
authentication: basic
headers:
User-Agent: Home Assistant
Content-Type: application/json

- platform: rest
resource: http://192.168.178.50/cnf?cmd=modbus&device=meter1&read=8062d
name: "cFos aktuelle Leistung"
scan_interval: 15
device_class: power
unit_of_measurement: W
state_class: measurement
timeout: 120
username: admin
password: PASSWORD
authentication: basic
headers:
User-Agent: Home Assistant
Content-Type: application/json
...

wird mir vom File editor moniert und ich habe keine Ahnung, warum:

Code:
end of the stream or a document separator is expected (2:1)



1 | - platform: rest

2 | resource: http://192.168.178.50/ ...

----^

3 | name: "cFos Zählerstand"

Ich vermute, dass irgendetwas mit dem Zeilenende nicht passt (ich arbeite auf Win11), aber auch ein Löschen des Zeilenwechsels und dessen Neueingabe im File editor schaffen keine Abhilfe.

Entferne ich den Bindestrich am Anfang der Zeile, ist der Fehler weg, aber dann moniert der Editor

Code:
duplicated mapping key (15:1)



12 | User-Agent: Home Assistant

13 | Content-Type: application/json

14 |

15 | platform: rest

-----^

16 | name: "cFos aktuelle Leistung"

Kann mir jemand weiter helfen?
 
Zuletzt bearbeitet von einem Moderator:
Hi,

hab zwar nicht groß Ahnung, aber normalerweise sind da Einrückungen im YAML-Code, die bei Dir einfach so "garnicht" vorhanden sind. Wo auch immer Du den Code her hast, entweder war er schon falsch abgebildet, oder beim Copy&Paste sind die Einrückungen verloren gegangen. Bei Einrückungen ist YAML ziemlich pingelig.

In der Regel sind es - soweit ich da nun nicht völlig daneben haue - immer 2 Leerzeichen pro Einrückungen. Halt in diese Richtung:

YAML:
Punkt 1
  Punkt 1.1
  Punkt 1.2
    Punkt 1.2.1
    Punkt 1.2.2
  Punkt 1.3
Punkt 2
  Punkt 2.1
  Punkt 2.2
    Punkt 2.2.1
    Punkt 2.2.2

...usw.

Schau vielleicht mal einfach kurz https://www.home-assistant.io/integrations/sensor.rest/ oder https://www.home-assistant.io/integrations/rest/ an, damit Du eine Vorstellung davon bekommst. Nach diesem Prinzip muss auch der von Dir o.g. Code eingerückt sein. Was da nun genau an welche Stelle kommt, kann ich Dir nicht sagen, aber das sollte bei Deiner Vorlage schon entsprechend abgebildet sein. Alternativ musst Du halt ein bisschen ausprobieren, denke aber, dass man das schon hinbekommen sollte :)
 
Ok... habe grade mal kurz nach der URL im Code bei Google geschaut und vermutlich gefunden, worauf Du Dich bezogen hast (cfos wallbox)... Sorry, aber die Code-Schnipsel dort taugen nicht, da die Einrückungen dort schlichtweg "nicht vorhanden" sind.

Kurzum: Bedeutet eine Menge Fummelarbeit für Dich... :rolleyes:
 
Danke für die Hinweise.
Ich hatte schon irgendwo gelesen, daß die Einrückungen syntaktisch relevant sind. Werde mich mal diesbezüglich schlau machen.
 
Der Link: https://www.home-assistant.io/integrations/sensor.rest/ von @blurrrr war schon gut und richtig. Ohne Einrückung muss sensor: dadrüber (wenn Du, wie ich vermute, in der configuration.yaml arbeitest), dann - platform: rest schon um zwei Leerzeichen eingerückt.

Für den ersten Part sollte das, von den Einrückungen her, so passen:
YAML:
sensor:
  - platform: rest
    resource: http://192.168.178.50/cnf?cmd=modbus&device=meter1&read=8058q
    name: "cFos Zählerstand"
    scan_interval: 10
    device_class: energy
    unit_of_measurement: kWh
    state_class: total
    username: admin
    password: PASSWORD
    authentication: basic
    headers:
      User-Agent: Home Assistant
      Content-Type: application/json

Da Du dort aber etwas lesen willst fehlt noch value_template, womit Du angibst, was der zu erstellende Sensor überhaupt ausgibt. Häufig ist das JSON (und das gibst Du ja auch im header an), dann wäre value_template: "{{ value_json }}" ein Ansatzpunkt um erstmal alles auszugeben, was überhaupt geliefert wird - einfach so unter name: schreiben, in genau der Einrückung.

Danach unter Entwicklerwerkzeuge => Zustände nach diesem Sensor schauen und ggf. weiter in die Tiefe gehen, um genau den gewünschten Wert zu bekommen.

Denk daran, dass HA immer komplett neu gestartet werden muss, wenn Du etwas an der configuration.yaml geändert hast.
 
jetzt sieht die Datei so aus wie im Anhang, jetzt kommt nur noch eine Fehlermeldung nach der letzten Zeile, dieich mir nicht erklären kann:
Code:
unexpected end of the stream within a double quoted scalar (64:1)
 

Anhänge

  • sensor.yaml.txt
    1,8 KB · Aufrufe: 4
Ah, Du arbeitest direkt in der sensor.yaml - dann vergiss das mit dem sensor: oben drüber :)

Bis auf das nicht eingerückte unter headers: sieht das garnicht schlecht aus - das müsstest Du noch nachholen - aber zwei Punkte sind daran definitiv falsch:
YAML:
  - Template Sensor für die korrekte Darstellung vom Zählerstand, ebenfalls in der sensor.yaml;
- das ist ein Kommentar, Du musst ihn auskommentieren mittels Raute:
YAML:
#  - Template Sensor für die korrekte Darstellung vom Zählerstand, ebenfalls in der sensor.yaml;
und (gut, dass Du alles gepostet hast) ein falsches Anführungszeichen ganz am Ende:
YAML:
value_template: "{{ (states('sensor.cfos_zahlerstand') | float / 1000 ) }}“
- das sieht aus wie ein Anführungszeichen, aber es erfüllt nicht die Funktion in der Programmierung, so wäre es richtig:
YAML:
value_template: "{{ (states('sensor.cfos_zahlerstand') | float / 1000 ) }}"
Du siehst es hier auch schon in der farblichen Hervorhebung, das eine "wirkt", das andere nicht.

Ach, edit, am Ende stimmen auch die Einrückungen nicht, so muss es sein:
YAML:
#  - Template Sensor für die korrekte Darstellung vom Zählerstand, ebenfalls in der sensor.yaml;
  - platform: template
    sensors:
      cfos_zahler_gerundet:
        friendly_name: "cFos Zählerstand gerundet"
        unit_of_measurement: 'kWh'
        value_template: "{{ (states('sensor.cfos_zahlerstand') | float / 1000 ) }}"
 
Zuletzt bearbeitet:
Alles klar, das mit dem Kommentar war mir auch schon aufgefallen. Deine Bemerkungen zu den Anführungszeichen haben geholfen, das Problem zu beseitigen.
Danke
Gibt es hier im Forum eine Möglichkeit, ein Problem als gelöst zu markieren?
 
Gibt es hier im Forum eine Möglichkeit, ein Problem als gelöst zu markieren?
Manche schreiben ein [GELÖST] vor den Threadtitel wenn es so ist, aber das ist nicht zwingend notwendig und oft genug wirds von anderen eh nochmal ausgegraben :)

Den Nachtrag bezüglich der Einrückungen am Ende hast Du sicherlich noch gelesen?
 
Nein, hatte ich noch nicht, der file editor hatte es nicht moniert... hab es jetzt noch integriert.
Ich war in dem Beitrag, sh. Link in #1 schon weiter gegangen.
Das Utility meter scheint ok zu sein, wird nicht moniert, aber danach kommt wieder eine Fehlermeldung:
Code:
missed comma between flow collection entries (31:8)

 28 |     sensors:
 29 |       cfos_wallbox_zustand_icon_v2:
 30 |       value_template: >-
 31 |       {% if states('sensor.cfos_aktuel ...
-------------^
 32 |       car_plugged
Da bräuchte ich nochmal Hilfe.
 

Anhänge

  • Configuration_add.yaml.txt
    1,3 KB · Aufrufe: 2
Da bräuchte ich nochmal Hilfe.
Da stimmten auch nochmal Einrückungen nicht, so sollte das passen:
YAML:
  - platform: template
    sensors:
      cfos_wallbox_zustand_icon_v2:
      value_template: >-
        {% if states('sensor.cfos_aktueller_wallbox_zustand') | int == 1 %}
        car_plugged
        {% elif states('sensor.cfos_aktueller_wallbox_zustand') | int == 2 %}
        car_loading
        {% elif states('sensor.cfos_aktueller_wallbox_zustand') | int == 4 %}
        no_energy
        {% else %}
        charger_free
        {% endif %}
      friendly_name: 'cFos Wallbox Zustand'
      icon_template: >-
        {% if states('sensor.cfos_aktueller_wallbox_zustand')| int == 1 %}
        mdi:ev-plug-type2
        {% elif states('sensor.cfos_aktueller_wallbox_zustand') | int == 1 %}
        mdi:car-electric
        {% elif states('sensor.cfos_aktueller_wallbox_zustand') | int == 4 %}
        mdi:transmission-tower-off
        {% else %}
        mdi:ev-station
        {% endif %}

Dafür finde ich das ja gerade hilfreich. Wenn jemand ein ähnliches Problem hat und sucht, dann sieht er, wo er eine Lösung finden kann.
Ja, der Gedanke ist nicht schlecht :)
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
5.688
Beiträge
55.677
Mitglieder
5.566
Neuestes Mitglied
TheEagle
Zurück
Oben