Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugin per GA anstossen

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

    Plugin per GA anstossen

    Guten Tag, ich komme einfach auf keine Lösung und habe mir bereits einen Wolf gesucht.
    Habe ein kleines Plugin geschrieben, welches mir Feiertage schaltet. Damit kann ich Heizung, Läden und auch Wecker dann an freien Tagen, wie dem 26.12. anders schalten.
    Das Plugin an sich funktioniert ganz gut, aber ich muss es ja täglich anstossen, um eben einen Tag weiter zu kommen.
    Das wollte ich mit einem Cron-Job machen, aber ich komm einfach nicht drauf, wie ich das anstossen soll.
    Die Defintion ist folgendermassen:

    Code:
    class Feiertag():
    
        def __init__(self, smarthome,VoralarmZeit = 1, SAMSTAG_FEIERTAG='True', SAMSTAG_VORALARM='True', SONNTAG_FEIERTAG='True', SONNTAG_VORALARM='True', OWN_FT='', mailto=''):
    
            logger.info("Init Feiertag")
            self._sh = smarthome
            ##self._sh.scheduler.add('Feiertag',self.auswertung,cycle=5)
    
            self._VoralarmZeit = VoralarmZeit
            self._SAMSTAG_FEIERTAG= SAMSTAG_FEIERTAG
            self._SAMSTAG_VORALARM= SAMSTAG_VORALARM
            self._SONNTAG_FEIERTAG= SONNTAG_FEIERTAG
            self._SONNTAG_VORALARM= SONNTAG_VORALARM
            self._ARRAY_APPEND=OWN_FT
            self._MAILTO=mailto
    
    
        def run(self):
            self.alive = True
            # if you want to create child threads, do not make them daemon = True!
            # They will not shutdown properly. (It's a python bug)
            logger.info('FEIERTAG - run - start')
            self.auswertung()
    
        def stop(self):
            self.alive = False
    
        def parse_item(self, item):                 ##Definition beim einlesen der ITEMS
            if 'zentral.feiertag' in item.conf:
                logger.info("parse item: feiertag.list" + str(item))
                return self.update_item
            ##else:
            ##    return None
    
        #def parse_item(self, item):
        #    if 'my_parameter' in item.conf:
        #    value = item.conf['my_parameter']
        #    return self.update_item
        #else:
        #    return None        
    
        ##def parse_logic(self, logic):
            # # if 'start_run_list' in logic.conf:
                # # # self.function(logic['name'])
                # # logger.info('start-run in feiertag ausgelöst')
                # # pass
    
        def update_item(self, item, caller=None, source=None, dest=None):
                if 'zentral.feiertag' in item.conf:
                    value=item.conf['zentral.feiertag']
    #                if value == 1:
    #                    self.auswertung()
                    logger.info('FEIERTAG - update-item-Liste True geschaltet'+ str(item))
    jetzt sollte ja irgendwie "parse_logic oder parse_item ausgeslöst werden. Aber wie binde ich das ein, daß es funktioniert?
    Code:
        [[feiertag]]
            type=bool
            visu_acl=rw
            knx_dpt=1
            feiertag_update_item=zentral.feiertag
    so jedenfalls geht es nicht, zumindest kommt das nicht an. Kann mir einer sagen, von wo und wie der Aufruf aussehen muss?
    Danke Peter
    never fummel a running system...

    #2
    meine feiertags-logik stosse ich so an:

    [DateSpecifc]
    filename = date_specific.py
    crontab = 1 0 * *

    diese ruft dann mein plugin auf - das plugin ist eine durch mich angepasste version von dem code der hier mal kursierte, denn ich aber nicht ins git bringen möchte:

    Code:
    import datetime
    
    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()))
    Über die Items mache ich dann "Dinge", wie bspw. das Tor nicht um 6:00 öffnen wenn Sonntag ist.
    Zuletzt geändert von psilo; 20.12.2016, 16:55.

    Kommentar


      #3
      starte ich das Plugin dann nicht immer nochmal? Ich wollte ja das "geladene" Plugin anstossen.
      never fummel a running system...

      Kommentar


        #4
        TRex nein ich rufe nur eine Methode im Plugin auf.. Das zyklische Aufrufen steuert die Logik. Das Plugin reagiert nur "on demand"

        Hier vielleicht nochmal das komplette, ich verändere bspw die scheduler für andere logiken abh. vom feiertag:
        Code:
        import datetime
        
        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: Setzte den SunriseLogic Sheduler auf Wochentag")
            sh.scheduler.change('SunriseLogic', cron='06:00<sunrise-15m')
        else:
            logger.info("Wochenende-/Feiertags-Steuerung: Setzte den SunriseLogic Sheduler auf Wochenenden / Feiertage")
            sh.scheduler.change('SunriseLogic', cron='06:30<sunrise-15m')
        
        if sh.date.is_holiday():
            logger.info("Feiertags-Steuerung: Setzte den AutomaticGateControlLogicDay Sheduler auf Feiertage")
            sh.scheduler.change('AutomaticGateControlLogicDay', active=False)
        else:
            sh.scheduler.change('AutomaticGateControlLogicDay', cron='0 6 * 0,1,2,3,4', active=True)

        Kommentar

        Lädt...
        X