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

Antworten
Benutzeravatar

Themenstarter
padrino
Beiträge: 137
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) 24-mal heruntergeladen
0 x
Benutzeravatar

AlexaFan
Beiträge: 175
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: 137
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: 175
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: 137
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: 137
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) 12-mal heruntergeladen
0 x
Benutzeravatar

Themenstarter
padrino
Beiträge: 137
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
Antworten

Zurück zu „ioBroker“

  • Information