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

Eval bei STR (unexpected EOF while parsing)

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

    Eval bei STR (unexpected EOF while parsing)

    Hallo,

    ich möchte für das Sonos-Plugin eine Senderauswahl auf meiner Visu machen. Dafür wollte ich den Wert 1 für Sender 1 und Wert 2 für Sender 2 machen.
    Ich hatte gedacht, diese Lösung zu versuchen:

    Code:
        [[play_tunein]]
                # 'play_tunein' expects a radio station name
                # The name will be searched within TuneIn and the first match is played.
                # To make sure the correct radio station is played provide the full radio station showing in the Sonos app.
                type = str
                enforce_updates = True
                sonos_send = play_tunein
            [[[value]]]
                type = str
                enforce_updates = True
                visu_acl = rw
                value = ndr2
                eval = 'ndr2' if sh.Bad.play_tunein.value.value_set() == 1 else 'ffn' if sh.Bad.play_tunein.value.value_set() == 2
                eval_trigger = value_set
                [[[[value_set]]]]
                    type = num
                    enforce_updates = True
                    visu_acl = rw
                    value = 1
                    sqlite = yes
    Ich bekomme jedoch die Meldung:
    Code:
     
     WARNING  Bad.play_tunein.value Item Bad.play_tunein.value: problem evaluating 'ndr2' if sh.Bad.play_tunein.value.value_set() == 1 else 'ffn' if sh.Bad.play_tunein.value.value_set() == 2: unexpected EOF while parsing (<string>, line 1)
    Welche Lösung würdet ihr stattdessen wählen?

    Gruß und Danke Manuel

    #2
    Es fehlt ein abschliessendes else, also was soll geschehen, wenn value_set weder 1 noch 2 ist?
    Fals nichts geschehen soll, schreibst du hinter die eval-Zeile einfach noch else None
    Falls value_set nie einen anderen Wert haben kann, lässt du das zweite if einfach ganz weg.

    Noch ein Tipp: Das aktuelle item lässt sich mit self ansprechen, du könntest also den Wert einfacher per self.value_set() lesen.

    Und eine Info am Rande: afaik wird das eval auch beim setzen von value beim Init ausgeführt. Es spielt also keine Rolle, ob du value = ndr2 oder value = foo schreibst.

    Kommentar


      #3
      Falls du übrigens vor hast, diverse Sender einzurichten, würde ich folfendes eval versuchen (ich bin aber nicht ganz sicher, ob es funktioniert):
      eval = ['ndr2', 'ffn'][self.value_set() - 1]
      Damit kannst du sehr einfach weitere Sender einfügen.

      Kommentar

      Lädt...
      X