JSON Liste in UI darstellen

GUI Relevanten, PaperUI, BasicUI, HabPanel ...

Moderatoren: seppy, udo1toni

penguin
Beiträge: 6
Registriert: 12. Nov 2022 15:15

JSON Liste in UI darstellen

Beitrag von penguin »

Hallöle
Ich habe mit TR064 einen Channel, der die Liste der eingegangene Anrufe meiner Fritzbox anzeigt, als JSON Liste, also ungefähr so:

Code: Alles auswählen

[{"localNumber":"6457389","remoteNumber":"","date":"2022-11-14T17:18:00+01","type":1,"duration":1},{"localNumber":"6457388","remoteNumber":"0654321","date":"2022-11-13T16:53:00+01","type":1,"duration":6},{"localNumber":"6457389","remoteNumber":"01223456","date":"2022-11-13T16:53:00+01","type":1,"duration":1},....]
Wie kann ich diese Liste als formatierten Text/Tabelle darstellen ? Irgendwie fehlt mir der Packan...

Danke schonmal

Benutzeravatar
udo1toni
Beiträge: 10566
Registriert: 11. Apr 2018 18:05
Answers: 146
Wohnort: Darmstadt

Re: JSON Liste in UI darstellen

Beitrag von udo1toni »

Meines Wissens gibt es in openHAB bisher keine Option, ein JSON Objekt direkt in eine Tabelle umzuwandeln und darzustellen. Allerdings ist die Liste der Widgets enorm groß, mag also sein, dass schon jemand etwas dafür gebastelt hat.

Ich habe das über Grafana gelöst, allerdings habe ich jeweils einen einzelnen Anruf als Datensatz in einer MariaDB Tabelle vorliegen.

Ist das JSON zeitlich sortiert? dann könnte man eine Rule bauen, welche die ersten (oder letzten) x "Zeilen" in Items extrahiert, diese könnte man dann in der UI untereinander pappen, so dass man quasi eine Tabelle bekommt.
openHAB3.3.0 in einem Debian-Container (Proxmox, LXC)

penguin
Beiträge: 6
Registriert: 12. Nov 2022 15:15

Re: JSON Liste in UI darstellen

Beitrag von penguin »

Ich hab bei den openHab UI widgets nichts gefunden.....
aber Danke erst mal

Benutzeravatar
scotty
Beiträge: 621
Registriert: 28. Apr 2020 04:44

Re: JSON Liste in UI darstellen

Beitrag von scotty »

Mit diesem Thema habe ich mich vor einiger Zeit auch schon einmal beschäftigt. Dann aber wieder verworfen, weil mir die Ausgabe des JSON durch die unterschiedlich langen Telefonnummern zu unübersichtlich war.
Wenn über das TR-064 Binding der Channel CallList aktiviert ist, werden nach dem Ende einer Verbindung alle Anrufarten der letzten 7 Tage bereitgestellt (bei Einstellung CallList7). Die Bereitstellungen sind die gleichen wie von der FritzBox, also 1 (eingehend), 2 (verpasst), 3 (ausgehend), 10 (abgewiesen).
Es handelt sich um ein zeitlich sortiertes JSON, neueste Verbindung zuerst. Deshalb würde mich mal interessieren, wie eine Rule aussehen könnte um die von Udo erwähnte Tabelle zu erhalten. Da die Liste für 7 Tage unterschiedlich lang werden kann, lässt sich allerdings eine genaue Anzahl der Zeilen vorab nicht festlegen.

Die CallList7 wird übrigens genau wie im Code-Beispiel vom TE im Log angezeigt:

Code: Alles auswählen

2022-11-25 15:41:15.966 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'FritzBox_CallList7' changed from [{"localNumber ":"12345678","remoteNumber ":"080098765432","date":"2022-11-25T14:57:00+02","type":3,"duration":1},
usw.
Mich interessiert zusätzlich, ob aus dieser Zeile die Dauer ausgelesen und an ein Item übergeben werden kann.

Vielen Dank im Voraus.
OH 3.3 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

Benutzeravatar
udo1toni
Beiträge: 10566
Registriert: 11. Apr 2018 18:05
Answers: 146
Wohnort: Darmstadt

Re: JSON Liste in UI darstellen

Beitrag von udo1toni »

Also, in dem Auszug aus den Beispieldaten taucht immer wieder das Wort duration auf, das wäre meines Erachtens ein heißer Kandidat :)
Allerdings ist das oben tatsächlich verstümmeltes JSON.
openHAB3.3.0 in einem Debian-Container (Proxmox, LXC)

Benutzeravatar
scotty
Beiträge: 621
Registriert: 28. Apr 2020 04:44

Re: JSON Liste in UI darstellen

Beitrag von scotty »

Hallo Udo,

entschuldige bitte, dass ich Duration gleich ins deutsche übersetzt habe ;) Also kann man den Wert auslesen und an ein Item übergeben?

Würdest du mir auch verraten wie man das macht? Das Ergebnis könnte ich dann nämlich in Abhängigkeit vom Typ 1 oder 3 an das Item 'Flag_1_EDauer' bzw 'Flag_1_ADauer' übergeben. Das Ergebnis ist dann zwar nicht so genau wie ursprünglich gewünscht, aber immerhin hätte ich etwas, womit man arbeiten kann.

Danke im Voraus.
OH 3.3 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

Benutzeravatar
udo1toni
Beiträge: 10566
Registriert: 11. Apr 2018 18:05
Answers: 146
Wohnort: Darmstadt

Re: JSON Liste in UI darstellen

Beitrag von udo1toni »

Ich bräuchte halt einen gültigen Auszug dieser Meldungen.
Am besten holt man so ein JSON Objekt und lädt es in einen Editor, der JSON unterstützt, z.B. Notepad++ oder VSCode (beide natürlich jeweils mit den passenden Plugins)
Dann kann man das JSON formatieren lassen und z.B. Nummern unkenntlich machen, ohne Sorge zu haben, dabei die Struktur der Datei zu beschädigen.
openHAB3.3.0 in einem Debian-Container (Proxmox, LXC)

Benutzeravatar
peter-pan
Beiträge: 2331
Registriert: 28. Nov 2018 12:03
Answers: 23
Wohnort: Schwäbisch Gmünd

Re: JSON Liste in UI darstellen

Beitrag von peter-pan »

Code: Alles auswählen

[
    {
        "localNumber": "6457389",
        "remoteNumber": "",
        "date": "2022-11-14T17:18:00+01",
        "type": 1,
        "duration": 1
    },
    {
        "localNumber": "6457388",
        "remoteNumber": "0654321",
        "date": "2022-11-13T16:53:00+01",
        "type": 1,
        "duration": 6
    },
    {
        "localNumber": "6457389",
        "remoteNumber": "01223456",
        "date": "2022-11-13T16:53:00+01",
        "type": 1,
        "duration": 1
    }
]
..wie wär's damit (ein bisschen verkürzt) mit VSC.

Sieht so aus, als ob die Dauer in Minuten angegeben wird (oder in Stunden.... ;) )

Edit: Ich bin, wie bereits gesagt, ein Dummy, aber ich denke, dass so was in einem Custom-Widget mit "Array" und/oder "split" und OH-Repeater gelöst werden kann/könnte. Vielleicht gibt es dazu Beispiele im internationalen Forum.

Benutzeravatar
udo1toni
Beiträge: 10566
Registriert: 11. Apr 2018 18:05
Answers: 146
Wohnort: Darmstadt

Re: JSON Liste in UI darstellen

Beitrag von udo1toni »

Das sieht doch gut aus!
Ein passendes JSONPATH Statement wäre z.B.

Code: Alles auswählen

$.[0].duration
für die erste duration.

Code: Alles auswählen

$.length
sollte die Anzahl der Datensätze verraten (also im Beispiel 3).
Man könnte auch gezielt duration für einen bestimmten Zeitstempel aus der Liste entnehmen:

Code: Alles auswählen

$.[?@.date=="2022-11-13T16:53:00+01"].duration
Es wird also nicht der n-te Datensatz genommen, sondern der, in dem das Feld date einen bestimmten Wert hat.
openHAB3.3.0 in einem Debian-Container (Proxmox, LXC)

Benutzeravatar
scotty
Beiträge: 621
Registriert: 28. Apr 2020 04:44

Re: JSON Liste in UI darstellen

Beitrag von scotty »

Hallo Udo,
Hallo Peter,

vielen Dank für eure Unterstützung. Vielleicht habe ich mich zuletzt nicht gang verständlich ausgedrückt. Ein Widget zur Darstellung habe ich bereits gebaut. Ich denke, dass deshalb meine Aufgabenstellung etwas einfacher ist.
Ich habe ja noch immer keine Lösung für dieses Problem viewtopic.php?p=49327#p49327 gefunden. Deshalb würde es mir inzwischen reichen, wenn nach Beendigung einer jeden Verbindung (Eingang = Type 1 und Ausgang = Type 3) die o. g. Info zu 'openhab.event.ItemStateChangedEvent' über eine Regel zerlegt wird. Das Ergebnis für 'duration' in dieser einen Zeile soll anschließend dem Item für Eingang 'Flag_1_EDauer' oder für Ausgang dem Item 'Flag_1_ADauer' mittels Postupdate übergeben wird.

Ich freue mich auf weitere Mithilfe.
OH 3.3 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

Antworten