HA Alexa Sprachbefehl mit Hilfe von Boolean Hilfsvariable (Triggerproblem)

Ich steh etwas auf dem Schlauch :slight_smile:

Ich möchte per Alexa Befehl sagen können „Schalte Erdgeschoss aus“, „Schalte Erdgeschoss ein“. Jedoch soll bei ein/aus etwas anderes passieren. (andere Entitäten schalten)

Nun gut, ich habe:

  1. Eine boolsche Hilfsvariable „Erdgeschoss“ erstellt, OK funktioniert
  2. Automation die auf diese Hilfsvariable triggert und je nach on/off Status verschiedene Dinge ausführt, OK funktioniert
  3. Hilfsvariable in Alexa verfügbar gemacht(nabu casa), funktioniert

Das Problem:
Die Idee funktioniert grundsätzlich, jedoch habe ich das Problem das der Aus bzw. Ein Sprachbefehl genau nur einmal ausgelöst wird. (Also nur wenn der jetzige Zustand der Hilfsvariable nicht dem neuen Zustand entspricht).

Ich hoffe ich habe das Problem verständlich beschrieben.

alias: Erdgeschoss ein/aus
description: ""
triggers:
  - trigger: state
    entity_id:
      - input_boolean.erdgeschoss
    enabled: true
conditions: []
actions:
  - if:
      - condition: state
        entity_id: input_boolean.erdgeschoss
        state: "on"
    then:
      - action: light.turn_on
        metadata: {}
        data:
          brightness_pct: 2
        target:
          device_id: d2e97925323f24ed16c00c6cc874cfe7
    else:
      - action: remote.turn_off
        metadata: {}
        data: {}
        target:
          floor_id: erdgeschoss
      - action: light.turn_off
        metadata: {}
        data: {}
        target:
          floor_id: erdgeschoss
mode: restart

Einfachste Variante wäre wenn du es statt im einer Automation das ganze über ein Script machst. Dieses kannst du genau wie eine Entität an Alexa übergeben.

So brauchst du nur den Namen des Scriptes sagen und dann ist der Status egal. Da das Script je nach Status automatisch entscheidet was gemacht werden muss.

Vielen Dank, werde ich testen.

Es funktioniert, jedoch wird ein Skript wie eine Szene behandelt. Ich kann also sagen:

  • xyz einschalten, funktioniert
  • xyz ausschalten, funktioniert nicht
  • starte xyz, funktioniert
  • aktiviere xyz, funktioniert

Natürlich kann ich mit einer Skriptlogik prüfen wenn ein, dann aus…
Leider schaffe ich damit keinen natürlichen Sprachbefehl. (xyz einschalten oder xyz ausschalten).

Nicht ganz wenn du z.B. eine Wenn-Dann-Funktion verwendest und dort Bedingung X angibst dann schaltet das Licht ein. Und bei Sonst, sprich die Bedingung trifft nicht zu dann wird es ausgeschalten.

Grundsätzlich wirklich simpel umsetzbar.

Kannst auch gern den Code teilen dann kann man nochmal drüber schauen.

Das Skript poste ich hier. Name: „Erdgeschoss“, so erscheint es dann unter Szenen in der Alexa-App.
Problem ist jedoch das bei Sprachbefehl „Erdgeschoss ausschalten“ das Skript gar nicht getriggert wird. Ich habe deshalb im Skript die Sprachausgabe „ist erledigt“ eingefügt.

sequence:
  - if:
      - condition: or
        conditions:
          - condition: state
            entity_id: remote.top5_wz
            state: "on"
          - condition: state
            entity_id: light.led_esszimmer_channel_4
            state: "on"
    then:
      - action: remote.turn_off
        metadata: {}
        data: {}
        target:
          floor_id: erdgeschoss
      - action: light.turn_off
        metadata: {}
        data: {}
        target:
          floor_id: erdgeschoss
    else:
      - action: light.turn_on
        metadata: {}
        data:
          brightness_pct: 2
        target:
          device_id: d2e97925323f24ed16c00c6cc874cfe7
  - action: notify.alexa_media_echo_buro
    metadata: {}
    data:
      message: Ist erledigt.
alias: Erdgeschoss
description: ""

Ich sehe grundsätzlich keinen Fehler im Code selbst das einzige was ich.mkt vorstelleb könnte ist, das Alexa nicht damit klar kommt das du ein- bzw.auschalten sagst.

Gibt dafür 2 Lösungen die mir einfallen.

  1. Namen ändern
  2. 2 Scripte - 1. Script zum einschalten und 2. Script zum auschalten

Müssten beide mit den jeweils entgegengesetzten Bedingungen und Aktionen gefüllt werden. Und dann entsprechend benannt werden. Anschließend nut noch beide bei Alexa mit dem entsprechenden Spraxhbefehl hinterlegen und es sollte reibungslos klappen.

Das Problem ist wie oben beschrieben:

Am schönsten wäre es mit binärem Schalter, weil hier ein natürlicher Ansagetext (schalte x ein, oder schalte x aus) möglich ist.

Wenn ich über die Entwicklertools die binäre Helfervariable nach einem Schaltvorgang auf unknown setze, funktioniert es mehrmals. So hat Alexa keinen on/off state und würde es immer ausführen.
Idee wäre nun die binäre Helfervariable am Ende der Automation auf unknown zu setzen.
Leider bietet HA über Scriptautomation keine Möglichkeit andere Werte als true/false.

Alternativ wäre nur das man eine Automation erstellt die auf einen Schalter (Helfer) triggert und dann genau diesen Helfer an Alexa zu übergeben.

Wäre sogar noch einfacher da du hier ohne weiteres in den Befehl ein- und ausschalten integrieren kannst.

Manchmal kommt man erst später auf die einfachsten Lösungen. :man_facepalming:

Genau, so hatte ich angefangen bzw. war die Ursprungsidee.
Problem daran ist eben wenn Alexa den Status der binären Helfervariable weiß,
schaltet Sie nur on, wenn zuvor off war.

Deshalb die Idee am Ende der Automation, den state auf unknown zu setzen, sehe bzw. finde hier keine Möglichkeit dazu.

Also, das funktioniert nur solange der neue Status nicht der alte war :slight_smile:

alias: Obergeschoss
description: ""
triggers:
  - trigger: state
    entity_id:
      - input_boolean.obergeschoss
    to: "on"
    id: Ein
  - trigger: state
    entity_id:
      - input_boolean.obergeschoss
    to: "off"
    id: Aus
conditions: []
actions:
  - if:
      - condition: trigger
        id:
          - Ein
    then:
      - action: notify.alexa_media_echo_buro
        metadata: {}
        data:
          message: Ich habe eingeschaltet
  - if:
      - condition: trigger
        id:
          - Aus
    then:
      - action: notify.alexa_media_echo_buro
        metadata: {}
        data:
          message: Ich habe ausgeschaltet
mode: single

Ich nutze Google aber hast du die Möglichkeit diesen Haken zu setzen?

Edit:

Hab jetzt nochmal alles nochmal von Anfang an gelesen. Somit fasse ich für mich nochmal zusammen, du hast den Schalter an Alexa übergeben und sobald du den Zustand von on auf off oder umgedreht änderst. Geht dieser bei deiner Alexa auf Unbekannt. Wie ist das im Home Assistant wie ist da der Zustand?

Hm, Text-Helfer? On, Off, unknown

Oder auch mit variablen in Automation/Skript (habe ich aber selber noch nicht gemacht)

@UncleSam139
Ich finde so eine Einstellung in der Alexa App leider nicht, das wäre die Lösung.

@Dreckfresse
Text Variablen werden von Alexa nicht unterstützt wenn ich Sie hinzufügen möchte.

Das witzige ist das ich in den Entwicklertools die binäre Variable auf unknown setzen darf, über die (beschnittene) Automation leider nicht, bzw. es ist nicht dokumentiert.

Was mir noch im Kopf rumschwirrt…

  1. Mit meiner vorherigen Smarthomelösung hatte ich auch binäre Variablen verwendet, und hatte das state Problem nicht.
  2. Kann es sein das es am Typ (Schalter, Licht) der Variable liegt, bzw. kann der Device-Typ bei einer Helfervariable überhaupt gesetzt werden?

Die Einstellung ist tatsächlich direkt aus Home Assistant. Unter dem Punkt Sprachassistenten.

Vieleicht gibt es diesen Punkt bei dir auch.

es geht mit „Python Scripts: set_state“

siehe:

und das geht auch :grinning:

sequence:
  - action: python_script.set_state
    data:
      entity_id: binary_sensor.waschmaschine
      state: "on"
  - action: python_script.set_state
    data:
      entity_id: binary_sensor.waschmaschine
      state: "off"
  - action: python_script.set_state
    data:
      entity_id: binary_sensor.waschmaschine
      state: unknown
alias: "TEST Python Scripts: set_state"
description: ""

und das generelle Erstellen/Erklärung ist hier:

@UncleSam139
Achso sorry, ich hatte in der Alexa App gesucht, natürlich habe ich den Punkt unter Home Assistant verfügbar :innocent:
Da mir im Moment die Nebenwirkungen noch nicht klar sind betreffend Routinen warte ich mal ab

@Dreckfresse
DANKE! thats it
Das beste, ich hatte das Video von Simon schon mal angesehen, jedoch war mir da noch nicht bewusst für was ICH das brauchen könnte :scream:

Danke euch beiden.
Funktioniert nun wie gewünscht, Beispiel:

alias: Obergeschoss
description: ""
triggers:
  - trigger: state
    entity_id:
      - input_boolean.obergeschoss
    to: "on"
    id: Ein
  - trigger: state
    entity_id:
      - input_boolean.obergeschoss
    to: "off"
    id: Aus
conditions: []
actions:
  - if:
      - condition: trigger
        id:
          - Ein
    then:
      - action: notify.alexa_media_echo_buro
        metadata: {}
        data:
          message: Ich habe eingeschaltet
  - if:
      - condition: trigger
        id:
          - Aus
    then:
      - action: notify.alexa_media_echo_buro
        metadata: {}
        data:
          message: Ich habe ausgeschaltet
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 0
  - action: python_script.set_state
    metadata: {}
    data:
      entity_id: input_boolean.obergeschoss
      state: unknown
mode: restart

1 „Gefällt mir“