[Gelöst] Fehler DOIF / Statistics / DB Log (Unmatched ( in regex; marked by...)

Begonnen von Floriky, 18 Januar 2019, 08:09:58

Vorheriges Thema - Nächstes Thema

Floriky

Hallo Zusammen,

bin blutiger Anfänger, also bitte nicht böse sein, wenn das Problem vor dem PC sitzt.

Habe in meinem Log folgenden Eintrag:

Unmatched ( in regex; marked by <-- HERE in m/\[Annika:statAda_time_todayHourLast: Min: 45 Avg: 45 Max: 45 ( <-- HERE since(\]|:.+\]|,.+\])/ at ./FHEM/98_DOIF.pm line 2019.


In Line 2019 steht in der 98_DOIF.pm:

$found = ($itimer =~ /\[$device:$1(\]|:.+\]|,.+\])/);


Kann mir jemand weiterhelfen? Vielen Dank vorab!

Nachtrag: Jedes Mal danach stürzt FHEM ab und startet neu. Das ganze passiert ca. jede Stunde.

Frank_Huber


Floriky

Hallo Frank,

mach ich gerne. Woher weiß ich um welches DOIF es sich handelt?

Frank_Huber

Tja, das kannst nur Du wissen.

Dieses Gerät wird abgefragt: [Annika:statAda_time_todayHour

Im Zweifen postest ein list von allen die in Frage kommen.

Floriky

Ja, die Antwort hatte ich schon befürchtet...  ;)

Also auf das Reading "statAda_time_todayHourLast" im Device "Annika" bezieht sich gar kein DOIF. Das wird vom Modul Satistics.pm angelegt und was noch viel komischer ist: das Reading gibt es in dem Device noch nicht mal. Es kann sein, dass es das mal gab und ich es gelöscht hatte (hatte so meine Probleme beim Definieren).

Dann hab ich mal ein list TYPE=DOIF gemacht:

auf Device "Annika" beziehen sich die folgenden DOIFs:

DOIF1 (dieses hat heute morgen auch nicht funktioniert obwohl in der DB der entsprechende Eintrag zu finden war (das Problem steht auch noch auf der Liste):
Internals:
   DEF        ([([Annika:Arrival_Time_tomorrow] - [00:30]) - ([Annika:Arrival_Time_tomorrow] + [01:30])])

({fhem("setreading Annika Access-State 1");})

DOELSE ({fhem("setreading Annika Access-State 0");})
   MODEL      FHEM
   NAME       DOIF_change_access_statr
   NR         232
   NTFY_ORDER 50-DOIF_change_access_statr
   STATE      Next: 19.01.2019 06:30:00 - 19.01.2019 08:30:00
   TYPE       DOIF
   Helper:
     DBLOG:
       cmd:
         DBLogging:
           TIME       1547796600.00831
           VALUE      2
       cmd_event:
         DBLogging:
           TIME       1547796600.00831
           VALUE      timer_2
       cmd_nr:
         DBLogging:
           TIME       1547796600.00831
           VALUE      2
       state:
         DBLogging:
           TIME       1547796600.00831
           VALUE      cmd_2
   READINGS:
     2019-01-18 08:30:00   cmd             2
     2019-01-18 08:30:00   cmd_event       timer_2
     2019-01-18 08:30:00   cmd_nr          2
     2019-01-16 08:41:58   mode            enabled
     2019-01-18 08:30:00   state           cmd_2
     2019-01-18 08:30:00   timer_01_c01    19.01.2019 06:30:00
     2019-01-18 08:30:00   timer_02_c01    19.01.2019 08:30:00
   Regex:
   attr:
     cmdState:
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms)
   days:
   devices:
   do:
     0:
       0          {fhem("setreading Annika Access-State 1");}
     1:
       0          {fhem("setreading Annika Access-State 0");}
   helper:
     event      timer_2
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   
     timerevent timer_2
     timereventsState
     triggerDev
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: timer_2
       state: cmd_2
     timerevents:
       timer_2
     triggerEvents:
       timer_2
   internals:
   interval:
     0          -1
     1          0
   intervalfunc:
   itimer:
     all         Annika
   localtime:
     0          1547875800
     1          1547883000
   perlblock:
   readings:
   realtime:
     0          06:30:00
     1          08:30:00
   time:
     0          ([Annika:Arrival_Time_tomorrow]-[00:30])
     1          ([Annika:Arrival_Time_tomorrow]+[01:30])
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   triggertime:
     1547875800:
       localtime  1547875800
       hash:
     1547883000:
       localtime  1547883000
       hash:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   DbLogInclude .*
   alias      Änderung des Access-States
   do         always
   group      Zeitsteuerung
   icon       secur_locked
   room       92_Annika
   stateFormat Next: timer_01_c01 - timer_02_c01



DOIF 2 (hat zumindest gerstern noch funktioniert):



Internals:
   DEF        ([+00:15]) (
set Telegram_Annika message @#GRUPPENNAME NACHRICHTENTEXT
)
   MODEL      FHEM
   NAME       di_annika_reminder
   NR         228
   NTFY_ORDER 50-di_annika_reminder
   STATE      deactivated
   TYPE       DOIF
   READINGS:
     2019-01-18 08:00:00   mode            deactivated
     2019-01-18 08:00:00   state           deactivated
   Regex:
   condition:
   do:
     0:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   DbLogInclude .*
   alias      Erinnerung: Planung beginnen *15 min.
   disable    1
   do         always
   group      Reminder
   icon       time_timer
   room       92_Annika



DOIF 3:



Internals:
   DEF        ([+00:15]) (
set Telegram_Annika message @#GRUPPENNAME NACHRICHTENTEXT
)
   MODEL      FHEM
   NAME       di_annika_reminder_continue
   NR         230
   NTFY_ORDER 50-di_annika_reminder_continue
   STATE      deactivated
   TYPE       DOIF
   READINGS:
     2019-01-18 08:00:00   mode            deactivated
     2019-01-18 08:00:00   state           deactivated
   Regex:
   condition:
   do:
     0:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   DbLogInclude .*
   alias      Erinnerung: Planung beenden *15 min.
   disable    1
   do         always
   group      Reminder
   icon       time_timer
   room       92_Annika



Ich hoffe inständig, dass dir das weiter hilft...  :-\




Frank_Huber

Ich tippe auf das erste.

Was willst Du denn hiermit erreichen?
[([Annika:Arrival_Time_tomorrow] - [00:30]) - ([Annika:Arrival_Time_tomorrow] + [01:30])]

Weiter würde ich die Befehle so definieren:
(setreading Annika Access-State 1)
DOELSE (setreading Annika Access-State 0)


könntest Du noch ein list von Annika posten bitte?

Otto123

Moin,

keine Idee was falsch ist aber:
In solchen Fällen hilft mir manchmal  grep - Du kannst es so definieren dass es auch in FHEM in Kommandozeile aufrufbar ist.
defmod c_grep cmdalias grep .* AS {qx(grep -i \'$EVENT\' *.cfg FHEM/99*.pm)}

Gab es einen Grund für diese Konstrukt?
({fhem("setreading Annika Access-State 1");})
Funktionsgleich, kürzer und weniger aufwendig im System ist es so:
(setreading Annika Access-State 1)


DOIF 2 und 3 sind doch deaktiviert? Wie haben die funktioniert?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Floriky

Ich versuch das mal ohne die meine halbe Lebensgeschichte zu erzählen. Also Annika benötigt jeden Tag Zugang zum Haus. Da die Zeit variiert macht Annika das am Vorabend über einen Telegram-Dialog der die Uhrzeit im Device als Reading "Arrival_Time_tomorrow" setzt. Das funktioniert auch sehr gut. Das DOIF soll den Access-State eine halbe Stunde bis 1,5 Stunden nach der "Arrival_Time_tomorrow" auf 1 setzen. Da von diesem wieder andere Dinge (das ganze Konstrukt willst du gar nicht sehen - du würdest die Hände über dem Kopf zusammenschlagen (ist ein wenig ausgeufert)  ;D) abhängen.

Hier ist der List vom Device:

Internals:
   NAME       Annika
   NR         225
   STATE      Access Denied
   TYPE       dummy
   OLDREADINGS:
   READINGS:
     2019-01-18 08:30:00   Access-State    0
     2019-01-15 20:35:01   Answer_Wished_Arrival 06:45
     2019-01-16 20:06:12   Arrival_Time_tomorrow 07:00
     2019-01-16 20:06:12   Arrival_Time_yesterday 07:00
     2019-01-16 20:05:55   Planing_Time_Finish 21:05
     2019-01-16 20:05:55   Planing_Time_Start 20:05
     2019-01-16 20:06:12   Planning_Procedure_State 9
     2019-01-18 09:00:11   Wished_Arrival  06:45
     2019-01-17 11:52:24   ada_ende        1547707972
     2019-01-18 03:09:48   ada_start       1547705272.99184
     2019-01-18 09:00:11   ada_time_today  45
     2019-01-18 09:00:11   ada_time_today_diff_neg 0
     2019-01-18 09:00:11   ada_time_today_diff_pos 0
     2019-01-17 07:08:02   door_open_retry_state 0
     2019-01-18 08:27:26   presence        absent
     2019-01-16 20:06:13   randomauth      3
     2019-01-17 07:04:08   randomauth_afterada 57832
     2019-01-18 09:00:11   statAda_time_todayDay Min: 45 Avg: 45 Max: 45 (since: 2019-01-18_03:10:25 )
     2019-01-18 09:00:11   statAda_time_todayHour Min: 45 Avg: 45 Max: 45 (since: 2019-01-18_03:10:25 )
     2019-01-18 09:00:11   statAda_time_todayMonth Min: 45 Avg: 45 Max: 45 (since: 2019-01-18_03:10:25 )
     2019-01-18 09:00:11   statAda_time_todayMonthAvg 45
     2019-01-18 09:00:11   statAda_time_todayMonthMax 45
     2019-01-18 09:00:11   statAda_time_todayMonthMin 45
     2019-01-18 09:00:11   statAda_time_todayYear Min: 45 Avg: 45 Max: 45 (since: 2019-01-18_03:10:25 )
     2019-01-18 09:00:11   statAda_time_todayYearAvg 45
     2019-01-18 09:00:11   statAda_time_todayYearMax 45
     2019-01-18 09:00:11   statAda_time_todayYearMin 45
     2019-01-18 08:27:15   state           Access Denied
     2019-01-17 11:48:32   time_tracking_state 0
   helper:
     _98_statistics OUT_TankstellenStatistik
Attributes:
   DbLogExclude .*
   DbLogInclude .*
   event-on-change-reading .*
   group      02 Steuerung
   icon       status_locked
   room       92_Annika
   stateFormat state
   userReadings Wished_Arrival { ReadingsVal($name,'Answer_Wished_Arrival','none') =~ /([0-2][0-9]:[0-5][0-9])/; $1 }, ada_time_today { sprintf("%.0f",(ReadingsVal("Annika","ada_ende",0)-ReadingsVal("Annika","ada_start",0))/60) }, ada_time_today_diff_pos { (ReadingsVal("Annika","ada_time_today",0)-ReadingsVal("Annika","statAda_time_todayYearAvg",0)) }, ada_time_today_diff_neg { (ReadingsVal("Annika","statAda_time_todayYearAvg",0)-ReadingsVal("Annika","ada_time_today",0)) }
   webCmd     Access Granted:Access Denied


Kannst du mir sagen wie ich eine Zeitangabe im Format HH:MM (das ist die "Arrival_Time_tomorrow") verwenden kann um mein Reading "Access-State" auf 0 bzw. 1 zu setzen ohne ein DOIF (glaube das nämlich ein wenig "oversized", oder?)?

Floriky

Moin Otto,

wie meinst du "hilft"? Was macht das Kommando (Tut mir Leid, wenn die Frage dämlich ist - hab vor 3 Wochen das erste Mal das Wort FHEM gelesen...)

ZitatGab es einen Grund für diese Konstrukt?

Nein, war das Erste das funktioniert hatte beim Anlegen (Grund s.o.)

ZitatDOIF 2 und 3 sind doch deaktiviert? Wie haben die funktioniert?

Ja haben Sie und tun Sie immer noch. Die werden jeden Abend durch ein weiteres DOIF "enabled" und nach Erreichen eines gewissen Status wieder disabled. Das sind Erinnerungen die per Telegram rausgehen falls Annika die Planung noch nicht abgeschlossen bzw. begonnen hat.

Frank_Huber

dieses Reading scheint es in Annika nicht zu geben:
[Annika:statAda_time_todayHourLast: Min: 45 Avg: 45 Max: 45
wird aber wohl irgendwo abgefragt. zumindest nach der Log-Meldung.

das Konstrukt des ersten DOIF sollte funktionieren. Würde nur die Befehle bereinigen wie Otto und ich es vorgeschlagen haben.

Floriky

Zitat von: Frank_Huber am 18 Januar 2019, 09:31:06
dieses Reading scheint es in Annika nicht zu geben:
[Annika:statAda_time_todayHourLast: Min: 45 Avg: 45 Max: 45
wird aber wohl irgendwo abgefragt. zumindest nach der Log-Meldung.

das Konstrukt des ersten DOIF sollte funktionieren. Würde nur die Befehle bereinigen wie Otto und ich es vorgeschlagen haben.

Ja das ergibt Sinn. Würde ich gerne machen - verstehe nur leider nicht so ganz was ihr damit meint. Soll ich die fhem.cfg händisch editieren (dachte das ist als Newbie keine gute Idee). Kann ich das von Otto oben einfach in die Kommandozeile eingeben? Und löscht das dann gleich irgendwas? Laut Google dient grep nur der Suche. Will nichts kaputt machen...?

Frank_Huber

Die Änderungs im DOIF 1 machst einfach im DEF Feld.

Das von Otto vorgeschlagene in der System Shell. Details müsste Otto liefern.

Um das betroffene DOIF zu finden kannst auch eines machen:
- öffne die cfg
- suche darin nach "[Annika:statAda_time_todayHourLast"
- so findest das betroffene DOIF.
NICHTS ändern und NICHT speichern. nur suchen. :)

Floriky

Zitat von: Frank_Huber am 18 Januar 2019, 10:04:35
Die Änderungs im DOIF 1 machst einfach im DEF Feld.

Das von Otto vorgeschlagene in der System Shell. Details müsste Otto liefern.

Um das betroffene DOIF zu finden kannst auch eines machen:
- öffne die cfg
- suche darin nach "[Annika:statAda_time_todayHourLast"
- so findest das betroffene DOIF.
NICHTS ändern und NICHT speichern. nur suchen. :)

Also DOIF 1 ist geändert und funktioniert. - DANKE DIR!

Jetzt aber das Problem. Habe den Inhalt der fhem.cfg in einen Texteditor kopiert und leider nichts zu "Annika:statAda_time_todayHourLast" gefunden. Anbei die Screenshots.

Frank_Huber


Floriky

Zitat von: Frank_Huber am 18 Januar 2019, 10:42:19
dann kuck dir mal die 8 ohne "H" an.

Hab ich gemacht. Keines davon kommt in einem DOIF vor. Alle werden nur in Notifys verwendet. Aber nicht als Bedingung sondern nur in Telegram-NAchrichten. Kann ich noch wo anders suchen?