FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: oniT am 11 März 2015, 21:03:41

Titel: RegExp, Ausdruck kürzen
Beitrag von: oniT am 11 März 2015, 21:03:41
Hallo,

ich benötige wieder einmal Hilfe bzgl dem folgenden Ausdruck, da ich mich damit immer noch etwas schwer tue:


define filelog_solarlog_day FileLog ./log/filelog_solarlog_day-%d.log (solarlog_dailyyield|solarlog_monthlyyield|solarlog_totalpac|solarlog_totalyield|solarlog_yearlyyield|solarlog_yesterdayyield):(?!RAW)(.*)


Ist es möglich diesen Teil in Klammern zu verkürzen? Und wenn ja, wie sieht dieser dann aus?

Danke

Gruß,
Tino
Titel: Antw:RegExp ändern/anpassen
Beitrag von: nesges am 11 März 2015, 23:31:58
define filelog_solarlog_day FileLog ./log/filelog_solarlog_day-%d.log solarlog_((daily|monthly|total|yearly|yesterday)yield|totalpac):(?!RAW)(.*)

Meinst du sowas? Ich persönlich finde ja die lange Version übersichtlicher ;)
Titel: Antw:RegExp, Ausdruck kürzen
Beitrag von: oniT am 14 März 2015, 10:34:00
Hallo nesges,

Danke für die Antwort.

Ich stelle mir dies in etwa so vor:


define filelog_solarlog_day FileLog ./log/filelog_solarlog_day-%d.log solarlog_.*:(?!RAW)(.*)


define filelog_solarlog_day FileLog ./log/filelog_solarlog_day-%d.log (solarlog_.*):(?!RAW)(.*)


Nur funktioniert beides nicht. Es werden immer alle Werte geschrieben und nicht wie gewünscht der RAW Wert ignoriert. Gibts es dafür einen entsprechenden Ausdruck?

Danke,

Gruß
Tino

Titel: Antw:RegExp, Ausdruck kürzen
Beitrag von: nesges am 14 März 2015, 14:48:01
Ach das meintest du, war mir nicht aufgefallen :-) So funktioniert negative lookahead nicht. Der Teil in (?!) ist die Negativ-Bedingung für den Teil davor. Du hast hier keinen Teil davor, daher matcht der Ausdruck immer. Ein regulärer Ausdruck bräuchte an der Stelle noch ein ^ vorne dran, um den Anfang des Strings zu markieren:

/^(?!RAW)/

In Worten: "Matche auf den Anfang des Strings, aber nur, wenn er nicht von 'RAW' gefolgt wird." Ich hoffe dass das so auch in dem Konstrukt funktioniert, das hier als Eventbeschreibung dient. Ich bin nicht sicher, weil das zwei mit Doppelpunkt Verbundene Ausdrücke sind, die auf einen Gesamtstring matchen. Der Reading-Part ist dabei nicht unbedingt Anfang des Strings. Versuch mal:

solarlog_.*:^(?!RAW)

Falls das nicht funktioniert müsste man genauer schaun, wie die Eventbeschreibung evaluiert wird.
Titel: Antw:RegExp, Ausdruck kürzen
Beitrag von: oniT am 14 März 2015, 15:30:16
Hallo,

ach Fehler vom Amt  ;) ich dachte man kann aus der Definition des Logfiles das Auslesen. Das ist meine Schwäche zu wenige Infos zu liefern.

Also, es werden jeweils zwei Werte von Device welche mit sloarlog_ beginnen in ein Logfile geschrieben. Im Logfile sieht dies dann zum Beispiel so aus:


2015-03-14_14:54:17 solarlog_totalpac RAW: 0044
2015-03-14_14:54:17 solarlog_totalpac 68
2015-03-14_14:54:17 solarlog_dailyyield RAW: 02850000
2015-03-14_14:54:17 solarlog_dailyyield 0.645


Da der Wert mit RAW nicht benötigt wird, soll dieser auch nicht eingetragen werden. Nach der Definiton meines Eingangposts geht es. Allerdings ist halt ziemlich lang, da alle Devices welche mit solarlog_ beginnen aufgeführt werden. Von daher suche ich eine Möglichkeit dies entsprechend zu kürzen.

Ich habe den Ausdruck von Dir mit und ohne Doppelpunkt getestet. In beiden Fällen erfolgt kein Eintrag in das Logfile.

Danke,

Gruß
Tino
Titel: Antw:RegExp, Ausdruck kürzen
Beitrag von: oniT am 23 März 2015, 13:18:28
Hallo,

keiner einen Vorschlag?

Ich bin hier leider nicht der Experte und tue mich entsprechend schwer. Oder werden noch weitere Infos für eine Lösung benötigt?

Danke,

Gruß
Tino