Ankündigung

Einklappen

Aufruf

Bitte helft bei unserer Spendenaktion: Spendenaktion Helmut Lintschinger
Mehr anzeigen
Weniger anzeigen

Enumeration

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

    Enumeration

    Hallo zusammen,

    von meiner Heizung bekomme ich einen Status als Zahl codiert gesendet. Diesen scheibe ich in ein Item (e.g. heizung_status_num). Diesen würde ich jetzt gerne in einen Verständlichen String konvertieren und dafür ein zweites Item verwenden (e.g. heizung_status_string). Gibt es hierzu eine Funktion in smarthomeNG. Mir ist klar das man es als einfache Logik lösen könnte, aber vielleicht komme ich ja schon nur mit den eigenschaften der Items aus.

    z.b:
    num = 0 --> string="Ausgeschaltet"
    num = 1 --> string="Heizung startet"
    num = 2 --> string="Heizung läuft"
    ...

    Besten Dank

    Johannes

    #2
    Code:
    heizung_status_string:
        type: str
        eval: ['Ausgeschaltet','Heizung startet','Heizung läuft'][value]
        eval_trigger: heizung_status_num

    Kommentar


      #3
      Wobei zu ergänzen wäre, dass das keine SmartHomeNG Funktion ist, sondern Python Code
      Viele Grüße
      Martin

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

      Kommentar


        #4
        Danke!! Funktioniert wunderbar!

        Kommentar


          #5
          Hallo,
          in diesem Zusammenhang habe ich auch eine Frage.

          Über eine Logik selektiere ich den Sollzustand aus einer Auswahl von 5 Zuständen und schreibe dieses in ein Item. Basierend auf diesem Sollzustand sollen dann 4 weitere Items gesetzt werden gesetzt werden. Es gibt eine feste Zuordnung zwischen dem jeweiligen Sollzustand und den Werten der 4 Folgeitems.

          Item_Sollzustand: 1
          Folgeitem_A: 0
          Folgeitem_B: 0
          ​Folgeitem_C: 0
          ​Folgeitem_D: 0

          Item_Sollzustand: 2
          Folgeitem_A: 1
          Folgeitem_B: 0
          ​Folgeitem_C: 0
          Folgeitem_D: 0

          Item_Sollzustand: 3
          Folgeitem_A: 0
          Folgeitem_B: 1
          ​​​​​Folgeitem_C: 0
          ​​​​​Folgeitem_D: 0

          Item_Sollzustand: 4
          Folgeitem_A: 0
          Folgeitem_B: 0
          ​Folgeitem_C: 1
          ​Folgeitem_D: 0

          Item_Sollzustand: 5
          Folgeitem_A: 0
          Folgeitem_B: 0
          ​Folgeitem_C: 0
          ​Folgeitem_D: 1

          Wie kann man das am besten lösen?
          Mit on_change? oder kann ein Hilfsitem mit einer Liste verwendet werden?

          ​​​​​​​Danke Euch.

          Kommentar


            #6
            Ich denke, dass sich da Szenen anbieten.

            Kommentar


              #7
              Hi,

              erstmal stimme ich smai zu, Szenen können das lösen bzw. sind dafür gedacht. Klassisch würde man so was schreiben:
              Code:
              Sollzustand:
                  type: num
                  FolgeA:
                      type: bool
                      eval: (sh...() == 2)
              ​​​​​​​        eval_trigger: ..
                  FolgeB:
                      type: bool
                      eval: (sh...() == 3)
              ​​​​​​​        eval_trigger: ..
                  FolgeC:
                      type: bool
                      eval: (sh...() == 4)
              ​​​​​​​        eval_trigger: ..
                  FolgeD:
                      type: bool
                      eval: (sh...() == 5)
              ​​​​​​​        eval_trigger: ..
              Gruß, Waldemar
              ​​​​​​​

              Kommentar


                #8
                smai mumpf

                Danke für Eure Tipps. Klappt super!

                Eine Frage noch, denn im Log kommt noch ein Fehler:

                Meine Items:


                Code:
                    vorlaufbeeinflussung:
                        name: Beeinflussung des Vorlaufes der Heizung mittels Widerstandszuschaltung; 1 = Automatik (Logik), 0 = Handbetrieb
                        type: bool
                        visu_acl: rw
                        enforce_updates: yes
                        cache: yes
                        
                        vorlaufbeeinflussung_manuell:
                            name: Handbetrieb der Vorlaufbeeinflussung
                            type: num
                            cache: yes
                    
                        vorlaufbeeinflussung_logikoutput:
                            name: Berechnung der Vorlaufbeeinflussung mit Logik basierend auf dem maximalen Fußpunkt
                            type: num
                            cache: yes
                
                        vorlaufbeeinflussung_zum_aktor:
                            name: Stellgröße, die zum Aktor übermittelt wird
                            type: num
                            visu_acl: ro
                            cache: yes
                            eval: int(sh.heizung.vorlaufbeeinflussung.vorlaufbeeinflussung_logikoutput() if sh.heizung.vorlaufbeeinflussung()==1 else sh.heizung.vorlaufbeeinflussung.vorlaufbeeinflussung_manuell())
                            eval_trigger:
                              - heizung.vorlaufbeeinflussung
                              - heizung.vorlaufbeeinflussung.vorlaufbeeinflussung_logikoutput
                              - heizung.vorlaufbeeinflussung.vorlaufbeeinflussung_manuell
                
                        vorlaufbeeinflussung_str:
                            name: Beeinflussung des Vorlaufes der Heizung mittels Widerstandszuschaltung
                            type: str
                            eval: (['Tag_max','Tag_Med','Tag_min', 'Nacht', 'Frostschutz'][value])
                            eval_trigger: ..vorlaufbeeinflussung_zum_aktor
                            cache: yes
                Und die Fehlermeldung:
                Code:
                WARNING  heizung.vorlaufbeeinflussung.vorlaufbeeinflussung_str Item heizung.vorlaufbeeinflussung.vorlaufbeeinflussung_str: problem evaluating (['Tag_max','Tag_Med','Tag_min', 'Nacht', 'Frostschutz'][value]): list indices must be integers or slices, not str
                Wie geht es besser?
                Zuletzt geändert von Sisamiwe; 19.12.2018, 16:56. Grund: Fehlermeldung

                Kommentar


                  #9
                  Probier ein (['Tag_max','Tag_Med','Tag_min', 'Nacht', 'Frostschutz'][int(value)])
                  Wichtig ist, dass vorlaufbeeinflussung_str vom anderen Item eine Zahl zugewiesen bekommt. Das scheint momentan aber nicht der Fall zu sein. Beim vorlaufbeeinflussung_zum_aktor müsste noch ein Update vom str-Item inkludiert sein: https://smarthomeng.de/user/konfigur...on_update.html

                  Kommentar

                  Lädt...
                  X