(Gelöst) Syntax Fehler bei Temperaturauslesung

Begonnen von is2late, 29 Januar 2021, 11:59:05

Vorheriges Thema - Nächstes Thema

is2late

Hallo zusammen,

ich lese die Temperaturen aus Lupusec-Sensoren via HTTPMod aus.
Regex:
(?s)(Innen)+.*?({WEB_MSG_TS_DEGREE})([^ }]*)

Klappt einwandfrei. Allerdings erscheint im Log folgender Warnhinweis:

2021.01.29 11:40:39 3: Temperaturen: set attr reading05Regex (?s)(Innen)+.*?({WEB_MSG_TS_DEGREE})([^ }]*) created warning: Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.32), passed through in regex; marked by <-- HERE in m/(?s)(Innen)+.*?({ <-- HERE WEB_MSG_TS_DEGREE})([^ }]*)/ at ./FHEM/98_HTTPMOD.pm line 650, <$fh> line 1592.


Lasse ich die linke geschweifte Klammer vor WEB  /alternativ diese UND die rechts geschweifte Klammer hinter DEGREE) weg, klappt die Auslesung nicht.
In HTTPMod lauten die Daten

"status": "{WEB_MSG_TS_DEGREE} 21.46 {WEB_MSG_RH_HUMIDITY} 39"},

Komischerweise klappt die  Auslesung der Feuchtigkeitsmessung OHNE geschweifte Klammer.
Die RegEx der Feuchtigkeitsmessung lautet:

(?s)(Innen)+.*?(WEB_MSG_RH_HUMIDITY)([^ }]*\d)

Hat jemand eine Idee?

LG INgo
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

Beta-User

...ist ein beliebetes Thema, das auch mit Suche nach "Unescaped left brace in regex is deprecated" häufig auftaucht...

Man muss einfach tun, was die Fehlermeldung sagt, nämlich die linke geschweifte Klammer in der Suche escapen. Das hier sollte funktionieren:
(?s)(Innen)+.*?(\{WEB_MSG_TS_DEGREE})([^ }]*)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

is2late

Genial, das wars! Jetzt habe ich auch verstanden, was escapen bedeutet ;-)

Herzlichen Dank, Beta-User!
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

Beta-User

...immer wieder gerne :) .

Vielleicht noch ein Hinweis: v.a., wenn man Syntaxhighlight nutzt (mit codemirror, z.B.), kann es sein, dass die Klammersetzung "komisch" (=unpaarig) aussieht. Bei zu durchsuchenden Ausgangstexten, von denen man weiß, dass das relativ statisch ist, kann man einfach auch "Zählen" und den Punkt für jede Klammer verwenden, dann sieht das zumindest schöner aus. Das findet z.B. in den Regexen bei mqtt2.template häufiger Anwendung...
Ist nur "blöd", wenn man die schließende Klammer auch als eindeutigen Kenner braucht (was hier der Fall zu sein scheint).
Eine weitere Option wäre übrigens [{], das funktioniert afaik auch ohne Log-Eintrag.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

is2late

Tipp hab ich gleich mit aufgenommen, vielen Dank!
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox