CallList und dbLog???

Begonnen von frankreed, 13 Mai 2019, 18:38:34

Vorheriges Thema - Nächstes Thema

frankreed

Hallo,

kurze Frage:
Kann man die CallList auch ins dbLog schreiben?
Klar, mit DBLOGINCLUDE kann ich die einzelnen, ausgewählten Readings schreiben aber ich hätte gerne in meiner HISTORY-Tabelle die Daten so abgelegt, dass ich mir später mal einen Art Einzelverbindungsnachweis erstellen kann....
Hier die bisherige RAW-Definition:
defmod CallList FB_CALLLIST CallMonitor
attr CallList DbLogInclude 1-duration,1-name,1-number,1-state,1-timestamp
attr CallList create-readings 1
attr CallList event-on-change-reading .*
attr CallList language de
attr CallList number-of-calls 20
attr CallList room Wohnzimmer
attr CallList visible-columns state,timestamp,name,number,duration


Danke vorab für die Hilfe

Frank_Huber

Du hast doch alle was du brauchst im call Monitor.
Logge einfach da mit und du hast alles in der DB.

Gesendet von meinem Telekom Puls mit Tapatalk


frankreed

Aäh, ich logge doch schon im CallMonitor, siehe o.g. RAW-Definition.
Es landen zwar die definierten Readings in der dbLog-history aber leider bei jedem event mit einem anderen Zeitstempel...

Frank_Huber

Ohne Monitor keine list, das ist schon klar.
Und wenn der Monitor loggt, was fehlt dir dann?

Gesendet von meinem Telekom Puls mit Tapatalk


amenomade

Zitat von: frankreed am 13 Mai 2019, 19:05:50
Aäh, ich logge doch schon im CallMonitor, siehe o.g. RAW-Definition.
Da sehe ich aber nur eine RAW-Definition vom "CallList" FB_CALLLIST Device, nicht vom "CallMonitor" FB_CALLMONITOR Device. Muss ich meine Brille wechseln?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

frankreed

Oh sorry, mein Fehler und auch Entschuldigung für den "pampigen" Ton....

Klar, das CallMonitor-Device habe ich natürlich auch angelegt.
Mmmh, das wäre auch eine Möglichkeit, direkt über den CallMonitor in die dbLog zu schreiben als über CallList (was ja auch nur die Daten vom CallMonitor abgreift).

Ich befürchte aber, dass mir dann für jeden Anruf mehrere Datensätze angelegt werden, da auch mehrere Events generiert werden. Beispiel:
- Anruf an Fritzbox, Fritzbox klingelt ---> ein Event
- Gespräch wird angenommen --> nächstes Event
- Gespräch wird beendet --> drittes Event

Somit würde ich für ein Telefonat (je nach Anzahl der geloggten Readings) zahlreiche Datenbank-Tabelleneinträge bekommen, jeweils mit unterschiedlichen TIMESTAMPS. Die würden aber alle nur zu diesem einen Gespräch gehören.
Damit wäre zumindest mal alles Notwendige in der Datenbank.

Wie ich jetzt aus diesen unterschiedlichen Informationen der verschiedenen TIMESTAMPS wieder alles zusammenfasse mit einer Datenbank-Abfrage fehlt mir schlichtweg das Wissen.

Hat jemand einen Ansatz?


Frank_Huber

Moin,

Dass ein CallMonitor angelegt ist hat man ja auch in der definition der CallList gesehen. Ohne würde die List ja auch gar nicht funktionieren.
von daher passt das schon.

Ein ungetesteter möglicher Ansatz:
mittels notify/DOIF auf die gewünschten Events reagieren und damit addlog Befehle ausführen.
im Monitor selbst setzt dann das Attribut DbLogExclude auf .* bei addlog dann das "!useExcludes" nicht vergessen.

amenomade

Ich würde einfach ein userReading anlegen mit event: disconnect als Trigger, und als Wert die gewünsche Verkettung von Readings
Und nur dieses loggen
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

frankreed

Wie könnte ich denn das konkrete userreading anlegen?

So, hier mal das Ergebnis des Database-Loggings:
Meine Definition des CallMonitors:
defmod CallMonitor FB_CALLMONITOR xxxxxxxxxxxx
attr CallMonitor DbLogInclude direction,external_name,external_number,call_duration
attr CallMonitor fritzbox-remote-phonebook 1
attr CallMonitor fritzbox-remote-phonebook-via tr064
attr CallMonitor local-area-code 07152
attr CallMonitor reverse-search textfile,phonebook,dasoertliche.de
attr CallMonitor reverse-search-cache 1
attr CallMonitor reverse-search-phonebook-file /home/pi/FRITZ.Box_Telefonbuch_CardDav_05.04.19_1004.xml


liefert brav Werte in die dbLog.

Eine SQL-Abfrage darauf:
SELECT DISTINCT
TIMESTAMP,
MAX( IF( READING='call_duration', VALUE, '')) AS DAUER,
MAX( IF( READING='external_number', VALUE, '')) AS RUFNUMMER,
MAX( IF( READING='external_name', VALUE, '')) AS NAME,
MAX( IF( READING='direction', VALUE, '')) AS RICHTUNG
FROM history WHERE DEVICE = 'CallMonitor'
GROUP BY TIMESTAMP
ORDER BY TIMESTAMP DESC;


liefert:
TIMESTAMP          |DAUER|RUFNUMMER    |NAME                        |RICHTUNG|
-----------------------|-----------|----------------|----------------------|--------|
2019-05-14 17:55:52|36            |0nnnnnnnnn    |xxxxxxxxxx               |outgoing|
2019-05-14 17:55:16|                |0nnnnnnnnn    |xxxxxxxxxx               |outgoing|
2019-05-14 17:55:09|                |0nnnnnnnnn    |xxxxxxxxxx               |outgoing|
2019-05-14 17:37:41|58            |0mmmmmmm  |yyyyyyyyyyyyyy        |outgoing|
2019-05-14 17:36:43|                |0mmmmmmm  |yyyyyyyyyyyyyy        |outgoing|
2019-05-14 17:36:36|                |0mmmmmmm  |yyyyyyyyyyyyyy        |outgoing|


Was jetzt als einziges noch stört, ist dass ich die Zeilen mit der leeren DAUER nicht wegbekomme. Das ist aber mittlerweise ein SQL-Problem.
Danke an alle für die Hilfe bisher

amenomade

Etwas in der Art
attr fbCallMonitor userReadings event:.disconnect { ReadingsTimestamp("fbCallMonitor", "event","")."|".ReadingsVal("fbCallMonitor","internal_number","")."|".ReadingsVal("fbCallMonitor","external_number","")."|".ReadingsVal("fbCallMonitor","call_duration","") }
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

frankreed

Das probiere ich doch gleich mal heute Abend aus  :)

Frank_Huber

könntest Du im SQL nicht einbauen "und Dauer nicht leer"?
FROM history WHERE DEVICE = 'CallMonitor' and DAUER ne ""

frankreed

Das mit dem SQL einbauen habe ich versucht mit allen Kombinationen, aber da kommt immer nur ein Fehler....

Frank_Huber

Da bräuchten wir nen SQL Spezi.
Ich wüsste da im Forum nur Heiko (DS_Starter).
Schreib ihn doch mal an mit nem Link hierher.

Gesendet von meinem Doogee S60 mit Tapatalk


frankreed

Ich habe es jetzt mal mit einem userreading nach der Vorlage von amenomade versucht:

attr CallMonitor userReadings event:.disconnect { ReadingsTimestamp("CallMonitor", "event","")."|".ReadingsVal("CallMonitor","internal_number","")."|".ReadingsVal("CallMonitor","external_number","")."|".ReadingsVal("CallMonitor","call_duration","") }


Leider passiert da gar nichts, es werden keine userReadings erzeugt und im EventLog ist auch nicht zu sehen....

amenomade

#15
Prüfe das "trigger":event:.disconnect ob das mit deinen Events im EventMonitor stimmt
Und guck mal,was in der Log steht (ggf. mit verbose 5 auf CallMonitor)

Was meinst Du mit "EventLog"? Fhem Log oder Eventmonitor?

Wenn Du im Eventmonitor gar keine Events hast, wenn jemand anruft oder wenn Du anrufst, dann hast Du vielleicht event-on-change-reading auf CallMonitor gesetzt?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus