NEWS
Ical mehrere Instanzen -> nur bestimmte Termine
-
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
-
Leider nein. Die beiden running Datenpunkte bleiben leer...
-
zwei angebote
- du postest mal dein ical.0... table file - damit ich es bei mir lade
- oder du hast mal zeit und ich gehe mit anydesk bei dir drauf und wir telefonieren - wenn ja - dann wann am besten
-
@liv-in-sky sagte in Ical mehrere Instanzen -> nur bestimmte Termine:
du postest mal dein ical.0... table file - damit ich es bei mir lade
Wenn gerade ein Termin läuft?
-
@karel-puhli ja - das wäre gut
mach einen für jetzt - und einen der morgen früh von 8 bis 11 geht
du kannst ja den ical adapter erstmal nur 2-3 tage holen lassen - dann ist wenig privates dabei
-
jetzt fällt mir noch ein - zeige mal die einstellungen der ical instanz - nur die html einstellungen
-
@liv-in-sky sagte in Ical mehrere Instanzen -> nur bestimmte Termine:
zeige mal die einstellungen der ical instanz - nur die html einstellungen