Hallo Zusammen,
aus irgend einem Grund wird ein Wert doppelt in die Datenbank geschrieben. Anbei einmal der entsprechende Bereich aus dem Log.
Es geht um den Wert energy_kWh_LastDay dieser wird kurz hintereinander Aufgrund eines notifys zweimal in die DB geschrieben.
Kann jemand von Euch erkennen warum das der Fall ist und was der Auslöser sein kann.
2016.07.05 23:59:00 5: exec at command update_BF_ce_PM_powermeterLastDay
2016.07.05 23:59:00 5: Cmd: >{
$data{cumLastDay} = ReadingsVal ("BF_ce_PM_powermeter","energy_kWh_cum_LastDay",0);
$data{current} = ReadingsVal ("BF_ce_PM_powermeter","energy_kWh",0);
$data{DayOld} = sprintf("%.3f",$data{current}-$data{cumLastDay});
fhem "setreading BF_ce_PM_powermeter energy_kWh_LastDay $data{DayOld}";
fhem "setreading BF_ce_PM_powermeter energy_kWh_cum_LastDay $data{current}";
}<
2016.07.05 23:59:00 5: Cmd: >setreading BF_ce_PM_powermeter energy_kWh_LastDay 10.169<
2016.07.05 23:59:00 5: Triggering BF_ce_PM_powermeter (1 changes)
2016.07.05 23:59:00 5: Starting notify loop for BF_ce_PM_powermeter, first event energy_kWh_LastDay: 10.169
2016.07.05 23:59:00 5: Triggering Action_notify
2016.07.05 23:59:00 4: Action_notify exec { nhRouteActions($NAME, $EVENT) }
2016.07.05 23:59:00 5: Cmd: >{ nhRouteActions($NAME, $EVENT) }<
2016.07.05 23:59:00 5: Notify from Device: BF_ce_PM_powermeter recieved
2016.07.05 23:59:00 5: DbLog: logging of Device: BF_ce_PM_powermeter , Type: CUL_HM , Event: energy_kWh_LastDay: 10.169 , Reading: energy_kWh_LastDay , Value: 10.169 , Unit:
2016.07.05 23:59:00 5: Notify from Device: BF_ce_PM_powermeter recieved
2016.07.05 23:59:00 5: DbLog: logging of Device: BF_ce_PM_powermeter , Type: CUL_HM , Event: energy_kWh_LastDay: 10.169 , Reading: energy_kWh_LastDay , Value: 10.169 , Unit:
2016.07.05 23:59:00 5: Notify from Device: BF_ce_PM_powermeter recieved
2016.07.05 23:59:00 5: Notify from Device: BF_ce_PM_powermeter recieved
2016.07.05 23:59:00 5: Cmd: >setreading BF_ce_PM_powermeter energy_kWh_cum_LastDay 10374.482<
2016.07.05 23:59:00 5: Triggering BF_ce_PM_powermeter (2 changes)
2016.07.05 23:59:00 5: Starting notify loop for BF_ce_PM_powermeter, first event energy_kWh_cum_LastDay: 10374.482
2016.07.05 23:59:00 5: Triggering Action_notify
2016.07.05 23:59:00 4: Action_notify exec { nhRouteActions($NAME, $EVENT) }
2016.07.05 23:59:00 5: Cmd: >{ nhRouteActions($NAME, $EVENT) }<
2016.07.05 23:59:00 5: Triggering Action_notify
2016.07.05 23:59:00 4: Action_notify exec { nhRouteActions($NAME, $EVENT) }
2016.07.05 23:59:00 5: Cmd: >{ nhRouteActions($NAME, $EVENT) }<
2016.07.05 23:59:00 5: Notify from Device: BF_ce_PM_powermeter recieved
2016.07.05 23:59:00 5: DbLog: logging of Device: BF_ce_PM_powermeter , Type: CUL_HM , Event: energy_kWh_cum_LastDay: 10374.482 , Reading: energy_kWh_cum_LastDay , Value: 10374.482 , Unit:
2016.07.05 23:59:00 5: DbLog: logging of Device: BF_ce_PM_powermeter , Type: CUL_HM , Event: energy_kWh_Day: 0.000 , Reading: energy_kWh_Day , Value: 0.000 , Unit:
2016.07.05 23:59:00 5: Notify from Device: BF_ce_PM_powermeter recieved
2016.07.05 23:59:00 5: Notify from Device: BF_ce_PM_powermeter recieved
2016.07.05 23:59:00 5: Notify from Device: BF_ce_PM_powermeter recieved
2016.07.05 23:59:00 5: redefine at command update_BF_ce_PM_powermeterLastDay as *23:59:00 {
$data{cumLastDay} = ReadingsVal ("BF_ce_PM_powermeter","energy_kWh_cum_LastDay",0);
$data{current} = ReadingsVal ("BF_ce_PM_powermeter","energy_kWh",0);
$data{DayOld} = sprintf("%.3f",$data{current}-$data{cumLastDay});
fhem "setreading BF_ce_PM_powermeter energy_kWh_LastDay $data{DayOld}";
fhem "setreading BF_ce_PM_powermeter energy_kWh_cum_LastDay $data{current}";
}
Gruß A.
Hallo zusammen,
ich habe heute bei einigen Geräten von Log-Datei auf Log-DB (MySQL) umgestellt.
Bei mir habe ich genau das gleiche Problem, alle Werte werden doppelt in die DB geschrieben.
Gibt es dafür noch keine Lösung?
Gruß
SebOL
Kann ich bestätigen
mal eine event-on-Change-reading versucht?
Zitat von: Amenophis86 am 28 Dezember 2016, 10:28:43
mal eine event-on-Change-reading versucht?
Ja, habe ich drin, macht aber kein Unterschied.
Habe in einem anderen Forum-Beitrag (https://forum.fhem.de/index.php?topic=33697.0) etwas gefunden was das Problem erst einmal umgeht.
Ich habe einfach einen Index in der Tabelle "history" angelegt. Dadurch wird auch automatisch ein Contraint auf die Spalten angelegt.
Damit dürfen in der DB keine doppelten Einträge vorkommen.
Damit regelt das dann die DB, statt FHEM. Es gibt dadurch in der FHEM-Log auch Fehlermeldungen, da der zweite (doppelte) Eintrag nicht eingefügt werden kann.
Das ist mir im Moment aber erst einmal egal.
Lieber eine "saubere" DB als eine fehlerfreie Log-Datei.
Im Grunde steht das auch so in der Beispiel-Create-SQL Datei unter "FHEM/contrib/dblog/db_create_mysql.sql" (für MySQL).
CREATE INDEX Search_Idx ON history (DEVICE, READING, TIMESTAMP);
Gruß
SebOL