Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Gelöst] Anfängerin benötigt Unterstützung beim Blocky/Skript

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Gelöst] Anfängerin benötigt Unterstützung beim Blocky/Skript

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

      Ich versuche mich jetzt mal mit Blockly und Skripting vertraut zu machen. Einfache Steuerungen (per Zeit oder Taster) habe ich bisher ohne Probleme hinbekommen.

      Heute habe ich das Skript zur Ansage von diversen Daten (Wetter, Abfall, Geburtstag) eingebaut und um weitere anzusagende Parameter erweitert. Probeläufe erfolgreich absolviert.

      Nun möchte ich mir die Termine nicht nur ansagen lassen, sie sollen auch in einem separaten Datenpunkt geschrieben werden. (Bsp.: Abfall.Heute=Sperrmüll; Abfall.Morgen=keine Abholung)

      Unten mein bisheriges Skript, das aber nicht funktionert. Zwar werden die Punkte erzeugt, aber nicht mit Daten befüllt. Was fehlt noch und was habe ich falsch gemacht? (Wo und wie platziere ich "setState")

      //Datenpunkt erstellen
      createState('Abfall.Heute');
      createState('Abfall.Morgen');
      
      //Kalender auslesen
              var inhalt = getState("ical.2.data.html"/*HTML iCal table*/);
              var inhaltString = inhalt.val.toString();
              var inhaltStringReplace = inhaltString;
              var inhaltStringText;
              var i_search;
      
              //*******************************************************************************************************
              // Festlegen, ob nur heute [1], heute und morgen [2] oder einschliesslich uebermorgen angesagt wird [3]
              //*******************************************************************************************************
      
              var terminAnsage = 2; // hier festlegen         
      
              // Suchfunktion für Termin-Cutoff
      
              function nthIndex(str, pat, n){
              var L= str.length, i= -1;
              while(n-- && i++<l){ i="str.indexOf(pat," i);/if/(i/</0)/break;/}/i_search="i;" remove/all/inside/script/and/style/tags/inhaltstringreplace="inhaltStringReplace.replace(/<script.*">[\w\W]{1,}(.*?)[\w\W]{1,}<\/script>/gi, "");
              inhaltStringReplace=inhaltStringReplace.replace(/<style.*>[\w\W]{1,}(.*?)[\w\W]{1,}<\/style>/gi, "");
      
              // remove BR tags. Werden durch sinnlose Zeichenkette ersetzt, nach der später gesucht wird
              inhaltStringReplace=inhaltStringReplace.replace(/
      /gi, ". §$%");
              inhaltStringReplace=inhaltStringReplace.replace(/<br\s\>/gi, ". §$%");
              inhaltStringReplace=inhaltStringReplace.replace(/<br\>/gi, ". §$%");
      
              // remove all else
              inhaltStringReplace=inhaltStringReplace.replace(/<(?:.|\s)*?>/g, "");
      
              // get rid of html-encoded characters:
              inhaltStringReplace=inhaltStringReplace.replace(/ /gi," ");
              inhaltStringReplace=inhaltStringReplace.replace(/&/gi,"&");
              inhaltStringReplace=inhaltStringReplace.replace(/"/gi,'"');
              inhaltStringReplace=inhaltStringReplace.replace(//gi,'>');
      
              // Punkt ans Ende setzen
              inhaltStringReplace=inhaltStringReplace+". §$%";
      
              log("Text ohne HTML mit 'sinnlos String': "+inhaltStringReplace);
      
              // Termine heute zaehlen
              var terminHeuteCount = inhaltStringReplace.split("Heute").length -1;
              log("Anzahl Termine heute: "+terminHeuteCount);
      
              // Termine morgen zählen
              var terminMorgenCount = inhaltStringReplace.split("Morgen").length -1;
              log("Anzahl Termine morgen: "+terminMorgenCount);
      
              // Termine übermorgen zählen
              var terminUebermorgenCount = inhaltStringReplace.split("Übermorgen").length -1;
              log("Anzahl Termine übermorgen: "+terminUebermorgenCount);
      
              // Termine addieren
              var termineCount = (terminHeuteCount + terminMorgenCount + terminUebermorgenCount);
              var termineHeuteMorgenCount = (terminHeuteCount +terminMorgenCount);
              log("Termine heute und morgen gesamt: " +termineHeuteMorgenCount);
      
              //*******************************************
              // Text kürzen je nach gewählter Selektion
              // ******************************************
      
              if (termineCount === 0) { 
                  inhaltStringText ="keine Termine";
      
              }
              else {
                  switch(terminAnsage) {
                      case 1:
                          if (terminHeuteCount === 0) { 
                              inhaltStringText ="keine Termine";
                          }
                          else{
                          nthIndex(inhaltStringReplace,"§$%", terminHeuteCount);                // nutzen der Suchfunktion zum Suchen der n-ten sinnlosen Zeichenkette
                          inhaltStringText = inhaltStringReplace.slice(0,i_search);
                          for (k =0; k < terminHeuteCount; k++) {
                          inhaltStringText = inhaltStringText.replace("§$%", "");             // rausnehmen der sinnlosen Zeichen, damit diese nicht mitgesprochen werden
                          }
                          }
                      break;
      
                      case 2:
                          if (termineHeuteMorgenCount === 0) { 
                              inhaltStringText ="keine Termine";
                          }
                          else{
                          nthIndex(inhaltStringReplace,"§$%", termineHeuteMorgenCount);            // nutzen der Suchfunktion zum Suchen der n-ten sinnlosen Zeichenkette
                          inhaltStringText = inhaltStringReplace.slice(0,i_search);
                          for (k =0; k < termineHeuteMorgenCount; k++) {
                          inhaltStringText = inhaltStringText.replace("§$%", "");             // rausnehmen der sinnlosen Zeichen, damit diese nicht mitgesprochen werden
                          }          
                          }                    
                      break; 
      
                      case 3:
                          if (termineCount === 0) { 
                              inhaltStringText ="Es liegen keine Termine an";
                          }
                          else{
                          nthIndex(inhaltStringReplace,"§$%", termineCount);                // nutzen der Suchfunktion zum Suchen der n-ten sinnlosen Zeichenkette
                          inhaltStringText = inhaltStringReplace.slice(0,i_search);
                          for (k =0; k < termineCount; k++) {
                          inhaltStringText = inhaltStringText.replace("§$%", "");           // rausnehmen der sinnlosen Zeichen, damit diese nicht mitgesprochen werden
                          }
                          }
      
                  }
              }
      log("Letzte Fundstelle an Position "+i_search);        
      log("Das Ergebnis ist: " +inhaltStringText);</br\></br\s\></style.*></l){> 
      
      1 Reply Last reply Reply Quote 0
      • T
        tempestas last edited by

        Hallo maloross,

        Fehlt da was? Bis auf die beiden createState am Anfang scheint mir das eine 1:1 Kopie bzw ein Auszug aus Pix/Skorpils/meinem Skript zu sein.

        Für das Zählen der Tage zum nächsten Müll (beliebige Art) gibts hier ein Skript von mir und Picnic. Ich würde dazu raten, das zu nutzen und dann passen wir es an deine Bedürfnisse an, sofern es nur um den Müll geht.

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

          Stimmt, als Basis hab ich das Skript von Pix/Skorpill genommen. -> Gelöscht, da es nicht funktioniert.

          Das von dir vorgeschlagene Skript habe ich auch, hatte aber zunächst nicht funktioniert.Nachdem ich noch kleinere Fehler gefunden habe, funktioniert nun alles mit (4 Müllsorten je 1 funktionierend Skript).

          Fehler:

          • statt auf ical.html war auf ical.table verwiesen

          • im ical-Adapter die abzurufenden Tage auf 30 erhöht

          Danke für die Unterstützung

          1 Reply Last reply Reply Quote 0
          • T
            tempestas last edited by

            Wenn alles gut ist, ist es ja schön.

            Nur als Hinweis: Der Skritpausschnitt oben von mir ist genau aus dem Grund, den du genannt hast entstanden: table funktioniert oft icht, html ist immer befüllt.

            Das Ansageskript läuft auch entsprechend. Leider ist der Thread sehr lang, wahrscheinlich hast du also einfach eine nicht funktionierende Version gegriffen.

            Für den Müll, die Variante mit vier Skripten, gibt es eine Optimierung meines Skript durch den User PicNic, der eine beliebige Anzahl Müllsorten in einem Skript mit Ausgabe als JSON ermöglicht.

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

              @tempestas:

              Für den Müll, die Variante mit vier Skripten, gibt es eine Optimierung meines Skript durch den User PicNic, der eine beliebige Anzahl Müllsorten in einem Skript mit Ausgabe als JSON ermöglicht. `
              Vielen Dank für den Tipp, hatte es auch schon, hat bei mir aber bisher noch nicht funktioniert. Bin dazu übergegangen, in einer VM neue Skripte zu Testen und erst wenn alles funktioniert, die auf den Raspi zu übertragen.

              1 Reply Last reply Reply Quote 0
              • D
                der-eine last edited by

                Hallo ihr beiden,

                würde gerne diesen Thread nochmal aktivieren. Bin durch die Suche darüber gestolpert.

                Bevor ich einen neuen Thread aufmache hab ich mir gedacht, ich probier es mal hier.

                Ich möchte ganz schlicht die Termine ohne Tabelle oder andere Veränderungen in Datenpunkte schreiben.

                Es werden insgesamt 4 unterschiedliche Kalender die alle ihre eigene Instanz bekommen.

                Ich habe einen Ordner der Hilfsvariablen.0 heißt und unter Objekten liegt. Dort hätte ich auch gerne die Datenpunkte.

                Wie Die Datenpunkte heissen bzw in welchen Unterordner sie liegen würde ich dann gerne selber festlegen. Hoffe, dass man

                das aus dem Skript rauslesen kann.

                Ist es möglich, für jeden Tag (Heute, Morgen, Übermorgen) jeweils 3 Datenpunkte 1. Termin 2. Termin 3. Termin anzulegen?

                Hoffe ihr könnt mir da behilflich sein.

                Danke und Gruß

                der-eine

                1 Reply Last reply Reply Quote 0
                • Jeeper.at
                  Jeeper.at last edited by

                  Kleiner Tipp: wenn ein Thread als gelöst gekennzeichnet ist, schaut kaum noch wer herein. Diese Threads sind eigentlich dazu da um in der Suche eine Lösung zu finden.

                  1 Reply Last reply Reply Quote 0
                  • D
                    der-eine last edited by

                    Danke für den Tipp! Dann erstelle ich einen neuen.

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    847
                    Online

                    31.9k
                    Users

                    80.1k
                    Topics

                    1.3m
                    Posts

                    4
                    8
                    986
                    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