FHEM Forum

FHEM => Sonstiges => Thema gestartet von: AnBad am 01 Januar 2024, 17:50:58

Titel: DBRep & sqlCmd -> Ergebnis in Variable?
Beitrag von: AnBad am 01 Januar 2024, 17:50:58
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.
Titel: Aw: DBRep & sqlCmd -> Ergebnis in Variable?
Beitrag von: DS_Starter am 01 Januar 2024, 18:15:39
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
Titel: Aw: DBRep & sqlCmd -> Ergebnis in Variable?
Beitrag von: AnBad am 01 Januar 2024, 20:51:44
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??
Titel: Aw: DBRep & sqlCmd -> Ergebnis in Variable?
Beitrag von: DS_Starter am 01 Januar 2024, 21:00:36
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.