Globale Erinnerung aka Erinnerung Überall - (m)ein Ansatz

Benutzeravatar

Themenstarter
padrino
Beiträge: 235
Registriert: So 26. Nov 2017, 00:31

Fr 30. Nov 2018, 16:55

Hi,

zwei Tage und eine Menge meiner Haare hat es mich gekostet, aber wie es aussieht, scheint es einigermaßen zu funktionieren... :roll:

Ist ein ziemlicher Blocklysalat, der auch noch eine Menge "debug" enthält, aber leider weiß ich es noch nicht besser. :mrgreen:

Bin für Tipps ganz Ohr - wenn sie nicht zu kompliziert sind. ;)

Also, was es kann, bzw. können soll:
- Eine Erinnerung, die auf einem Echo eingesprochen wird, auf (allen) anderen Echos des Haushalts zu speichern

Woran man sich halten muss:
- Syntax
Wakeword, neue Erinnerung überall um X Uhr (Y) an Z
oder
Wakeword, erinnere mich überall um X Uhr (Y) an Z
Das Wort "Uhr" darf nicht weggelassen werden, also z.B. "um 16 42" klappt nicht.
"Y" sind die optinalen Minuten.
Auch muss die Reihenfolge "Uhrzeit vor Betreff" eingehalten werden.
Kurz gesagt, einfach an obige Sätze penibel halten. ;)

Das Gute, um den aktuellen, also den angesprochenen, Echo braucht man sich nicht zu kümmern, dass macht Alexa selbst.
Hier ignoriert sie auch praktischerweise brav das (fürs Skript wichtige) Schlüsselwort "überall". :D
Es kann, auf Grund des 24 Stunden Systems zu Nachfragen seitens Alexa kommen.
Darauf nimmt das Skript keine Rücksicht, es geht davon aus, dass "1-12" immer vormittags ist.
Ein nachgeschobenes "morgens" sollte da Skript aber nicht beeinflussen.

Werde jetzt noch Schritt für Schritt die debug Ausgaben entfernen und versuchen an den Timings zu feilen (es wäre, zumindest für mich, so viel einfacher, wenn Javascript alles sequentiell abarbeiten würde :oops:...).

An die Cracks unter Euch, verzeiht meinen Code, ich weiß es nicht besser. :cry:

Würde z.B. gerne die "Umwandlung der Zeit" von einer einzigen Schleife machen lassen, die dann, je nachdem wofür sie aufgerufen wurde, leicht andere Dinge macht, aber ich weiß gar nicht, ob das überhaupt (in Blockly) möglich wäre...

So oder so, wünsche viel Spaß damit (hab's so "unsauber" rausgehauen, weil ich auch auf Feedback gepannt bin :)).

Achja, falls Fragen bestehen, werde ich versuchen diese auch zu beantworten - soweit mir das möglich ist. :D

Das Blockly findet ihr als Textanhang.

CU,
padrino
Dateianhänge
Globale_Erinnerung-Blockly.txt
(322.58 KiB) 85-mal heruntergeladen
0 x
Benutzeravatar

AlexaFan
Beiträge: 233
Registriert: Di 27. Mär 2018, 23:59
Vorhandene Echos: 44
Vorhandene Echo Dots: 12

Fr 30. Nov 2018, 17:37

Warum programmiert ihr nicht direkt in JavaScript? Das ist doch viel einfacher und übersichtlicher und man kann mehr machen. Durch den Blocksalat blickt doch schon bei etwas größeren Sachen keiner mehr durch.
0 x
Benutzeravatar

Themenstarter
padrino
Beiträge: 235
Registriert: So 26. Nov 2017, 00:31

Fr 30. Nov 2018, 17:41

Also, ich müsste erst einmal JS lernen, dann noch verstehen, wie man eine Entwicklungsumgebung installiert usw. usw.... ':)

CU,
padrino
0 x
Benutzeravatar

AlexaFan
Beiträge: 233
Registriert: Di 27. Mär 2018, 23:59
Vorhandene Echos: 44
Vorhandene Echo Dots: 12

Fr 30. Nov 2018, 18:05

Wieso? Du brauchst doch bei der Erstellung eines Skriptes nur JavaScript statt Blockly auswählen und schon kann es sofort ohne weitere Installation los gehen. Und wenn Du eine Programmiersprache kannst, dann ist JavaScript auch nicht schwer, zumal Blockly ja auch nur eine Art GUI-Aufsatz für JavaScript ist.

So sieht übrigens der JavaScript-Code zu Deinem Blockly-Skript aus:

Code: Alles auswählen

var Durchlauf_Nummer, Durchlauf_Nummer2, Minuten_2, String_Erinnerung, timeout2, String_Erinnerung_Wann, timeout3, String_Erinnerung_Wof_C3_BCr, String_Wann_Stunden, timeout4, timeout, String_Wann_Minuten, wie_oft, Stunden_String1, Stunden_1, wie_oft2, timeout5, Stunden_String2, Minuten_String1, Minuten_1, Intervall, Minuten_String2, Intervall2, Stunden_2, Stunden, Minuten;


on({id: "alexa2.0.History.summary"/*summary*/, change: "ne"}, function (obj) {
  var value = obj.state.val;
  var oldValue = obj.oldState.val;
  Durchlauf_Nummer = 1;
  Durchlauf_Nummer2 = 1;
  Minuten_2 = 0;
  if (getState("alexa2.0.History.summary").val.indexOf('erinnerung überall') + 1 != 0 || getState("alexa2.0.History.summary").val.indexOf('erinnere mich überall') + 1 != 0) {
    String_Erinnerung = getState("alexa2.0.History.summary").val.slice(((getState("alexa2.0.History.summary").val.indexOf('um') + 1 + 3) - 1), getState("alexa2.0.History.summary").val.length);
    timeout2 = setTimeout(function () {
      String_Erinnerung_Wann = String_Erinnerung.slice(0, (String_Erinnerung.indexOf('an ') + 1) - 2);
      String_Erinnerung_Wof_C3_BCr = String_Erinnerung.slice(((String_Erinnerung.indexOf('an ') + 1 + 3) - 1), String_Erinnerung.length);
    }, 400);
    timeout3 = setTimeout(function () {
      String_Wann_Stunden = String_Erinnerung_Wann.slice(0, (String_Erinnerung_Wann.indexOf('uhr') + 1) - 2);
      if (String_Erinnerung.indexOf('uhr an') + 1 != 0) {
        String_Wann_Minuten = 'null';
      } else {
        String_Wann_Minuten = String_Erinnerung.slice(((String_Erinnerung.indexOf('uhr') + 1 + 4) - 1), (String_Erinnerung.indexOf('an ') + 1) - 2);
      }
    }, 800);
    timeout4 = setTimeout(function () {
      if (String_Wann_Stunden.indexOf('und') + 1 != 0) {
        wie_oft = 2;
        Stunden_String1 = String_Wann_Stunden.slice(0, (String_Wann_Stunden.indexOf('und') + 1) - 2);
        Stunden_String2 = String_Wann_Stunden.slice(((String_Wann_Stunden.indexOf('und') + 1 + 4) - 1), String_Wann_Stunden.length);
      } else {
        wie_oft = 1;
        Stunden_1 = 0;
        Stunden_String2 = String_Wann_Stunden;
      }
      if (String_Wann_Minuten.indexOf('und') + 1 != 0) {
        wie_oft2 = 2;
        Minuten_String1 = String_Wann_Minuten.slice(0, (String_Wann_Minuten.indexOf('und') + 1) - 2);
        Minuten_String2 = String_Wann_Minuten.slice(((String_Wann_Minuten.indexOf('und') + 1 + 4) - 1), String_Wann_Minuten.length);
      } else {
        wie_oft2 = 1;
        Minuten_1 = 0;
        Minuten_String2 = String_Wann_Minuten;
      }
      timeout5 = setTimeout(function () {
        Intervall = setInterval(function () {
          if (Durchlauf_Nummer == 1) {
            console.log((String('Schleifendurchlauf: ') + String(Durchlauf_Nummer)));
            if (Stunden_String2 == 'ein') {
              Stunden_2 = 1;
            } else if (Stunden_String2 == 'zwei') {
              Stunden_2 = 2;
            } else if (Stunden_String2 == 'drei') {
              Stunden_2 = 3;
            } else if (Stunden_String2 == 'vier') {
              Stunden_2 = 4;
            } else if (Stunden_String2 == 'fünf') {
              Stunden_2 = 5;
            } else if (Stunden_String2 == 'sechs') {
              Stunden_2 = 6;
            } else if (Stunden_String2 == 'sieben') {
              Stunden_2 = 7;
            } else if (Stunden_String2 == 'acht') {
              Stunden_2 = 8;
            } else if (Stunden_String2 == 'neun') {
              Stunden_2 = 9;
            } else if (Stunden_String2 == 'zehn') {
              Stunden_2 = 10;
            } else if (Stunden_String2 == 'elf') {
              Stunden_2 = 11;
            } else if (Stunden_String2 == 'zwölf') {
              Stunden_2 = 12;
            } else if (Stunden_String2 == 'dreizehn') {
              Stunden_2 = 13;
            } else if (Stunden_String2 == 'vierzehn') {
              Stunden_2 = 14;
            } else if (Stunden_String2 == 'fünfzehn') {
              Stunden_2 = 15;
            } else if (Stunden_String2 == 'sechzehn') {
              Stunden_2 = 16;
            } else if (Stunden_String2 == 'siebzehn') {
              Stunden_2 = '17';
            } else if (Stunden_String2 == 'achtzehn') {
              Stunden_2 = '18';
            } else if (Stunden_String2 == 'neunzehn') {
              Stunden_2 = 19;
            } else if (Stunden_String2 == 'zwanzig') {
              Stunden_2 = 20;
            }
          } else {
            if (Durchlauf_Nummer == 2) {
              console.log((String('Schleifendurchlauf: ') + String(Durchlauf_Nummer)));
              if (Stunden_String1 == 'ein') {
                Stunden_1 = 1;
              } else if (Stunden_String1 == 'zwei') {
                Stunden_1 = 2;
              } else if (Stunden_String1 == 'drei') {
                Stunden_1 = 3;
              } else if (Stunden_String1 == 'vier') {
                Stunden_1 = 4;
              } else if (Stunden_String1 == 'fünf') {
                Stunden_1 = 5;
              } else if (Stunden_String1 == 'sechs') {
                Stunden_1 = 6;
              } else if (Stunden_String1 == 'sieben') {
                Stunden_1 = 7;
              } else if (Stunden_String1 == 'acht') {
                Stunden_1 = 8;
              } else if (Stunden_String1 == 'neun') {
                Stunden_1 = 9;
              }
            }
          }
          console.log((['Nummer vor +1: ',Durchlauf_Nummer,'"'].join('')));
          Durchlauf_Nummer = Durchlauf_Nummer + 1;
          console.log((['Nummer nach +1: ',Durchlauf_Nummer,'"'].join('')));
          if (Durchlauf_Nummer > wie_oft) {
            (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})();
            Stunden = Stunden_1 + Stunden_2;
            console.log((['Durchgänge, STOPP',Durchlauf_Nummer,'"'].join('')));
          }
        }, 300);
        Intervall2 = setInterval(function () {
          if (Durchlauf_Nummer2 == 1) {
            console.log((String('Schleifendurchlauf: ') + String(Durchlauf_Nummer2)));
            if (Minuten_String2 == 'ein') {
              Minuten_2 = 1;
            } else if (Minuten_String2 == 'zwei') {
              Minuten_2 = 2;
            } else if (Minuten_String2 == 'drei') {
              Minuten_2 = 3;
            } else if (Minuten_String2 == 'vier') {
              Minuten_2 = 4;
            } else if (Minuten_String2 == 'fünf') {
              Minuten_2 = 5;
            } else if (Minuten_String2 == 'sechs') {
              Minuten_2 = 6;
            } else if (Minuten_String2 == 'sieben') {
              Minuten_2 = 7;
            } else if (Minuten_String2 == 'acht') {
              Minuten_2 = 8;
            } else if (Minuten_String2 == 'neun') {
              Minuten_2 = 9;
            } else if (Minuten_String2 == 'zehn') {
              Minuten_2 = 10;
            } else if (Minuten_String2 == 'elf') {
              Minuten_2 = 11;
            } else if (Minuten_String2 == 'zwölf') {
              Minuten_2 = 12;
            } else if (Minuten_String2 == 'dreizehn') {
              Minuten_2 = 13;
            } else if (Minuten_String2 == 'vierzehn') {
              Minuten_2 = 14;
            } else if (Minuten_String2 == 'fünfzehn') {
              Minuten_2 = 15;
            } else if (Minuten_String2 == 'sechzehn') {
              Minuten_2 = 16;
            } else if (Minuten_String2 == 'siebzehn') {
              Minuten_2 = '17';
            } else if (Minuten_String2 == 'achtzehn') {
              Minuten_2 = '18';
            } else if (Minuten_String2 == 'neunzehn') {
              Minuten_2 = 19;
            } else if (Minuten_String2 == 'zwanzig') {
              Minuten_2 = 20;
            } else if (Minuten_String2 == 'dreißig') {
              Minuten_2 = 30;
            } else if (Minuten_String2 == 'vierzig') {
              Minuten_2 = 40;
            } else if (Minuten_String2 == 'fünfzig') {
              Minuten_2 = 50;
            }
          } else {
            if (Durchlauf_Nummer2 == 2) {
              console.log((String('Schleifendurchlauf-Minuten: ') + String(Durchlauf_Nummer2)));
              if (Minuten_String1 == 'ein') {
                Minuten_1 = 1;
              } else if (Minuten_String1 == 'zwei') {
                Minuten_1 = 2;
              } else if (Minuten_String1 == 'drei') {
                Minuten_1 = 3;
              } else if (Minuten_String1 == 'vier') {
                Minuten_1 = 4;
              } else if (Minuten_String1 == 'fünf') {
                Minuten_1 = 5;
              } else if (Minuten_String1 == 'sechs') {
                Minuten_1 = 6;
              } else if (Minuten_String1 == 'sieben') {
                Minuten_1 = 7;
              } else if (Minuten_String1 == 'acht') {
                Minuten_1 = 8;
              } else if (Minuten_String1 == 'neun') {
                Minuten_1 = 9;
              }
            }
          }
          console.log((['Nummer2 vor +1: ',Durchlauf_Nummer2,'"'].join('')));
          Durchlauf_Nummer2 = Durchlauf_Nummer2 + 1;
          console.log((['Nummer2 nach +1: ',Durchlauf_Nummer2,'"'].join('')));
          if (Durchlauf_Nummer2 > wie_oft2) {
            (function () {if (Intervall2) {clearInterval(Intervall2); Intervall2 = null;}})();
            Minuten = Minuten_1 + Minuten_2;
            console.log((['Durchgänge2, STOPP',Durchlauf_Nummer2,'"'].join('')));
          }
        }, 300);
      }, 2000);
    }, 1200);
    timeout = setTimeout(function () {
      console.log((['String_Erinnerung: "',String_Erinnerung,'"'].join('')));
      console.log((['String_Erinnerung_Wann: "',String_Erinnerung_Wann,'"'].join('')));
      console.log((['String_Erinnerung_Wofür: "',String_Erinnerung_Wof_C3_BCr,'"'].join('')));
      console.log((['String_Wann_Stunden: "',String_Wann_Stunden,'"'].join('')));
      console.log((['String_Wann_Minuten: "',String_Wann_Minuten,'"'].join('')));
      console.log((['Stunden_String1: "',Stunden_String1,'"'].join('')));
      console.log((['Stunden_String2: "',Stunden_String2,'"'].join('')));
      console.log((['Stunden_1: "',Stunden_1,'"'].join('')));
      console.log((['Stunden_2: "',Stunden_2,'"'].join('')));
      console.log((['Stunden: "',Stunden,'"'].join('')));
      console.log((['Minuten_String1: "',Minuten_String1,'"'].join('')));
      console.log((['Minuten_String2: "',Minuten_String2,'"'].join('')));
      console.log((['Minuten1: "',Minuten_1,'"'].join('')));
      console.log((['Minuten2: "',Minuten_2,'"'].join('')));
      console.log((['Minuten: "',Minuten,'"'].join('')));
      console.log((['Wie oft: "',wie_oft,'"'].join('')));
      console.log((['Durchlaufnummer: "',Durchlauf_Nummer,'"'].join('')));
      console.log((['Durchlaufnummer2: "',Durchlauf_Nummer2,'"'].join('')));
      if (getState("alexa2.0.History.name").val != 'Küche/Bad') {
        setState("alexa2.0.Echo-Devices.G090LF11735629HT.Reminder.New", ([Stunden,':',Minuten,',',String_Erinnerung_Wof_C3_BCr].join('')));
      }
      if (getState("alexa2.0.History.name").val != 'Schlafzimmer') {
        setState("alexa2.0.Echo-Devices.G090L91180420NRE.Reminder.New", ([Stunden,':',Minuten,',',String_Erinnerung_Wof_C3_BCr].join('')));
      }
      if (getState("alexa2.0.History.name").val != 'Wohnzimmer') {
        setState("alexa2.0.Echo-Devices.G090LF11735627HT.Reminder.New", ([Stunden,':',Minuten,',',String_Erinnerung_Wof_C3_BCr].join('')));
      }
    }, 4000);
  }
});
1 x
Benutzeravatar

Themenstarter
padrino
Beiträge: 235
Registriert: So 26. Nov 2017, 00:31

Mi 5. Dez 2018, 12:48

Danke,

aber ich denke, mich jetzt noch in die Syntax einarbeiten... :upside_down_face:

Glaube, da ist und/bleibt Blockly doch eher mein weg - so lange es funktioniert.

Vor allem bringt es für mich schnelle Ergebnisse. :)

CU,
padrino
0 x
Benutzeravatar

Themenstarter
padrino
Beiträge: 235
Registriert: So 26. Nov 2017, 00:31

Mi 5. Dez 2018, 19:44

Hi,

da ich meinen ersten Post leider nicht mehr editieren kann/darf, hier eine gefixte Version.

Hatte "Null Uhr" vergessen... O:-)

CU,
padrino
Globa_Erinnerung_Blockly_1.01.txt
(380.82 KiB) 57-mal heruntergeladen
0 x
Benutzeravatar

Themenstarter
padrino
Beiträge: 235
Registriert: So 26. Nov 2017, 00:31

Di 11. Dez 2018, 21:24

Hi,

falls das Skript jemand nutzt, würde ich mich über Feedback freuen, ob es bei Euch problemlos läuft.
Keine Angst, ich werde Eure Daten nirgends speichern und auch kein Geld eintreiben. :grin:

CU,
padrino
0 x
Benutzeravatar

Themenstarter
padrino
Beiträge: 235
Registriert: So 26. Nov 2017, 00:31

So 30. Jun 2019, 03:23

Hi,

eigentlich hatte ich vor hier V1.5 mit etwas Finetuning zu veröffentlichen, aber nachdem ich nochmal in mich gegangen bin und mir überlegt habe, was ich in den vergangen Monaten dazu gelernt habe (und auch immer noch lerne :wink:), ist daraus V2.0 geworden. :D
Schade, um meine eigene Umwandlung von ausgeschriebenen Uhrzeiten in Ziffernfolgen... naja, Hauptsache der Code wurde besser - hoffentlich. :innocent:

Kleine Anmerkung, ich prüfe im "ID Selektor" auf " G090* ", da hier bei allen Geräten, die Erinnerungen unterstützen, die Seriennummer so anfängt (weiß nicht, ob das bei jedem so ist :thinking_face:).
So umgehe ich "Alexa App", "Multiroon", "FireTV Stick"...
globale_erinnerung_ng.jpg
► Text zeigen
Zuletzt geändert von padrino am So 30. Jun 2019, 03:25, insgesamt 1-mal geändert.
0 x
Benutzeravatar

Themenstarter
padrino
Beiträge: 235
Registriert: So 26. Nov 2017, 00:31

So 30. Jun 2019, 16:32

So, und weil's so schön ist (nein, nicht die Hitze draußen 😓😉 ), hier eine V2.1... 🙂

Da die Syntax der Anfrage nun von ihrer Hoheit Alexa selbst ausgewertet wird, ist man viel freier und es ist mehr möglich, daher musste ich noch eine Anpassung machen, damit (hoffentllich) sowohl "an Was um Uhrzeit" als auch "um Uhrzeit an Was" funktionieren.
Das Schlüsselwort "überall" muss natürlich weiterhin vorkommen. 😉
(ihr könnt damit experimentieren, was Alexa erlaubt und was sich für Euch am Natürlichsten anfühlt)

Ich hoffe mal, immer, wenn Alexa eine Erinnerung auf dem angesprochenen Gerät anlegt, werden auch auf den anderen entsprechende Kopien angelegt.
Kommt von ihr nur ein "padumm", gibt es auch keine Kopien. 😌
globale_erinnerung_ng21.jpg
Dateianhänge
globale_erinnerung_21.txt
(20.5 KiB) 21-mal heruntergeladen
0 x
Benutzeravatar

Themenstarter
padrino
Beiträge: 235
Registriert: So 26. Nov 2017, 00:31

So 30. Jun 2019, 21:19

***!!!WARNUNG: DIESE VERSION KANN/WIRD ZU EINER ENDLOSSCHLEIFE FÜHREN, WENN DER AUFMERKSAMKEITSMODUS NICHT AKTIVIERT IST !!!*** (arbeite daran :flushed: )

So, das sollte das Problem (fürs erste) beheben...
fix1.jpg
fix1.jpg (14.74 KiB) 999 mal betrachtet
Praktischer Nebeneffekt, diese Verzögerung kann weg
fix2.jpg
fix2.jpg (8.76 KiB) 999 mal betrachtet
Konnte es leider nicht testen, meine Echos sind noch lahmgelegt und ich muss erst hunderte von "falschen Erinnerungen" löschen. 😦
0 x
Antworten

Zurück zu „ioBroker“

  • Information