Ankündigung

Einklappen

Serverwartung 21.2.



Am 21.2. im Laufe des späten Abends wird eine Serverwartung durchgeführt. Das Forum ist dadurch für gut zwei Stunden nicht erreichbar.
Es wird eine Wartungsseite geschaltet.

Mehr anzeigen
Weniger anzeigen

NUM zu STR konvertieren

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

    NUM zu STR konvertieren

    Hallo,

    ich möchte gerne verschiedene Staus-Meldungen über meinen Sonos-Lautsprecher ausgeben. Dazu ist es notwendig das der Item-Typ ein STR ist.
    Ist es möglich z.B. aus einem Item (NUM) (z.B. Außentemperatur) einen STR zu machen?

    Dann kann ich z.B. folgendes Realisieren:

    Code:
    sh.MySonos.Bad.play_tts(sh.general.message.test1() + sh.general.message.test2() + sh.general.message.test3)
    test1--> Guten Morgen
    test2 --> draußen sind es in Grad Celsius
    test3 --> Item Außentemperatur

    Gruß und danke Manuel

    #2
    Hi,
    normalerweise kann man das einfach so umwandeln...

    str(sh.general.message.test3) VG Jürgen

    Kommentar


      #3
      Zitat von manu241 Beitrag anzeigen
      Ist es möglich z.B. aus einem Item (NUM) (z.B. Außentemperatur) einen STR zu machen?
      Hallo Manuel,

      nutze das ziemlich häufig, um Visu-Strings 'vorzuformatieren'. Wie Jügen schon schreibt - grundsätzliche Schreibweise:
      Code:
      str(item())
      Richtig lustig wird es dann bei solchen Sachen hier (sh.ventilation.rs485._device_error ist ein num):
      Code:
      eval = str(eval("sh.ventilation.rs485._device_error.conf['e" + str(sh.ventilation.rs485._device_error()) + "']"))
      /tom

      Kommentar


        #4
        Hi Tom Bombadil ,

        nur aus Interesse: Warum machst Du das innere eval? So wie ich die Zeile verstehe, hast Du bei dem Item als Attribute "e<nummer> = Fehlertext" hinterlegt und willst die nun ausgeben, oder?

        Müsste dann nicht
        Code:
        eval = sh.ventilation.rs485._device_error.conf['e'+str(sh.ventilation.rs485._device_error())]
        reichen? Wie gesagt, nur aus Neugier, nur um dazu zu lernen.

        Gruß, Waldemar
        OpenKNX www.openknx.de

        Kommentar


          #5
          Super danke.

          Damit habt ihr mir echt geholfen.

          Kommentar


            #6
            Hallo Waldemar,

            Zitat von mumpf Beitrag anzeigen
            Warum machst Du das innere eval?
            das kann ich Dir nach 3 Jahren gar nicht mehr sagen - ich weiß nur noch, dass das zu meinen ersten Python-Gehversuchen gehörte, und ich es anders nicht zum Laufen gebracht habe. Ich wollte damals (in vor-relativer-Itemadressierungs-Zeiten) einen universellen Errorhandler für numerische Fehler schreiben, den man ggf. mit copy-paste auch unter andere Items kopieren kann:

            Code:
            [ventilation]
            
                [[rs485]]                         # Connectors from USB-RS485 adpator to the plugin values
            
                        [[[_device_error]]]       # Numerical error indicator
                            name = Aus der KWL ausgelesener Fehlercode
                            type = num
                            helios_var = device_error
                            visu_acl = r
                            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"
            
                [[alarms]]                          # Device errors, alarms, filter change warning
            
                    [[[current_error]]]
                        name = Aktueller Fehler
                        type = str
                        value = "'':'':'':''"
                        eval = str(eval("sh.ventilation.rs485._device_error.conf['e" + str(sh.ventilation.rs485._device_error()) + "']"))
                        eval_trigger = ventilation.rs485._device_error
            
                        [[[[code_]]]]
                            name = Code des aktuellen Fehlers
                            type = str
                            value = ""
                            eval = self.return_parent()().split(':')[0]
                            eval_trigger = ventilation.alarms.last_error
            
                        [[[[description]]]]
                            name = Bezeichnung des aktuellen Fehlers
                            type = str
                            value = ""
                            eval = self.return_parent()().split(':')[1]
                            eval_trigger = ventilation.alarms.last_error
            
                        [[[[cause]]]]
                            name = Ursache des aktuellen Fehlers
                            type = str
                            value = ""
                            eval = self.return_parent()().split(':')[2]
                            eval_trigger = ventilation.alarms.last_error
            
                        [[[[solution]]]]
                            name = Behebung des aktuellen Fehlers
                            type = str
                            value = ""
                            eval = self.return_parent()().split(':')[3]
                            eval_trigger = ventilation.alarms.last_error
            Die Ausgabe erfolgt in der Visu über ein Icon, sobald ein device_error != 0 anliegt. Beim Drauftippen/Anklicken erscheint dann ein Popup mit der Fehlerbeschreibung.

            Jetzt, wo die relative Itemadressierung möglich ist, kann man da sicher noch einiges einfacher und eleganter schreiben ...

            /tom
            Zuletzt geändert von Tom Bombadil; 03.11.2017, 10:21. Grund: Copy/Paste-Fehler beseitigt

            Kommentar


              #7
              Man kann auch die str.format-Syntax nehmen:

              Code:
              test = “ich bin ein INT: {blubb}“.format(blubb=10)
              Gruss,
              Stefan
              Sonos

              Kommentar

              Lädt...
              X