DBRep & sqlCmd -> Ergebnis in Variable?

Begonnen von AnBad, 01 Januar 2024, 17:50:58

Vorheriges Thema - Nächstes Thema

AnBad

Hallo,
es klappt prima mit sqlCmd eine Abfrage an mariaDB zu richten. Das Ergebnis wird dann als Reading in DBRep je nach Einstellung des attr'sqlResultFormat' angezeigt. So weit, so gut.

Nachts führe ich automatisiert mit einem Perl-Code eine kleine Pflege der Datenbank durch. In dem Zuge wollte ich nun mittels perl code auch die eine oder andere Abfrage starten und in einem separaten Device und Reading ablegen. Das bekomme ich leider nicht hin. Kann mir bitte jemand helfen?
Z.B. dies:

my $result = fhem("set DbRepBackup sqlCmd SELECT device, COUNT(*) AS entry_count FROM history GROUP BY device;");
fhem("setreading dum_SQLDatenbank Eintraege_pro_Geraet $result");
Danke, frohes Neues Jahr.

DS_Starter

Das geht wegen der asynchronen Arbeitsweise so nicht möglich. Es funktioniert mit dem blockierenden get Kommando sqlCmdBlocking. Musst du entscheiden ob deine db Performance hinreichend genug wäre.
Andererseits kannst das Reading auch automatisch über das attr autoForeward setzen lassen was ich für besser halten würde.

gesundes Neues,
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

AnBad

Vielen Dank.

Habe erstmal mit 'sqlCmdBlocking' gearbeitet. Funktioniert prima.

Bin mir aber im Moment nicht sicher, was 'Blocking' bedeutet. Das
- FHEM blockiert ist, und wenn ja Befehle in dieser Zeit 'verschluckt' werden (was nicht so schön wäre) oder Befehle nur verspätet ausgeführt (was mir nachts um 3 reichlich egal wäre)?
- die Datenbank mariaDB blockiert wird, d.h. die Cache verspätet übertragen wird.
- oder??

DS_Starter

#3
Blocking heisst ... wenn deine db nicht antwortet, aus welchen Gründen auch immer, bleibt dein fhem solange stehen bis die Antwort kommt oder der timeout zuschlägt.
Deswegen nimm lieber das attr in Verbindung mit sqlCmd.

Ps: es wird nichts verschluckt sondern schlicht nichts anderes ausgeführt oder empfangen, Stillstand.
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