NEWS
[Gelöst] Anfängerin benötigt Unterstützung beim Blocky/Skript
-
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){>
-
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.
-
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
-
-
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.
-
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. -
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
-
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.
-
Danke für den Tipp! Dann erstelle ich einen neuen.