Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - ical plugin, ssl.py, The read operation timed out

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

    - √ - ical plugin, ssl.py, The read operation timed out

    Hallo zusammen,

    ich habe seit gut 6 Monaten ohne Probleme das ical plugin und eine
    Logik in Betrieb welche diverse Aktionen in Abhängigkeit von Kalendereinträgen steuert. (Rollo, "Müllampe", ...)

    /Plauder an
    Heute morgen hätten wir fast verschlafen weil sh.py fälschlicherweise
    davon ausging dass die erste Schulstunde unseres Sohnes ausfällt.
    /Plauder aus

    Wegen Fritzbox bin ich (allerdings schon länger) auf Develop, ansonsten habe ich in der letzten Zeit nichts an sh.py geschraubt. (Nein, gar nichts)

    ein Blick ins Log bringt das Folgende zu Tage:
    Code:
    2014-04-09 04:00:02 ERROR    00_kalender  Logic: 00_kalender, File: /usr/lib/python3.2/ssl.py, Line: 293, Method: read, Exception: The read operation timed out
    Traceback (most recent call last):
      File "/usr/smarthome/lib/scheduler.py", line 339, in _task
        exec(obj.bytecode)
      File "/usr/smarthome/logics/00_kalender.py", line 10, in <module>
        events = sh.ical('https://www.google.com/calendar/ical/hier-meine-mail/private-hier mein key/basic',delta=2)
      File "/usr/smarthome/plugins/ical/__init__.py", line 57, in __call__
        ical = self._sh.tools.fetch_url(ics, username=username, password=password)
      File "/usr/smarthome/lib/tools.py", line 78, in fetch_url
        resp = conn.getresponse()
      File "/usr/lib/python3.2/http/client.py", line 1052, in getresponse
        response.begin()
      File "/usr/lib/python3.2/http/client.py", line 346, in begin
        version, status, reason = self._read_status()
      File "/usr/lib/python3.2/http/client.py", line 308, in _read_status
        line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
      File "/usr/lib/python3.2/socket.py", line 287, in readinto
        return self._sock.recv_into(b)
      File "/usr/lib/python3.2/ssl.py", line 399, in recv_into
        return self.read(nbytes, buffer)
      File "/usr/lib/python3.2/ssl.py", line 293, in read
        v = self._sslobj.read(len, buffer)
    socket.timeout: The read operation timed ou
    die zugehörige Logik (vielleicht nicht schön / optimal, aber funktioniert seit Monaten):
    Code:
    #!/usr/bin/env python
    #
    #siehe https://knx-user-forum.de/smartvisu/30789-zeitschaltuhr-mit-google-kalender-steuern.html
    
    now = sh.now()
    today = sh.now().date()
    tomorrow = today + datetime.timedelta(days=1)
    
    
    events = sh.ical('https://www.google.com/calendar/ical/hier-meine-mail/private-hier mein key/basic',delta=2)
    
    #Schalter zurücksetzen
    sh.mjm.status.muell(0)
    sh.mjm.status.feiertag(0)
    sh.mjm.status.ferien(0)
    sh.mjm.status.erstestundefrei(0)
    
    for day in events:
        logger.info("Date: {0}".format(day))
        for event in events[day]:
            estart = event['Start'] + datetime.timedelta(hours=+1)
            eend = event['End'] + datetime.timedelta(hours=+1)
            logger.info(event['Summary'])
            logger.info(event['Start'])
            logger.info(event['End'])
            #Müllbenachrichtigung
            if 'Rest' in event['Summary'] or 'Bio' in event['Summary'] or 'Flach' in event['Summary'] or 'Rund' in event['Summary']:
                if now + datetime.timedelta(days=1) >= estart:
                    if now + datetime.timedelta(days=1) <= eend:
                        logger.info("Müllswitch EIN")
                        logger.info(event['Summary'])
                        logger.info(event['Description'])
                        logger.info(event['Location'])
                        logger.info(event['Start'])
                        logger.info(event['End'])
                        sh.mjm.status.muell(1)
            #Feriensteuerung
            if 'ferien' in event['Summary']:
                if now >= estart:
                    if now <= eend:
                        logger.info("Ferienswitch EIN")
                        logger.info(event['Summary'])
                        logger.info(event['Description'])
                        logger.info(event['Location'])
                        logger.info(event['Start'])
                        logger.info(event['End'])
                        logger.info(event['Summary'])
                        sh.mjm.status.ferien(1)
            #Feiertagssteuerung
            if 'Feiertag' in event['Description']:
                if now >= estart:
                    if now <= eend:
                        logger.info("Feiertagsswitch EIN")
                        logger.info(event['Summary'])
                        logger.info(event['Description'])
                        logger.info(event['Location'])
                        logger.info(event['Start'])
                        logger.info(event['End'])
                        sh.mjm.status.feiertag(1)
            #Stundenplansteuerung
            if event['Summary'] == 'erste Stunde fällt aus':
                if now >= estart:
                    if now <= eend:
                        logger.info("erste Stunde fällt aus: EIN")
                        logger.info(event['Summary'])
                        logger.info(event['Description'])
                        logger.info(event['Location'])
                        logger.info(event['Start'])
                        logger.info(event['End'])
                        sh.mjm.status.erstestundefrei(1)
    und die logic.conf
    Code:
    [00_kalender]
        filename = 00_kalender.py
        crontab = init | 00 04 * *
    Kann mir jemand helfen?

    Danke vorab & Grüße
    Sven

    #2
    Hi Sven,

    was passiert, wenn Du die URL im Browser eingibst? Klappt das dann?

    Wollte Google nicht die API totmachen?

    Bis bald

    Marcus

    Kommentar


      #3
      Hi Marcus,

      Beim Öffnen der URL im Browser wird die Datei Basic heruntergeladen (Download)

      (Habe natürlich darauf geachtet dass es keine Anmeldedaten von mir mehr aktiv sind)

      Grüße
      Sven

      Kommentar


        #4
        Nachtrag:
        Ich habe jetzt die privaten Links neu generiert.
        Ergebnis:
        Ging zweimal nicht einmal schon und dann wieder nicht. (getestet über CLI und rr in kurzen Abständen)

        ... seltsam.
        (Kann das ein Timing / TimeOut Problem sein? würde ja zur Fehlermeldung passen.)

        Grüße
        Sven

        Kommentar


          #5
          ... ich muss den Thread nochmal nach oben bringen, da ich jetzt eine gewisse
          Langzeit-Erfahrung habe.
          Ergebnis:
          an 2 von 7 Tagen funktioniert es die Abfrage, in den anderen 5 Fällen nicht.
          Es scheint also an äußeren Bedingungen (Netzperformance, Server Antwortzeit...) zu liegen.

          Fehler bleibt:
          Code:
          2014-04-19 04:00:02 ERROR    00_kalender  Logic: 00_kalender, File: /usr/lib/python3.2/ssl.py, Line: 293, Method: read, Exception: The read operation timed out
          Traceback (most recent call last):
            File "/usr/smarthome/lib/scheduler.py", line 339, in _task
              exec(obj.bytecode)
            File "/usr/smarthome/logics/00_kalender.py", line 10, in <module>
              events = sh.ical('https://www.google.com/calendar/ical/hier mein user/hier mein key/basic',delta=2)
            File "/usr/smarthome/plugins/ical/__init__.py", line 57, in __call__
              ical = self._sh.tools.fetch_url(ics, username=username, password=password)
            File "/usr/smarthome/lib/tools.py", line 78, in fetch_url
              resp = conn.getresponse()
            File "/usr/lib/python3.2/http/client.py", line 1052, in getresponse
              response.begin()
            File "/usr/lib/python3.2/http/client.py", line 346, in begin
              version, status, reason = self._read_status()
            File "/usr/lib/python3.2/http/client.py", line 308, in _read_status
              line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
            File "/usr/lib/python3.2/socket.py", line 287, in readinto
              return self._sock.recv_into(b)
            File "/usr/lib/python3.2/ssl.py", line 399, in recv_into
              return self.read(nbytes, buffer)
            File "/usr/lib/python3.2/ssl.py", line 293, in read
              v = self._sslobj.read(len, buffer)
          socket.timeout: The read operation timed out
          @Marcus:
          Hast Du eine Idee wie man die TimeOut Dauer nach oben setzt?

          Grüße
          Sven

          Kommentar


            #6
            Hi Sven,

            in develop habe ich das Plugin erweitert. Dort kann man timeout=X einen Wert in Sekunden für den Timeout eingeben.

            Bis bald

            Marcus

            Kommentar


              #7
              Hi Marcus,
              bist ein Schatz.
              Habe gerade gerade aktualisiert, und (nachdem ich begriffen habe das
              ich den Parameter nicht in der plugin.conf eintragen muss) mit 3 Sekunden
              angefangen zu probieren.
              Ergebnis:
              10 Aufrufe über CLI und alle fehlerlos.
              Aus meiner Sicht ist das Problem gelöst ==> Haken

              Vielen Dank und Grüße
              Sven

              Kommentar

              Lädt...
              X