Ankündigung

Einklappen
Keine Ankündigung bisher.

sh Object in Funktion nutzen

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

    sh Object in Funktion nutzen

    Hallo,

    ich habe folgendes Problem:

    innerhalb einer Logik habe ich eine Funktion(siehe unten), die eine Lüfter Drehzahl über eine sh-Objekt prüft. Ich habe gemerkt dass mir das sh Objekt in Funktionen nicht zu Verfügung steht. Aus diesem Grund übergebe ich es an die Funktion.

    Der Funktionsaufruf sieht wie folgt aus:

    if change_ventilation_status(floor['floor'], 19, sh):
    Als zweiter Parameter wird der gewünschte Wert übergeben.
    Der dritte Parameter ist das sh-Objekt.

    Die Funktion prüft dann ob die Lüfter bereits in der gewünschten Stufe laufen.
    Falls das nicht so ist, wird der neue Wert an das entsprechende Item gesendet.

    Code:
    # set's a new value for ventilation, but only if neccessary
    def change_ventilation_status(floor, value_to_set, sh):
    
       # get the current ventilation status for this floor
       current_value = eval('sh.' + floor + '_floor.ventilation_status' + '()' )
    
       logger.info('current value on ' + floor + ' floor: ' + str(current_value))
    
       if current_value == value_to_set:
          logger.info('No action neccessary on ' + floor + ' floor')
          return False
       else:
          if value_to_set == 19:
             text='stop'
          elif value_to_set == 45:
             text='heat recovery low'
          elif value_to_set == 130:
             text='heat recovery high'
          elif value_to_set == 253:
             text='open circuit high'
          elif value_to_set == 0:
             text='manual'
          else:
             text='NOT DEFINED'
    
          logger.info('setting new ventilation status on ' + floor + ' floor: ' + text)
          logger.info('sh.' + floor + '_floor.ventilation_control' + '(' + str(value_to_set) + ')')
          exec('sh.' + floor + '_floor.ventilation_control' + '(' + str(value_to_set) + ')')
    
          return True

    Die Logausgabe an dieser Stelle sieht wie folgt aus:

    Code:
    2014-11-24 17:21:31 INFO     ventilation_automation sh.second_floor.ventilation_control(45)
    Trotz allem wird der Wert nicht gesetzt.

    Kann es sein dass das Konstrukt mit der Funktion und der Übergabe des sh-Objekts nicht zulässig ist ?

    Danke vorab.
    sigpic
    Christian Huck
    Tel.: 089 / 122 80 995
    Email: mail@homeintelligence.de
    Web: www.homeintelligence.de

    #2
    Hallo,

    doch das ist zulässig und funktioniert.

    Bis bald

    Marcus

    Kommentar


      #3
      Hi Marcus,

      danke für die Info.

      Ich vermute das Problem liegt an der dynamischen Zusammensetzung des sh Items und der Ausführung mit exec().

      Ich tippe darauf dass eval() korrekt wäre.

      Teste das gerade und melde mich dann nochmal.

      Gruß
      Christian
      sigpic
      Christian Huck
      Tel.: 089 / 122 80 995
      Email: mail@homeintelligence.de
      Web: www.homeintelligence.de

      Kommentar


        #4
        Lösung war:

        Das Item
        Code:
         [[ventilation_control]]
          type = num
          visu_acl = rw
          knx_dpt = 5
          knx_send=12/2/0
        benötigt zusätzlich

        Code:
         knx_cache=12/2/0
        damit Änderungen die nicht über sh geschehen (z.B. Taster) gesehen werden. Einfach blind drauf senden ist wohl nicht.

        Die Flags des Analogaktoreingangs mussten entsprechend angepasst werden.
        sigpic
        Christian Huck
        Tel.: 089 / 122 80 995
        Email: mail@homeintelligence.de
        Web: www.homeintelligence.de

        Kommentar

        Lädt...
        X