FHEM Forum

FHEM => Automatisierung => Thema gestartet von: stefanru am 26 Februar 2020, 22:22:43

Titel: DBLogInclude bei DoIf Readings funktioniert nicht
Beitrag von: stefanru am 26 Februar 2020, 22:22:43
Hi,

ich habe ein DoIf mit readings.
Leider werden die Readings nicht in die DB gelogged.
Habe:
DbLogInclude sum,sum_hour

und habe set_Reading ("sum_hour",::round(get_Reading("sum",0)/3600,1),1);;
mit 1 für triggerd, fals das was damit zu tun hat.

Hier das list des DoIf:

Internals:
   DEF        subs {
  sub sum {
      set_Reading ("end",time());;
      set_Reading ("diff",get_Reading("end")-get_Reading("begin"));;
      set_Reading ("begin",0);;
      set_Reading ("sum_day",get_Reading("sum_day",0)+get_Reading("diff"));;
  }
}


{ if ([ESPEasy_Heizung_langerSensor:Temperature:diff] > 0 and get_Reading("begin",0) == 0) {
    set_Reading ("begin",time());;
  } elsif ([ESPEasy_Heizung_langerSensor:Temperature:diff] < 0 and get_Reading("begin",0) > 0) {
    sum();;
  }
}

{ [00:01];;
  if (get_Reading("begin",0) > 0) {
    sum();;
    set_Reading ("begin",time());;
  }
  set_Reading ("sum",get_Reading("sum",0) + get_Reading("sum_day",0),1);;
  set_Reading ("sum_day",0);;
  set_Reading ("sum_hour",::round(get_Reading("sum",0)/3600,1),1);;
}
   FUUID      5e52bfbc-f33f-0c45-9da4-1d69e7252ce1bd92
   MODEL      Perl
   NAME       di_kessel
   NOTIFYDEV  ESPEasy_Heizung_langerSensor,global
   NR         1440
   NTFY_ORDER 50-di_kessel
   STATE      15.1 h
   TYPE       DOIF
   VERSION    21224 2020-02-18 18:45:49
   READINGS:
     2020-02-26 22:21:25   Device          ESPEasy_Heizung_langerSensor
     2020-02-26 22:17:09   begin           0
     2020-02-26 22:21:25   block_01        executed
     2020-02-26 00:01:00   block_02        executed
     2020-02-26 22:17:09   diff            16
     2020-02-26 22:21:25   e_ESPEasy_Heizung_langerSensor_Temperature 63.00
     2020-02-26 22:17:09   end             1582751829
     2020-02-25 18:05:07   mode            enabled
     2020-02-23 19:09:00   state           initialized
     2020-02-26 00:01:00   sum             54430
     2020-02-26 22:17:09   sum_day         24076
     2020-02-26 00:01:00   sum_hour        15.1
     2020-02-26 22:19:09   timer_01_c02    27.02.2020 00:01:00
   Regex:
     accu:
       ESPEasy_Heizung_langerSensor:
         accu:
           Temperature ^ESPEasy_Heizung_langerSensor$:^Temperature:
     cond:
       ESPEasy_Heizung_langerSensor:
         0:
           Temperature ^ESPEasy_Heizung_langerSensor$:^Temperature:
         1:
   accu:
     ESPEasy_Heizung_langerSensor Temperature:
       dim        2
       value:
         63.25
         63.00
   condition:
     0           if (::ReadingValDoIf($hash,'ESPEasy_Heizung_langerSensor','Temperature','','diff') > 0 and get_Reading("begin",0) == 0) {
    set_Reading ("begin",time());;
  } elsif (::ReadingValDoIf($hash,'ESPEasy_Heizung_langerSensor','Temperature','','diff') < 0 and get_Reading("begin",0) > 0) {
    sum();;
  }

     1           ::DOIF_time_once($hash,0,$wday);;
  if (get_Reading("begin",0) > 0) {
    sum();;
    set_Reading ("begin",time());;
  }
  set_Reading ("sum",get_Reading("sum",0) + get_Reading("sum_day",0),1);;
  set_Reading ("sum_day",0);;
  set_Reading ("sum_hour",::round(get_Reading("sum",0)/3600,1),1);;

   days:
   helper:
     DEVFILTER  ^global$|^ESPEasy_Heizung_langerSensor$
     NOTIFYDEV  global|ESPEasy_Heizung_langerSensor
     event      Temperature: 63.00
     globalinit 1
     last_timer 1
     sleeptimer -1
     triggerDev ESPEasy_Heizung_langerSensor
     triggerEvents:
       Temperature: 63.00
     triggerEventsState:
       Temperature: 63.00
   internals:
   intervalfunc:
   localtime:
     0          1582758060
   perlblock:
     0         
     1         
   readings:
     all         ESPEasy_Heizung_langerSensor:Temperature
   realtime:
     0          00:01:00
   time:
     0          00:01:00
   timeCond:
     0          1
   timer:
     0          0
   timers:
     1           0
   trigger:
   triggertime:
     1582758060:
       localtime  1582758060
       hash:
   uiState:
   uiTable:
Attributes:
   DbLogInclude sum,sum_hour
   room       ESPEasy,UG
   stateFormat sum_hour h


Danke und Gruß,
Stefan
Titel: Antw:DBLogInclude bei DoIf Readings funktioniert nicht
Beitrag von: Damian am 28 Februar 2020, 12:44:52
Ich nehme an, dass DBLog ereignisgesteuert arbeitet. Wenn du im Event-Monitor die passenden Events zu sum und sum_hour siehst, dann ist irgendetwas in DBLog nicht richtig konfiguriert.

Titel: Antw:DBLogInclude bei DoIf Readings funktioniert nicht
Beitrag von: stefanru am 28 Februar 2020, 16:35:15
Hi,

die events sehen so aus:
2020-02-28 16:22:44 DOIF di_kessel sum_day: 16923

Das DBLogInclude sieht so aus:
DbLogInclude sum,sum_hour,sum_day

Das sollte doch alles so stimmen.

Ich arbeite bei allen Devices mit DbLogInclude und es geht überall aber bei dem DOIF scheinbar nicht?

Kann ich das noch weiter untersuchen? Verbose 5 am di_kessel device oder am DB device?

Gruß,
Stefan
Titel: Antw:DBLogInclude bei DoIf Readings funktioniert nicht
Beitrag von: Damian am 28 Februar 2020, 17:22:20
Zitat von: stefanru am 28 Februar 2020, 16:35:15
Hi,

die events sehen so aus:
2020-02-28 16:22:44 DOIF di_kessel sum_day: 16923

Das DBLogInclude sieht so aus:
DbLogInclude sum,sum_hour,sum_day

Das sollte doch alles so stimmen.

Ich arbeite bei allen Devices mit DbLogInclude und es geht überall aber bei dem DOIF scheinbar nicht?

Kann ich das noch weiter untersuchen? Verbose 5 am di_kessel device oder am DB device?

Gruß,
Stefan

speziell wird aber sum_day ohne Trigger geschrieben:

set_Reading ("sum_day",get_Reading("sum_day",0)+get_Reading("diff"));;

Mit Trigger wäre es:

set_Reading ("sum_day",get_Reading("sum_day",0)+get_Reading("diff"),1);;

Titel: Antw:DBLogInclude bei DoIf Readings funktioniert nicht
Beitrag von: stefanru am 28 Februar 2020, 18:47:29
Ja das habe ich zu Testzwecken geändert.
Sorry hatte ich nicht gesagt.

Habe sum_day auch mit trigger geschrieben     
set_Reading ("sum_day",get_Reading("sum_day",0)+get_Reading("diff"),1);;
und ins DbLogInclude aufgenommen um nicht immer einen Tag warten zu müssen.

Leider logged nichts in die DB.

Gruß,
Stefan
Titel: Antw:DBLogInclude bei DoIf Readings funktioniert nicht
Beitrag von: Damian am 28 Februar 2020, 20:47:10
Du kannst es mit konventionellem setreading versuchen:

subs {
  sub sum {
      set_Reading ("end",time());
      set_Reading ("diff",get_Reading("end")-get_Reading("begin"));
      set_Reading ("begin",0);
      my $sum_day= get_Reading("sum_day",0)+get_Reading("diff");
      #set_Reading ("sum_day",get_Reading("sum_day",0)+get_Reading("diff"),1);
      fhem "setreading $SELF sum_day ".$sum_day;
  }
}


evtl. sum_day nicht im DOIF, sondern in einem Dummy ablegen: statt $SELF einen vorhanden Dummy angeben, den du dann loggen kannst.
Titel: Antw:DBLogInclude bei DoIf Readings funktioniert nicht
Beitrag von: stefanru am 28 Februar 2020, 21:04:57
Hi Damian,

ja denke das wird gehen, mit dummy auf jeden fall.
Werd mal testen ob setreading schon ausreicht oder ein dummy nötig ist.

Denke aber das DbLog das auch können sollte. Sind doch einfach nur Readings, sollte doch nicht stören dass die an nem DoIf hängen.

Gruß,
Stefan


Titel: Antw:DBLogInclude bei DoIf Readings funktioniert nicht
Beitrag von: DS_Starter am 28 Februar 2020, 21:28:41
Hallo zusammen,

ZitatDenke aber das DbLog das auch können sollte....
Kann es auch  :)

Soviel ich gelesen habe, wird ja ein Event erzeugt. DbLog arbeitet Event gesteuert.

@Stefan, um mehr zu sehen setze dblog auf verbose 5 und dazu noch das Attr verbose4Devs auf den Namen deines DOIF Device sonst erschlägt dich die Masse der Informationen.
Dann siehst du etwa folgendes (Beispiel AutarkyQuote)

Zitat
2020.02.28 21:20:33.260 4: DbLog LogDB -> ################################################################
2020.02.28 21:20:33.260 4: DbLog LogDB -> ###              start of new Logcycle                       ###
2020.02.28 21:20:33.261 4: DbLog LogDB -> ################################################################
2020.02.28 21:20:33.261 4: DbLog LogDB -> number of events received: 2 for device: Dum.Energy
2020.02.28 21:20:33.261 4: DbLog LogDB -> check Device: Dum.Energy , Event: AutarkyQuote: 0.0
2020.02.28 21:20:33.266 5: DbLog LogDB -> parsed Event: Dum.Energy , Event: AutarkyQuote: 0.0
2020.02.28 21:20:33.267 5: DbLog LogDB -> DbLogExclude of "Dum.Energy": GridConsumption,GridFeedIn,AutarkyQuote,SelfConsumptionQuote
2020.02.28 21:20:33.267 5: DbLog LogDB -> DbLogInclude of "Dum.Energy": AutarkyQuote
2020.02.28 21:20:33.269 4: DbLog LogDB -> added event - Timestamp: 2020-02-28 21:20:33, Device: Dum.Energy, Type: DUMMY, Event: AutarkyQuote: 0.0, Reading: AutarkyQuote, Value: 0.0, Unit:
2020.02.28 21:20:33.269 4: DbLog LogDB -> check Device: Dum.Energy , Event: T: 805.5
2020.02.28 21:20:33.273 5: DbLog LogDB -> parsed Event: Dum.Energy , Event: T: 805.5
2020.02.28 21:20:33.273 5: DbLog LogDB -> DbLogExclude of "Dum.Energy": GridConsumption,GridFeedIn,AutarkyQuote,SelfConsumptionQuote
2020.02.28 21:20:33.274 5: DbLog LogDB -> DbLogInclude of "Dum.Energy": AutarkyQuote
2020.02.28 21:20:33.276 4: DbLog LogDB -> added event - Timestamp: 2020-02-28 21:20:33, Device: Dum.Energy, Type: DUMMY, Event: T: 805.5, Reading: T, Value: 805.5, Unit:

Dann muss man natürlich schauen was mit dem DOIF Event passiert ...

Grüße,
Heiko
Titel: Antw:DBLogInclude bei DoIf Readings funktioniert nicht
Beitrag von: stefanru am 28 Februar 2020, 21:58:37
Das  fhem "setreading $SELF sum_day ".$sum_day;" hat leider auch nichts gebracht.

Dann mache ich jetzt Verbose an und melde mich.
verbose 5
verbose4Devs di_kessel

Das erschlägt mich jetzt schon?
Scheint alles mit Verbose 5 gelogged zu werden nicht nur di_kessel?
Habe auch Verbose 4 probiert, da es bei Verbose4Devs so stand, logged aber immer noch alles.

Zumindest habe ich immer solche Sachen:
2020.02.28 22:07:11 4: DbLog logdb -> ################################################################
2020.02.28 22:07:11 4: DbLog logdb -> ###                  new get data for SVG                    ###
2020.02.28 22:07:11 4: DbLog logdb -> ################################################################
2020.02.28 22:07:11 4: DbLog logdb -> main PID: 4884, secondary PID: 16482
2020.02.28 22:07:11 4: logdb - Processing Statement:
SELECT
                      TIMESTAMP,
                      DEVICE,
                      READING,
                      VALUE
                       FROM history WHERE 1=1 AND DEVICE = 'meineWetterstation' AND READING = 'Illuminance' AND TIMESTAMP >= '2020-02-28 00:00:00' AND TIMESTAMP <= '2020-02-29 00:00:00' ORDER BY TIMESTAMP


Naja ich finde das di_kessel schon da drin. Ich logge jetzt einfach weiter.

Hier mal was er zum di_kessel bis jetzt hat:
2020.02.28 22:02:31 4: DbLog logdb -> ################################################################
2020.02.28 22:02:31 4: DbLog logdb -> ###              start of new Logcycle                       ###
2020.02.28 22:02:31 4: DbLog logdb -> ################################################################
2020.02.28 22:02:31 4: DbLog logdb -> number of events received: 1 for device: di_kessel
2020.02.28 22:02:31 4: DbLog logdb -> check Device: di_kessel , Event: mode: enabled
2020.02.28 22:02:31 5: DbLog logdb -> parsed Event: di_kessel , Event: mode: enabled
2020.02.28 22:02:31 5: DbLog logdb -> DbLogInclude of "di_kessel": sum,sum_hour,sum_day


Danke!

Titel: Antw:DBLogInclude bei DoIf Readings funktioniert nicht
Beitrag von: DS_Starter am 28 Februar 2020, 22:17:47
Naja, ein SVG solltest du bei der Untersuchung grad mal nicht aufrufen sonst kommen diese Ausgabedaten noch ins Log.

Bezüglich di_kessel kommt aber nur der Event "mode: enabled", dein "sum|sum_hour|sum_day" fehlt bis jetzt ...


parsed Event: di_kessel , Event: mode: enabled
Titel: Antw:DBLogInclude bei DoIf Readings funktioniert nicht
Beitrag von: stefanru am 28 Februar 2020, 22:18:16
Ok jetzt hab ich was:

2020.02.28 22:11:05 4: DbLog logdb -> ################################################################
2020.02.28 22:11:05 4: DbLog logdb -> ###              start of new Logcycle                       ###
2020.02.28 22:11:05 4: DbLog logdb -> ################################################################
2020.02.28 22:11:05 4: DbLog logdb -> number of events received: 1 for device: di_kessel
2020.02.28 22:11:05 4: DbLog logdb -> check Device: di_kessel , Event: diff: 6
2020.02.28 22:11:05 4: DbLog logdb -> ################################################################
2020.02.28 22:11:05 4: DbLog logdb -> ###              start of new Logcycle                       ###
2020.02.28 22:11:05 4: DbLog logdb -> ################################################################
2020.02.28 22:11:05 4: DbLog logdb -> number of events received: 1 for device: di_kessel
2020.02.28 22:11:05 4: DbLog logdb -> check Device: di_kessel , Event: sum_day: 25368
2020.02.28 22:11:05 4: DbLog logdb -> added event - Timestamp: 2020-02-28 22:11:05, Device: di_kessel, Type: DOIF, Event: sum_day: 25368, Reading: sum_day, Value: 25368, Unit:

2020.02.28 22:13:15 4: DbLog logdb -> ################################################################
2020.02.28 22:13:15 4: DbLog logdb -> ###              start of new Logcycle                       ###
2020.02.28 22:13:15 4: DbLog logdb -> ################################################################
2020.02.28 22:13:15 4: DbLog logdb -> number of events received: 1 for device: di_kessel
2020.02.28 22:13:15 4: DbLog logdb -> check Device: di_kessel , Event: sum_day: 25373
2020.02.28 22:13:15 5: DbLog logdb -> parsed Event: di_kessel , Event: sum_day: 25373
2020.02.28 22:13:15 5: DbLog logdb -> DbLogInclude of "di_kessel": sum,sum_hour,sum_day
2020.02.28 22:13:15 4: DbLog logdb -> added event - Timestamp: 2020-02-28 22:13:15, Device: di_kessel, Type: DOIF, Event: sum_day: 25373, Reading: sum_day, Value: 25373, Unit:


Das sieht doch gut aus, oder?

Ok,
hab meinen Fehler gefunden!

Das Device ist kleingeschrieben in der DB und die ist Case Sensitive.
Seltsam ist, dass ich am Anfang auch klein geschrieben gesucht hatte und auch nach tiemstamp.
Wahrscheinlich hatte ich da trigger nicht gesetzt.

Sorry für die unnötige Anfrage.
Ich danke euch.

Gruß,
Stefan
Titel: Antw:DBLogInclude bei DoIf Readings funktioniert nicht
Beitrag von: DS_Starter am 28 Februar 2020, 22:20:39
War doch nicht unnötig ... hast wieder eine Vorgehensweise zur Fehlersuche beim Logging gelernt. Kann man immer mal brauchen  ;)

LG,
Heiko