Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. [gelöst] Auf Alexa Routinen in Js "allgemein" reagieren

NEWS

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    10
    1
    236

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    1.8k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    11
    1
    770

[gelöst] Auf Alexa Routinen in Js "allgemein" reagieren

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
33 Beiträge 4 Kommentatoren 1.2k Aufrufe 4 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • GaspodeG Gaspode

    @ahnungsbefreit
    Ja, das würde gehen. Mir persönlich ist aber der Weg über die History lieber, da muss ich mich nicht mit den kryptischen Routine-Namen rumschlagen. In meinem Fall hätte ich außerdem etwa 70 Trigger, die ich anlegen müsste. Da ist mir der Textvergleich innehalb des Registry Triggers sympatischer.
    Aber evtl. hat @Ben1983 ja damit eine Lösung, die für ihn passt.

    A Offline
    A Offline
    Ahnungsbefreit
    schrieb am zuletzt editiert von
    #14

    @alexi ich habe auch erst über den Text-Vergleich mit History gearbeitet aber bei mir zumindest hat das nicht immer funktioniert, manchmal wurde in der History das Device erst zu spät aktualisiert und dann kommt die Antwort am falschen Device raus. Ich meine mich übrigens zu erinnern, dass auch der Entwickler des Alexa2 Adapters den Weg über Routinen empfohlen hat und von History abrät. Aber wenn es funktioniert, warum nicht?

    Wenn meine Antwort hilfreich war, dürft Ihr das gerne durch einen "Upvote" (der kleine "^" unten rechts) zum Ausdruck bringen.

    Ben1983B 1 Antwort Letzte Antwort
    0
    • GaspodeG Offline
      GaspodeG Offline
      Gaspode
      schrieb am zuletzt editiert von
      #15

      @ahnungsbefreit said in Auf Alexa Routinen in Js "allgemein" reagieren:

      History das Device erst zu spät aktualisiert und dann kommt die Antwort am falschen Device raus.

      Hast du da die States history.summary und history.serialNumber ausgewertet? Ich nehme ja den state history.json, der beides (und zusätzlich noch den Device-Namen) beinhaltet. Hatte noch nie den Fall, dass im Trigger ein Attribut nicht aktuell war.

      A 1 Antwort Letzte Antwort
      0
      • GaspodeG Gaspode

        @ahnungsbefreit said in Auf Alexa Routinen in Js "allgemein" reagieren:

        History das Device erst zu spät aktualisiert und dann kommt die Antwort am falschen Device raus.

        Hast du da die States history.summary und history.serialNumber ausgewertet? Ich nehme ja den state history.json, der beides (und zusätzlich noch den Device-Namen) beinhaltet. Hatte noch nie den Fall, dass im Trigger ein Attribut nicht aktuell war.

        A Offline
        A Offline
        Ahnungsbefreit
        schrieb am zuletzt editiert von
        #16

        @alexi Ja, vielleicht lag's daran.

        Wenn meine Antwort hilfreich war, dürft Ihr das gerne durch einen "Upvote" (der kleine "^" unten rechts) zum Ausdruck bringen.

        1 Antwort Letzte Antwort
        0
        • A Ahnungsbefreit

          @alexi die Routine hat auf jedem Device die gleiche ID, deswegen ersetzt Du den zweiten Stern gegen die ID der Routine, auf die Du triggern willst

          Ben1983B Offline
          Ben1983B Offline
          Ben1983
          schrieb am zuletzt editiert von
          #17

          @ahnungsbefreit ich werde es mal die Tage versuchen.
          Gibts denn auch noch ne Möglichkeit Text auf einem Mobilen Gerät wieder geben zu können?
          Also bspw. Handy Alexa App. Die Stadt ja nicht als device im iobroker

          A 1 Antwort Letzte Antwort
          0
          • A Ahnungsbefreit

            @alexi ich habe auch erst über den Text-Vergleich mit History gearbeitet aber bei mir zumindest hat das nicht immer funktioniert, manchmal wurde in der History das Device erst zu spät aktualisiert und dann kommt die Antwort am falschen Device raus. Ich meine mich übrigens zu erinnern, dass auch der Entwickler des Alexa2 Adapters den Weg über Routinen empfohlen hat und von History abrät. Aber wenn es funktioniert, warum nicht?

            Ben1983B Offline
            Ben1983B Offline
            Ben1983
            schrieb am zuletzt editiert von
            #18

            @ahnungsbefreit bekommt Man aus dem verlinkten Objekt nicht das Objekt der Routine?
            Wie bekommt man nun das Device raus?

            A GaspodeG 2 Antworten Letzte Antwort
            0
            • Ben1983B Ben1983

              @ahnungsbefreit ich werde es mal die Tage versuchen.
              Gibts denn auch noch ne Möglichkeit Text auf einem Mobilen Gerät wieder geben zu können?
              Also bspw. Handy Alexa App. Die Stadt ja nicht als device im iobroker

              A Offline
              A Offline
              Ahnungsbefreit
              schrieb am zuletzt editiert von
              #19

              @ben1983 Nur die Devices, die Du auch in den Objekten siehst.

              Wenn meine Antwort hilfreich war, dürft Ihr das gerne durch einen "Upvote" (der kleine "^" unten rechts) zum Ausdruck bringen.

              1 Antwort Letzte Antwort
              0
              • Ben1983B Ben1983

                @ahnungsbefreit bekommt Man aus dem verlinkten Objekt nicht das Objekt der Routine?
                Wie bekommt man nun das Device raus?

                A Offline
                A Offline
                Ahnungsbefreit
                schrieb am zuletzt editiert von
                #20

                @ben1983 sagte: Wie bekommt man nun das Device raus?

                Wenn Du auf eine bestimmte Routine triggerst, dann sieht die Objekt ID so aus:

                alexa2.0.Echo-Devices.<deviceSerNo>.Routines.<RoutineID>
                

                Wenn Du diese Liste auseinandernimmst, kannst Du daraus die OID für die Ausgabe ermitteln. In Blockly sieht das dann z.B. so aus:

                65e9541e-a2f1-4a34-a1f4-e255df3decc9-image.png

                Wenn meine Antwort hilfreich war, dürft Ihr das gerne durch einen "Upvote" (der kleine "^" unten rechts) zum Ausdruck bringen.

                1 Antwort Letzte Antwort
                0
                • Ben1983B Ben1983

                  @ahnungsbefreit bekommt Man aus dem verlinkten Objekt nicht das Objekt der Routine?
                  Wie bekommt man nun das Device raus?

                  GaspodeG Offline
                  GaspodeG Offline
                  Gaspode
                  schrieb am zuletzt editiert von
                  #21

                  @ben1983 said in Auf Alexa Routinen in Js "allgemein" reagieren:

                  Wie bekommt man nun das Device raus?

                  on(/alexa2.0.Echo-Devices.*.Routines.*/, function (obj) {
                      log("--->"+obj.deviceId.substring(obj.deviceId.lastIndexOf(".")+1,obj.deviceId.length));
                  });
                  
                  Ben1983B 1 Antwort Letzte Antwort
                  0
                  • GaspodeG Gaspode

                    @ben1983 said in Auf Alexa Routinen in Js "allgemein" reagieren:

                    Wie bekommt man nun das Device raus?

                    on(/alexa2.0.Echo-Devices.*.Routines.*/, function (obj) {
                        log("--->"+obj.deviceId.substring(obj.deviceId.lastIndexOf(".")+1,obj.deviceId.length));
                    });
                    
                    Ben1983B Offline
                    Ben1983B Offline
                    Ben1983
                    schrieb am zuletzt editiert von
                    #22

                    @alexi said in Auf Alexa Routinen in Js "allgemein" reagieren:

                    obj.deviceId.substring(obj.deviceId.lastIndexOf(".")+1,obj.deviceId.length)

                    Ich habe es jetzt mal so testweise implementiert.
                    Die Routine wird ausgelöst, aber er springt nicht in die Funktion. (Es wird nichts geloggt und es erfolgt keine Sprachausgabe.

                    
                    const IdRoutineAussentemperatur = 'alexa2.0.Echo-Devices.*.Routines.3dbcea3f-e43c-4f41-a5a9-f724003c898e';
                    
                    on(IdRoutineAussentemperatur,AbfrageAussentemperatur)
                    
                    function AbfrageAussentemperatur(obj)
                    {
                        let ActiveDevice = obj.deviceId.substring(obj.deviceId.lastIndexOf(".")+1,obj.deviceId.length);
                        log(obj.id);
                        setState("alexa2.0.Echo-Devices." + ActiveDevice + ".Commands.speak", "Das hat funktioniert");
                    }
                    
                    
                    1 Antwort Letzte Antwort
                    0
                    • GaspodeG Offline
                      GaspodeG Offline
                      Gaspode
                      schrieb am zuletzt editiert von Gaspode
                      #23

                      @ben1983
                      Nimm's mir nicht übel, aber wenn du Beispiele änderst, dann könntest du den Fehler auch selbst suchen.
                      Doku: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md

                      Hinweis: Du definierst in Zeile 2 einen String, willst aber einen regulären Ausdruck:

                      const IdRoutineAussentemperatur = /alexa2.0.Echo-Devices.*.Routines.3dbcea3f-e43c-4f41-a5a9-f724003c898e/;
                      
                      Ben1983B 2 Antworten Letzte Antwort
                      0
                      • GaspodeG Gaspode

                        @ben1983
                        Nimm's mir nicht übel, aber wenn du Beispiele änderst, dann könntest du den Fehler auch selbst suchen.
                        Doku: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md

                        Hinweis: Du definierst in Zeile 2 einen String, willst aber einen regulären Ausdruck:

                        const IdRoutineAussentemperatur = /alexa2.0.Echo-Devices.*.Routines.3dbcea3f-e43c-4f41-a5a9-f724003c898e/;
                        
                        Ben1983B Offline
                        Ben1983B Offline
                        Ben1983
                        schrieb am zuletzt editiert von Ben1983
                        #24

                        @alexi said in Auf Alexa Routinen in Js "allgemein" reagieren:

                        /alexa2.0.Echo-Devices.*.Routines.3dbcea3f-e43c-4f41-a5a9-f724003c898e/

                        Ich dachte das wäre gleich zu behandeln wie das hier... das funktioniert:

                        on('alexa2.0.History.json', AbfrageSpracheingabe);
                        
                        function AbfrageSpracheingabe(json)
                        {
                            let jsonObj  = JSON.parse(json.state.val); 
                            let summary  = jsonObj.summary;
                            let deviceID = jsonObj.serialNumber;
                         
                            if(summary =="wie ist die aussentemperatur")
                            {
                               setState("alexa2.0.Echo-Devices." + deviceID + ".Commands.speak", "Testausgabe");
                            }
                        }
                        

                        Da nehme ich doch auch einen String? und übergebe so die funktion.
                        sehe den unterschied nicht, warumdas nicht genauso gehen sollte, oder übersehe ich etwas?
                        Ps. habe auch schon den Ausdruck direkt mit rein genommen und es klappt auch nicht.

                        und beim Einsetzen des Beispiels:

                        on(/alexa2.0.Echo-Devices.*.Routines.*/, function (obj) {
                            log("--->"+obj.deviceId.substring(obj.deviceId.lastIndexOf(".")+1,obj.deviceId.length));
                        });
                        

                        erfolgt auch kein log

                        1 Antwort Letzte Antwort
                        0
                        • GaspodeG Gaspode

                          @ben1983
                          Nimm's mir nicht übel, aber wenn du Beispiele änderst, dann könntest du den Fehler auch selbst suchen.
                          Doku: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md

                          Hinweis: Du definierst in Zeile 2 einen String, willst aber einen regulären Ausdruck:

                          const IdRoutineAussentemperatur = /alexa2.0.Echo-Devices.*.Routines.3dbcea3f-e43c-4f41-a5a9-f724003c898e/;
                          
                          Ben1983B Offline
                          Ben1983B Offline
                          Ben1983
                          schrieb am zuletzt editiert von Ben1983
                          #25

                          @alexi Habe das Problem gefunden. Wenn ich das Sternchen durch ein device ersetze geht es.
                          irgendwie klappt das mit dem Stern nicht

                          Es funktioniert sogar so:

                          const IdRoutineAussentemperatur = "alexa2.0.Echo-Devices.G090L911751605VK.Routines.3dbcea3f-e43c-4f41-a5a9-f724003c898e";
                          
                          on(IdRoutineAussentemperatur,AbfrageAussentemperatur);
                          
                          function AbfrageAussentemperatur(obj)
                          {
                              setState(obj.deviceId + ".Commands.speak", "Das hat funktioniert");
                          }
                          

                          Allerdings nur einmal. Wenn man durch eine Spracheingabe die Routine auslöst, dann wird diese auf true gesetzt.
                          Leider nicht zurück gesetzt.

                          habe es so gelöst. kann man das so machen, oder spricht was dagegen?

                          const IdRoutineAussentemperatur = "alexa2.0.Echo-Devices.G090L911751605VK.Routines.3dbcea3f-e43c-4f41-a5a9-f724003c898e";
                          
                          on(IdRoutineAussentemperatur,AbfrageAussentemperatur);
                          
                          function AbfrageAussentemperatur(obj)
                          {
                              setState(obj.deviceId + ".Commands.speak", "Das hat funktioniert");
                              setState('alexa2.0.Echo-Devices.G090L911751605VK.Routines.3dbcea3f-e43c-4f41-a5a9-f724003c898e',false);
                          }
                          

                          Jetz müsste ich nur noch wissen, wie ich es generisch hin bekomme. Das mit dem Stern scheint ja nicht zu funktionieren.

                          GaspodeG 1 Antwort Letzte Antwort
                          0
                          • GaspodeG Offline
                            GaspodeG Offline
                            Gaspode
                            schrieb am zuletzt editiert von Gaspode
                            #26

                            @ben1983 said in Auf Alexa Routinen in Js "allgemein" reagieren:

                            irgendwie klappt das mit dem Stern nicht

                            https://developer.mozilla.org/de/docs/Web/JavaScript/Guide/Regular_Expressions

                            .* steht in einer RegExp für eine beliebige Anzahl eines beliebigen Zeichens (der Punkt für ein beliebiges Zeichen und der Stern für beliebig viele davon). Warum das bei dir nicht funktioniert, wenn du den Ausdruck in / statt in " einschließt, kann ich dir nicht sagen.

                            Ganz korrekt müsste der Ausdruck so heißen, und in meinem Test funktioniert sowohl dieser, als auch der einganges genannte:

                            /^alexa2\.0\.Echo-Devices\..*\.Routines\..*/
                            
                            OstfrieseUnterwegsO 1 Antwort Letzte Antwort
                            0
                            • Ben1983B Ben1983

                              @alexi Habe das Problem gefunden. Wenn ich das Sternchen durch ein device ersetze geht es.
                              irgendwie klappt das mit dem Stern nicht

                              Es funktioniert sogar so:

                              const IdRoutineAussentemperatur = "alexa2.0.Echo-Devices.G090L911751605VK.Routines.3dbcea3f-e43c-4f41-a5a9-f724003c898e";
                              
                              on(IdRoutineAussentemperatur,AbfrageAussentemperatur);
                              
                              function AbfrageAussentemperatur(obj)
                              {
                                  setState(obj.deviceId + ".Commands.speak", "Das hat funktioniert");
                              }
                              

                              Allerdings nur einmal. Wenn man durch eine Spracheingabe die Routine auslöst, dann wird diese auf true gesetzt.
                              Leider nicht zurück gesetzt.

                              habe es so gelöst. kann man das so machen, oder spricht was dagegen?

                              const IdRoutineAussentemperatur = "alexa2.0.Echo-Devices.G090L911751605VK.Routines.3dbcea3f-e43c-4f41-a5a9-f724003c898e";
                              
                              on(IdRoutineAussentemperatur,AbfrageAussentemperatur);
                              
                              function AbfrageAussentemperatur(obj)
                              {
                                  setState(obj.deviceId + ".Commands.speak", "Das hat funktioniert");
                                  setState('alexa2.0.Echo-Devices.G090L911751605VK.Routines.3dbcea3f-e43c-4f41-a5a9-f724003c898e',false);
                              }
                              

                              Jetz müsste ich nur noch wissen, wie ich es generisch hin bekomme. Das mit dem Stern scheint ja nicht zu funktionieren.

                              GaspodeG Offline
                              GaspodeG Offline
                              Gaspode
                              schrieb am zuletzt editiert von Gaspode
                              #27

                              @ben1983 said in Auf Alexa Routinen in Js "allgemein" reagieren:

                              habe es so gelöst. kann man das so machen, oder spricht was dagegen?

                              Ja. Erstens triggerst du den Trigger durch das Rücksetzen erneut und zweitens führt das auch die Routine ein weiteres Mal aus.

                              Ich würde das so lösen, bin aber kein Experte mit den Routinen. Wie gesagt, ich bevorzuge die History Variante.

                              on({id: /^alexa2\.0\.Echo-Devices\..*\.Routines\..*/, val:true}, function (obj) {
                                  log("--->"+obj.deviceId.substring(obj.deviceId.lastIndexOf(".")+1,obj.deviceId.length));
                                  setState (obj.id, {val:false, ack:true});
                              });
                              

                              Erklärung:
                              "val: true" im Trigger reagiert nur auf den Wert true
                              "ack: true" in setState verhindert ein erneutes Ausführen der Routine

                              1 Antwort Letzte Antwort
                              0
                              • GaspodeG Gaspode

                                @ben1983 said in Auf Alexa Routinen in Js "allgemein" reagieren:

                                irgendwie klappt das mit dem Stern nicht

                                https://developer.mozilla.org/de/docs/Web/JavaScript/Guide/Regular_Expressions

                                .* steht in einer RegExp für eine beliebige Anzahl eines beliebigen Zeichens (der Punkt für ein beliebiges Zeichen und der Stern für beliebig viele davon). Warum das bei dir nicht funktioniert, wenn du den Ausdruck in / statt in " einschließt, kann ich dir nicht sagen.

                                Ganz korrekt müsste der Ausdruck so heißen, und in meinem Test funktioniert sowohl dieser, als auch der einganges genannte:

                                /^alexa2\.0\.Echo-Devices\..*\.Routines\..*/
                                
                                OstfrieseUnterwegsO Offline
                                OstfrieseUnterwegsO Offline
                                OstfrieseUnterwegs
                                schrieb am zuletzt editiert von OstfrieseUnterwegs
                                #28

                                Ganz korrekt müsste es wohl so sein:

                                on(/^alexa2\.0\.Echo-Devices\..*\.Routines\..*/, function (obj) {
                                

                                Zufälligerweie funktioniert auch Deine Variante. Aber die würde auch bei einem Objekt mit der ID
                                alexa2A0BEcho-DevicesBaldistOsternRoutinesUndPfingsten
                                triggern. der Punbkt soll ja gefunden werden und müsste daher maskiert werden.

                                Mann kann das prinzipiell auch die Namen der Alexa Routinen benutzen.
                                Irgendwie so:

                                on(/^alexa2\.0\.Echo-Devices\..*\.Routines\..*/, function (obj) {
                                    var routine = obj.common.name;
                                    log("--->"+routine);
                                    if (routine == 'Name einer Routine in Alexa App') {
                                        log ("----> zweig 1");
                                    } else if (routine == 'Name einer anderen Routine in Alexa App') {
                                        log ("----> Zweig 2");
                                    } else {
                                        log ("----> Diese Routine wird nicht in ioBroker behandelt");
                                    }
                                });
                                

                                EDIT: Überlappt sich mit Alexis Post

                                GaspodeG Ben1983B 3 Antworten Letzte Antwort
                                0
                                • OstfrieseUnterwegsO OstfrieseUnterwegs

                                  Ganz korrekt müsste es wohl so sein:

                                  on(/^alexa2\.0\.Echo-Devices\..*\.Routines\..*/, function (obj) {
                                  

                                  Zufälligerweie funktioniert auch Deine Variante. Aber die würde auch bei einem Objekt mit der ID
                                  alexa2A0BEcho-DevicesBaldistOsternRoutinesUndPfingsten
                                  triggern. der Punbkt soll ja gefunden werden und müsste daher maskiert werden.

                                  Mann kann das prinzipiell auch die Namen der Alexa Routinen benutzen.
                                  Irgendwie so:

                                  on(/^alexa2\.0\.Echo-Devices\..*\.Routines\..*/, function (obj) {
                                      var routine = obj.common.name;
                                      log("--->"+routine);
                                      if (routine == 'Name einer Routine in Alexa App') {
                                          log ("----> zweig 1");
                                      } else if (routine == 'Name einer anderen Routine in Alexa App') {
                                          log ("----> Zweig 2");
                                      } else {
                                          log ("----> Diese Routine wird nicht in ioBroker behandelt");
                                      }
                                  });
                                  

                                  EDIT: Überlappt sich mit Alexis Post

                                  GaspodeG Offline
                                  GaspodeG Offline
                                  Gaspode
                                  schrieb am zuletzt editiert von
                                  #29

                                  @ostfrieseunterwegs said in Auf Alexa Routinen in Js "allgemein" reagieren:

                                  Ganz korrekt müsste es wohl so sein:

                                  Ja, ist mir auch aufgefallen, hatte ich in meinen letzten Beiträgen auch schon so geändert. Im ersten allerdings ohne Code Tag, weshalb die Hälfte nicht dargestellt wurde... 😬
                                  Hab jetzt die Code Tags drumrumgemacht.

                                  Ben1983B 1 Antwort Letzte Antwort
                                  0
                                  • OstfrieseUnterwegsO OstfrieseUnterwegs

                                    Ganz korrekt müsste es wohl so sein:

                                    on(/^alexa2\.0\.Echo-Devices\..*\.Routines\..*/, function (obj) {
                                    

                                    Zufälligerweie funktioniert auch Deine Variante. Aber die würde auch bei einem Objekt mit der ID
                                    alexa2A0BEcho-DevicesBaldistOsternRoutinesUndPfingsten
                                    triggern. der Punbkt soll ja gefunden werden und müsste daher maskiert werden.

                                    Mann kann das prinzipiell auch die Namen der Alexa Routinen benutzen.
                                    Irgendwie so:

                                    on(/^alexa2\.0\.Echo-Devices\..*\.Routines\..*/, function (obj) {
                                        var routine = obj.common.name;
                                        log("--->"+routine);
                                        if (routine == 'Name einer Routine in Alexa App') {
                                            log ("----> zweig 1");
                                        } else if (routine == 'Name einer anderen Routine in Alexa App') {
                                            log ("----> Zweig 2");
                                        } else {
                                            log ("----> Diese Routine wird nicht in ioBroker behandelt");
                                        }
                                    });
                                    

                                    EDIT: Überlappt sich mit Alexis Post

                                    Ben1983B Offline
                                    Ben1983B Offline
                                    Ben1983
                                    schrieb am zuletzt editiert von
                                    #30

                                    @ostfrieseunterwegs said in Auf Alexa Routinen in Js "allgemein" reagieren:

                                    /^alexa2.0.Echo-Devices...Routines../

                                    Danke habe es jetzt so realisiert und es funktioniert einwandfrei:
                                    Danke das hatte erst nicht funktioniert, da es nur reagiert hat bei einem Zustandswechsel und wenn die Routine vorher schon auf true stand, dann ging es nicht mehr.

                                    on(/^alexa2\.0\.Echo-Devices\..*\.Routines\..*/,RoutinesChanged);
                                    
                                    // Abfrage der einzelnen Routinen
                                    function RoutinesChanged(obj)
                                    {
                                        // Erzeugen der Routinen ID
                                        let CalledRoutine = obj.common.name;
                                    
                                        // Abfrage der Außentemperatur
                                        if(CalledRoutine == 'Aktuelle Außentemperatur')
                                        {
                                            // Lese aktuelle Außentemperatur
                                            let Aussentemperatur =  getState(IdAussentemperatur).val;
                                    
                                            // Zahl runden
                                            Aussentemperatur  = Math.round(Aussentemperatur);
                                    
                                            // Ausgabe der Nachricht an Alexa Device
                                            var Ausgabe = "";
                                            Ausgabe = "Die aktuelle Außentemperatur beträgt " + Aussentemperatur + "°C.";
                                            setState(obj.deviceId + ".Commands.speak", Ausgabe);
                                            setState (obj.id, {val:false, ack:true});
                                        }
                                    }
                                    

                                    Jetz stellt sich mir nur die Frage, wo finde ich die Struktur, welche hinter dem objekt liegt, welches der Funktion übergeben wird.
                                    --> Damit ich weiß was ich abrufen kann.

                                    Kann man auch die ID Abfragen, falls sich der Name der Routine ändert? (Oder ändert sich dann automatisch auch die ID)?

                                    1 Antwort Letzte Antwort
                                    0
                                    • GaspodeG Gaspode

                                      @ostfrieseunterwegs said in Auf Alexa Routinen in Js "allgemein" reagieren:

                                      Ganz korrekt müsste es wohl so sein:

                                      Ja, ist mir auch aufgefallen, hatte ich in meinen letzten Beiträgen auch schon so geändert. Im ersten allerdings ohne Code Tag, weshalb die Hälfte nicht dargestellt wurde... 😬
                                      Hab jetzt die Code Tags drumrumgemacht.

                                      Ben1983B Offline
                                      Ben1983B Offline
                                      Ben1983
                                      schrieb am zuletzt editiert von
                                      #31

                                      @alexi Müsste ich bei solch einer Funktion dann auch den "^/" Operator nutzen?

                                      const IdWirkleistungGesamt = 'modbus.0.holdingRegisters.59027_Wirkleistung_gesamt'
                                      
                                      on(IdWirkleistungGesamt, WirkleistunGesamtChange);
                                      
                                      1 Antwort Letzte Antwort
                                      0
                                      • OstfrieseUnterwegsO OstfrieseUnterwegs

                                        Ganz korrekt müsste es wohl so sein:

                                        on(/^alexa2\.0\.Echo-Devices\..*\.Routines\..*/, function (obj) {
                                        

                                        Zufälligerweie funktioniert auch Deine Variante. Aber die würde auch bei einem Objekt mit der ID
                                        alexa2A0BEcho-DevicesBaldistOsternRoutinesUndPfingsten
                                        triggern. der Punbkt soll ja gefunden werden und müsste daher maskiert werden.

                                        Mann kann das prinzipiell auch die Namen der Alexa Routinen benutzen.
                                        Irgendwie so:

                                        on(/^alexa2\.0\.Echo-Devices\..*\.Routines\..*/, function (obj) {
                                            var routine = obj.common.name;
                                            log("--->"+routine);
                                            if (routine == 'Name einer Routine in Alexa App') {
                                                log ("----> zweig 1");
                                            } else if (routine == 'Name einer anderen Routine in Alexa App') {
                                                log ("----> Zweig 2");
                                            } else {
                                                log ("----> Diese Routine wird nicht in ioBroker behandelt");
                                            }
                                        });
                                        

                                        EDIT: Überlappt sich mit Alexis Post

                                        GaspodeG Offline
                                        GaspodeG Offline
                                        Gaspode
                                        schrieb am zuletzt editiert von Gaspode
                                        #32

                                        @ostfrieseunterwegs said in Auf Alexa Routinen in Js "allgemein" reagieren:

                                        var routine = obj.common.name;

                                        Oh, das hab ich eben erst gesehen, war mir bisher entgangen. Damit wären die Routinen eine echte Alternative für mich, dachte bisher, ich müsse mit der kryptischen ID arbeiten. Danke! :)

                                        @ben1983 said in Auf Alexa Routinen in Js "allgemein" reagieren:

                                        on(/^alexa2\.0\.Echo-Devices\..*\.Routines\..*/,RoutinesChanged);
                                        

                                        Du solltest wie oben beschrieben hier noch val:true dazupacken, da der Trigger sonst auch beim Zurücksetzen auf false zieht und du im ungünstigsten Fall in einer Endlosschleife landest, also:

                                        on({id: /^alexa2\.0\.Echo-Devices\..*\.Routines\..*/, val:true},  RoutinesChanged);
                                        

                                        @ben1983 said in Auf Alexa Routinen in Js "allgemein" reagieren:

                                        Jetz stellt sich mir nur die Frage, wo finde ich die Struktur, welche hinter dem objekt liegt, welches der Funktion übergeben wird.
                                        --> Damit ich weiß was ich abrufen kann.

                                        Ist in der Doku beschrieben. Außerdem hast du eine prima Hilfe direkt beim Eintippen, die dir alle Möglichkeiten vorschlägt.

                                        @ben1983 said in Auf Alexa Routinen in Js "allgemein" reagieren:

                                        Müsste ich bei solch einer Funktion dann auch den "^/" Operator nutzen?

                                        Was meinst du mit "^/" operator? Wenn du genau auf ein Objekt triggern willst, kannst du das als String machen. Die regulären Ausdrücke kommen erst ins Spiel, wenn du Suchmuster verwenden willst.

                                        Ben1983B 1 Antwort Letzte Antwort
                                        0
                                        • GaspodeG Gaspode

                                          @ostfrieseunterwegs said in Auf Alexa Routinen in Js "allgemein" reagieren:

                                          var routine = obj.common.name;

                                          Oh, das hab ich eben erst gesehen, war mir bisher entgangen. Damit wären die Routinen eine echte Alternative für mich, dachte bisher, ich müsse mit der kryptischen ID arbeiten. Danke! :)

                                          @ben1983 said in Auf Alexa Routinen in Js "allgemein" reagieren:

                                          on(/^alexa2\.0\.Echo-Devices\..*\.Routines\..*/,RoutinesChanged);
                                          

                                          Du solltest wie oben beschrieben hier noch val:true dazupacken, da der Trigger sonst auch beim Zurücksetzen auf false zieht und du im ungünstigsten Fall in einer Endlosschleife landest, also:

                                          on({id: /^alexa2\.0\.Echo-Devices\..*\.Routines\..*/, val:true},  RoutinesChanged);
                                          

                                          @ben1983 said in Auf Alexa Routinen in Js "allgemein" reagieren:

                                          Jetz stellt sich mir nur die Frage, wo finde ich die Struktur, welche hinter dem objekt liegt, welches der Funktion übergeben wird.
                                          --> Damit ich weiß was ich abrufen kann.

                                          Ist in der Doku beschrieben. Außerdem hast du eine prima Hilfe direkt beim Eintippen, die dir alle Möglichkeiten vorschlägt.

                                          @ben1983 said in Auf Alexa Routinen in Js "allgemein" reagieren:

                                          Müsste ich bei solch einer Funktion dann auch den "^/" Operator nutzen?

                                          Was meinst du mit "^/" operator? Wenn du genau auf ein Objekt triggern willst, kannst du das als String machen. Die regulären Ausdrücke kommen erst ins Spiel, wenn du Suchmuster verwenden willst.

                                          Ben1983B Offline
                                          Ben1983B Offline
                                          Ben1983
                                          schrieb am zuletzt editiert von Ben1983
                                          #33

                                          @alexi said in Auf Alexa Routinen in Js "allgemein" reagieren:

                                          on({id: /^alexa2.0.Echo-Devices...Routines../, val:true}, RoutinesChanged);

                                          OK, danke. dann kann ich die Strings ja so lassen.

                                          Ps. Die Autovervollständigung habe ich jetzt auch gefunden. Leider erscheint diese nicht schon beim „.“ eingeben, sondern erst nachdem ersten Buchstaben, sodass man ja schon wissen muss womit eine Variable anfängt.

                                          1 Antwort Letzte Antwort
                                          0

                                          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                                          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                                          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                                          Registrieren Anmelden
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          300

                                          Online

                                          32.9k

                                          Benutzer

                                          83.0k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe