NEWS
Ical mehrere Instanzen -> nur bestimmte Termine
-
du hast aber auch solche termine drin ?
bei mir:
ein auszug aus einem json bringt leider nichts - das kann mein translator nicht lesen - kannst du das ganze sharen - wenn es keine geheimdaten hat?
ich sende dir meine email im chat
-
@liv-in-sky
json ist versendet.Ich habe in dieser Instanz (bei mir ical.2) nur die Geburtstage drin.
Ich nutze das so für meine VIS:
Ich möchte in dem 2. Button von oben nur den Geburtstag der aktuell stattfindet oder eben den nächsten der kommt.
Wenn man auf den Button klickt, kommen dann alle anderen Geburtstag.VG
-
-
-
Servus,
ich bin es wieder.
Der Datenpunkt
let dpTerminRunningGanzerTag="javascript.0.scriptEnabled.common.Kalender.TerminRunningGanzerTag"
wird wieder nicht gefüllt.
Weißt du woran das liegen kann?
Admin und Adapter sind auf neustem Stand.
VG
-
@nousefor82 habe gerade getestet - funktioniert bei mir - steht da heute im kalender ein ganztag-termin drin ?
ps: dein dp ist an einer stelle, wo er nicht hingehört - unter scriptEnabled sollen keine dp gemacht werden - das ist sytemzeugs
-
Sorry, war total eingepsannt.
Ja da sstand ein Termin drin.
Er bleibt bei einem Termin hängen der in der Vergangenheit liegt anstatt den nächsten der kommt:
Der Datenpunkt ist aber:
TerminNextGanzerTag
HIer nochmal das Script:
let dpTSJson=["ical.2.data.table"]; // bei nur einer instanz: ["ical.0.data.table"] let dpTerminNext="javascript.0.scriptEnabled.common.Kalender.TerminNext"; // WICHTIG - datenpunkt anlegen: zeichenkette let dpTerminRunning="javascript.0.scriptEnabled.common.Kalender.TerminRunning"; // WICHTIG - datenpunkt anlegen: zeichenkette let dpTerminNextGanzerTag="javascript.0.scriptEnabled.common.Kalender.TerminNextGanzerTag"; // WICHTIG - datenpunkt anlegen: zeichenkette let dpTerminRunningGanzerTag="javascript.0.scriptEnabled.common.Kalender.TerminRunningGanzerTag"; // WICHTIG - datenpunkt anlegen: zeichenkette let helperTerminNext; let helperTerminRunning; let mySchedule3=" 0,5,15,30,45,55 * * * * "; //0,15,30,45,43 let myData=[]; let inDpNext="" let inDpRunning=[]; let inDpRunning2=""; let inDpRunning3=""; let inDpGanzTag="" schedule(mySchedule3, function () { myData=[]; inDpNext="" inDpRunning=[]; inDpRunning2=""; inDpRunning3=""; inDpGanzTag="" helperTerminNext="" helperTerminRunning="" for (let i=0;i<dpTSJson.length;i++) { // let myDpInput=(getState(dpTSJson[i]).val); let myDpInput=JSON.parse((getState(dpTSJson[i]).val)); myData=myData.concat(myDpInput) //myData=myData.concat(getState(dpTSJson[i]).val) } //myData=myData.concat(JSON.parse(myhelparr)) //log(JSON.stringify(myData)) // SORTIEREN myData.sort(function(a, b){ return new Date(a._date).getTime() - new Date(b._date).getTime(); // return parseInt(new Date(b.date).getTime()) - parseInt(a.date); }); // NEXT TERMIN for (let x=0;x<myData.length;x++ ) { if (!myData[x].date.includes("→") && myData[x].date.includes(":")&& !myData[x].date.includes("01:00-00:00")) { helperTerminNext=myData[x].date helperTerminNext=helperTerminNext.replace(/(.+?\..*?\.).* (\d\d\:\d\d)-\d\d\:\d\d/,"$1 $2: "); if( formatDate(getDateObject(myData[x]._date), "DD.MM") == formatDate(getDateObject((new Date().getTime())), "DD.MM") ) {helperTerminNext=helperTerminNext.replace(/.+? (\d\d\:\d\d)/,"Heute $1: ")} // : helperTerminNext=helperTerminNext.replace(/(.+?\..*?\.).* (\d\d\:\d\d)-\d\d\:\d\d/,"$1 $2") // log( formatDate(getDateObject((new Date().getTime())+(1000 * 60 * 60 * 24 * 1)), "DD.MM") +" "+formatDate(getDateObject((new Date().getTime())), "DD.MM")) if ( formatDate(getDateObject((new Date().getTime())+(1000 * 60 * 60 * 24 * 1)), "DD.MM") == formatDate(getDateObject(myData[x]._date), "DD.MM") ) { helperTerminNext=helperTerminNext.replace(/.+? (\d\d\:\d\d)/,"Morgen $1: "); } inDpNext=helperTerminNext+" "+myData[x].event; break;} } //NEXT GANZER TAG for (let x=0;x<myData.length;x++ ) { if ((!myData[x].date.includes("→") && !myData[x].date.includes(":") && formatDate(getDateObject(myData[x]._date), "DD.MM") != formatDate(getDateObject((new Date().getTime())), "DD.MM")) || (!myData[x].date.includes("→") && myData[x].date.includes("01:00") && formatDate(getDateObject(myData[x]._date), "DD.MM") != formatDate(getDateObject((new Date().getTime())), "DD.MM")) ) { helperTerminNext=myData[x].date // log(helperTerminNext) let morgen = formatDate(getDateObject((new Date().getTime())+(1000 * 60 * 60 * 24 * 1)), "DD.MM"); //log(morgen) if ( formatDate(getDateObject((new Date().getTime())+(1000 * 60 * 60 * 24 * 1)), "DD.MM") == formatDate(getDateObject(myData[x]._date), "DD.MM") ) { helperTerminNext="Morgen: " ; // log("-"+helperTerminNext) } inDpGanzTag=helperTerminNext+" "+myData[x].event ; break;} } // LÄUFT GERADE for (let x=0;x<myData.length;x++ ) { if (myData[x].date.includes("→") && myData[x].date.includes(":") && !myData[x].date.includes("00:00") ) { helperTerminNext=myData[x].date.replace("→","") helperTerminNext=helperTerminNext.replace(/.+? (.?)/,"bis: $1") inDpRunning.push(helperTerminNext+" "+myData[x].event) } } inDpRunning.length>0 ? inDpRunning2=inDpRunning[inDpRunning.length-1] : inDpRunning2="" // LÄUFT GERADE GANZER TAG inDpRunning=[] for (let x=0;x<myData.length;x++ ) { if ((!myData[x].date.includes("→") && myData[x].date.includes(".") && !myData[x].date.includes("00:00") && myData[x]._allDay) && (myData[x]._class=="ical_daily ical_today" || "ical_Geburtstage ical_today") ) if ( formatDate(getDateObject((new Date().getTime())+(1000 * 60 * 60 * 24 * 1)), "DD.MM") == formatDate(getDateObject(myData[x]._end), "DD.MM") ) { { inDpRunning.push(myData[x].event) } }} log(inDpRunning.length.toString()) if(inDpRunning.length>0) { for(let i=0;i<inDpRunning.length;i++){ if (i !=inDpRunning.length-1) {inDpRunning3=inDpRunning3+inDpRunning[i]+" und "; } else {inDpRunning3=inDpRunning3+inDpRunning[i] }} } else {inDpRunning3=""} //log(inDpRunning.toString()) setState(dpTerminRunning,inDpRunning2) setState(dpTerminNext,inDpNext) setState(dpTerminNextGanzerTag,inDpGanzTag) setState(dpTerminRunningGanzerTag,inDpRunning3) });
Das steht im Datenpunkt:
Der nächste wäre aber dieser hier:
Hast du eine Idee?
-
deine dp sind an einer stelle, wo sie nicht hingehören - unter scriptEnabled sollen keine dp gemacht werden - das ist systemzeugs
außerdem läuft dieses script nicht mehr, wenn man auf der neusten adapter version von ical und den neuen js-controller hat - ist das bei dir abgedatet ?
-
das script muss an dieser stelle so sein:
-
-
@liv-in-sky sagte in Ical mehrere Instanzen -> nur bestimmte Termine:
deine dp sind an einer stelle, wo sie nicht hingehören - unter scriptEnabled sollen keine dp gemacht werden - das ist systemzeugs
außerdem läuft dieses script nicht mehr, wenn man auf der neusten adapter version von ical und den neuen js-controller hat - ist das bei dir abgedatet ?
Ja, i know.
Zu spät
-
@liv-in-sky
Hi!
Mir ist gerade eben bei der Neuerstellung einer VIS aufgefallen, dass der gerade laufende Termin nicht angezeigt wird. Kannst du ggf, mal bei Gelegenheit über das Skript schauen?
LG Karel -
also bei mir funnktioniert das - da aber das script erst getriggert wird, wenn der ical adapter seine werte aktualisiert, kommt es darauf an, wie du die abfrage des ical adapters eingestellt hast
ich habe das so gewählt, das die aktualisierung an den zeiten stattfindet, andem die running termine 1 minutee laufen
anders: oft hat man termine um xx:15 oder xx:45 - daher aktualisierung um xx:16 und xx:46 - hoffe es ist klar,was ich meine
-
Ich habe vergessen zu erwähnen, dass ich das verkürzte Skript meine.
Dieses hier: https://forum.iobroker.net/post/557333
Gilt trotzdem das von Dir geschriebene?
Grüße! -
da ist es ähnlich - zwar wird alle 30 minuten das script upgedatet - kann aber nur updaten, wenn der ical die richtigendaten hat
ich würde das schedule im script mal auf minütlich setzen
let mySchedule3=" * */1 * * * ";
für die ical instanz gilt das von weiter oben
-
habe nochmal kurz nachgedacht - ein besseres schedule für das script wäre
let mySchedule3=" 15 */1 * * * * ";
damit hat der ical genug zeit, die daten zu holen - denn das passiert zu vollen minute und das script braucht eine leichte verzögerung, damit die instanzdaten da sind
um eine genauere anzeige zu bekommen kannst du mal versuchen, die ical instanz auf alle 5 minuten zu setzen
-
@liv-in-sky
Ich habe beides so eingestellt, wie du gesagt hast. Leider klappt es nicht. Der Datenpunkt "Running" bleibt leer. Der Datenpunkt im ical Adapter wird richtig geschrieben ("noch 1 Stunde..."), bei mir läuft gerade ein Termin... -
paar fragen
- ist dein system up-to-date - neuste ical adapter version ?
- lief das ganze schon mal ?
poste mal dein ganzes script hier rein - dann teste ich es mal bei mir
-
@liv-in-sky sagte in Ical mehrere Instanzen -> nur bestimmte Termine:
ist dein system up-to-date - neuste ical adapter version ?
ja
@liv-in-sky sagte in Ical mehrere Instanzen -> nur bestimmte Termine:
lief das ganze schon mal ?
Puh. Das ist ne gute Frage. Ich bin nicht sicher. Hab jetzt seit ein paar Monaten gar nichts mehr an der VIS geändert. Ich würde tendenziell eher nein sagen. Aus dem Gedächtnis heraus, wurden immer nur die beiden anderen Datenpunkte angezeigt.
Hier das Skrip:
-
probier das mal - du musst oben deine datenpunkte angeben - das ist die version, die bei mir läuft