Variable an Script übergeben und verwenden Thema ist als GELÖST markiert

Bereich rings rum zum Thema Yaml und seine Tücken.


Antworten
Benutzeravatar
Friedi
Beiträge: 443
Registriert: Do 22. Jul 2021, 16:57
2
Has thanked: 36 times
Been thanked: 21 times

Variable an Script übergeben und verwenden

Beitrag von Friedi »

Ich habe gerade mal wieder eine Blockade und weiß nicht, wie ich das geregelt bekomme.

Ich will eine Automatisierung erstellen, in der ich ein Script aufrufe und die Variable "mode_on_off" mit z.B. dem Wert off übergebe.

Code: Alles auswählen

service: script.turn_on
target:
  entity_id: script.air_purifier
data:
  mode_on_off: "off"

Im aufgerufenen Script möchte ich nun in Abhängigkeit dieser Variable unterschiedliche Aktionen ausführen. Also wenn die Variable "on" ist, soll Aktion A ausgeführt werden und bei "off" die Aktion B.
Ich komme hier beim Script einfach zu keinem Ergebnis, das auch nur annähernd laufen würde. Hat hier jemand eine Idee für mich?

Benutzeravatar
Osorkon
Administrator
Beiträge: 1953
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 61 times
Been thanked: 530 times
Kontaktdaten:

Re: Variable an Script übergeben und verwenden

Beitrag von Osorkon »

Hier mal ein Beispiel, Aktion Teil einer Automatisierung

Code: Alles auswählen

action:
  - service: script.xyz
    metadata: {}
    data:
      on_off: "off"

im data Bereich wird der Wert für on_off definiert.

Mit "off" wird der Input Bohlen ausgeschaltet und mit "on" wird dieser eingeschaltet.

Und hier das Script xyz

Code: Alles auswählen

alias: xyz
sequence:
  - service: input_boolean.turn_{{on_off}}
    metadata: {}
    data: {}
    target:
      entity_id: input_boolean.xyz
mode: single

Hilft das weiter?

Ansonsten poste doch mal Deine Automatisierung und das zugehörige Script.

Gruß
Osorkon

Einer muss ja für Ordnung sorgen. :D
Benutzeravatar
Friedi
Beiträge: 443
Registriert: Do 22. Jul 2021, 16:57
2
Has thanked: 36 times
Been thanked: 21 times

Re: Variable an Script übergeben und verwenden

Beitrag von Friedi »

Das hilft mir leider nicht weiter. Trotzdem danke 8-)

Die Action meiner Automatisierung habe ich ja bereits gepostet. Die passt auch so weit.
Leider bekomme ich mein Script nicht hin. Ich will entweder per choose oder if then else im Script verschiedene Aktionen auslösen. Je nachdem, ob in der Variable on oder off mitgegeben wird.

Benutzeravatar
Osorkon
Administrator
Beiträge: 1953
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 61 times
Been thanked: 530 times
Kontaktdaten:

Re: Variable an Script übergeben und verwenden

Beitrag von Osorkon »

Also einfach Wenn Dann?!

Code: Alles auswählen

alias: xyz
sequence:
  - if:
      - condition: template
        value_template: |
          {{ on_off == "on" }}
    then:
      - service: input_boolean.turn_on
        metadata: {}
        data: {}
        target:
          entity_id: input_boolean.xyz
  - if:
      - condition: template
        value_template: |
          {{ on_off == "off" }}
    then:
      - service: input_boolean.turn_off
        metadata: {}
        data: {}
        target:
          entity_id: input_boolean.xyz
mode: single

Auswahl wäre auch eine Option

Code: Alles auswählen

  - choose:
      - conditions:
          - condition: template
            value_template: |
              {{ on_off == "on" }}
        sequence:
          - service: input_boolean.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.xyz
      - conditions:
          - condition: template
            value_template: |
              {{ on_off == "off" }}
        sequence:
          - service: input_boolean.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.xyz

Gruß
Osorkon

Einer muss ja für Ordnung sorgen. :D
Benutzeravatar
Friedi
Beiträge: 443
Registriert: Do 22. Jul 2021, 16:57
2
Has thanked: 36 times
Been thanked: 21 times

Re: Variable an Script übergeben und verwenden

Beitrag von Friedi »

Danke erst mal. Jetzt hat es zumindest klick gemacht und das Script ist jetzt zumindest dahingehend korrekt, dass es nicht mehr rot angezeigt wird. Allerdings haut das mit dem Aufruf aus der Automatisierung irgendwie nicht hin. Hier mal meine Codes. Vielleicht siehst du was 🙄

Automatisierung:

Code: Alles auswählen

alias: test_puri
description: ""
trigger:
  - platform: state
    entity_id:
      - input_boolean.test_purifier
    from: "off"
    to: "on"
condition: []
action:
  - service: script.turn_on
    target:
      entity_id: script.air_purifier
    data:
      mode_on_off: "off"
mode: single

Script:

Code: Alles auswählen

air_purifier:
  sequence:
    - choose:
      - conditions:
        - condition: template
          value_template: |
            {{ mode_on_off == "on" }}
        sequence:
          - service: fan.set_preset_mode
            target:
              entity_id: fan.xiaomi_smart_air_purifier_4_pro
            data:
              preset_mode: Auto
      - conditions:
        - condition: template
          value_template: |
            {{ mode_on_off == "off" }}
        sequence:
          - service: fan.turn_off
            target:
              entity_id: fan.xiaomi_smart_air_purifier_4_pro
Benutzeravatar
Friedi
Beiträge: 443
Registriert: Do 22. Jul 2021, 16:57
2
Has thanked: 36 times
Been thanked: 21 times

Re: Variable an Script übergeben und verwenden

Beitrag von Friedi »

Kaum ruft man den Service richtig auf, funktioniert es :)

Code: Alles auswählen

  - service: script.turn_on
    target:
      entity_id: script.air_purifier
    data:
      variables:
        mode_on_off: "off"
Benutzeravatar
Friedi
Beiträge: 443
Registriert: Do 22. Jul 2021, 16:57
2
Has thanked: 36 times
Been thanked: 21 times

Re: Variable an Script übergeben und verwenden

Beitrag von Friedi »

Jetzt hätte ich dennoch eine Frage: Kann man, für den Fall, dass die Variable nicht übergeben wird, im Script einen Default für die Variable setzen, der nur dann verwendet wird, wenn kein Wert übergeben wird?

Benutzeravatar
Osorkon
Administrator
Beiträge: 1953
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 61 times
Been thanked: 530 times
Kontaktdaten:

Re: Variable an Script übergeben und verwenden

Beitrag von Osorkon »

| default(„xyz“)

Wenn keine variable übergeben wird.

Oder als default Option eine Aktion definieren, wenn keine der Standard Auswahl zutrifft.

Gruß
Osorkon

Einer muss ja für Ordnung sorgen. :D
Benutzeravatar
Friedi
Beiträge: 443
Registriert: Do 22. Jul 2021, 16:57
2
Has thanked: 36 times
Been thanked: 21 times

Re: Variable an Script übergeben und verwenden

Beitrag von Friedi »

Osorkon hat geschrieben: Sa 27. Jan 2024, 16:44

| default(„xyz“)

Wenn keine variable übergeben wird.

Verstehe ich nicht 🙁
Wo soll dieses |default(“off”) im Code hin? Kannst du das in meinem Beispiel mal einsetzen?

Benutzeravatar
Osorkon
Administrator
Beiträge: 1953
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 61 times
Been thanked: 530 times
Kontaktdaten:

Re: Variable an Script übergeben und verwenden

Beitrag von Osorkon »

Wird keine variable übergeben , wird diese == "on" gesetzt.

Code: Alles auswählen

air_purifier:
  sequence:
    - choose:
      - conditions:
        - condition: template
          value_template: |
            {{ mode_on_off  | default(“on“) == "on" }}

Guß
Osorkon

Einer muss ja für Ordnung sorgen. :D
Antworten