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 liv-in-sky

      @andrenaether sagte in Kalender von Website auslesen:

      Die Idee von mir ist halt zb. Am Sonntag oder Montag (Aktuelle Woche ) die Daten in den Kalender zu schreiben. ( Oder ist es sinnvoller die gesamten Daten einmal von januar bis Dezember zu schreiben und auf veränderungen Reagieren

      ne - jede woche einmal - ansonsten musst du immer zuerst im kalender nach den einträgen suchen . aber zuerst muss ich noch rausfinden, wie genau man in den g-cal shreibt

      https://forum.iobroker.net/post/1027448

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

        @andrenaether

        hi - um das mal erreichen zu können, mussst du dir den webcal adapter installieren und dich bei deinem google calender anmelden - das könntest du schon mal vorbereiten

        diese seite ist dafür sehr wichtig https://github.com/dirkhe/ioBroker.webcal/blob/master/doc/google.md

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

          @andrenaether

          das habe ich bis jetzt hinbekommen

          Image 019.png

          Image 020.png

          A 1 Reply Last reply Reply Quote 0
          • 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

                                    659
                                    Online

                                    31.9k
                                    Users

                                    80.1k
                                    Topics

                                    1.3m
                                    Posts

                                    ical adapter kalender parser website auslesen
                                    3
                                    28
                                    1351
                                    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