Müllkalender

Haussteuerung mittels mediola

Moderator: Co-Administratoren

evil-e
Beiträge: 13
Registriert: 01.10.2021, 15:17
System: CCU
Hat sich bedankt: 3 Mal

Re: Müllkalender

Beitrag von evil-e » 16.08.2022, 18:37

Guten Abend zusammen,

ich bekomme bei "events" den richtigen Wert zurück, bei "eventstomorrow" den Wert von heute und morgen - kann das an der Zeiteinstellung liegen? Kennt jemand das Thema?

Viele Grüße

Code: Alles auswählen

/Configuration
//Calendar to access (ID)
  var cal = '6gq34i954jle6ijfdqui3a62jc@group.calendar.google.com';

    function doGet(request) {
      var answer = "1.5";
      var d = 1 * request.parameters.d;
      if (isNaN(d)){
        d = 0;
      };
      if ( request.parameters.pwd == "test")
      {
        if (request.parameters.cmd == "events" )
        {
          answer = getEventsOfDay(d);
        }
        else if (request.parameters.cmd == "eventstomorrow" )
        {
          answer = getEventsOfDay(1);
        }
        else if ((request.parameters.cmd == "muell") && (request.parameters.color))
        {
          if (request.parameters.mode == "nextdate")
          {
            answer = FormatedEventDate(findNextMuell(request.parameters.color));
          }
          else if (request.parameters.mode == "indays")
          {
            answer = DaysUntilEvent(findNextMuell(request.parameters.color));
          }
          else
          {
            answer = DaysUntilEventNice(findNextMuell(request.parameters.color));
          }
        }
      }   
      return ContentService.createTextOutput(answer);
    }

    function getEventsInRange(aStart, aEnd)
    {
      var events = CalendarApp.getCalendarById(cal).getEvents(aStart, aEnd);
      var result = new Array;
      var eventStart = 0;
      var eventEnd = 0;
      var startTime = aStart.getTime();
      var endTime = aEnd.getTime();
      for (var i=0; i<events.length; i++)
      {
        //Zeiten testen (bug bei allDayEvents)
        //ich verzichte auf Anpassung von Start/Endzeit auf UTC, bei Abfage von ganzen Tagen sind die korrekten Events enthalten,
        //die zusätlich von angrenzenden Tagen enthaltenen Events werden hier aussortiert.
        if ((events[i].getEndTime().getTime() > startTime) && (events[i].getStartTime().getTime() < endTime))
        {
          result.push(events[i]); 
        }
      }
      return result;
    }

    function daysEvents( aDate )
    {
      var startOfDay = new Date(aDate);
      startOfDay.setHours(0);
      startOfDay.setMinutes(0);
      startOfDay.setSeconds(0);
      startOfDay.setMilliseconds(0); 
      var endOfDay = new Date(startOfDay.getTime() + 24 * 60 * 60 * 1000);
      return getEventsInRange(startOfDay, endOfDay);
    }

    function findNext( aPattern )
    {
      var patt=new RegExp(aPattern,'i');
      var startDate = new Date();
      var endDate = new Date(startDate.getTime() + (24*60*60*1000*30));
     
      var events = getEventsInRange(startDate, endDate);
      for (var i=0; i<events.length; i++)
      {
        //check event title
        if (patt.test(events[i].getTitle()))
        {
          return events[i];
        }
      }
    }

    

    function findNextGrey()
    {
      return findNext("Restmüll 2-wöchentlich");
    }

    function findNextYellow()
    {
      return findNext("Gelbe/r Sack/Tonne");
    }

    function findNextBrown()
    {
      return findNext("Biotonne");
    }

    function findNextBlue()
    {
      return findNext("Papiertonne");
    }

    //Events am Tag aDay ab heute (0 = heute, 1 = morgen...)
    function eventsOfDay(aDay)
    {
      var now = new Date();
      var day = new Date(now.getTime() + (1000*3600*24*aDay));
      var events = daysEvents( day );
      return events;
    }

    function findNextMuell( aColor )
    {
      if (aColor == 'grey')
      {
        return findNextGrey();
      }
      else if (aColor == 'blue')
      {
        return findNextBlue();
      }

      else if (aColor == 'yellow')
      {
        return findNextYellow();
      }

      else if (aColor == 'brown')
      {
        return findNextBrown();
      }
    }

   
   

    function getEventsOfDay( aDay )
    {
      var events = eventsOfDay(aDay);
     
      var result = "";
       
      for (var i=0; i<events.length; i++)
      {
        if ( result.length > 0)  {
          result = result+";";
        }
        result = result + events[i].getTitle().toLowerCase();
      }
     
      return result;
    }

    function FormatedEventDate( aEvent )
    {
      if (aEvent)
      {
        var timezone = CalendarApp.getCalendarById(cal).getTimeZone();
        var res = Utilities.formatDate(aEvent.getStartTime(), timezone, "dd.MM.yyyy");
        return res;
      }
    }

    function DaysUntilEvent( aEvent )
    {
      if (aEvent)
      {
        var startOfToday = new Date();
        startOfToday.setHours(0);
        startOfToday.setMinutes(0);
        startOfToday.setSeconds(0);
        startOfToday.setMilliseconds(0);   
        var differenceInMillis = aEvent.getStartTime() - startOfToday.getTime();
        return Math.floor( differenceInMillis /1000/60/60/24 );
      }
    }

    function DaysUntilEventNice( aEvent )
    {
      result = '';
      var days = 1 * DaysUntilEvent(aEvent);
      if (!isNaN(days))
      {
        if (days == 0)
        {
          result = 'Heute';
        }
        else if (days == 1)
        {
          result = 'Morgen';
        }
        else if (days == 2)
        {
          result = 'Übermorgen';
        }
        else
        {
          result = 'In ' + days + ' Tagen';
        }
      }
      else
      {
        result = 'nicht gefunden';
      }
      return result;
    }

Antworten

Zurück zu „mediola“