Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Kalender von Website auslesen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Kalender von Website auslesen

    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      andrenaether @liv-in-sky last edited by

      @liv-in-sky Ohh wow ich habe mich inzwischen auch damit befasst aber habe es nicht hinbekommen... 😥
      Kannst du mir das zeigen, erklären .... bin da echt am verzweifeln .....
      aber mega das es Leute wie dich gibt die da eine Ahnung haben 🙂

      liv-in-sky 2 Replies Last reply Reply Quote 0
      • liv-in-sky
        liv-in-sky @andrenaether last edited by

        @andrenaether sagte in Kalender von Website auslesen:

        aber habe es nicht hinbekommen

        was genau - den webcal adapter ?

        A 1 Reply Last reply Reply Quote 0
        • A
          andrenaether @liv-in-sky last edited by

          @liv-in-sky Und wie du die daten aus der website geholt hast .... Ich habe noch keinen Richtigen Plan wie das alles umsetzen und zusammenbauen ... 😨

          liv-in-sky 1 Reply Last reply Reply Quote 0
          • liv-in-sky
            liv-in-sky @andrenaether last edited by

            @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 1 Reply Last reply Reply Quote 0
            • liv-in-sky
              liv-in-sky @andrenaether last edited by

              @andrenaether sagte in Kalender von Website auslesen:

              mega das es Leute wie dich gibt die da eine Ahnung haben

              bei diesen ganzen google anmelde-kram habe ich nicht wirklich eine ahnung 🙂 habe nach anleitung solange geklickt, bis es lief

              1 Reply Last reply Reply Quote 0
              • A
                andrenaether @liv-in-sky last edited by

                @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-sky A 2 Replies Last reply Reply Quote 0
                • liv-in-sky
                  liv-in-sky @andrenaether last edited by

                  @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

                  1 Reply Last reply Reply Quote 0
                  • A
                    andrenaether @andrenaether last edited by andrenaether

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

                    D 1 Reply Last reply Reply Quote 0
                    • D
                      dirkhe Developer @andrenaether last edited by

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

                      A 1 Reply Last reply Reply Quote 0
                      • A
                        andrenaether @dirkhe last edited by

                        @dirkhe oh danke dir 🙂

                        liv-in-sky 2 Replies Last reply Reply Quote 0
                        • liv-in-sky
                          liv-in-sky last edited by

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

                          1 Reply Last reply Reply Quote 0
                          • liv-in-sky
                            liv-in-sky @andrenaether last edited by

                            @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

                            1 Reply Last reply Reply Quote 0
                            • liv-in-sky
                              liv-in-sky @andrenaether last edited by liv-in-sky

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

                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post

                              Support us

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

                              804
                              Online

                              31.7k
                              Users

                              79.9k
                              Topics

                              1.3m
                              Posts

                              ical adapter kalender parser website auslesen
                              3
                              28
                              1287
                              Loading More Posts
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes
                              Reply
                              • Reply as topic
                              Log in to reply
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                              The ioBroker Community 2014-2023
                              logo