Ankündigung

Einklappen
Keine Ankündigung bisher.

Beim Mailversand: "Invalid Character" im log

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

    Beim Mailversand: "Invalid Character" im log

    Hallo zusammen,
    ich generiere mir aus dem Gartenhaus eine Mail, wenn dort die E-Heizkörper wegen Frostschutz anspringt.
    Die gemessene Temperatur vom RTR lasse ich mir als Email mit dem Status der Heizung "Ein/Aus" übertragen.

    Nun verwende ich dort in dem String das Zeichen " ° " als Grad Celsius. Das wird auch in der Mail sauber übertragen.
    Das sieht dann in der Mail so aus:
    Die Heizung wurde bei einer gemessenen Temperatur von 1.4 °C im Gartenhaus am Sonntag, 16.01.2022 um 10:40:31 Uhr ausgeschaltet.
    Jedoch führt das zu einem Log-Eintrag:
    Code:
    2022-01-16 10:36:03 WARNING lib.config Problem parsing 'Mail Heizung Gartenhaus' in file '/usr/local/smarthome/etc/logic.yaml': Invalid character. Valid characters are: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJK LMNOPQRSTUVWXYZ0123456789_@*
    Der Zeitstempel des Logs passt jetzt nicht zum Mailausschnitt von oben, den hatte ich aber schon vorher bei einem anderen Test herauskopiert.

    Der Logeintrag wird nicht generiert, wenn ich das " ° " vor dem "C" entferne.
    Darf das Zeichen per Definition da nicht verwendet werden, oder wird da der Logeintrag falsch generiert?
    Zuletzt geändert von bmx; 16.01.2022, 12:39.

    #2
    Hm. Auch Deine Bemühungen mit Details helfen den Einschalter meiner Leuchtkugel nicht zu finden:

    Wie sieht denn der relevante Teil Deiner logic.yaml aus?
    In etwa so?
    Code:
    Mail Heizung Gartenhaus:
        filename: mailme.py
    Das kann nicht klappen, weil da Leerzeichen im Logiknamen sind. Der Logikname wird in Python als Variablenname genutzt und darf daher nur das erlauben was Python dafür auch erlaubt.
    Das ist in der Dokumentation leider nur für Items so explizit geschrieben.

    Kommentar


      #3
      Dann will ich die Glaskugel mal beleuchten:
      Code:
      #!/usr/bin/env python3
      # mailgartenhaus.py
      import datetime
      now = datetime.datetime.today()
      Schaltzeit = now.strftime('%A, %d.%m.%Y um %H:%M:%S Uhr')
      
      if sh.Messwerte.Gartenhaus.RM_Heizung_EIN() == 1:
          sh.mail('Mailadresse@dahingehts.de', 'ACHTUNG! Heizung Gartenhaus EINGESCHALTET', ' Die Heizung wurde bei einer gemessenen Temperatur von '
              + str(sh.Messwerte.Gartenhaus.Temperatur()) + ' °C im Gartenhaus am ' + str(Schaltzeit) + ' eingeschaltet.' + '\n Eingestellte Parameter: \n Solltemperatur: '
              + str(sh.Messwerte.Gartenhaus.Solltemperatur()) + ' C')
      
      elif sh.Messwerte.Gartenhaus.RM_Heizung_EIN() == 0:
          sh.mail('Mailadresse@dahingehts.de', 'Heizung Gartenhaus wieder ausgeschaltet', ' Die Heizung wurde bei einer gemessenen Temperatur von '
              + str(sh.Messwerte.Gartenhaus.Temperatur()) + ' C im Gartenhaus am ' + str(Schaltzeit) + ' ausgeschaltet.' + '\n Eingestellte Parameter: \n Solltemperatur: '
              + str(sh.Messwerte.Gartenhaus.Solltemperatur()) + ' C')
      Sobald ich innerhalb des Strings dem Buchstaben "C" das Zeichen für 'Grad' in Form von dem " ° " voranstelle (wie beispielsweise in Zeile 9) , kommt die Fehlermeldung.
      Bei den anderen habe ich das °-Zeichen vor dem "C" wieder entfernt. Ist dieses Zeichen nicht vorhanden, kommt auch keine Fehlermeldung.

      Mit dem Dateinamen hat das gar nix zu tun, der lautet mailgartenhaus.py und enthält keine Leerzeichen.
      Zuletzt geändert von tsb2001; 16.01.2022, 13:05.

      Kommentar


        #4
        Zu den zulässigen Zeichen noch eine Anmerkung:
        In der config.py hab ich folgende Definition gefunden:
        Code:
        valid_item_chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'
        valid_attr_chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_@*'
        und dann später
        Code:
        valid_chars = valid_item_chars + valid_attr_chars
        würde da nicht folgendes reichen:
        Code:
        valid_chars = valid_attr_chars
        Viele Grüße
        Stefan

        Kommentar


          #5
          Das würde zwar reichen, wäre aber bei Änderungen an den beiden Definitionen weniger verständlich und fehleranfälliger als der aktuelle Code.
          Viele Grüße
          Martin

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

          Kommentar


            #6
            Es funktioniert ja auch alles.
            Es wird halt nur eine Warnung ausgeworfen, weil ich in dem zu übertragenden Text ein Zeichen verwende, was offensichtlich nicht verwendet werden darf...

            Kommentar

            Lädt...
            X