Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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. Skripten / Logik
  4. [Gelöst] Anfängerin benötigt Unterstützung beim Blocky/Skript

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    291

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
8 Beiträge 4 Kommentatoren 1.1k Aufrufe
  • Ä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.
  • malorossM Online
    malorossM Online
    maloross
    schrieb am zuletzt editiert von
    #1

    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){> 
    

    Auch Frauen können sich für Technik begeistern! ;)

    Equipment:
    diverse HM-, HMIP-, Aeotec- Tradfri- Sonos- und Fibaro-Geräte, Master-/Slavesystem auf 2 Raspi4, NAS

    1 Antwort Letzte Antwort
    0
    • T Offline
      T Offline
      tempestas
      schrieb am zuletzt editiert von
      #2

      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.

      <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

      1 Antwort Letzte Antwort
      0
      • malorossM Online
        malorossM Online
        maloross
        schrieb am zuletzt editiert von
        #3

        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

        Auch Frauen können sich für Technik begeistern! ;)

        Equipment:
        diverse HM-, HMIP-, Aeotec- Tradfri- Sonos- und Fibaro-Geräte, Master-/Slavesystem auf 2 Raspi4, NAS

        1 Antwort Letzte Antwort
        0
        • T Offline
          T Offline
          tempestas
          schrieb am zuletzt editiert von
          #4

          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.

          <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

          1 Antwort Letzte Antwort
          0
          • malorossM Online
            malorossM Online
            maloross
            schrieb am zuletzt editiert von
            #5

            @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.

            Auch Frauen können sich für Technik begeistern! ;)

            Equipment:
            diverse HM-, HMIP-, Aeotec- Tradfri- Sonos- und Fibaro-Geräte, Master-/Slavesystem auf 2 Raspi4, NAS

            1 Antwort Letzte Antwort
            0
            • D Offline
              D Offline
              der-eine
              schrieb am zuletzt editiert von
              #6

              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 Antwort Letzte Antwort
              0
              • Jeeper.atJ Offline
                Jeeper.atJ Offline
                Jeeper.at
                schrieb am zuletzt editiert von
                #7

                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 Antwort Letzte Antwort
                0
                • D Offline
                  D Offline
                  der-eine
                  schrieb am zuletzt editiert von
                  #8

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

                  1 Antwort Letzte Antwort
                  0
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  431

                  Online

                  32.7k

                  Benutzer

                  82.5k

                  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