Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)

Begonnen von DS_Starter, 19 Mai 2016, 22:52:13

Vorheriges Thema - Nächstes Thema

ch.eick

Zitat von: DS_Starter am 30 Januar 2021, 11:53:07
momentan kann man über sqlCmd nur auf §timestamp_begin§, §timestamp_end§ zugreifen, aber nicht §device§, §reading§ zugreifen.

Im Prinzip kann man diese Möglichkeit auch relativ einfach einbauen. Ich habe das bisher vermieden weil es für die Attribute device, reading vielfältige Eingabemöglichkeiten gibt die im ungünstigen Fall in einem sqlCmd zu Fehlern führen können.
Eingabemöglichkeiten wären zum Beispiel:


Beispiele:
attr <name> device TYPE=DbRep
attr <name> device MySTP_5000
attr <name> device SMA.*,MySTP.*
attr <name> device SMA_Energymeter,MySTP_5000
attr <name> device %5000
attr <name> device TYPE=SSCam EXCLUDE=SDS1_SVS
attr <name> device TYPE=SSCam,TYPE=ESPEasy EXCLUDE=SDS1_SVS
attr <name> device EXCLUDE=SDS1_SVS
attr <name> device EXCLUDE=TYPE=SSCam


Für das Attr reading sieht es ähnlich aus.
Ich denke du weißt was ich meine.
Wäre es denn dir sehr wichtig einen solchen Zugriff zu haben ?
Okay, das würde dann zu einem SQL Error führen.
Ich hatte simpler gedacht. wenn timestamp_* geht, geht auch device und reading :-) Jetzt wo ich das weiß, kann ich es ja auch direkt ins SQL schreiben, die readings wären natürlich flexibler und durchgängiger.
Für mich alle brauchst Du da natürlich keine Zeit zu investieren, Du hast ja momentan eh genug zu tun.

Manchmal kommt es mir vor, das nur wir zwei DbRep verwenden ;-)

Gruß
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

andies

Guten Morgen, ich habe jetzt die 92 Seiten nicht gelesen, aber die commandref und kapiere es nicht. Ich möchte gern alle Daten löschen, die älter als 50 Tage sind. In der commandref ist das so angegeben
ZitatdelEntries [<no>[:<nn>]] - löscht alle oder die durch die Attribute device und/oder reading definierten Datenbankeinträge. Die Eingrenzung über Timestamps erfolgt folgendermaßen:...
"timeOlderThan" gesetzt -> gelöscht werden DB-Einträge älter als aktuelle Zeit minus "timeOlderThan"

Es werden aber anscheinend nur die aktuell letzten 50 Tage gelöscht. Was mache ich da falsch?

Mein List ist
Internals:
   DATABASE   fhem
   DEF        DbLog
   FUUID      5e244bd9-f33f-1115-8e73-a46a39d31299868e
   FVERSION   93_DbRep.pm:v8.42.3-s23462/2021-01-03
   LASTCMD    delEntries
   MODEL      Client
   NAME       DbLogRep
   NOTIFYDEV  global,DbLogRep
   NR         33
   NTFY_ORDER 50-DbLogRep
   ROLE       Client
   STATE      done
   TYPE       DbRep
   UTF8       0
   HELPER:
     DBLOGDEVICE DbLog
     GRANTS     INSERT,ALL PRIVILEGES,UPDATE,DELETE,SELECT
     IDRETRIES  2
     MINTS      2020-07-04 17:41:39
     PACKAGE    main
     SQLHIST   
     VERSION    8.42.3
     CV:
       aggregation no
       aggsec     1
       destr      2021-01-31
       dsstr      2020-12-12
       epoch_seconds_end 1612079258
       mestr      01
       msstr      12
       testr      08:47:38
       tsstr      08:47:37
       wdadd      172800
       yestr      2021
       ysstr      2020
     DBREPCOL:
       COLSET     1
       DEVICE     64
       EVENT      512
       READING    64
       TYPE       64
       UNIT       32
       VALUE      128
   OLDREADINGS:
   READINGS:
     2021-01-31 08:47:41   /--/----DELETED_ROWS_HISTORY-- 33310
     2021-01-31 08:47:41   state           done
Attributes:
   allowDeletion 1
   group      intern
   timeDiffToNow d:50
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

DS_Starter

Guten Morgen,

Zitatich habe jetzt die 92 Seiten nicht gelesen ...
Commandref sollte reichen  :)

ZitatEs werden aber anscheinend nur die aktuell letzten 50 Tage gelöscht. Was mache ich da falsch?
Du hast das Attr timeDiffToNow d:50 statt timeOlderThan gesetzt. Richtig wäre timeOlderThan d:50.
Die Angabe  [<no>[:<nn>]] im Setter ist optional und wird nicht benötigt wenn das Attribut verwendet wird.

LG,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

abc2006

Ich habe gerade seit ein paar Tagen dbrep auf meine Datenbank losgelassen, um doubletten zu löschen.
Dabei habe ich die Parameter

Attributes:
   allowDeletion 1
   fastStart  1
   reading    EXCLUDE=.*work.*
   room       System->Logging
   showproctime 1
   sqlCmdHistoryLength 50
   timeout    864000
   timestamp_begin previous_year_begin


gesetzt.
Recht erschrocken war ich, als ich in der Processlist von mysql dann folgende Information fand:
Zitat|  8742 | fhemuser | localhost | fhem | Query   |    0 | query end | delete FROM history where TIMESTAMP = '2020-03-04 00:00:38' AND DEVICE = 'D_WMZ_Heizung_main' AND READING = 'work' AND VALUE = '8.16'

Warum wurde diese Abfrage nicht ausgeschlossen? Oder interpretiere ich da was falsch?

Hier nochmal das ganze Device:
Internals:
   DATABASE   fhem
   DEF        logdb
   FUUID      6015d946-f33f-4040-6784-2b12d3e3044ec15f
   FVERSION   93_DbRep.pm:v8.42.3-s23462/2021-01-03
   LASTCMD    delDoublets delete
   MODEL      Client
   NAME       repdb_delDoublets
   NOTIFYDEV  global,repdb_delDoublets
   NR         565
   NTFY_ORDER 50-repdb_delDoublets
   ROLE       Client
   STATE      error
   TYPE       DbRep
   UTF8       1
   HELPER:
     DBLOGDEVICE logdb
     GRANTS     USAGE,SELECT,DELETE,UPDATE,INSERT
     IDRETRIES  2
     MINTS      2014-03-26 22:59:59
     PACKAGE    main
     SQLHIST   
     VERSION    8.42.3
     CV:
       aggregation day
       aggsec     86400
       destr      2021-02-02
       dsstr      2020-01-01
       epoch_seconds_end 1612304892
       mestr      02
       msstr      01
       testr      23:28:12
       tsstr      00:00:00
       wdadd      432000
       yestr      2021
       ysstr      2020
     DBREPCOL:
       COLSET     1
       DEVICE     64
       EVENT      0
       READING    64
       TYPE       64
       UNIT       32
       VALUE      128
   OLDREADINGS:
   READINGS:
     2021-02-03 09:47:55   errortext       DBD::mysql::st execute failed: Lost connection to MySQL server during query at ./FHEM/93_DbRep.pm line 5540.

     2021-02-03 09:47:55   state           error
Attributes:
   allowDeletion 1
   fastStart  1
   reading    EXCLUDE=.*work.*
   room       System->Logging
   showproctime 1
   sqlCmdHistoryLength 50
   timeout    864000
   timestamp_begin previous_year_begin

Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

DS_Starter

Hallo Stephan,

falsche Verwendung des Attr. bzw. der Perl Wildcards .* -> SQL Wildcard % !

Auszug aus Commandref:

reading - Abgrenzung der DB-Selektionen auf ein bestimmtes oder mehrere Readings sowie exkludieren von Readings. Mehrere Readings werden als Komma separierte Liste angegeben. Es können SQL Wildcard (%) verwendet werden.
Wird dem Reading bzw. der Reading-Liste ein "EXCLUDE=" vorangestellt, werden diese Readings nicht inkludiert.

    Beispiele:
    attr <name> reading etotal
    attr <name> reading et%
    attr <name> reading etotal,etoday
    attr <name> reading eto%,Einspeisung EXCLUDE=etoday
    attr <name> reading etotal,etoday,Ein% EXCLUDE=%Wirkleistung

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

abc2006

tjaaa... das war dämlich von mir.

Mal sehen, was ich retten kann...
Danke!
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

ch.eick

Zitat von: abc2006 am 03 Februar 2021, 13:00:51
tjaaa... das war dämlich von mir.
Mal sehen, was ich retten kann...
Du kannst aus der Sicherung, die Du davor gemacht hast die Einträge einzeln wiederherstellen, ohne die gesamte Sicherung zurück zu spielen.

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

abc2006

Tja, das birgt das generelle Problem bei großen Datenmengen. Ich weiss nicht genau, was alles gelöscht wurde, und müsste jetzt quasi die gesamte Sicherung einspielen, und dann nochmal ein delDoublets machen. Da hat meine Datenbank ein paar Tage zu tun.
Einen PK habe ich leider noch nicht.
Ich habe ein paar kurze Tests gemacht und die wichtigsten Daten scheinen noch da zu sein.
Ich arbeite mich gerade in syncStandby ein und werde eine zweite Datenbank mit den wichtigeren Sachen anlegen. Was mir dabei auffällt (aber vielleicht gibts da ja auch schon eine Lösung), dass ich ja dann einen Workaround brauche, wenn ich an den Übergang von alten zu aktuellen Daten (die dann ja in einer anderen DB sind) komme.
Naja, mal sehen.
Grüße,
Stephan

PS: vielleicht könnte man im ConfigCheck anzeigen, ob und welcher PK genutzt wird.
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

ch.eick

Zitat von: abc2006 am 03 Februar 2021, 14:17:46
Tja, das birgt das generelle Problem bei großen Datenmengen. Ich weiss nicht genau, was alles gelöscht wurde, und müsste jetzt quasi die gesamte Sicherung einspielen, und dann nochmal ein delDoublets machen. Da hat meine Datenbank ein paar Tage zu tun.
Einen PK habe ich leider noch nicht.
Ich habe ein paar kurze Tests gemacht und die wichtigsten Daten scheinen noch da zu sein.
Ich arbeite mich gerade in syncStandby ein und werde eine zweite Datenbank mit den wichtigeren Sachen anlegen. Was mir dabei auffällt (aber vielleicht gibts da ja auch schon eine Lösung), dass ich ja dann einen Workaround brauche, wenn ich an den Übergang von alten zu aktuellen Daten (die dann ja in einer anderen DB sind) komme.
PS: vielleicht könnte man im ConfigCheck anzeigen, ob und welcher PK genutzt wird.
Du hast ja mit einer Maske gelöscht und es laufen jetzt ja von den Devices weiter Daten rein.
Damm mach mal ein Select mit der selben Maske und schau was da so alles kommt.
Dann such mit einem grep und der selben Maske das Backup File durch. Zuerst in ein less pipen und wenn es passt in ein anderes File.
Dieses differenz File kannst Du dann in die Datenbank laden. Es sollte so sein, das Du keine duplicate keys zugelassen hast, somit wird nur das reingeladen, was Du nicht mehr in der DB hast.

Für eine zweite Datenbank kannst Du ja einen Sync machen oder halt selectiv übertragen. Auch da sollte es einen primary key geben.

Da hatte ich gestern schon mal was passendes geschrieben. Den private key kannst Du ja auch nachträglich definieren.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

wowogiengen

Hallo,
ich benutze das dbRep-Modul, um Tages- und Monatsdurchschnittswerte meiner Raumtemperaturen aus der Datenbank zu ermitteln.
Dafür verwende ich zB. folgendes at:

define atdbRepBad3 at *00:40 set dbRepBad3 averageValue writeToDB
attr atdbRepBad3 room DbLog
attr atdbRepBad3 verbose 1
attr atdbRepBad3 webCmd execNow
attr atdbRepBad3 widgetOverride execNow

setstate atdbRepBad3 Next: 00:40:00
setstate atdbRepBad3 2021-02-08 00:40:00 state Next: 00:40:00



das zugehörige dbRepBad3 sieht so aus:

defmod dbRepBad3 DbRep mySQLDB
attr dbRepBad3 aggregation month
attr dbRepBad3 allowDeletion 1
attr dbRepBad3 devStateIcon connected:10px-kreis-gelb .*disconnect:10px-kreis-rot .*done:10px-kreis-gruen
attr dbRepBad3 device HzgThermostatBad
attr dbRepBad3 event-on-update-reading state
attr dbRepBad3 reading measured-temp
attr dbRepBad3 room DbLog,LogFiles,System
attr dbRepBad3 timestamp_begin previous_year_begin
attr dbRepBad3 timestamp_end previous_day_end
attr dbRepBad3 verbose 1

setstate dbRepBad3 done
setstate dbRepBad3 2020-12-17 22:28:27 .associatedWith HzgThermostatBad
setstate dbRepBad3 2021-02-08 09:09:14 2020-01-01__HzgThermostatBad__measured-temp__AVGAM__2020-01 23.1718
setstate dbRepBad3 2021-02-08 09:09:14 2020-02-01__HzgThermostatBad__measured-temp__AVGAM__2020-02 23.0269
setstate dbRepBad3 2021-02-08 09:09:14 2020-03-01__HzgThermostatBad__measured-temp__AVGAM__2020-03 23.0446
setstate dbRepBad3 2021-02-08 09:09:14 2020-04-01__HzgThermostatBad__measured-temp__AVGAM__2020-04 22.9332
setstate dbRepBad3 2021-02-08 09:09:14 2020-05-01__HzgThermostatBad__measured-temp__AVGAM__2020-05 22.3761
setstate dbRepBad3 2021-02-08 09:09:14 2020-06-01__HzgThermostatBad__measured-temp__AVGAM__2020-06 22.9846
setstate dbRepBad3 2021-02-08 09:09:14 2020-07-01__HzgThermostatBad__measured-temp__AVGAM__2020-07 22.5617
setstate dbRepBad3 2021-02-08 09:09:14 2020-08-01__HzgThermostatBad__measured-temp__AVGAM__2020-08 23.0202
setstate dbRepBad3 2021-02-08 09:09:14 2020-09-01__HzgThermostatBad__measured-temp__AVGAM__2020-09 22.4993
setstate dbRepBad3 2021-02-08 09:09:14 2020-10-01__HzgThermostatBad__measured-temp__AVGAM__2020-10 22.9706
setstate dbRepBad3 2021-02-08 09:09:14 2020-11-01__HzgThermostatBad__measured-temp__AVGAM__2020-11 22.8690
setstate dbRepBad3 2021-02-08 09:09:14 2020-12-01__HzgThermostatBad__measured-temp__AVGAM__2020-12 23.3856
setstate dbRepBad3 2021-02-08 09:09:14 2021-01-01__HzgThermostatBad__measured-temp__AVGAM__2021-01 22.9356
setstate dbRepBad3 2021-02-08 09:09:14 2021-02-01__HzgThermostatBad__measured-temp__AVGAM__2021-02 23.2030
setstate dbRepBad3 2021-02-08 09:09:14 state done


Diese Readings habe ich nun in einen plot eingebaut, der auch gut funktioniert hat (zumindest am Anfang). Jetzt habe ich nach einiger Zeit mal wieder auf den Plot geschaut und muss sehen, dass da täglich Werte berechnet worden sind - gut das at-Kommando läuft jeden Tag. Aber

set dbRepBad3 averageValue display
zeigt mir ja auch nur die Monatswerte an...

Woher kommen dann die vielen "Zwischenwerte" für jeden Tag, die ich in der SQL-Datenbank auch sehe...

Viele Grüße
Wolfgang

ch.eick

#1375
Zitat von: wowogiengen am 08 Februar 2021, 09:22:37
zeigt mir ja auch nur die Monatswerte an...

Woher kommen dann die vielen "Zwischenwerte" für jeden Tag, die ich in der SQL-Datenbank auch sehe...
Hallo Wolfgang,
ich gebe jetzt mal meine Prognose an.
Da Du täglich den Monatsdurchschnitt berechnest, wird auch jeden Tag der neue Durchschnitt des laufenden Monats in die DB eingetragen ;-)
Wenn Du mit deleteOther arbeitest, werden alle Einzelwerte gelöscht und es steht nur noch der Durchschnitt in der DB.
Nun gibt es zwei Varianten:
1. Der Monatsdurchschnitt wird erst zu Beginn des Folgemonats berechnet, was dann nur ein mal passiert.
2. Du löscht vor der Berechnung den Durchschnittswert des laufenden Monats und lässt Ihn dann wieder neu erstellen. Dadurch hast Du dann einen sich ändernden Durchschnittswert im laufenden Monat.

Gruß
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

wowogiengen

#1376
Hallo,
wenn der Monatsdurchschnitt sich immer auf 30 Tage bezieht (ausgehend vom Attribut "timestamp_end previous_day_end"),dann ist klar, dass jeden Tag ein anderer Mittelwert rauskommt.

Wenn ich die beiden timestamp-Attribute lösche, wird dann bei einmaliger Berechnung für alle vergangenen Monate pro Monat ein Wert berechnet? Ich sollte natürlich vorher die bereits in der DB eingetragenen Mittelwerte löschen...

Viele Grüße
Wolfgang

[Edit, nachdem ich zu Hause bin...]...

Mir ist jetzt klar, wieso jeden Tag ein neuer Wert dazu kommt... das ist ja dann der Mittelwert des aktuellen Monats, aber nur bis "heute" eben...
In anderen Threads des Forums habe ich gelesen, wie ich mit einer if-Abfrage das at-Kommando so modifizieren kann, dass es nur noch am ersten des Monats triggert - wobei das bestimmt auch mit einem DoIf möglich wäre...

VG
Wolfgang

ch.eick

Zitat von: wowogiengen am 08 Februar 2021, 10:52:35
Mir ist jetzt klar, wieso jeden Tag ein neuer Wert dazu kommt... das ist ja dann der Mittelwert des aktuellen Monats, aber nur bis "heute" eben...
In anderen Threads des Forums habe ich gelesen, wie ich mit einer if-Abfrage das at-Kommando so modifizieren kann, dass es nur noch am ersten des Monats triggert - wobei das bestimmt auch mit einem DoIf möglich wäre...
Okay, das wäre dann meine beschriebene Variante, das DbRep nur einmal am Monatsanfang laufen zu lassen, um den Durchschnitt des letzten Monats zu berechnen.

Im DOIF...

...
DOELSEIF
([01:07] and ($mday==1))

...
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

wowogiengen

Hallo,

die Lösung für mein Problem wird jetzt wohl so sein, dass ich die beiden Attribute

attr dbRepBad3 timestamp_begin previous_month_begin
attr dbRepBad3 timestamp_end previous_month_end

entsprechend setze, und dann noch das at modifiziere (siehe https://forum.fhem.de/index.php/topic,49461.msg414143.html#msg414143):


define atdbRepBad3 at *00:40 {if ((strftime "%d",localtime time) eq "01") {set dbRepBad3 averageValue writeToDB}}
attr atdbRepBad3 room DbLog
attr atdbRepBad3 verbose 1
attr atdbRepBad3 webCmd execNow
attr atdbRepBad3 widgetOverride execNow

setstate atdbRepBad3 Next: 00:40:00
setstate atdbRepBad3 2021-02-08 18:21:14 state Next: 00:40:00



Damit sollte es dann gehen.

Viele Grüße
Wolfgang

wowogiengen

Hallo,
ich hänge hier nochmal alles wesentliche ran, was für meine 4 Räume gedacht ist...
Am Ende hab ich dann doch noch mal eine Frage...


- Suffix 1 heißt max. Einschaltdauer PWMR / Heizungsventil pro Tag
- Suffix 2 heißt Tagesdurchschnitt Temperatur
- Suffix 3 heißt Monatsdurchschnitt Temperatur

Zunächst mal die at-Befehle, um die max. Werte der Einschaltdauer der Heizung für jeden Raum abzulegen:

define atdbRepBad1 at *00:00 set dbRepBad1 maxValue writeToDB
define atdbRepBuero1 at *01:00 set dbRepBuero1 maxValue writeToDB
define atdbRepSchlafzimmer1 at *02:00 set dbRepSchlafzimmer1 maxValue writeToDB
define atdbRepWohnzimmer1 at *03:00 set dbRepWohnzimmer1 maxValue writeToDB


Dann das selber für die Durchschnittstemperatur im Raum:


define atdbRepBad2 at *00:20 set dbRepBad2 averageValue writeToDB
define atdbRepBuero2 at *01:20 set dbRepBuero2 averageValue writeToDB
define atdbRepSchlafzimmer2 at *02:20 set dbRepSchlafzimmer2 averageValue writeToDB
define atdbRepWohnzimmer2 at *03:20 set dbRepWohnzimmer2 averageValue writeToDB



Und schlussendlich, einmal im Monat, für jeden Raum die Durchschnittstemperatur pro Monat

define atdbRepBad3 at *00:40 {if ((strftime "%d",localtime time) eq "01") {set dbRepBad3 averageValue writeToDB}}
define atdbRepBuero3 at *00:40 {if ((strftime "%d",localtime time) eq "01") {set dbRepBuero3 averageValue writeToDB}}
define atdbRepSchlafzimmer3 at *00:40 {if ((strftime "%d",localtime time) eq "01") {set dbRepSchlafzimmer3 averageValue writeToDB}}
define atdbRepWohnzimmer3 at *00:40 {if ((strftime "%d",localtime time) eq "01") {set dbRepWohnzimmer3 averageValue writeToDB}}


Jetzt für jeden Raum die einzelnen DbRep-Kommandos, nach Raum getrennt:
Tageshöchstwerte

define dbRepBad1 DbRep mySQLDB
attr dbRepBad1 aggregation day
attr dbRepBad1 allowDeletion 1
attr dbRepBad1 reading pulseTimePerDay
attr dbRepBad1 timestamp_begin previous_day_begin
attr dbRepBad1 timestamp_end previous_day_end



define dbRepBuero1 DbRep mySQLDB
attr dbRepBuero1 aggregation day
attr dbRepBuero1 allowDeletion 1
attr dbRepBuero1 reading pulseTimePerDay
attr dbRepBuero1 timestamp_begin previous_day_begin
attr dbRepBuero1 timestamp_end previous_day_end



define dbRepSchlafzimmer1 DbRep mySQLDB
attr dbRepSchlafzimmer1 aggregation day
attr dbRepSchlafzimmer1 allowDeletion 1
attr dbRepSchlafzimmer1 reading pulseTimePerDay
attr dbRepSchlafzimmer1 timestamp_begin previous_day_begin
attr dbRepSchlafzimmer1 timestamp_end previous_day_end



define dbRepWohnzimmer1 DbRep mySQLDB
attr dbRepWohnzimmer1 aggregation day
attr dbRepWohnzimmer1 allowDeletion 1
attr dbRepWohnzimmer1 reading pulseTimePerDay
attr dbRepWohnzimmer1 timestamp_begin previous_day_begin
attr dbRepWohnzimmer1 timestamp_end previous_day_end

Tagesdurchschnitte

define dbRepBad2 DbRep mySQLDB
attr dbRepBad2 aggregation day
attr dbRepBad2 allowDeletion 1
attr dbRepBad2 reading measured-temp
attr dbRepBad2 timestamp_begin previous_day_begin
attr dbRepBad2 timestamp_end previous_day_end



define dbRepBuero2 DbRep mySQLDB
attr dbRepBuero2 aggregation day
attr dbRepBuero2 allowDeletion 1
attr dbRepBuero2 reading measured-temp
attr dbRepBuero2 timestamp_begin previous_day_begin
attr dbRepBuero2 timestamp_end previous_day_end



define dbRepSchlafzimmer2 DbRep mySQLDB
attr dbRepSchlafzimmer2 aggregation day
attr dbRepSchlafzimmer2 allowDeletion 1
attr dbRepSchlafzimmer2 reading measured-temp
attr dbRepSchlafzimmer2 timestamp_begin previous_day_begin
attr dbRepSchlafzimmer2 timestamp_end previous_day_end


define dbRepWohnzimmer2 DbRep mySQLDB
attr dbRepWohnzimmer2 aggregation day
attr dbRepWohnzimmer2 allowDeletion 1
attr dbRepWohnzimmer2 reading measured-temp
attr dbRepWohnzimmer2 timestamp_begin current_year_begin


Monatsdurchschnitte



define dbRepBad3 DbRep mySQLDB
attr dbRepBad3 aggregation month
attr dbRepBad3 allowDeletion 1
attr dbRepBad3 reading measured-temp
attr dbRepBad3 timestamp_begin previous_month_begin
attr dbRepBad3 timestamp_end previous_month_end




define dbRepBuero3 DbRep mySQLDB
attr dbRepBuero3 aggregation month
attr dbRepBuero3 allowDeletion 1
attr dbRepBuero3 reading measured-temp
attr dbRepBuero3 timestamp_begin previous_month_begin
attr dbRepBuero3 timestamp_end previous_month_end



define dbRepSchlafzimmer3 DbRep mySQLDB
attr dbRepSchlafzimmer3 aggregation month
attr dbRepSchlafzimmer3 allowDeletion 1
attr dbRepSchlafzimmer3 reading measured-temp
attr dbRepSchlafzimmer3 timestamp_begin previous_month_begin
attr dbRepSchlafzimmer3 timestamp_end previous_month_end



define dbRepWohnzimmer3 DbRep mySQLDB
attr dbRepWohnzimmer3 aggregation month
attr dbRepWohnzimmer3 allowDeletion 1
attr dbRepWohnzimmer3 reading measured-temp
attr dbRepWohnzimmer3  timestamp_begin previous_month_begin
attr dbRepWohnzimmer3  timestamp_end previous_month_end


Zum einen hab ich jetzt hier für jeden Raum 3 x ein AT, und 3 x ein dbRep, um mir die 3 Werte berechnen zu lassen.
Ich brauche also hier 12 AT-Devices und 12 DbRep-Devices. zum Glück kommen keine Räume mehr dazu, in den anderen ist zwar ein Thermostat drin, aber keine Heizung an...

Kann man das nicht eleganter lösen, so dass man es auch einfacher warten kann?
Die at-Befehle kann ich auch nicht gleichzeitig ausführen lassen, da die dbRep sich gegenseitig sperren... der erste geht, und die nachfolgenden bekommen Fehler beim DB-Zugriff.