NEWS
Müllkalender
-
hi adnim,
werde mich damit mal am wochenede befassen. da brauche ich ruhe und zeit. das meine jetzige lösung eine "krücke" und mich nicht zufrieden stellt habe ich ja geschrieben.
mich ärgert nur (und das ist nur mein problem) dass ich dein skript nicht verstehe. ich werde mich da mal ranwagen, weil ich möchte eigentlich nicht mit meiner lösung leben, wie du schon geschrieben hast mit der automatisierung ….
ich danke euch allen für die zeit die ihr euch nehmt !
lg
ralph
-
Hast du mal im Scripteditor bei deinem Blockly auf den Button "zeige Code" geklickt?
Dann wird dir dein Blockly in JS angezeigt.
Vielleicht hilft es dir dann etwas besser JS zu verstehen.
Du kannst dir ja auch ein leeres Script zum Testen anlegen und dir einen einzelnen Block reinziehen. Dann schaust du dir an wie der als JS Code aussieht.
-
hi adnim,
werde mich damit mal am wochenede befassen. da brauche ich ruhe und zeit. das meine jetzige lösung eine "krücke" und mich nicht zufrieden stellt habe ich ja geschrieben.
mich ärgert nur (und das ist nur mein problem) dass ich dein skript nicht verstehe. ich werde mich da mal ranwagen, weil ich möchte eigentlich nicht mit meiner lösung leben, wie du schon geschrieben hast mit der automatisierung ….
ich danke euch allen für die zeit die ihr euch nehmt !
lg
ralph `
Hallo Ralph,
schau mal, in diesem Posting habe ich das von adnim gepostet Skript damals erstmalig für den User noxx erstellt:
viewtopic.php?f=21&t=3351&hilit=guten+m … 120#p79458
Hier:
viewtopic.php?f=21&t=3351&p=86026&hilit ... dra#p86026
da habe ich einem anderen User das Skript erklärt und Schritt für Schritt durchgeführt.
und zu guter letzt hier:
viewtopic.php?f=21&t=3351&p=86026&hilit ... dra#p91698
hat dann user PicNic mein Skript genommen und so erweitert, dass man gleich alle Müllarten auf einmal suchen kann. Das wäre aus meinem ersten Posting oben dann das Beispiel 1.
Wenn du dir das durchliest, wirst du lesen, was das Skript tut und welche Probleme es geben kann. Es ist inhaltlich nicht schwer zu verstehen. Wenn Fragen sind, können wir die gerne hier klären.
viel Erfolg
-
Hallo Ralph,
ich habe nochmal in meiner Ablage geschaut und dieses Skript gefunden ,dass ich mal geschrieben hatte. Es ist durchgehend kommentiert, vllt. hilft es dir. Das Skript sucht einfach nach "Morgen" und gibt dann alles aus, was morgen ansteht. D.h. du brauchst keinen Suchbegriff festlegen, im Gegenzug würde aber, wenn du einen gemischten Kalender hast (z.B. auch Geburtstage enthalten) alles was morgen ansteht mitgeteilt.
! ````
! // Skript schaut täglich um 18h, ob im Müllkalender das Wort "Morgen" vorkommt. Wenn ja, wird ein Telegram geschickt mit der betreffenden Müllsorte
// muss "ersetze Datum mit Worten" aktiviert haben
//v1.0 tempestas
! // Skripteinstellungen
! var debug = false;
! // Suchfunktion für Termin-Cutofffunction 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;" müll-funktion/function/muellwarnung()/{/var/inhalt="getState("ical.0.data.html").val.toString();" hier/deine/müll-kalender/instanz/eingeben/if(debug)/log(inhalt);/count="inhalt.split("Morgen").length" -1;/wie/häufig/wird/"morgen"/gefunden?/log("count/ist/"+count);/posstart="inhalt.indexOf(" 'morgen',/0);/sucht/das/erste/mal/log("posstart/"+posstart);/if(posstart/!="-1){" falls/gefunden/wurde/gehts/weiter/stringshort="inhalt.substring(posStart," inhalt.length);/abschneiden/von/allem,/was/links/vom/ersten/treffer/steht/log("gekürzt/:"/+stringshort);/nthindex(stringshort,/'</span="">', count); // hier wird nun geschaut, wo es rechts abgeschnitten werden muss
log('i_search ist '+i_search );
stringCut = stringShort.slice(0,i_search); // hier wird alles rechts abgeschnitten und so der finale String extrahiertif(debug) log("Fast Final: "+stringCut);
! // aufbereiten für telegram, entfernen von HTML Tags
! stringCut = stringCut.replace('
',"\n"); // Zeilenumbruch html durch telegram umbruch ersetzen
! // remove all inside SCRIPT and STYLE tags
stringCut=stringCut.replace(/<script.>[\w\W]{1,}(.?)[\w\W]{1,}</script>/gi, "");
stringCut=stringCut.replace(/<style.>[\w\W]{1,}(.?)[\w\W]{1,}</style>/gi, "");// remove BR tags. Werden durch sinnlose Zeichenkette ersetzt, nach der später gesucht wird stringCut=stringCut.replace(/
/gi, "");
stringCut=stringCut.replace(/<br\s>/gi, "");
stringCut=stringCut.replace(/<br>/gi, "");// remove all else stringCut=stringCut.replace(/<(?:.|\s)*?>/g, ""); // get rid of html-encoded characters: stringCut=stringCut.replace(/ /gi," "); stringCut=stringCut.replace(/&/gi,"&"); stringCut=stringCut.replace(/"/gi,'"'); stringCut=stringCut.replace(/</gi,'<'); stringCut=stringCut.replace(/>/gi,'>');
!
sendTo('telegram', stringCut);}
}! // Trigger Schedule
! schedule('0 18 * * ', function(){ // Täglich um 18h
! muellWarnung();
});
! // Bei Start
! muellWarnung();</br></br\s></style.></script.*></l){> -
hallo zusammen,
ihr seit echt göttlich dass ihr mir helfen wollt. ich werde mich am wochenende wie gesagt mal ransetzen, das geht für mich nicht so zwischendurch. möchte es ja halbwegs verstehen was ich da tue.
@ tempestas: deinen letztes skript wird für mich nicht in frage kommen. ich habe zwar einen extra kalender dafür, möchte aber unterscheiden können. da ich das ganze im wohnzimmer grafisch darstelle in vis bringt mich dann eine textausgabe leider nicht weiter.
ich danke euch allen für eure hilfe und melde mich montag wie es ausgegangen ist
lg
ralph
9191_vis_2018.jpg -
Wenn ihr euren Kalender auf dem Google Home ansagen lasst, welche Stimme nehmt ihr?
Die ganzen sayit Stimmen sind so blechern und hören sich derbe nach Computer an.
Gibt es ne Möglichkeit wie bei Alexa die Original Google Stimme sprechen zu lassen?
Die Google Home Stimme aus dem sayit Adapter klingt bei weitem nicht wie das Original.
-
Hab es anders gelöst. Mit Blockly und der Hilfe von der soundoftext.com Seite.
Unter Soundoftext.com kann man beliebige Wörter, Sätze eingeben und in Deutsch ausgeben lassen.
Das File kann man sofort als mp3 speichern.
Die Stimme ist jetzt nicht mega menschlich, aber irgendwie klarer und deutlicher als die im Adapter gespeicherten.
Das mp3 File dann in den sayit.0 Adapter und dann kann man es im Blockly zu allem verwenden.
-
hallo zusammen,
bin leider am wochenende nicht dazu gekommen eure vorschläge zu testen. der grund: hier läuft gar nichts mehr. habe den java adapter auf 4.x upgedate und seither geht leider nix mehr.
wollte nur kurz eine info geben damit ihr euch nicht verarscht vorkommt ….
lg
ralph
-
hi zusammen,
mein iobroker läuft wieder . gestern gab es ein update für den icalender adapter welches glaube ich für viele eine problemlösung sein wird. wenn ich das richtig verstanden habe werden jetzt die kalender ereignisse nach 0,1,2,3,4 und 5 tagen unterteilt.
bin gerade noch am testen aber der gewünschte "müllkalender" dürfte dann so kein problem mehr sein (war es ja sowieso nicht für euch, die sich mit java auskennen).
lg
ralph
NACHTRAG: unter objekte hat man jetzt die anzahl datenpunkte je nach dem wie viele tage der kalender abgeholt wird.
9191_kalender_neu.jpg -
Hi,
für mich war das jetzt der Durchbruch [emoji4]
Sofort erst mal Alexa beigebracht mich bei der Heimkehr daran zu erinnern [emoji23]
-
Welche Version ist das Update? Ich bekam nichts!
-
1.7
-
habe eben die 1.7 installiert.
Genial, einfach nur genial!
-
habe die felder nochmal rausgesucht und im script extra kommentiert…
createState('javascript.0.muell.altpapier', 0); //hier das objekt zum speichern analog dem suchwort eintragen,das gleiche wie beim letzten Eintrag
var such1= "altpapier"; // HIER DAS SUCHWORT VERGEBEN, Case Sensitiv
setState('javascript.0.muell.altpapier', diff); //Schreibe Ergebnis in am anfang erstelles Objekt
var inhalt = getState("ical.0.data.html"/HTML iCal table/); //hier deinen Kalender eintragen `
Hallo Adnim!
Danke für dein/euer Script.
Hab es sofort an mich angepasst, bekomme es leider nicht zum laufen.
// TESTSKRIPT FÜR NOXX // Annahme ist, dass jede Müllart mindestens einmal im Monat abgeholt wird. Nicht getestet und eventuell problematisch ist es, wenn Müll seltener abgeholt wird. debug = true; // Anlegen JS State für VIS createState('javascript.0.muell.papier', 0); //hier das objekt zum speichern analog dem suchwort eintragen // Suchvariablen var such1= "Papier"; // HIER DAS SUCHWORT VERGEBEN // Kalender auslesen (HTML Format) // ************************************************************************************** // Termine auswerten aus html. Bereinigung der HTML Tags und Konvertierung in Plain Text // ************************************************************************************** var inhalt = getState("ical.1.data.html"/*HTML iCal table*/); // an deinen eigenen Kalender anpassen var inhaltString = inhalt.val.toString(); var inhaltStringReplace = inhaltString; var inhaltStringText; var i_search; // 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 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,'>'); if(debug) log(inhaltStringReplace); // n-ten Treffer finden 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;" funktion/zum/tage/im/monat/zählen/function/daysinmonth(month,/year)/{/return/new/date(year,/month,/0).getdate();/position/bestimmen/var/pos="inhaltStringReplace.indexOf(" such1,/1);/if(debug)/log("pos/ist:/"+pos);/inhaltstringtext="inhaltStringReplace.substring((pos-13),pos-1);" log("datum/"+inhaltstringtext);/nthindex(inhaltstringtext,/".",/t_m="inhaltStringText.slice(0," i_search);/pos1="i_search+1;" log("pos1:/"/+pos1/);/2);/m_m="inhaltStringText.slice(pos1," pos2="i_search+1;" log("pos2:/+pos2/j_m="inhaltStringText.slice(pos2," inhaltstringtext.len/log(t_m/+"/,/+m_m/+j_m);/datum/heute/ermitteln/today="new" date();/log(today);/tag/t="today.getDate();" m="today.getMonth()+1;" jahr/j="today.getFullYear();" "+t+m+j);/berechnung/tagesdifferenzen/diff="0;" dim="DaysInMonth(m," j);/des/aktuellen/monats/log("tage/aktueller/monat:/"+dim);/if(j_m="">j || m_m > m) { // Prüfung: Jahr_Müll größer als aktuelles Jahr? Relevant bei Jahreswechsel ODEr Monat Müll größer aktueller Monat? diff = parseInt(dim) - parseInt(t) + parseInt(t_m); } else diff = parseInt(t_m) - parseInt(t); if(debug) log("Tage bis zum nächsten Müll: "+diff); setState('javascript.0.muell.papier', diff); //Schreibe Ergebnis in am anfang erstelles Objekt</l){></br\></br\s\></style.*></script.*>
Beim start des Scripts bekomm ich immer folgende Fehlermeldung:
19:01:39.824 info javascript.0 Stop script script.js.common.Müllkalender 19:01:39.847 info javascript.0 Start javascript script.js.common.Müllkalender 19:01:39.848 error javascript.0 script.js.common.Müllkalender: The "getState" method cannot be used synchronously, because the adapter setting "Do not subscribe to all states on start" is enabled. 19:01:39.848 error javascript.0 script.js.common.Müllkalender: Please disable that setting or use "getState" with a callback, e.g.: getState("ical.1.data.html", (err, state) => { ... }); 19:01:39.848 error javascript.0 script.js.common.Müllkalender: script.js.common.Müllka
Ical.1 ist so konfiguriert:
In Objekte - ical.1.events.1 wird Papier als true angezeigt!
In Objekte - javascript.0.muell wird papier (javascript.0.muell.papier) mit Wert 0 angezeigt!
Morgen wäre im Kalender der Termin für Papier! Wird mir aber nicht angezeigt!
Wäre toll, wenn ich es mit eurer Hilfe schaffen könnte!
Danke!!
-
-
Schau Mal hier
Das letzte Skript ist am einfachsten. `
Danke, damit hats sofort funktioniert!
-
Schau Mal hier
Das letzte Skript ist am einfachsten. `
Eine Frage/Bitte hätt ich noch!
Das Script verursacht ein paar Fehler.
JS ist komplettes Neuland für mich!
Könntest du dir das anschaun?
javascript.0 2019-01-19 17:08:26.907 error Error in callback: TypeError: Cannot read property 'val' of undefined javascript.0 2019-01-19 17:08:26.907 error script.js.common.Muell: Please disable that setting or use "getState" with a callback, e.g.: getState("ical.2.events.0.today.Restabfall", (err, state) => { ... }); javascript.0 2019-01-19 17:08:26.906 error script.js.common.Muell: The "getState" method cannot be used synchronously, because the adapter setting "Do not subscribe to all states on start" is enabled.
Danke
-
das hier
script.js.common.Muell: Please disable that setting or use "getState" with a callback, e.g.: getState("ical.2.events.0.today.Restabfall", (err, state) => { ... }); javascript.0 2019-01-19 17:08:26.906 error script.js.common.Muell: The "getState" method cannot be used synchronously, because the adapter setting "Do not subscribe to all states on start" is enabled.
taucht ja auch an anderer Stelle bei dir auf. Da ist was in deinem JS Adapter nicht richtig eingestellt, will mir scheinen.
und zwar das hier:
because the adapter setting "Do not subscribe to all states on start" is enabled
im adapter den Haken entfernen, Adapter neu starten und testen
-
im adapter den Haken entfernen, Adapter neu starten und testen `
hab ich getestet!
Adapter wird neu gestartet und geht dann gleich wieder von grün auf rot!
host.ioBroker 2019-01-19 22:05:47.089 info Restart adapter system.adapter.javascript.0 because enabled host.ioBroker 2019-01-19 22:05:47.089 error instance system.adapter.javascript.0 terminated with code 0 (OK) host.ioBroker 2019-01-19 22:05:47.088 error Caught by controller[0]: at emitNone (events.js:91:20) host.ioBroker 2019-01-19 22:05:47.088 error Caught by controller[0]: at IncomingMessage.g (events.js:292:16) host.ioBroker 2019-01-19 22:05:47.088 error Caught by controller[0]: at IncomingMessage. <anonymous>(/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1083:12) host.ioBroker 2019-01-19 22:05:47.088 error Caught by controller[0]: at Request.emit (events.js:188:7) host.ioBroker 2019-01-19 22:05:47.088 error Caught by controller[0]: at emitOne (events.js:96:13) host.ioBroker 2019-01-19 22:05:47.088 error Caught by controller[0]: at Request. <anonymous>(/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1161:10) host.ioBroker 2019-01-19 22:05:47.088 error Caught by controller[0]: at Request.emit (events.js:191:7) host.ioBroker 2019-01-19 22:05:47.088 error Caught by controller[0]: at emitTwo (events.js:106:13) host.ioBroker 2019-01-19 22:05:47.088 error Caught by controller[0]: at Request.self.callback (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:185:22) host.ioBroker 2019-01-19 22:05:47.088 error Caught by controller[0]: at Request._callback (script.js.common.Alexa_Logon:259:53) host.ioBroker 2019-01-19 22:05:47.087 error Caught by controller[0]: TypeError: Cannot read property '1' of null</anonymous></anonymous>
-
Das scheint was mit einem Alexa Skript zu tun zu haben