Seite 1 von 1

Variable an Script übergeben und verwenden

Verfasst: Sa 27. Jan 2024, 13:52
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?


Re: Variable an Script übergeben und verwenden

Verfasst: Sa 27. Jan 2024, 15:12
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


Re: Variable an Script übergeben und verwenden

Verfasst: Sa 27. Jan 2024, 15:20
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.


Re: Variable an Script übergeben und verwenden

Verfasst: Sa 27. Jan 2024, 15:33
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


Re: Variable an Script übergeben und verwenden

Verfasst: Sa 27. Jan 2024, 16:13
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

Re: Variable an Script übergeben und verwenden

Verfasst: Sa 27. Jan 2024, 16:26
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"

Re: Variable an Script übergeben und verwenden

Verfasst: Sa 27. Jan 2024, 16:29
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?


Re: Variable an Script übergeben und verwenden

Verfasst: Sa 27. Jan 2024, 16:44
von Osorkon

| default(„xyz“)

Wenn keine variable übergeben wird.

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

Gruß
Osorkon


Re: Variable an Script übergeben und verwenden

Verfasst: Sa 27. Jan 2024, 16:56
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?


Re: Variable an Script übergeben und verwenden

Verfasst: Sa 27. Jan 2024, 17:01
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