Ankündigung

Einklappen
Keine Ankündigung bisher.

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