Ankündigung

Einklappen
Keine Ankündigung bisher.

Items: Liste bestehend aus num zerlegen

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

    Items: Liste bestehend aus num zerlegen

    Hallo,

    bei einer Anfrage wird dem entsprechendem Item eine Liste (type = list) zugewiesen. Diese Liste besteht aus 4 Werten. Nun möchte ich diese 4 Werte jeweils 4 einzelnen Elementen vom Typ num zuweisen.

    item1: liste 0.01 0.10 0.35 0.40
    soll werden zu
    item2: num 0.01
    item3: num 0.10
    item4: num 0.35
    item5: num 0.40

    Wo und wie macht man das am Besten?
    Geht das vielleicht mit eval im item2 oder besser mit Logik?

    Danke für Eure Ideen.

    #2
    Ich arbeite bei sowas meist nicht direkt mit Listen, sondern mit Strings (geht sicher auch anders eleganter, aber ich hab mich dran gewöhnt). Hier mal 2 Beispiele:

    Beispiel 1:
    Code:
    [airflow_per_mode]
        name = Volumenstrom je Lüftungsstufe 1..8 in m³/h
        type = str
    [COLOR=#FF0000]    value = "0 105 165 195 240 270 305 335 360"[/COLOR]
        visu_acl = r
    
    [airflow_current]
        name = Aktueller Luftdurchsatz der KWL in m³/h
        type = num
        visu_acl = r
    [COLOR=#FF0000]    eval = sh.airflow_per_mode().split()[int(sh.rs485._fanspeed())][/COLOR]
        eval_trigger = rs485._fanspeed        # liefert Stufe 1...8
    Beispiel 2 - Fehlercodes aus einer Anlage auslesen und Code/Beschreibung/Ursache/Behebungsmöglichkeit in mehrere Variablen schreiben:
    Code:
    [ventilation]
    
        [[rs485]]
    
            [[[_device_error]]]
                name = Aus der KWL ausgelesener Fehlercode
                type = num
                helios_var = device_error
                visu_acl = r
    [COLOR=#FF0000]            e0  = "0:Kein Fehler:Kein Fehlertext:Keine Fehlerbehebung" # Format = ErrNo:Name:Description:Countermeasures
                e1  = "1:?:?:?"
                e2  = "2:?:?:?"
                e3  = "3:?:?:?"
                e4  = "4:?:?:?"
                e5  = "5:Zuluftsensor  defekt:Fühler lose, Kurzschluss <br/>oder Temperatur >90°C gemessen:Gerätestecker ziehen (ausschalten), kurz warten und wieder einstecken"
                e6  = "6:CO2-Alarm:CO2-Wert >5.000 ppm seit mehr als 3 Minuten:Ursache ermitteln oder ggf. Sensor überprüfen lassen."
                e7  = "7:Außenluftsensor defekt:Fühler lose, Kurzschluss oder Temperatur >90°C gemessen:Gerätestecker ziehen (ausschalten), kurz warten und wieder einstecken"
                e8  = "8:Abluftsensor defekt:Fühler lose, Kurzschluss oder Temperatur >90°C gemessen:Gerätestecker ziehen (ausschalten), kurz warten und wieder einstecken"
                e9  = "9:Frostwarnung:Außenluft <0°C und Zuluft <8°C - Frostgefahr am Wärmetauscher:Der Alarm verschwindet automatisch bei normalisierten Temperaturen"
                e10 = "10:Fortluftsensor defekt:Fühler lose, Kurzschluss oder Temperatur >90°C gemessen:Gerätestecker ziehen (ausschalten), kurz warten und wieder einstecken"[/COLOR]
    
        [[alarms]]             # Device errors, alarms, filter change
        # ============================================================================================ #
    
            [[[last_error]]]
                name = Aktueller Fehler
                type = str
                value = "'':'':'':''"
    [COLOR=#FF0000]            eval = str(eval("sh.ventilation.rs485._device_error.conf['e" + str(sh.ventilation.rs485._device_error()) + "']"))[/COLOR]
                eval_trigger = ventilation.rs485._device_error
    
                [[[[error_code]]]]
                    name = Code des aktuellen Fehlers
                    type = str
                    name = Bezeichnung des aktuellen Fehlers
                    type = str
                    value = ""
    [COLOR=#FF0000]                eval = self.return_parent()().split(':')[0][/COLOR]
                    eval_trigger = ventilation.alarms.last_error
    
                [[[[description]]]]
                    name = Bezeichnung des aktuellen Fehlers
                    type = str
                    value = ""
    [COLOR=#FF0000]                eval = self.return_parent()().split(':')[1][/COLOR]
                    eval_trigger = ventilation.alarms.last_error
    
                [[[[cause]]]]
                    name = Ursache des aktuellen Fehlers
                    type = str
                    value = ""
    [COLOR=#FF0000]                eval = self.return_parent()().split(':')[2][/COLOR]
                    eval_trigger = ventilation.alarms.last_error
    
                [[[[solution]]]]
                    name = Behebung des aktuellen Fehlers
                    type = str
                    value = ""
    [COLOR=#FF0000]                eval = self.return_parent()().split(':')[3][/COLOR]
                    eval_trigger = ventilation.alarms.last_error
    /tom
    Zuletzt geändert von Tom Bombadil; 09.01.2017, 12:53.

    Kommentar


      #3
      Sowas in der Art könnte klappen (ungetestet):

      Code:
      [item1]
          type = list
          # Werte [ 0.01, 0.10, 0.35, 0.40]
      
      [item2]
          type = num
          eval_trigger = item1
          eval = sh.item1()[0]
      [item3]
          type = num
          eval_trigger = item1
          eval = sh.item1()[1]
      [item4]
          type = num
          eval_trigger = item1
          eval = sh.item1()[3]
      [item5]
          type = num
          eval_trigger = item1
          eval = sh.item1()[4]

      Kommentar


        #4
        @bmx: Das funktioniert! Super, danke!
        Was bedeutet der Code eval = sh.item1()[0] genau? Nimm den ersten Eintrag der Liste?

        Kommentar


          #5
          sh.item1() gibt den Wert des Items zurück und davon [0] liefert den ersten Eintrag.

          Kommentar


            #6
            • richtig: sh.item1 ist sozusagen das Python Object item1;
            • sh.item1() wertet das aus, liefert also die Liste, die im Item1 gespeichert ist;
            • sh.item1()[0] greift auf das 1. Element der Liste zu (Python Listen beginnen mit Index 0).
            In dieser Form ist alles im eval-Attribut Python-Syntax..

            Kommentar


              #7
              Wenn Item1 angesprochen über sh.item() eine Liste ist, werden die Elemente der Liste durch sh.item()[x] einzeln angesprochen.
              Dabei ist 0 <= x < Anzahl Elemente der Liste.
              Viele Grüße
              Martin

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

              Kommentar

              Lädt...
              X