Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Kalender von Website auslesen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    895

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Kalender von Website auslesen

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
parserwebsite auslesenkalenderical adapter
28 Beiträge 3 Kommentatoren 2.6k Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • liv-in-skyL liv-in-sky

    @andrenaether sagte in Kalender von Website auslesen:

    Und wie du die daten aus der website geholt hast

    das kommt noch - ich nutze ein script, welches du dann bekommst - zuerst muss aber der webcal adapter richtig eingerichtet werden

    A Offline
    A Offline
    andrenaether
    schrieb am zuletzt editiert von
    #21

    @liv-in-sky Ich finde den Adapter nicht .... nur auf github .... Doch da lässt er sich nicht installieren über die url..... aber bin dran

    liv-in-skyL A 2 Antworten Letzte Antwort
    0
    • A andrenaether

      @liv-in-sky Ich finde den Adapter nicht .... nur auf github .... Doch da lässt er sich nicht installieren über die url..... aber bin dran

      liv-in-skyL Offline
      liv-in-skyL Offline
      liv-in-sky
      schrieb am zuletzt editiert von
      #22

      @andrenaether zur not können wir auch mal eine anydesk session machen - da seh ich deinen bildschirm und wir können gemeinsam durchgehen, was zu machen ist

      nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

      1 Antwort Letzte Antwort
      0
      • A andrenaether

        @liv-in-sky Ich finde den Adapter nicht .... nur auf github .... Doch da lässt er sich nicht installieren über die url..... aber bin dran

        A Offline
        A Offline
        andrenaether
        schrieb am zuletzt editiert von andrenaether
        #23

        @andrenaether so Adapter habe ich und installiert ..... richte ihn gerade ein ... Habe heute wenig zeit ... muss gleich los ....
        Gruss andre :-)

        D 1 Antwort Letzte Antwort
        0
        • A andrenaether

          @andrenaether so Adapter habe ich und installiert ..... richte ihn gerade ein ... Habe heute wenig zeit ... muss gleich los ....
          Gruss andre :-)

          D Nicht stören
          D Nicht stören
          dirkhe
          Developer
          schrieb am zuletzt editiert von
          #24

          @andrenaether nimm die emai lieber raus und schreibe ihm per pn

          A 1 Antwort Letzte Antwort
          0
          • D dirkhe

            @andrenaether nimm die emai lieber raus und schreibe ihm per pn

            A Offline
            A Offline
            andrenaether
            schrieb am zuletzt editiert von
            #25

            @dirkhe oh danke dir :-)

            liv-in-skyL 2 Antworten Letzte Antwort
            0
            • liv-in-skyL Offline
              liv-in-skyL Offline
              liv-in-sky
              schrieb am zuletzt editiert von
              #26

              für später das sccript zum import - bitte noch nicht ausführen lassen - machen wir zusammen

              
              
              let url="https://irs.indico.ch/bodenseearena/views/Graphical?location=Bodenseearena"
              let gesucht;
              let theJson=[];let myCalArr=[];let myCalArrTomorrow=[];
              const myDP="0_userdata.0.CONTROL-OWN.AAATEST.testJSON"
              
              async function doit(){
              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 mydatum=mytime[2]+"."+String(Number(mytime[1])+1)+"."+mytime[0];
                 let myzeit;
                 let todayDay=formatDate(getDateObject((new Date().getTime())), "T.M.JJJJ");
                 log(mydatum)
                 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/," ")
               })
               //if (i<5){
               myCalArr.push({
                   "start":mydatum+" "+ myzeit,
                   "end":mydatum+" "+ add15MinutesToTime(myzeit),
                   "summary":gesucht[i].replace(/.*\[\'1\'\]\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/," "),
                   "description":"from IOB Script"
               })
               //log(todayDay+"   -   "+mydatum)
               if(todayDay===mydatum){
               myCalArrTomorrow.push({
                   "start":mydatum+" "+ myzeit,
                   "end":mydatum+" "+ add15MinutesToTime(myzeit),
                   "summary":gesucht[i].replace(/.*\[\'1\'\]\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/," "),
                   "description":"from IOB Script"
               })}
               //}
              }
              //log(JSON.stringify(myCalArr));
              log(JSON.stringify(myCalArrTomorrow));
              
              setState(myDP,JSON.stringify(theJson));
              //toCalender(myCalArr);
              toCalender(myCalArrTomorrow);
              }
              
              
              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);  
               
                  if (gesucht!="" && error==null) {resolve()} else {reject()}
              ;  }).on("error", function (e) {console.error(e);});
              
                
               });
              
              }
              
              schedule("1 5 * * *", async function () {
                 doit(); 
              });
              
              
              
              function toCalender(myArr){
              sendTo("webcal.0", "addEvents", {
                 calendar: "eislaufhalle",
                 events: myArr
               })
               }
              
               function add15MinutesToTime(time) {
               const [hours, minutes] = time.split(":").map(Number);
              
               let totalMinutes = hours * 60 + minutes;
               totalMinutes += 30;
              
               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}`;
              }
              
              
               
              
              

              nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

              1 Antwort Letzte Antwort
              0
              • A andrenaether

                @dirkhe oh danke dir :-)

                liv-in-skyL Offline
                liv-in-skyL Offline
                liv-in-sky
                schrieb am zuletzt editiert von
                #27

                @andrenaether

                wegen der doppeleinträge

                kopiere mal diesen block in beide scripte

                    theJson=[];
                    myCalArr=[];
                    myCalArrTomorrow=[];
                    countAlarm=0;
                

                an diese stelle im script:

                Image 103.png

                nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                1 Antwort Letzte Antwort
                0
                • A andrenaether

                  @dirkhe oh danke dir :-)

                  liv-in-skyL Offline
                  liv-in-skyL Offline
                  liv-in-sky
                  schrieb am zuletzt editiert von liv-in-sky
                  #28

                  @andrenaether

                  ich glaube, ich habe den fehler gefunden - tritt erst auf, wenn die 2te anlage auch daten enthält - sieht im google-cal wieder so aus:

                  Image 115.png

                  die telegram-sache hat ja eh funktioniert:

                  Image 116.png

                  • kopiere diesen teil bei dir ab zeile 14 (also dein setting darüber im script behalten) mal rein
                  • mache vorher eine kopie des jetzigen scriptes - zur sicherheit
                  • diese änderung gilt nur für den innenbereich (halle) - der andere bereich braucht uch noch andere änderungen !!!!!

                  Image 117.png

                  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;
                  }
                  

                  nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                  1 Antwort Letzte Antwort
                  0
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate
                  FAQ Cloud / IOT
                  HowTo: Node.js-Update
                  HowTo: Backup/Restore
                  Downloads
                  BLOG

                  429

                  Online

                  32.6k

                  Benutzer

                  82.1k

                  Themen

                  1.3m

                  Beiträge
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                  ioBroker Community 2014-2025
                  logo
                  • Anmelden

                  • Du hast noch kein Konto? Registrieren

                  • Anmelden oder registrieren, um zu suchen
                  • Erster Beitrag
                    Letzter Beitrag
                  0
                  • Home
                  • Aktuell
                  • Tags
                  • Ungelesen 0
                  • Kategorien
                  • Unreplied
                  • Beliebt
                  • GitHub
                  • Docu
                  • Hilfe