Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Skriptsammlung für den neuen ALEXA2.0 Adapter

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Skriptsammlung für den neuen ALEXA2.0 Adapter

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      mk120 last edited by

      Fenster in fenster umbenannt. Script und Javascript neugestartet Fensterstatus = 0. Oh man eventuell mag das Script mich nicht :twisted:

      Ich habe nun das Gewerk und die Datenpunkte Rega neu eingelesen. Nun wird das Gewerk auch Fenster geschrieben aber er möchte einfach nicht. Mir ist zu dem false/true Unterschied zu Open/Closed bei dir aufgefallen dass unter Objekte der Datenpunkt Sensor heißt. Wenn ich ihn als ID einbinden möchte steht halt xxx.hm2.sensor. Ist das eventuell ein Problem?

      Anbei meine aktuellen Einstellungen:

      Danke für die Mithilfe am Sonntag

      8565_objekte.png 8565_script.png 8565_raw.png 8565_funktion.png

      1 Reply Last reply Reply Quote 0
      • dslraser
        dslraser Forum Testing Most Active last edited by

        ich bin nur am Handy und kann an den Screenshots nicht so richtig was sehen. Aber Du kannst es ja auch mal mit id=.sensor oder id=.SENSOR propieren…

        Ich weiss gerade nicht aus dem Kopf ob dann auch noch andere Stellen geändert werden müssen, ich glaube aber nicht. (ich benutze das gleiche Script für Hue Lampen und da läuft es über id=*.on)

        Und wenn Du am Script was änderst starte den JS Adapter neu, das war bei mir immer der Grund wenn es nicht übernommen wurde...

        1 Reply Last reply Reply Quote 0
        • dslraser
          dslraser Forum Testing Most Active last edited by

          kannst auch gerne mal hier nachlesen, das ist das gleiche Script aber da haben auch Andere in der betroffenen Zeile was angepasst, je nachdem…

          viewtopic.php?f=21&t=5735&share_tid=573 ... are_type=t

          1 Reply Last reply Reply Quote 0
          • haselchen
            haselchen Most Active last edited by

            @ dslraser

            Ich habe mal das Skript getestet , als alle Fenster geschlossen waren.

            Da kommt dann von Alexa: Es sind…... und dann nichts mehr.

            Ähm, es wäre schön wenn sie sagt , es ist alles geschlossen oder es ist nichts geöffnet.

            1 Reply Last reply Reply Quote 0
            • dslraser
              dslraser Forum Testing Most Active last edited by

              @haselchen:

              @ dslraser

              Ich habe mal das Skript getestet , als alle Fenster geschlossen waren.

              Da kommt dann von Alexa: Es sind…... und dann nichts mehr.

              Ähm, es wäre schön wenn sie sagt , es ist alles geschlossen oder es ist nichts geöffnet. `

              Ich lasse mir nur Räume mit geöffneten Fenstern ansagen(Fenster sind mir zu viel) und eben ob alle Fenster geschlossen sind. Kommt wahrscheinlich drauf an auf was Du in Deinem Blockly bei der Ansage zeigst.

              Mein aktuelles FensterScript

              ! ````
              // Status Fenster. Das Script zählt alle Fenster im Gewerk Fenster (Aufzählungen-Funktion)
              // Telegramnachricht bei Abwesenheit wenn sich der Fensterstatus ändert. Bei Anwesenheit in der Homezone keine Nachricht senden.
              // Anwesenheit Datenpunkte separat erstellt und durch die Adapter google-sharedlocation und Places geschaltet
              ! var logging = true;
              ! var
              idAnzahlAuf = 'javascript.0.Status.Fenster.Anzahl_auf',
              idAnzahl = 'javascript.0.Status.Fenster.Anzahl',
              idText = 'javascript.0.Status.Fenster.Text',
              idRaum = 'javascript.0.Status.Fenster.Raum',
              idAnsage = 'javascript.0.Status.Fenster.Ansage';
              ! // Ab hier nix mehr ändern
              createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Fenster
              type: 'number',
              name: 'Anzahl aller Fenster',
              min: 0,
              def: 0,
              role: 'value'
              });
              createState(idAnzahlAuf, { // Anzahl der Fenster, die auf sind als Variable unter Javascript.0 anlegen
              type: 'number',
              name: 'Anzahl der geoeffneten Fenster',
              min: 0,
              def: 0,
              role: 'value'
              });
              createState(idText, { // Anzahl der geoeffneten Fenster und deren Namen als Variable unter Javascript.0 anlegen
              type: 'string',
              name: 'geoeffnete Fenster',
              desc: 'Namen der geoeffneten Fenster',
              def: ' ',
              role: 'value'
              });
              createState(idAnsage, {
              type: 'string',
              name: 'geoeffnete Fenster (Ansage)',
              desc: 'Namen der geoeffneten Fenster (für Ansage aufbereitet)',
              def: ' ',
              role: 'value'
              });
              createState(idRaum, { // Räume, in denen Fenster geoeffnet sind
              type: 'string',
              name: 'Räume mit geoeffneten Fenster',
              desc: 'Namen der Räume, in denen Fenster geoeffnet sind',
              def: ' ',
              role: 'value'
              });
              ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Fenster
              ! function checkDevices(obj) {
              // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Fenster auf 0
              var anzahlFensterAuf = 0;
              var anzahlFenster = 0;
              var textFensterAuf = [];
              var textRaum = [];
              if (logging) {
              log('++++++ Fenster Anzahl ++++ ');
              log('#### SCHALTER ##### ');
              }
              cacheSelectorState.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Fenster
              var obj = getObject(id);
              var name = getObject(id).common.name;
              var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
              var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
              var raumname = getObject(id, "rooms");
              ! if (logging) {
              log('-------');
              log('Kanal: ' + name);
              log('Status: ' + status);
              }
              if (status) { // wenn Zustand = true, dann wird die Anzahl der Fenster hochgezählt
              ++anzahlFensterAuf;
              textFensterAuf.push(devicename); // Zu Array hinzufügen
              textRaum.push(raumname.enumNames); //
              }
              ++anzahlFenster; // Zählt die Anzahl der vorhandenen Fenster unabhängig vom Status
              });

              textRaum = deleteDuplicates(textRaum); 
              
              // Array mit Fensternamen sortieren
              textFensterAuf.sort();
              textRaum.sort();
              // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon auf) ausgegeben
              if (logging) log("Text: " + textFensterAuf);
              if (logging) log("Anzahl Fenster: " + anzahlFenster + " # davon Fenster auf: " + anzahlFensterAuf);
              // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
              setState(idText, textFensterAuf.join(',\nund\n')); // Schreibt die aktuelle Namen der geoeffneten Fenster
              setState(idAnzahlAuf, textFensterAuf.length); // Schreibt die aktuelle Anzahl der geoeffneten Fenster
              setState(idAnzahl, anzahlFenster); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Fenster
              // setState(idRaum, textRaum.join(',
              

              ')); // Räume, in denen Fenster geoeffnet sind
              setState(idRaum, textRaum.join(',\nund\n')); // Räume, in denen Fenster geoeffnet sind
              }

              ! // Trigger
              cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Fenster
              if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
              checkDevices();
              });
              ! function main() {
              setTimeout(function() {
              if (logging) log('Auslöser Skriptstart');
              checkDevices();
              }, 2000);
              }
              ! main(); // Skriptstart-Auslöser
              ! // Aufbereitung für Ansage
              function strip_tags(data) {
              var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
              return (rueckgabe);
              }
              ! on(idText, function(obj) {
              var text = obj.state.val;
              text = (text.length > 1) ? ' ' + strip_tags(text) : 'Alle Fenster geschlossen';
              setState(idAnsage, text);
              });
              ! // Bei Anwesenheit zu Hause keine Telegramnachricht---Bei Abwesenheit sendet Telegram eine Nachricht
              // on({id: 'javascript.0.Status.Fenster.Ansage', change: "ne"}, function (obj) {
              // var value = obj.state.val;
              // var oldValue = obj.oldState.val;
              // if (getState("javascript.0.Anwesenheit.Heiko.Home.Heiko_Home").val === false) {
              // sendTo("telegram", "send", {
              // text: getState("javascript.0.Status.Fenster.Ansage").val,
              // disable_notification: true // ohne Ton am Handy
              //});
              //}
              //});

              
              Ich nehme diese, so passt es bei mir
              
              alle Fenster geschlossen = Datenpunkt geöffnete Fenster (Ansage)
               ![3822_fenster_zu.jpg](/assets/uploads/files/3822_fenster_zu.jpg) 
              alle Fenster geschlossen = Datenpunkt geöffnete Fenster (Ansage)
               ![3822_alle_fenster_geschlossen.jpg](/assets/uploads/files/3822_alle_fenster_geschlossen.jpg) 
              mindestens ein Raum mit geöffnetem Fenster = Datenpunkt Räume mit geöffneten Fenster
               ![3822_fenster_auf.jpg](/assets/uploads/files/3822_fenster_auf.jpg) 
              mindestens ein Raum mit geöffnetem Fenster = Datenpunkt Räume mit geöffneten Fenster
               ![3822_ein_fenster_auf.jpg](/assets/uploads/files/3822_ein_fenster_auf.jpg) 
              1 Reply Last reply Reply Quote 0
              • haselchen
                haselchen Most Active last edited by

                Bei welchem Blocky Punkt sagt sie denn, dass alles geschlossen ist?

                1 Reply Last reply Reply Quote 0
                • dslraser
                  dslraser Forum Testing Most Active last edited by

                  @haselchen:

                  Bei welchem Blocky Punkt sagt sie denn, dass alles geschlossen ist? `

                  Schau nochmal in meinen Beitrag über Deinem (da war beim Bilder einfügen was verdreht–-sollte jetzt passen)

                  1 Reply Last reply Reply Quote 0
                  • haselchen
                    haselchen Most Active last edited by

                    Jawoll, das wars.

                    Danke.

                    Jetzt haut sie es raus: Aktuell sind alle Fenster geschlossen 😄

                    1 Reply Last reply Reply Quote 0
                    • dslraser
                      dslraser Forum Testing Most Active last edited by

                      @sissiwup:

                      @haselchen:

                      Hab auf die Version 1.0.0 upgedatet vorhin.

                      Mag sein , dass es deswegen jetzt funktioniert 😄

                      Was sind denn so Gründe , warum Alexa einfach so mal die offenen Fenster ansagt, ohne gefragt zu werden? `

                      Hallo,

                      ich habe das auch. Die einzige Variante (die ich gefunden habe) das zu umgehen ist eine Variable dazwischen zu schalten.

                      D.h. Alexa setzt die Variable Trigger… auf an und das Skript lauscht auf Änderungen an der Variablen.

                      Ansonsten erzählt die andauern etwas und wenn du wirklich etwas damit steuerst wird es doof.

                      Ich meine jedes Skript starte beim Neustart des Adapters und beim Speichern neu. `

                      Kannst Du das bitte mal bissl genauer beschreiben.

                      (mich stört es auch das manche Sripte beim Neustart bzw. beim aktualisieren loslaufen. (Ich denke da immer so drann wenn keiner zu Hause ist, oder Urlaub und es gibt einen Fehler bzw. Neustart und der Staubsauger oder der Rasenmäher würde los fahren…)

                      Ein Beispiel Deiner Lösung wäre gut, da ich für mich auch noch keine Lösung gefunden habe.

                      Edit: Hat sich erledigt, ich habe es für mich nun auch gelöst, wollte ich schon längst mal machen.

                      Ich habe jetzt eigene Datenpunkte als Logikwert angelegt und schalte bzw. triggere in den Scripten damit.

                      1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 last edited by

                        @mk120:

                        eventuell mag das Script mich nicht `
                        Du hast das Gewerk den Datenpunkten zugeordnet. Dann muss der Selektor entsprechend angepasst werden.

                        const fensterSENSOR = $('[id=*.SENSOR](functions=Fenster)');
                        

                        Evtl. "Fenster" klein geschrieben, falls die Enum-Objekt-ID lautet enum.functions.fenster.

                        1 Reply Last reply Reply Quote 0
                        • S
                          Sven_hh last edited by

                          Guten Morgen an alle,

                          Das was „dslraser“ angesprochen hat mit dem Neustart des Raspi und dem damit verbundenen ausführen der Scripte nervt mich bzw meine Frau auch <emoji seq="1f60c">😌</emoji> gibt es da generell eine Möglichkeit das zu unterbinden?

                          Vg Sven

                          1 Reply Last reply Reply Quote 0
                          • sissiwup
                            sissiwup last edited by

                            @Sven_hh:

                            Guten Morgen an alle,

                            Das was „dslraser“ angesprochen hat mit dem Neustart des Raspi und dem damit verbundenen ausführen der Scripte nervt mich bzw meine Frau auch <emoji seq="1f60c">😌</emoji> gibt es da generell eine Möglichkeit das zu unterbinden?

                            Vg Sven `

                            Hallo,

                            Skripte sollten nie so geschrieben sein, das sie direkt beim Start (ausser Initialisierung, ON-Funktionen) etwas ausführen.

                            Wie kann man das bei Alexa-Steuerung machen? So wie bei allen anderen Steuerungen auch:

                            Man legt eine Hilfsvariable an, die dann von Alexa gesteuert wird und läßt das Skript darauf warten.

                            Der Vorteil ist, man kann hier auch noch an und aus über eine Variable steuern.

                            Variable anlegen:
                            609_bildschirmfoto_2018-09-13_um_09.04.17.png
                            609_bildschirmfoto_2018-09-13_um_09.04.02.png
                            Das Skript reagiert auf jede Veränderung, nicht nur an und aus. Der Inhalt der Variablen ist mir hier egal:
                            609_bildschirmfoto_2018-09-23_um_23.25.28.png
                            Im Cloud-Adapter ein neues Gerät anlegen, Name hierbei egal, die heissen bei mir TriggerLetzterAnruf und mit der Variablen verbinden.

                            Der Befehl wird so nicht verwendet.
                            609_bildschirmfoto_2018-09-13_um_09.09.18.png
                            Neue Geräte suchen lassen in Alexa.

                            In der Alexa-App eine neue Routine anlegen, z.B.

                            Alexa, Anrufliste und dann TriggerLetzterAnruf hinzufügen. Kann immer auf An gesetzt werden, da wir Aktualisierung horchen (s.o.)

                            Wenn man die Werte an/aus z.B. verwenden möchte, dann anstelle TriggerLetzterAnruf einen

                            vernünftigen Text verwenden, hier habe ich es nicht gemacht, da dann ja immer noch ein Attribut mit angegeben werden muss

                            z.B. Alexa, TriggerLetzerAnruf "an". Deshalb habe ich die Routinen verwendet.

                            1 Reply Last reply Reply Quote 0
                            • dslraser
                              dslraser Forum Testing Most Active last edited by

                              genau so habe ich gestern angefangen alles bei mir umzustellen. (ich wußte es vorher auch nicht besser)

                              Dann fährt auch der Staubsauger oder Rasenmäher (oder eben alle anderen geschalteten Geräte) nicht selbst los.

                              1 Reply Last reply Reply Quote 0
                              • B
                                Belei last edited by

                                @dslraser:

                                Alexa, sind noch irgendwo Fenster auf…

                                Ich habe meine Ansage/Abfrage über das Gewerk Fenster verändert und lasse mir nun Raumnamen mit geöffneten Fenstern ansagen.

                                Das Gewerk für dieses Script heißt Fenster

                                <u>Wenn bei Euch das Gewerk für Fensterkontakte anders heißt muss das im Script angepasst werden.</u>

                                (mit der Ansage einzelner Fenster wurde bei mir das 250 Zeichen Limit von Alexa speak gesprengt.)

                                Bei mehreren Echos/Alexas wird die Anfrage an dem Gerät beantwortet wo sie gestellt wurde. Ich habe hier mehrere Echos in mehreren Räumen im Blockly, zu sehen an den gelben Kommentaren.

                                Script 1 zum Gewerk Fenster:

                                -…........................... `

                                An welchen Stellen muss ich das den genau ändern? Das Wort Fenster kommt ja ziemlich oft vor.

                                Danke

                                1 Reply Last reply Reply Quote 0
                                • dslraser
                                  dslraser Forum Testing Most Active last edited by

                                  da![](</s><URL url=)<link_text text="https://uploads.tapatalk-cdn.com/201809 ... 706729.jpg">https://uploads.tapatalk-cdn.com/20180922/2621ffd9f4619a5963c66ead45706729.jpg</link_text>" />

                                  1 Reply Last reply Reply Quote 0
                                  • B
                                    Belei last edited by

                                    Danke für die schnelle Antwort, hab ich gefunden und geändert.

                                    Ich glaube aber irgentwas läuft bei mir noch nicht…

                                    Habe alle 3 Scripte erstellt und aktiviert.

                                    Unter Object steht bei Script 1 und 2: True aber bei Script 3 : False

                                    Und als ergebniss bei Objects/Fenster/Ansage hab ich alles doppelt:

                                    Fenster_Schlafzimmer_links, und Fenster_Schlafzimmer_links, und Fenster_Wohnzimmer_1, und Fenster_Wohnzimmer_1

                                    und es werden auch die doppelte Anzahl Fenster gezählt.

                                    Und im Log steht:
                                    3799_error.jpg

                                    1 Reply Last reply Reply Quote 0
                                    • dslraser
                                      dslraser Forum Testing Most Active last edited by

                                      Das Script zum entfernen doppelter Raumnamen muß unter global laufen, hast Du es da ?

                                      Und bitte anschließend den JS Adapter neu starten.

                                      1 Reply Last reply Reply Quote 0
                                      • B
                                        Belei last edited by

                                        Ja ist unter Global und ein neustart hat leider keine änderung gebracht.

                                        Script läuft jetzt ohne Fehler im Log durch aber ergebniss sind immer noch die doppelten Fenster.

                                        3799_objects.jpg

                                        1 Reply Last reply Reply Quote 0
                                        • dslraser
                                          dslraser Forum Testing Most Active last edited by

                                          @Belei:

                                          Ja ist unter Global und ein neustart hat leider keine änderung gebracht.

                                          Script läuft jetzt ohne Fehler im Log durch aber ergebniss sind immer noch die doppelten Fenster.

                                          filename="objects.JPG" index="0">~~ `

                                          Im Screenshot kann man nicht alles sehen…(also rechts...)

                                          Mach mal ein Fenster auf und zu und einen Screenshot wo alles drauf ist.

                                          1 Reply Last reply Reply Quote 0
                                          • B
                                            Belei last edited by

                                            Hatte 1 Fenster zusätzlich geöffnet dann waren es 8 statt 6.

                                            Screenshot:
                                            3799_objects1.jpg

                                            3799_scripte.jpg

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            821
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            45
                                            184
                                            39707
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo