2 Entitäten synchronisieren

Hallo,
da ich noch nicht ganz so firm bin in der Behandlung bzw. im Umgang mit Entitäten habe ich für Euch hier eine Frage mit der Bitte, dass Ihr bei Erklärungen bitte diese umfassend gestaltet, da ich, wie gesagt, noch ziemlich unerfahren bin. Aber nun zu meinem Problem.
Ich möchte den Wert einer Entität aus meiner Wolf-Lüftungsanlage “sensor.wolf_cwl_300_luftungsgerat_0x3c_230016_lueftungsstufe” übertragen in eine Systemvariable meiner Homematic. Diese Systemvariable hat in HA eine eigene Entität “sensor.raspberrymatic_sv_lufter_stufe”.
Mögliche Zustände der zu übertragenden Entität sind: Stufe 0, Stufe 1, Stufe 2, Stufe 3
Die Homematic Systemvariable ist als Zahl mit Wertebereich von 0 - 10 definiert. Über einen Lösungsansatz oder Weg würde ich mich sehr freuen.

In der Automatsierung unterscheidet man unter anderem zwischen Aktoren und Sensoren. Aktoren empfangen Daten und führen den Befehl aus. Sensoren senden, aber empfangen keine Daten. Dein sensor.raspberrymatic_sv_lufter_stufe ist ein Sensor und kann daher nicht mit einem anderen Wert beschrieben werden.

Was möchtest du denn genau erreichen? Warum möchtest du den Wert des einen Sensors in den anderen hineinschreiben (was ja nicht geht)?

Ich bediene die Lüftungsanlage aktuell aus der Homematic heraus, bekomme dort aber keine Rückmeldung über die jeweilige Lüftungsleistung (Stufe). Diese erhalte ich aber aus der HA-Integration und würde diese deshalb gerne in die Homematic überführen, also in eine Homematic Systemvariable schreiben. Gibt es denn über Umwegen eine Möglichkeit das zu bewerkstelligen?

Ich selber nutze kein Homematic, muss mich daher selbst auf die vorhandene Dokumentation verlassen. Dort finde ich aktuell nur bei der Homematic-Integration eine Möglichkeit, die lokal auf der CCU läuft. Bei Homematic IP wird dies nicht erwähnt.

In der Dokumentation steht:

Originaltext in englisch

It is possible to read and set values of system variables you have setup on the CCU/Homegear. The supported types for setting values are float- and bool-variables. With the CCU a user with Admin-access is required. The states of the variables are available through the attributes of your hub entity (e.g., homematic.ccu2). Use templates (as mentioned above) to make your variables available to automations or as entities. The values of variables are polled from the CCU/Homegear in an interval of 30 seconds. Setting the value of a variable happens instantly and is directly pushed.

Übersetzung von deepl.com

Es ist möglich, Werte von Systemvariablen zu lesen und zu setzen, die Sie auf der CCU/Homegear eingerichtet haben. Die unterstützten Typen zum Setzen von Werten sind Float- und Bool-Variablen. Bei der CCU ist ein Benutzer mit Admin-Zugang erforderlich. Die Zustände der Variablen sind über die Attribute Ihrer Hub-Entity (z.B. homematic.ccu2) verfügbar. Verwenden Sie Vorlagen (wie oben erwähnt), um Ihre Variablen für Automatisierungen oder als Entitäten verfügbar zu machen. Die Werte der Variablen werden in einem Intervall von 30 Sekunden von der CCU/Homegear abgefragt. Das Setzen des Wertes einer Variable erfolgt sofort und wird direkt gepusht.

Die für uns interessante Passage habe ich hervorgehoben. Eine Entität (Sensor oder Aktor) hat eine ID (sensor.x oder switch.z), einen Zustand und Attribute. Das kannst du dir im Detail im HA unter Entwicklerwerkzeuge → Zustände ansehen. Die hervorgehobene Stelle besagt:

  • Die CCU hat eine eigene Entität (als Beispiel wird hier homematic.ccu2 genannt).
  • Die Variablen der CCU stehen in dieser Entität unter den Attributen.

Ob deine Systemvariable als Attribut deiner CCU-Entität auftaucht, kannst du ja mal prüfen.

In der oben Dokumentation findet sich folgendes Beispiel:

...
actions:
  - action: homematic.set_variable_value
    target:
      entity_id: homematic.ccu2
    data:
      name: "Variablename"
      value: true

Mittels einer Automatisierung sollte es also möglich sein, den Wert aus dem Sensor sensor.wolf_cwl_300_luftungsgerat_0x3c_230016_lueftungsstufe in die von dir angelegte Systemvariable zu setzen. Eine Automation könnte so aussehen:

alias: Übertragung Lüftungsleistung in CCU
description: ""
triggers:
  - trigger: state
    entity_id:
      - sensor.wolf_cwl_300_luftungsgerat_0x3c_230016_lueftungsstufe
conditions: []
actions:
  - action: homematic.set_variable_value
    target:
      entity_id: HOMEMATIC_ENTITÄT
    data:
      name: "raspberrymatic_sv_lufter_stufe"
      value: {{ states('sensor.wolf_cwl_300_luftungsgerat_0x3c_230016_lueftungsstufe') | float }}

mode: single

In dieser wird der gesetzte Wert stehen. Damit könnte man, wenn man denn wollte, prüfen, ob dieser Wert mit dem Wert aus deinem Läftungsgerät übereinstimmt und somit feststellen, ob der Wert übertragen wurde.

Moin Gunter,
vielen Dank für die Unterstützung. Ich habe mal die Automatisierung umgesetzt. Diese sieht jetzt so wie nachfolg aus:
image
Wenn sich jetzt die Entität der Lüftungsanlage ändert wird die Automatisierung getriggert und beginnt zu starten, allesdings mit Fehlern gem. Trace.


Leider wird die Homematic-Entität nicht geändert.
Hast Du sonst noch einen Tip, wie ich da weiter komme? Liegt es evtl. an verschiedenen Variablen-Definitionen?

Ich habe scheinbar die Anführungszeichen vergessen. Bei value müsste es heißen:

"{{ states('sensor.wolf_cwl_300_luftungsgerat_0x3c_230016_lueftungsstufe') | float }}"

Also:

alias: Übertragung Lüftungsleistung in CCU
description: ""
triggers:
  - trigger: state
    entity_id:
      - sensor.wolf_cwl_300_luftungsgerat_0x3c_230016_lueftungsstufe
conditions: []
actions:
  - action: homematic.set_variable_value
    target:
      entity_id: HOMEMATIC_ENTITÄT
    data:
      name: "raspberrymatic_sv_lufter_stufe"
      value: "{{ states('sensor.wolf_cwl_300_luftungsgerat_0x3c_230016_lueftungsstufe') | float }}"

mode: single

Guten Abend,
ich hatte leider nicht vorher Zeit die Änderungen einzuarbeiten und zu Testen. Leider noch immer kein positives Ergebnis.


Noch ein Tip für mich?
Viele Grüße

Schau doch mal was passiert, wenn Du einfach value: 1 übergibst. Immer noch eine Fehlermeldung?

Wir kommen der Sache aber näher, denn die Fehlermeldung hat sich nun gewandelt. Diesmal beschwert er sich, dass der Input falsch ist. sensor.wolf_cwl_300_luftungsgerat_0x3c_230016_lueftungsstufe scheint nicht die Zahl 3 zu liefern, sondern Stufe 3. Und aus einem String, also einer Zeichenkette, kann man logischerweise keine Zahl, in unserem Fall ein Float (Gleitkommazahl), umwandeln. Und den braucht die CCU laut Dokumentation. Ändere den actions-Teil mal wie folgt ab:

actions:
  - action: homematic.set_variable_value
    target:
      entity_id: HOMEMATIC_ENTITÄT
    data:
      name: "raspberrymatic_sv_lufter_stufe"
      value: >
        {% set status = states('states('sensor.wolf_cwl_300_luftungsgerat_0x3c_230016_lueftungsstufe') %}
        {% if status is not none and status | regex_search('Stufe \d+') %}
          {{ status.split(' ')[1] | float }}
        {% else %}
          0.0
        {% endif %}

Dieser Code schneidet von dem String, bspw. Stufe 3 die Zahl von dem Wort Stufe ab und übergibt lediglich die Zahl, hier wäre es die 3.

Guten Abend,
erst einmal vielen Dank für die absolut schnelle Hilfe. Leider ist in der Syntax vermutlich ein Fehler, wenn ich diesen Kode entsprechend eingebe.

states('states('sensor.

lösche einmal “('states” heraus

1 „Gefällt mir“

Da ist mir wohl ein kleiner Fehlet passiert. Wie @Bacardi korrekt angemerkt hat, ist da ein states(' zu viel. Korrigiert wäre diese Zeile dann so:

{% set status = states('sensor.wolf_cwl_300_luftungsgerat_0x3c_230016_lueftungsstufe') %}

Sollte das nicht funktionieren, kann man auch unter Geräte → Helfer → Helfer erstellen → Template → Template für einen Sensor erstellen einen Template-Sensor mit folgendem Code erstellen (einzufügen unter Zustandstemplate):

{% set status = states('sensor.wolf_cwl_300_luftungsgerat_0x3c_230016_lueftungsstufe') %}
{% if status is not none and status | regex_search('Stufe \d+') %}
  {{ status.split(' ')[1] | float }}
{% else %}
  0.0
{% endif %}

Und speichern. In der Automation dann ins value-Feld folgendes eintragen:

"{{ states('sensor.ERSTELLTER_TEMPLATE_SEMSOR') }}"

Also:

alias: Übertragung Lüftungsleistung in CCU
description: ""
triggers:
  - trigger: state
    entity_id:
      - sensor.wolf_cwl_300_luftungsgerat_0x3c_230016_lueftungsstufe
conditions: []
actions:
  - action: homematic.set_variable_value
    target:
      entity_id: HOMEMATIC_ENTITÄT
    data:
      name: "raspberrymatic_sv_lufter_stufe"
      value: "{{ states('sensor.ERSTELLTER_TEMPLATE_SEMSOR') }}"

mode: single

Und vielen Dank für deine Geduld :smiley:
Klappt ja nicht alles direkt auf Anhieb.


Bei mir funktioniert der code, nutze dafür aber zwei Test-Helfer. Habe ja kein Homematic. Wenn der Tippfehler korrigiert ist, sollte es passen.

Guten Abend,
entschuldigt bitte, dass ich mich erst jetzt zurückmelde mit einem Sachstand. Leider gibt es immer noch Probleme mit dem Code. Das PProgramm wird getriggert, bleibt dann aber stehen.


Das das Problem scheinbar in der Zeile Data liegt, habe ich bisher noch nicht die Sache mit dem Helfer ausprobiert. Habe ich daas evtl. wieder ein Zeicher vergessen einzugeben?
Viele Grüße

So,
jetzt habe ich doch noch mal die Sache mit dem Helfer ausprobiert. Nach der Definition des Helfers scheint dieser einen Dezimalen Wert zu liefern, so nachfolgend:
image
Allerdings gibt die Automatisierung beim Speichern wieder einene Fehler aus.
image
Schaut doch bitte mal drüber.

:crayon:by HarryP: Zusammenführung Doppelpost

Ich denke die target entity_id stimmt nicht. Da muss was mit sensor… hin.

Hallo alleseits,
ich habe es endlich dank Eurer Hilfe hinbekommen. Den Code, der jetzt funktioniert, habe ich nachfolgend mal eingefügt, damit Interessierte diesen für sich nutzen können.
image
Danke und bis zum nächsten Problem

1 „Gefällt mir“