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.
    • 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

                            429
                            Online

                            31.8k
                            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