async function doit(){ 
   theJson=[];
   myCalArr=[];
   myCalArrTomorrow=[];
   myCalArrTomorrowAlarm=[];
   countAlarm=0;
await getData();
//log(gesucht[0])
//log(String(gesucht.length))
for(let i=0;i<gesucht.length;i++){
   let mytime=gesucht[i].replace(/.*new Date\((.*?)\).*/,"$1").split(",");
   let theDauer=gesucht[i].replace(/.*new Date\(.*?\)\, (.*?)\,.*/,"$1").replace(/00000/,"");
   let myDauer=getDauer(theDauer)
   let mydatum=mytime[2]+"."+String(Number(mytime[1])+1)+"."+mytime[0];
   let myzeit;
    let theOrt=String(gesucht[i].replace(/.*new Date\(.*?\)\, .*?\, [\'(.)\'].*/,"$1")); //log("ORT - "+theOrt)
   let todayDay=formatDate(getDateObject((new Date().getTime())), "T.M.JJJJ");
  // log(mydatum+ "---" + theDauer+ "---" + myDauer)
   mytime.length==4 ? myzeit=mytime[3]+":"+"00" : myzeit=mytime[3]+":"+mytime[4];
  //let mydauer=Number(gesucht[i].replace(/.*new Date\(.*?\)\, (.*?)\,.*/,"$1"))/100000;
   //log(mydauer)
   
 theJson.push({
     "zeit":myzeit,
     "datum":mydatum,
     "ereignis":gesucht[i].replace(/.*[\'1\']\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/," "),
     "dauer":getDauer(theDauer)
 })
 //if (i<5){
 myCalArr.push({
     "start":mydatum+" "+ myzeit,
     "end":mydatum+" "+ add15MinutesToTime(myzeit,getDauer(theDauer)),
     "summary":gesucht[i].replace(/.*[\'1\']\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/," "),
     "description":"from IOB Script"
 })
 if(todayDay===mydatum && theOrt == "1" ){ //log(todayDay+"   -   "+theOrt)
 myCalArrTomorrow.push({
     "start":mydatum+" "+ myzeit,
     "end":mydatum+" "+ add15MinutesToTime(myzeit,getDauer(theDauer)),
     "summary":gesucht[i].replace(/.*[\'1\']\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/g," "),
     "description":"from IOB Script"
 })
 if (countAlarm==0){                                            // einmal bei alarm ersten werte ins array
                      myCalArrTomorrowAlarm.push({
                     "start":mydatum+" "+ subtract15MinutesFromTime(myzeit,15),
                     "end":mydatum+" "+ subtract15MinutesFromTime(myzeit,10),
                     "summary":"ALARM:"+gesucht[i].replace(/.*[\'1\']\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/g," "),
                     "description":"from IOB Script"
 })
 }
 countAlarm ++;
 let mytimeAnfangNext;
  if(i+1<gesucht.length){ mytimeAnfangNext=gesucht[i+1].replace(/.*new Date\((.*?)\).*/,"$1").split(",");} else { mytimeAnfangNext=gesucht[i].replace(/.*new Date\((.*?)\).*/,"$1").split(",");}
  let myzeitAnfangNext;
  mytimeAnfangNext.length==4 ? myzeitAnfangNext=mytimeAnfangNext[3]+":"+"00" : myzeitAnfangNext=mytimeAnfangNext[3]+":"+mytimeAnfangNext[4];
 // log(myzeitAnfangNext)
 // log(add15MinutesToTime(myzeit,getDauer(theDauer)))
  if(calculateTimeDifferenceInMinutes(add15MinutesToTime(myzeit,getDauer(theDauer)),myzeitAnfangNext)>3000 ){
                                      // log(Number(calculateTimeDifferenceInMinutes( add15MinutesToTime(myzeit,getDauer(theDauer)),myzeitAnfangNext)))
                                        myCalArrTomorrowAlarm.push({
                                       "start":mydatum+" "+ subtract15MinutesFromTime(myzeitAnfangNext,5),
                                       "end":mydatum+" "+ subtract15MinutesFromTime(myzeitAnfangNext,1),
                                       "summary":"ALARM:"+gesucht[i+1].replace(/.*[\'1\']\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/g," "),
                                       "description":"from IOB Script"
 })
                                       
                                       
                                       
                                       } else{
 if(i+1<gesucht.length){
 myCalArrTomorrowAlarm.push({
     "start":mydatum+" "+ add15MinutesToTime(myzeit,getDauer(theDauer)),
     "end":mydatum+" "+ add15MinutesToTime(add15MinutesToTime(myzeit,5),getDauer(theDauer)),
     "summary":"ALARM:"+gesucht[i+1].replace(/.*[\'1\']\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/g," "),
     "description":"from IOB Script"
 })  } else{myCalArrTomorrowAlarm.push({
                                    "start":mydatum+" "+ add15MinutesToTime(myzeit,getDauer(theDauer)),
                                    "end":mydatum+" "+ add15MinutesToTime(add15MinutesToTime(myzeit,5),getDauer(theDauer)),
                                    "summary":"ALARM:"+" Letzte Aktion",   //gesucht[i].replace(/.*[\'1\']\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/," ")
                                    "description":"from IOB Script"
 })
 }
                                       }
 
 }
 //}
}
//log(JSON.stringify(myCalArr));
//myCalArrTomorrowAlarm=myCalArrTomorrowAlarm.slice(0,-1);  //löscht letzten eintrag aus Alarm Array
//log(JSON.stringify(myCalArrTomorrowAlarm));
//setState(myDP,JSON.stringify(theJson));
//toCalender(myCalArr);
//toCalender(myCalArrTomorrow,myKalender,instanz);
if (!wiederholung) {toCalender(myCalArrTomorrowAlarm,myKalenderAlarm,instanzAlarm); 
                   toCalender(myCalArrTomorrow,myKalender,instanz);
                  // log("in nicht wiederholung - einmal morgens")
                   myOldArrAlarm=myCalArrTomorrowAlarm
                   setState(myDPOldArrayAlarm,JSON.stringify(myOldArrAlarm));
                  } else{
                        let changeDetails = findChanges(JSON.parse(getState(myDPOldArrayAlarm).val),myCalArrTomorrowAlarm)
                        console.log(changeDetails);
                        myOldArrAlarm=myCalArrTomorrowAlarm
                        setState(myDPOldArrayAlarm,JSON.stringify(myOldArrAlarm));
                        if(changeDetails.length>0) {log(JSON.stringify(changeDetails))
                                                    for (let i=0;i<changeDetails.length;i++){ 
                                                                                            if(changeDetails[i].action=="added" || changeDetails[i].action=="changed" )
                                                                                                  {toCalender([changeDetails[0]],myKalenderAlarmAenderung,instanzAlarmAenderung); 
                                                                                                  }
                                                                                            }
                                                   }setState(myDPOldArrayAlarm,JSON.stringify(myCalArrTomorrowAlarm));
                        }
}
async function getData(){
   return new Promise(async (resolve, reject) => {
  await request(url, async function (error, response, result) {
 
  gesucht="";
   const myregex = /^this\.AddAppointment.*$/gm;
  gesucht=result.match(myregex); //log(gesucht) 
  gesucht=gesucht.filter(platz => platz.includes("['1']"));
  //log(gesucht)
    if (gesucht!="" && error==null) {resolve()} else {reject()}
;  }).on("error", function (e) {console.error(e);});
  
 });
}
schedule("1 5 * * *", async function () {
   wiederholung=false;
   doit(); 
});
/*schedule("3,33 5-23 * * *", async function () {
   wiederholung=true;
   doit(); 
});*/
//wiederholung=false; doit();
function toCalender(myArr,Kalender,myInstanz){
sendTo("webcal."+myInstanz, "addEvents", {
   calendar: Kalender,
   events: myArr
 })
 }
 function add15MinutesToTime(time,howLong) {
 const [hours, minutes] = time.split(":").map(Number);
 let totalMinutes = hours * 60 + minutes;
 totalMinutes += howLong;
 const newHours = Math.floor(totalMinutes / 60);
 const newMinutes = totalMinutes % 60;
 const formattedNewHours = newHours < 10 ? `0${newHours}` : newHours;
 const formattedNewMinutes = newMinutes < 10 ? `0${newMinutes}` : newMinutes;
 return `${formattedNewHours}:${formattedNewMinutes}`;
}
function subtract15MinutesFromTime(time,howLong) {
 const [hours, minutes] = time.split(":").map(Number);
 let totalMinutes = hours * 60 + minutes;
 totalMinutes -= howLong;
 if (totalMinutes < 0) {
   totalMinutes += 24 * 60; // Falls die Zeit negativ wird, füge 24 Stunden hinzu
 }
 const newHours = Math.floor(totalMinutes / 60);
 const newMinutes = totalMinutes % 60;
 const formattedNewHours = newHours < 10 ? `0${newHours}` : newHours;
 const formattedNewMinutes = newMinutes < 10 ? `0${newMinutes}` : newMinutes;
 return `${formattedNewHours}:${formattedNewMinutes}`;
}
function getDauer(dauer){
 //  const minChange=[{"18":30},{"27":45},{"36":60},{"45":75},{"54":90},{"63":105},{"72":120},{"81":135},{"90":150},{"99":165},{"108":180}]; 
  // log(String(minChange["18"]))
   return (dauer/9)*15
}
function calculateTimeDifferenceInMinutes(startTime, endTime) {
 const [startHours, startMinutes] = startTime.split(":").map(Number);
 const [endHours, endMinutes] = endTime.split(":").map(Number);
 const totalStartMinutes = startHours * 60 + startMinutes;
 const totalEndMinutes = endHours * 60 + endMinutes;
 let timeDifference = totalEndMinutes - totalStartMinutes;
 if (timeDifference < 0) {
   timeDifference += 24 * 60; // Falls die Differenz negativ wird, füge 24 Stunden hinzu
 }
 return timeDifference;
}
/*
function findChanges(oldArray, newArray) {
 const changes = [];
 newArray.forEach(newItem => {
   const oldItem = oldArray.find(item => item.start === newItem.start);
   if (!oldItem) {
     changes.push({ start: newItem.start, action: "added" });
   } else {
     const changedKeys = Object.keys(newItem).filter(key => oldItem[key] !== newItem[key]);
     if (changedKeys.length > 0) {
       changes.push({ start: newItem.start, action: "changed", keys: changedKeys });
     }
   }
 });
 oldArray.forEach(oldItem => {
   const newItem = newArray.find(item => item.start === oldItem.start);
   if (!newItem) {
     changes.push({ start: oldItem.start, action: "deleted" });
   }
 });
 return changes;
}
*/
function findChanges(oldArray, newArray) {
 const changes = [];
 newArray.forEach(newItem => {
   const oldItem = oldArray.find(item => item.start === newItem.start);
   if (!oldItem) {
     changes.push({ ...newItem, action: "added" });
   } else {
     const changedKeys = Object.keys(newItem).filter(key => oldItem[key] !== newItem[key]);
     if (changedKeys.length > 0) {
       const changeDetails = { ...newItem, action: "changed", changedKeys };
       changes.push(changeDetails);
     }
   }
 });
 oldArray.forEach(oldItem => {
   const newItem = newArray.find(item => item.start === oldItem.start);
   if (!newItem) {
     changes.push({ ...oldItem, action: "deleted" });
   }
 });
 return changes;
}