Seite 2 von 2

Re: Pause in einer Regel

Verfasst: 30. Sep 2022 15:53
von scotty
Ja genau, so ähnlich soll meine Liste später auch einmal aussehen. Wenn ich dich richtig verstehe, werden die Werte gleich in MariaDB oder Influx gespeichert. So weit bin ich ja noch nicht, sondern muss erst mal lernen, wie das überhaupt funktioniert.

Re: Pause in einer Regel

Verfasst: 30. Sep 2022 16:57
von udo1toni
Na, das passiert mittels Persistence.
eventuell muss ich dazu etwas ausholen, aber ich versuche es kurz zu machen ;)
Ich habe keine FRITZ!Box, aus Gründen.
Vor vielen Jahren hatte ich mal eine Ackermann Euracom an einem ISDN-Anschluss, danach eine Auerswald 5020 VoIP und dann hatte ich die Faxen dicke und habe eine Asterisk aufgesetzt. Weil das auch nicht so arg komfortabel war, bin ich letztlich bei FreePBX gelandet (lässt auch an vielen Stellen zu wünschen übrig, aber ich habe mich arangiert).
FreePBX bietet viele Module für zusätzliche Kommunikation, insbesondere gibt es eine mächtige Rückwärtssuche, welche mit vielen Community Plugins erweitert wurde, so dass bei einem Anruf nicht nur die Nummer in den Namen umgesetzt, sondern wahlweise auch über diverse Schnittstellen anderen Geräten zur Verfügung gestellt wird, seien es externe Datenbanken, ein MythTV System oder was auch immer.
Was allerdings fehlte, war ein Modul, um per MQTT zu kommunizieren. Ich hab mir also ein bestehendes Modul genommen und es so umgebaut, dass es MQTT ausgibt. Klingt imposant, war es aber eigentlich gar nicht. Der schlimmste Teil daran war, das Ergebnis ins Repository rein zu bekommen, so dass auch andere es nutzen können :lol:
Die Anlage haut jetzt also bei jedem Anruf einen kompletten Datensatz über MQTT auf ein frei wählbares Topic raus. Der Datensatz wird per JSON ausgegeben.
openHAB lauscht auf dem Topic, empfängt jede Änderung und schreibt sie umgehend in ein Item. Dieses Item wird persistiert.

Meine vollständige Konfiguration zu diesem Thema lautet also:
Thing:

Code: Alles auswählen

// irgendwo weiter oben ist der Broker definiert
     Thing topic freepbx "FreePBX" @ "mqtt" {
        Channels:
            Type string : ch01 "Nummer 1" [ stateTopic= "freepbx/calls/nummermitvorwahl1" ]
      }
Statt nummermitvorwahl1 stehen dort die Nummern incl. Ortsvorwahl, also z.B. 030654321098 (ich wohne nicht in Berlin...) Ich habe für jede Rufnummer einen eigenen Channel angelegt, das ganze steht also zehn mal da.
Das Item:

Code: Alles auswählen

String Freepbx_Ch01 "Nummer 1" (Anruf) {channel="mqtt:topic:mymqtt:freepbx:ch01"}
Die Persistence in jdbc.persist:

Code: Alles auswählen

Strategies {
        everyMinute : "0 * * * * ?"
}

Items {
        Anruf*                  : strategy = everyUpdate,restoreOnStartup
}
Alle Items der Gruppe Anruf werden bei jedem Update persistiert.

Ein Datensatz sieht so aus:

Code: Alles auswählen

{"number": "+49xxxxxxxxx6","name": "Pxxxxxxxxxxxx","extension": "06151xxxxxxx","format": "Pxxxxxxxxxxxl (+49xxxxxxxxxx)"}
Der Zeitpunkt des Anrufs ergibt sich aus dem Zeitstempel des Datensatzes, Das Feld format ist für die einfache Anzeige ohne viel Schnickschnack gedacht, so dass ich in openHAB über ein zweites Item mit Profile JSONPATH:$.format direkt den letzten Anrufer anzeigen lassen kann.

Die Daten landen nun über die Persistence automatisch in der MariaDB Datenbank, welche ich in Grafana abrufe. Dabei landen die Daten in der Tabelle mit dem Namen item0061, weil ich das nie auf Klartext Namen umgestellt habe.

Also das vollständige Query in Grafana:

Code: Alles auswählen

SELECT Time as 'Datum & Zeit',json_extract(Value, '$.extension') as Anruf,json_extract(Value,'$.number') as Nummer, json_extract(Value,'$.name') as Name from item0061 ORDER BY Time DESC LIMIT 10
Und Du kannst langsam erkennen, wie simpel das Ganze ist...
Noch ein wenig Kosmetik (Formatierung der Spalten, insbeondere die Spalte Anruf, welche die angerufene Rufnummer enthält muss ja noch auf einen Klartext Namen umgewandelt werden) und fertig ist die Tabelle.

Re: Pause in einer Regel

Verfasst: 30. Sep 2022 18:45
von scotty
udo1toni hat geschrieben: 30. Sep 2022 16:57 Und Du kannst langsam erkennen, wie simpel das Ganze ist...
eigentlich nicht. Wenn ich lese, dass "irgendwo weiter oben der Broker definiert ist" muss ich zunächst mal fragen, brauche ich dazu so etwas wie MQTT? Hab ich nämlich bisher nicht installiert und ich müsste mich diesbezüglich auch erst mal einlesen.

Re: Pause in einer Regel

Verfasst: 30. Sep 2022 22:17
von udo1toni
Nein, MQTT brauchst Du nur, wenn die Information (also wer ruft wen an) über MQTT in openHAB ankommt. Bei Dir kommt es mittels FRITZ!Box rein, vermutlich (ich habe ja oben erwähnt, dass ich keine FRITZ!Box nutze) als Call Item? Wobei, wird da der Name mitgeliefert? Und wenn ja, was passiert, wenn kein Name geliefert werden kann?
Das Format ist ja nicht JSON, da muss man natürlich schauen, wie die Trennung der verschiedenen Teile der Information geschickt vonstatten gehen kann, und was passiert, wenn Teile der Information nicht geliefert werden (falls das geschehen kann - bei mir ist das ausgeschlossen, das ist durch das FreePBX Modul sichergestellt).
Letztlich kommt der Anruf herein und wird im Item angezeigt, das Item wird persistiert, damit ist der Teil in openHAB erledigt.
Der Rest passiert dann in Grafana, mit einer einfachen Datenbankabfrage.
Sollte der gelieferte Datensatz (also der Inhalt des Call Items) in seiner Form sehr ungeeignet sein, um die Trennung in Grafana komfortabel abzuwickeln, könnte man eine kleine Rule anlegen, die sich darum kümmert, die Daten in openHAB passend aufzubereiten.

Re: Pause in einer Regel

Verfasst: 1. Okt 2022 00:47
von scotty
Danke für die ausführlichen Informationen.
Beim TR-064 Binding in Verbindung mit dem Fritz Binding ist es so, dass bei korrekter Konfiguration die Daten als Call Item zur Verfügung gestellt werden. Dabei wird auf das Telefonbuch in der Fritz zurückgegriffen, um über die Telefonnummer den dazu gehörigen Namen bereit zu stellen. Wenn der nicht zur Verfügung steht, kann über json der Wert z. B. in "Anonym" geändert werden. Eine andere Rückwärts suche ist mir nicht bekannt. Um die Daten nach einem Neustart noch zur Verfügung zu haben, werde ich später noch auf Influx2 zurückgreifen.