Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Anwesenheits Modus und Datentyp dict

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

    - √ - Anwesenheits Modus und Datentyp dict

    Hallo zusammen,

    ich möchte in der Logik den Anwesenheitsstatus im Haus verarbeiten. Dafür habe ich eine Item-Variable 'mode' definiert. Diese soll Werte wie "ANWESEND", "ANWESEND_GAESTE", "ABWESEND_KURZ", "ABWESEND_LANG", etc. annehmen können.
    Um die Werteliste zu definieren habe ich eine zweite Item-Variable 'modevals' definiert.

    z.B. möchte ich 'mode' dann wie folgt setzen:
    sh.globals.mode(sh.globals.modevals['ANWESEND'])

    Leider weiss ich nicht wie Items vom Typ dict gesetzt werden. Ich habe es wie folgt versucht, was aber zu einer Fehlermeldung führt:

    Code:
    [globals]
        [[modevals]]
              value = ('ANWESEND': 'ANWESEND', 'ABWESEND_KURZ': 'ABWESEND_KURZ', 'ABWESEND_LANG': 'ABWESEND_LANG')
              type = dict
            
        [[mode]]
            value = ANWESEND
            type = str

    Wie müssen dict-Werte gesetzt werden?

    Ist das Vorgehen überhuapt gut oder gibt es andere Möglichkeiten für die Umsetzung eines globalen Modus?


    Grüße,
    Michael
    Viele Grüße,
    Michael

    #2
    Hi Michael,

    mir ist nicht bekannt wie man ein dict value in einer config-Datei setzen kann.
    Der dict type ist eher für die Harten im Garten. Ich habe gerade mal nachgesehen, produktiv verwende ich den Type momentan nicht.

    Die Frage ist aber was Du genau erreichen möchtest?

    Ich würde die möglichen Modi entweder in einem Dict oder in einem Array definieren um eine Prüfung der Werte zu machen.

    D.h. die Logik würde z.B. so aussehen:

    Code:
    # meinelogik.py
    modea = ['ANWESEND', 'ABWESEND_KURZ', 'ABWESEND_LANG']
    
    if trigger['value'] in modea:
      logger.info('valid')
    else:
      logger.info('not valid')
    Wenn es Dir darum geht einen Umsetzer zu bauen, dann mit dict.
    Code:
    # meinelogik.py
    moded = {'ANWESEND': 1, 'ABWESEND_KURZ': 2, 'ABWESEND_LANG': 3}
    
    if trigger['value'] in moded:
      logger.info('valid')
      sh.mymode(moded[trigger['value']])
    else:
      logger.info('not valid')
    Wenn Du ein Item irgendwo mit einem dict versehen hast, dann könntest Du es so nutzen: sh.mydict()['key']

    Klar?

    Bis bald

    Marcus

    Kommentar


      #3
      Hi Marcus,

      soweit klar!
      Wenn man wie im Beispiel 'moded' in meinelogik.py definiert, kann man dann aus
      anderen Logik-py-Files darauf zugreifen?
      In anderen Worten: ich benötige 'moded' als globale Variable.

      Grüße,
      Michael
      Viele Grüße,
      Michael

      Kommentar


        #4
        Hi Michael,

        dann würde ich das momentan in einer Init Logik machen, die halt einmalig beim Starten aufgerufen wird.

        Code:
        # logics/init.py
        
        sh.globals.modevals({'ANWESEND': 1, 'ABWESEND_KURZ': 2, 'ABWESEND_LANG': 3})
        
        # Zugriff z.B. über
        sh.globals.modevals()['ANWESEND']
        Gelöst? Dann bitte Haken.

        Bis bald

        Marcus

        Kommentar


          #5
          Hi Marcus,

          danke für die Rückmeldung. So wird es funktionieren, ich werde es morgen ausprobieren.

          Grüße,
          Michael
          Viele Grüße,
          Michael

          Kommentar

          Lädt...
          X