Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeitschaltuhr mit Google Kalender steuern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Ich hab die Logik mit einem if angepasst, sodass der Day Switch nur dann auf 1 ist wenn die Description "Rest" oder "Gelb" ist.
    Code:
    # Switch by day
    for today in googleswitch:
        eevent = event['Description']
        if eevent == 'Rest' or eevent == 'Gelb'
            sh.zentral.google_day_switch('1')
            sh.zentral.google_day_switch.text(event['Description'])
        else:
            sh.zentral.google_day_switch('0')
    Einen Kalendereintrag von 13-15Uhr mit Rest gesetzt. Trotzdem bleibt Google day Switch auf aus und somit auch kein notify. Wo liegt der Fehler?

    Kommentar


      #17
      wie wärs mit etwas Python Grundlagen ?

      if eevent == 'Rest' or eevent == 'Gelb'
      ^
      SyntaxError: invalid Syntax
      => : fehlt am Ende

      Dein Logfile wird Dir Deine Fehler schneller erzählen, als wir hier tippen können ;-)








      oder vermutlich variabler zu gestalten wenn es mehrere GA werden sollen


      Code:
      var = 100
      if var == 200:
           print "1 - Got a true expression value"
         print var
      elif var == 150:
         print "2 - Got a true expression value"
         print var
      elif var == 100:
         print "3 - Got a true expression value"
         print var
      else:
         print "4 - Got a false expression value"
         print var
      
      print "Good bye!"

      Kommentar


        #18
        Aller Anfang ist schwer.....
        Ich bekomme den Day Switch nicht auf ein. Ich denke es liegt an der If schleife, denn ohne bekomm ich den status.notify angezeigt, jedoch auch ohne den Eintrag aus der Description.
        Ich komme aber auch im Log nicht dahinter woran es liegt.
        Zuerst dachte ich es liegt am Kalendereintrag und hab auch im Feld Beschreibung Rest eingetragen. ohne Erfolg.
        Für einen Tip wäre ich echt dankbar.

        .py
        Code:
        # Switch by day
        for today in googleswitch:
            eevent = event['Description']
            muell = "Rest"
            if eevent == muell:
                logger.info("Googleswitch Day EIN")
                sh.zentral.google_day_switch('1')
                sh.zentral.google_day_switch.text(event['Description'])
            else:
                sh.zentral.google_day_switch('0')
                logger.info("Googleswitch Day AUS")
        log
        Code:
        2013-11-26 08:48:53,536 INFO     zeitschaltuhr 2013-11-26 -- zeitschaltuhr.py:<module>:19
        2013-11-26 08:48:53,558 INFO     zeitschaltuhr 2013-11-26 08:48:53.557404+01:00 -- zeitschaltuhr.py:<module>:22
        2013-11-26 08:48:53,555 DEBUG    env_stat     Item env.core.memory = 14118912 via Logic None None -- item.py:__update:363
        2013-11-26 08:48:53,596 DEBUG    env_stat     Item env.system.load = 0.2 via Logic None None -- item.py:__update:363
        2013-11-26 08:48:53,631 DEBUG    env_stat     Item env.location.moonlight = 45 via Logic None None -- item.py:__update:363
        2013-11-26 08:48:53,914 DEBUG    Scheduler    env_stat next time: 2013-11-26 08:53:53+01:00 -- scheduler.py:_next_time:289
        2013-11-26 08:48:53,952 DEBUG    Scheduler    zeitschaltuhr next time: 2013-11-26 08:49:23+01:00 -- scheduler.py:_next_time:289
        2013-11-26 08:48:54,152 INFO     zeitschaltuhr Date: 2013-11-26 -- zeitschaltuhr.py:<module>:27
        2013-11-26 08:48:54,170 INFO     zeitschaltuhr 2013-11-26 12:00:00+01:00 -- zeitschaltuhr.py:<module>:31
        2013-11-26 08:48:54,174 INFO     zeitschaltuhr 2013-11-26 13:00:00+01:00 -- zeitschaltuhr.py:<module>:32
        2013-11-26 08:48:54,178 INFO     zeitschaltuhr Googleswitch AUS -- zeitschaltuhr.py:<module>:40
        2013-11-26 08:48:54,190 INFO     zeitschaltuhr 2013-11-26 18:15:00+01:00 -- zeitschaltuhr.py:<module>:31
        2013-11-26 08:48:54,194 INFO     zeitschaltuhr 2013-11-26 18:25:00+01:00 -- zeitschaltuhr.py:<module>:32
        2013-11-26 08:48:54,210 INFO     zeitschaltuhr Googleswitch AUS -- zeitschaltuhr.py:<module>:40
        2013-11-26 08:48:54,214 INFO     zeitschaltuhr 2013-11-26 07:15:00+01:00 -- zeitschaltuhr.py:<module>:31
        2013-11-26 08:48:54,218 INFO     zeitschaltuhr 2013-11-26 07:25:00+01:00 -- zeitschaltuhr.py:<module>:32
        2013-11-26 08:48:54,230 INFO     zeitschaltuhr Googleswitch AUS -- zeitschaltuhr.py:<module>:38
        2013-11-26 08:48:54,233 INFO     zeitschaltuhr 0 -- zeitschaltuhr.py:<module>:47
        2013-11-26 08:48:54,240 INFO     zeitschaltuhr Googleswitch Day AUS -- zeitschaltuhr.py:<module>:59
        der Kalendereintrag:
        Angehängte Dateien

        Kommentar


          #19
          Zitat von fuxl66 Beitrag anzeigen
          Für einen Tip wäre ich echt dankbar.

          .py
          Code:
          # Switch by day
          for today in googleswitch:
              eevent = event['Description']
              muell = "Rest"
              [COLOR=red]logger.info(event)
              logger.info (eevent)
          [/COLOR]   if eevent == muell:
                  logger.info("Googleswitch Day EIN")
                  sh.zentral.google_day_switch('1')
                  sh.zentral.google_day_switch.text(event['Description'])
              else:
                  sh.zentral.google_day_switch('0')
                  logger.info("Googleswitch Day AUS")
          log
          [CODE]
          Hier der Tipp für Dich, nutze die Logger Info wie oben rot markiert für die Ausgabe Deiner Variablen im Logfile. Dann kannst Du sehen warum es nicht klappt.

          Deine IF Bedingung klappt bei mir und meinem Kalender einwandfrei ( wenn auch etwas umständlich geschrieben).

          Mit og. Ergänzungen solltest Du so etwas jetzt im Logfile stehen haben:

          Code:
          2013-11-26 10:13:09,638 INFO     zeitschaltuhr {'Location': '', 'Start': datetime.datetime(2013, 11, 26, 7, 30, tzinfo=tzfile('/usr/share/zoneinfo/Europe/Berlin')), 'End': datetime.datetime(2013, 11, 26, 10, 30, tzinfo=tzfile('/usr/share/zoneinfo/Europe/Berlin')), [COLOR=red]'Description': 'Rest'[/COLOR], 'Summary': ''} -- zeitschaltuhr.py:<module>:88
          2013-11-26 10:13:09,643 INFO     zeitschaltuhr [COLOR=red]Rest --[/COLOR] zeitschaltuhr.py:<module>:89
          2013-11-26 10:13:09,648 INFO     zeitschaltuhr [COLOR=red]Rest --[/COLOR] zeitschaltuhr.py:<module>:90
          2013-11-26 10:13:09,653 INFO     zeitschaltuhr Googleswitch [COLOR=red]Day EIN[/COLOR] -- zeitschaltuhr.py:<module>:92
          2013-11-26 10:13:09,659 DEBUG    zeitschaltuhr Item [COLOR=red]zentral.google_day_switch = True[/COLOR] via Logic None None -- item.py:__update:363
          2013-11-26 10:13:09,666 DEBUG    zeitschaltuhr Item [COLOR=red]zentral.google_day_switch.text = Rest[/COLOR] via Logic None None -- item.py:__update:363

          Kommentar


            #20
            Danke. Werd ich heute testen....
            Aber warum klappt es bei mir dann nicht? Ist mit description nun der name des kalendereintrages oder die beschreibung gemeint?
            Liegt es am kalendereintrag?

            Gesendet von meinem GT-I9505 mit Tapatalk 4

            Kommentar


              #21
              Meine Glaskugel ist defekt

              Aber in deinem Termin hast Du ja offenbar Terminname ( oben) und Beschreibung bereits mit "Rest" gefüllt" - du brauchst den Logger Eintrag vom Event wie beschriebenich kann nicht sehen, ob Du evt. eine Lerzeichen drin hast etc.

              Beschreibung = 'Description': 'Rest',
              Terminname = 'Summary': 'Rest',
              Viel Erfolg bei der Suche

              Kommentar


                #22
                Hallo Stephan, andere Nutzer des Codeschnipsels,

                ich habe mich mal an das lernen von python gemacht. Da mir der Kalender interessant erschien, habe ich den Code von Stephan genutzt und etwas verändert. Mir war es wichtig, dass ich items direkt im Kalender eintragen kann, ohne explizit nochmal sh.py oder eine Logik anzupacken. Hier jetzt die Lösung. Im Termin eintrat ist der Item Name in der Überschrift zu setzen. Wenn das Script den Atem Name unter dem sh Objekt findet, wird er geschaltet (ein wenn Zeit passt, aus wenn nicht). Die ganzen Loggings habe ich drin gelassen.

                Für die Experten: Was mich interessieren würde, ob das aus Sicherheitsgesichtspunkten einen gute Lösung ist, nicht dass Schadcode eingeschleust werden kann.

                Wenn das auf Anklang stößt, würde ich die Ausarbeitung in die Richtung weiter treiben, um etwas mehr Funktionen hinzubekommen. An der eigentlichen Kalenderfunktion möchte ich nichts machen (ich hoffe, dass es nach der Umstellung auf die andere API genauso geht). Feedback welcome.

                Code:
                #!/usr/bin/env python
                # * -----------------------------------------------------------------------------
                # *
                # *author      Stephan Schaade
                # *ergaenzungen Michael Wuertenberger 
                # *copyright   2013
                # *license     GPL <GNU.de>
                # * -----------------------------------------------------------------------------
                # Prerequisites:
                # 1. Use patched plugin ical to support Google Calendar ( V.0.9 patched)
                # 2. Define [zentral] [[googleswitch]] and [zentral] [[google_day_switch]]  in items
                # 3. Import private Google ICAL link from google.calendar
                # 4. Trigger logic 
                # Comments:
                # imported events need time correction even if timezone was given with time ( add 1hour as shown below) )  (possible bug in Ical )
                # left logger info in as comment for diagnostics
                
                #
                # das Objekt wird im Google Calendar ohne!!! führendes sh. eingetragen.
                # hat man also ein Objekt sh.calendar.schalter1, so muß im Text stehen calendar.schalter1
                
                # Hier die Auswertung des Objektnamens
                def set_value(obj, name, value):
                    start = obj
                    obj_seek = obj
                    
                    found = 0
                    for part in name.split("."):
                        try:
                            start = getattr(start, part)
                        except AttributeError:
                            found = 0
                        else:
                            found = 1
                            obj_seek = start           
                
                    if found:
                        obj_seek(value);
                        logger.info("Wert gesetzt !")
                    else:
                        logger.info("Variable nicht gefunden !")
                        
                today = sh.now().date()
                tomorrow = today + datetime.timedelta(days=1)
                now = sh.now()
                
                logger.info(today)
                logger.info(now)
                 
                # Switch by minute of day
                googleswitch = sh.ical('https://www.google.com/calendar/ical/......ics')
                
                for day in googleswitch:
                    logger.info("Date: {0}".format(day))
                    for event in googleswitch[day]:
                        estart = event['Start'] + datetime.timedelta(hours=+1)
                        eend = event['End'] + datetime.timedelta(hours=+1)
                
                        if now >= estart:
                            if now <= eend:
                                logger.info("Googleswitch EIN")
                                logger.info(event['Summary'])
                                set_value(sh,event['Summary'],1)
                            else: 
                                logger.info("Googleswitch AUS")
                                logger.info(event['Summary'])
                                set_value(sh,event['Summary'],0)
                        else:
                            logger.info("Googleswitch AUS")
                            logger.info(event['Summary'])
                            set_value(sh,event['Summary'],0)

                Viel Spaß damit

                Michel

                Kommentar


                  #23
                  Hallo zusammen,
                  irgenwie funktioniert es bei mir nicht.
                  Vielleciht hat ja jemand eine Idee und kann mir helfen.

                  Hier mal der Auszug aus der Logdatei

                  2014-01-26 18:30:22 WARNING zeitschaltuhr iCal: problem parsing https://www.google.com/calendar/ical......./basic.ics duplicate UID: .......@google.com
                  2014-01-26 18:30:22 ERROR zeitschaltuhr Logic: zeitschaltuhr, File: /usr/smarthome/lib/3rd/dateutil/rrule.py, Line: 316, Method: <listcomp>, Exception: unorderable types: str() > int()
                  Traceback (most recent call last):
                  File "/usr/smarthome/lib/scheduler.py", line 327, in _task
                  exec(obj.bytecode)
                  File "/usr/smarthome/logics/zeitschaltuhr.py", line 25, in <module>
                  googleswitch = sh.ical('https://www.google.com/calendar/ical/...googlemail.com/private-.../basic.ics')
                  File "/usr/smarthome/plugins/ical/__init__.py", line 73, in __call__
                  events = self._parse_ical(ical, ics)
                  File "/usr/smarthome/plugins/ical/__init__.py", line 139, in _parse_ical
                  event['RRULE'] = self._parse_rrule(event, tzinfo)
                  File "/usr/smarthome/plugins/ical/__init__.py", line 209, in _parse_rrule
                  return dateutil.rrule.rrule(freq, **args)
                  File "/usr/smarthome/lib/3rd/dateutil/rrule.py", line 316, in __init__
                  self._bymonthday = tuple([x for x in bymonthday if x > 0])
                  File "/usr/smarthome/lib/3rd/dateutil/rrule.py", line 316, in <listcomp>
                  self._bymonthday = tuple([x for x in bymonthday if x > 0])
                  TypeError: unorderable types: str() > int()

                  Kommentar


                    #24
                    Ich stolper über den duplicate UID Hinweis.
                    Lege mal einen eigenen (unter) Kalender an und trage nur einen Termin ein.
                    Gruss Stephan

                    Kommentar


                      #25
                      Habe einen neuen Kalender angelegt und jetzt funktioniert es.

                      Vielen Dank!

                      Kommentar


                        #26
                        PHP-Code:
                        2014-09-18 17:48:23 INFO     zeitschaltuhr 2014-09-18
                        2014
                        -09-18 17:48:23 INFO     zeitschaltuhr 2014-09-18 17:48:23.206426+02:00
                        2014
                        -09-18 17:48:23 ERROR    zeitschaltuhr LogiczeitschaltuhrFile: /usr/smarthome/logics/zeitschaltuhr.pyLine51Method: <module>, Exception'SmartHome' object has no attribute 'ical'
                        Traceback (most recent call last):
                          
                        File "/usr/smarthome/lib/scheduler.py"line 327in _task
                            exec
                        (obj.bytecode)
                          
                        File "/usr/smarthome/logics/zeitschaltuhr.py"line 51in <module>
                            
                        googleswitch sh.ical('https://www.google.com/calendar/ical/etejvtubkvfm8pf6dpov8bf0ng%40group.calendar.google.com/private-d391a1f71b2595f9198352b421f57c8e/basic.ics')
                        AttributeError'SmartHome' object has no attribute 'ical' 
                        was hat das zu bedeuten ?

                        in Zeie 51 steht mein Kalender
                        PHP-Code:
                        googleswitch sh.ical('https://www.google.com/calendar/ical/xxxgroup.calendar.google.com/private-xxx/basic.ics'

                        Kommentar


                          #27
                          Hallo,

                          Du hast das ical Plugin nicht eingebunden.

                          Bis bald

                          Marcus

                          Kommentar


                            #28
                            ValueError: invalid literal for int() with base 10: 'SU,'

                            ich habe termine mit wiederholungen eingetragen ....

                            Kommentar


                              #29
                              In dem Du Deinen Hintern zu der Dokumentation des iCal-Plugin bewegst, die liest und umsetzt.

                              Demnächst: Premiumsupport (inkl. Schuhe zubinden und kämmen)

                              Kommentar


                                #30
                                Zitat von mknx Beitrag anzeigen
                                In dem Du Deinen Hintern zu der Dokumentation des iCal-Plugin bewegst, die liest und umsetzt.

                                Demnächst: Premiumsupport (inkl. Schuhe zubinden und kämmen)
                                ohhhhhh, da werden Erinnerungen wach.
                                ich "übersetz" mal
                                iCal ? SmartHome.py 1.0 documentation

                                Kommentar

                                Lädt...
                                X