Ankündigung

Einklappen
Keine Ankündigung bisher.

Nach Umstellung auf SmarthomeNG - Fehler in Logik bei Scheduler.Change

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

    Nach Umstellung auf SmarthomeNG - Fehler in Logik bei Scheduler.Change

    Hallo Zusammen,

    erst mal ein dickes Kompliment und großes Lob an Diejenigen, welche in den letzten Monaten tolle Entwicklungs- und Dokumentationsarbeit geleistet haben!!!
    SmarthomeNG kann sich echt sehen lassen!!!

    Ich habe lange gezögert für die Umstellung von Smarthome auf SmarthomeNG, habe es aber jetzt in Angriff genommen. Viele kleinere Probleme konnte ich mit Hilfe des Forums (aktuell stiller Mitleser) und der Dokumentation lösen. Aktuell habe ich aber ein Problem, bei dem ich nicht weiter komme...

    Für die Rollladensteuerung habe ich eine Logik erstellt, die RollladenSteuerungAuf heißt und einen Cronjob hat. Hiefür habe ich in logic.yaml folgenden Eintrag vorgesehen:

    RollladenSteuerungAuf:
    visu_acl: true
    filename: rollladen_auf.py
    crontab: '07:30<sunrise'
    In einer weiteren Logik wird abgefragt, ob der heutige Tag ein Samstag, Sonntag oder Feiertag ist. In diesem Fall sollen die Rollläden erst später hochfahren...

    #!/usr/bin/env python
    #
    # Crontab kann den Sunrise nicht auf bestimmte Tage beschränken. Deshalb müssen wir hier dieses erledigen

    import datetime
    import istfeiertag

    logger.info("WochenendeSteuerung: Das File: setWochenende.py wurde gestartet")

    if sh.now().weekday() in [0,1,2,3,4]:
    logger.info("WochenendeSteuerung: Setze den RolladenAufstehen Sheduler auf Wochentag")
    sh.scheduler.change(name='logics.RollladenSteuerun gAuf', cron={'07:30<sunrise<08:30:None'})


    else:
    logger.info("WochenendeSteuerung: Setzt den RolladenAufstehen Sheduler auf Wochenende - 08:30")
    sh.scheduler.change(name='logics.RollladenSteuerun gAuf', cron={'30 8 * 5,6:None'})


    if istfeiertag.IstFeiertag(sh.now().date(), True):
    logger.info("WochenendeSteuerung: Setze den RolladenAufstehen Sheduler auf FEIERTAG - 08:30")
    sh.scheduler.change(name='logics.RollladenSteuerun gAuf', cron={'30 8 * *:None'})


    else:
    logger.info("WochenendeSteuerung: heute ist kein Feiertag!")

    Diese Logik wird in der Nacht einmal gestartet. In der bisherigen Smarthome-Version lief die Logik ohne Fehler. Jetzt kommt der Fehler:

    2018-02-24 16:22:21 INFO logics.Wochenendesteuerung WochenendeSteuerung: Das File: setWochenende.py wurde gestartet
    2018-02-24 16:22:21 INFO logics.Wochenendesteuerung WochenendeSteuerung: Setzt den RolladenAufstehen Sheduler auf Wochenende - 08:30
    2018-02-24 16:22:21 ERROR logics.Wochenendesteuerung Error parsing crontab "30 8 * 5,6:None": invalid literal for int() with base 10: '6:None'
    2018-02-24 16:22:21 ERROR logics.Wochenendesteuerung Logic: logics.Wochenendesteuerung, File: /usr/local/smarthome/lib/scheduler.py, Line: 381, Method: _next_time, Exception: 'set' object is not subscriptable
    Traceback (most recent call last):
    File "/usr/local/smarthome/lib/scheduler.py", line 425, in _task
    exec(obj.bytecode)
    File "/usr/local/smarthome/logics/setWochenende.py", line 15, in <module>
    sh.scheduler.change(name='logics.RollladenSteuerun gAuf', cron={'30 8 * 5,6:None'})
    File "/usr/local/smarthome/lib/scheduler.py", line 351, in change
    self._next_time(name)
    File "/usr/local/smarthome/lib/scheduler.py", line 381, in _next_time
    value = job['cron'][entry]
    TypeError: 'set' object is not subscriptable
    Was ist hier falsch??? Ich seh' vermutlich den Wald vor lauter Bäumen nicht...

    Im Voraus besten Dank für die Unterstützung...

    Grüße vom Bodensee
    Uwe
    Zuletzt geändert von UBeiMa; 25.02.2018, 10:59.

    #2
    Ein Schuss ins Blaue:

    Code:
    'logics.RollladenSteuerun gAuf'
    Was sucht da das Leerzeichen?
    Viele Grüße
    Martin

    There is no cloud. It's only someone else's computer.

    Kommentar


      #3
      Im Quelltext steht dieses Leerzeichen nicht. Ist vermutlich beim Hineinkopieren entstanden. Habe das mit zwei verschiedenen Editoren überprüft. Leerzeichen existieren hier nicht.
      RollladenSteuerun gAuf
      ist im Quelltext definitiv RollladenSteuerungAuf.

      Quelltext im Eingangsbeitrag kann nicht korrigiert werden. Die Leerzeichen kommen immer wieder! :-(
      Zuletzt geändert von UBeiMa; 24.02.2018, 18:54.

      Kommentar


        #4
        vielleicht hilft meine variante der logik.. die geschweiften klammern vor den ' ' bei deinem cron=... irritieren mich etwas. kann mich aber auch täuschen...

        Code:
        import datetime
        
        _logicname_prefix = 'logics.'     # prefix for scheduler names
        
        sh.holidays.calculate(datetime.date.today().year, "BY")
        if sh.holidays.is_holiday(datetime.date.today()):
            sh.date.is_holiday(1)
        else:
            sh.date.is_holiday(0)
        
        sh.date.holiday_name(sh.holidays.get_holiday_name(datetime.date.today()))
        sh.date.day_name(sh.holidays.get_day_name(datetime.date.today()))
        
        if sh.now().weekday() in [0,1,2,3,4] and not sh.date.is_holiday():
            logger.info("Wochenende-/Feiertags-Steuerung: Setze den SunriseLogic Sheduler auf Wochentag")
            sh.scheduler.change(_logicname_prefix+'SunriseLogic', cron='06:00<sunrise-15m')
        else:
            logger.info("Wochenende-/Feiertags-Steuerung: Setze den SunriseLogic Sheduler auf Wochenenden / Feiertage")
            sh.scheduler.change(_logicname_prefix+'SunriseLogic', cron='06:30<sunrise-15m')
        
        if sh.date.is_holiday():
            logger.info("Feiertags-Steuerung: Setzte den AutomaticGateControlLogicDay Sheduler auf Feiertage")
            sh.scheduler.change(_logicname_prefix+'AutomaticGateControlLogicDay', active=False)
        else:
            sh.scheduler.change(_logicname_prefix+'AutomaticGateControlLogicDay', cron='0 6 * 0,1,2,3,4', active=True)
        
        sh.knx.cellar.utility_room.water_meter.consumption_since_midnight(0)
        Zuletzt geändert von psilo; 24.02.2018, 19:39.

        Kommentar


          #5
          Hallo psilo,

          die "{" sind noch von Zeiten der smarthome Logiken, also vor der Umstellung. Hat auch da alles funktioniert. Ich habe die geschweiften Klammern testweise rausgenommen, am Resultat hat sich nichts geändert. Die Fehlermeldung ist die Selbe

          ...21:31:54 ERROR logics.Wochenendesteuerung Error parsing crontab "30 8 * 5,6:None": invalid literal for int() with base 10: '6:None'

          Kommentar


            #6
            Was passiert denn, wenn Du statt "30 8 * 5,6:None" schreibst "30 8 * 5,6=None"?

            Kommentar


              #7
              oder generell testweise einen simpleren ausdruck.. bspw.wie bei mir

              Kommentar


                #8
                Hallo Zusammen,

                nach einer schlaflosen Nacht (Sturm sei dank) habe ich die ":None" einfach mal entfernt - und siehe da, die Logik läuft ohne Fehler...
                @psilo: Ich werde mir Dein Sourcecode mal näher ansehen und ausprobieren. - Danke.

                Kommentar

                Lädt...
                X