[gelöst] Problem: Kein Decoding von JSON-Strings in json2nameValue()

Begonnen von Christian., 31 Mai 2020, 07:11:19

Vorheriges Thema - Nächstes Thema

Christian.

Ich verwende tvheadend-mqtt für die Integration von EPG-Informationen aus Tvheadend in FHEM über MQTT & JSON.

Ursprünglich habe ich das mit den Modulen MQTT_DEVICE und expandJSON gemacht.
Kürzlich habe ich auf das Modul MQTT2_DEVICE und die sub json2nameValue() umgestellt.

Seit der Umstellung werden Zeilenumbrüche und Anführungszeichen im erzeugten Reading nicht korrekt dargestellt.

Beispiel:

  • Moduldefinition:
    define mqtt_tvheadend MQTT2_DEVICE
    attr   mqtt_tvheadend readingList tvheadend/.* { json2nameValue($EVENT, "$1_") if ("$TOPIC" =~ '^.*/([^/]+)$') }


  • JSON-Nachricht (Auszug):
    Zitat
    { ...
      "finished_entries": [
        {
        ...
        "disp_description": "Lola sorgt für ein Verkehrschaos auf dem Freeway, als sie vor laufender Kamera die Aufmerksamkeit ihres Ehemannes Norman zu erlangen versucht. Während zwischen Maddie und Chimney mehr als Freundschaft zu sein scheint, versucht Neu-Single Buck wieder an der Dating-Front anzugreifen. In einer Bar läuft ihm die Reporterin Taylor Kelly über den Weg.\n\nRegie: Varda Bar-Kar\nDrehbuch: Matthew Hodgson\nKomponist: Todd Haberman, Mac Quayle\nKamera: Duane Mieliwocki\nSchnitt: Greg Sirota\n\nDarsteller:\nAngela Bassett (Det. Athena Grant)\nPeter Krause (Bobby Nash)\nJennifer Love Hewitt (Maddie Kendall)\nOliver Stark (Evan \"Buck\" Buckley)\nAisha Hinds (Henrietta \"Hen\" Wilson)\nKenneth Choi (Howie \"Chimney\" Han)\nRyan Guzman (Eddie Diaz)\nRockmond Dunbar (Michael Grant)\nRomy Rosemont (Lola)"
        },
      ...
      ],
      ...
    }

  • Reading finished_entries_10_disp_description:
    Zitat
    Lola sorgt für ein Verkehrschaos auf dem Freeway, als sie vor laufender Kamera die Aufmerksamkeit ihres Ehemannes Norman zu erlangen versucht. Während zwischen Maddie und Chimney mehr als Freundschaft zu sein scheint, versucht Neu-Single Buck wieder an der Dating-Front anzugreifen. In einer Bar läuft ihm die Reporterin Taylor Kelly über den Weg.\n\nRegie: Varda Bar-Kar\nDrehbuch: Matthew Hodgson\nKomponist: Todd Haberman, Mac Quayle\nKamera: Duane Mieliwocki\nSchnitt: Greg Sirota\n\nDarsteller:\nAngela Bassett (Det. Athena Grant)\nPeter Krause (Bobby Nash)\nJennifer Love Hewitt (Maddie Kendall)\nOliver Stark (Evan \"Buck\" Buckley)\nAisha Hinds (Henrietta \"Hen\" Wilson)\nKenneth Choi (Howie \"Chimney\" Han)\nRyan Guzman (Eddie Diaz)\nRockmond Dunbar (Michael Grant)\nRomy Rosemont (Lola)

Für mich sieht es so aus, als ob der Inhalt des JSON-Strings nicht dekodiert, sondern 1:1 in einen Perl-String übernommen wird.

Der Aufruf

{ JSON->new->allow_nonref->decode('"'.ReadingsVal("mqtt_tvheadend", "finished_entries_10_disp_description", undef).'"') }


liefert die korrekte Darstellung:

Zitat
Lola sorgt für ein Verkehrschaos auf dem Freeway, als sie vor laufender Kamera die Aufmerksamkeit ihres Ehemannes Norman zu erlangen versucht. Während zwischen Maddie und Chimney mehr als Freundschaft zu sein scheint, versucht Neu-Single Buck wieder an der Dating-Front anzugreifen. In einer Bar läuft ihm die Reporterin Taylor Kelly über den Weg.

Regie: Varda Bar-Kar
Drehbuch: Matthew Hodgson
Komponist: Todd Haberman, Mac Quayle
Kamera: Duane Mieliwocki
Schnitt: Greg Sirota

Darsteller:
Angela Bassett (Det. Athena Grant)
Peter Krause (Bobby Nash)
Jennifer Love Hewitt (Maddie Kendall)
Oliver Stark (Evan "Buck" Buckley)
Aisha Hinds (Henrietta "Hen" Wilson)
Kenneth Choi (Howie "Chimney" Han)
Ryan Guzman (Eddie Diaz)
Rockmond Dunbar (Michael Grant)
Romy Rosemont (Lola)

In der String-Verarbeitung von json2nameValue() scheint keine Dekodierung für JSON-Strings implementiert zu sein. Ist das so Absicht?
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

rudolfkoenig

Weniger Absicht, eher der Tatsache geschuldet, dass bisher keiner es vermisst hat.
Habe es jetzt implementiert.

Christian.

Habe das Update jetzt im Einsatz. Es funktioniert. Vielen Dank!
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

Beta-User

Hi Christian.,

leider funktioniert der Link aus dem ersten Post nicht...
Wollte mal nachsehen, ob es auch für andere von Interesse sein könnte? Wenn ja, können wir gerne ein attrTemplate dafür basteln.

Falls du Unterstützung dafür benötigst: mir würde ein RAW von dem Device weiterhelfen (und ein Link auf das Projekt).

Ansonsten: [gelöst]?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

hoppel118

Finde ich interessant. Habe TVHeadend auch im Einsatz. Bin allerdings gerade für ein paar Wochen auf Reise. :D

Viele Grüße Hoppel
Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic | HomeConnect | MQTT | Philips Hue | Sonos | Unifi Network & Protect | vbus | Xiaomi

Christian.

#5
Zitat von: Beta-User am 03 Juni 2020, 09:14:58
leider funktioniert der Link aus dem ersten Post nicht...

Habe ich gerade repariert, danke für den Hinweis.

Zitat von: Beta-User am 03 Juni 2020, 09:14:58
Wollte mal nachsehen, ob es auch für andere von Interesse sein könnte? Wenn ja, können wir gerne ein attrTemplate dafür basteln.

Ich selbst habe keinen Bedarf für ein Template. Die auf der Projekt-Seite dokumentierte Kombination von MQTT2_DEVICE und readingsGroup deckt meinen Anwendungsfall vollständig ab. In der FHEM-Oberfläche sieht es damit aus wie auf dem angehängten Bildschirmfoto.
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

Beta-User

Thx für den Link und die optische Darstellung.

Ein RAW wäre trotzdem interessant gewesen, dann hätte ich mal spielen können, ob man die Darstellung auch dirket via stateFormat/devStateIcon hinbekäme (ähnlich wie bei den Tasmota bzw. eQ3-update-Templates...)

(Interessantes Projekt!).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

Hoffe, hier noch eine (bzgl. FHEM ziemliche OT-Frage) stellen zu dürfen:

Habe jetzt auch tvheadend auf meinem Wohnzimmer-Rechner installiert, das läuft auch soweit. Was aber gar nicht will, ist die mqtt-Bridge; irgendwie scheint das mit dem Anmelden nicht zu klappen, ich bekomme immer diese Rückmeldung auf sudo docker exec tvheadend-mqtt /app/bin/main get_subscriptions
ZitatError: Failed to connect to host. URL: http://localhost:9981/api/status/subscriptions
Die credential-Variablen für  sollten eigentlich passen, aber auch, wenn ich das über den Browser eingebe, brauche ich mit den in der yml hinterlegten Werten zwei Anläufe...
TVHEADEND_USER:/TVHEADEND_PASSWORD: habe ich jetzt mit und ohne Quotes versucht, mal mit externen Adressen, mal mit localhost (Netzwerkbereiche für den user entsprechend freigegeben), immer kein Glück...

tvheadend Version ist die von hier: https://launchpad.net/~mamarley/+archive/ubuntu/tvheadend-git-stable
Falls jemand eine Idee hat und mir die verraten mag: Danke!
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Christian.

#8
Das ist eine Frage zu tvheadend-mqtt. Die würde ich in einem separaten Thread in Multimedia-Forum stellen. Vielleicht kann ein Moderator das verschieben?

Der ursprüngliche Inhalt dieses Beitrags wurde vom Autor gelöscht, da er inhaltlich falsch war.
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

Christian.

Die Fehlermeldung
Error: Failed to connect to host. URL: http://localhost:9981/api/status/subscriptions
deutet aber eigentlich nicht auf fehlerhafte Zugangsdaten hin. Es sieht eher nach einem Verbindungsproblem aus. Firewall? Du könntest mal von dem Rechner aus, auf dem tvheadend-mqtt läuft, per curl die Tvheadend-Seite aufrufen:
curl -u username:password http://localhost:9981/api/status/subscriptions
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

Christian.

Falls das funktioniert, wäre die nächste Stufe

docker exec tvheadend-mqtt curl -u username:password http://<tvheadend-host>:9981/api/status/subscriptions


Hierbei wird localhost als Hostname nicht funktionieren, da sich dahinter der Docker-Container von tvheadend-mqtt verbirgt.

Es ist also wichtig, dass die Umgebungsvariable TVHEADEND_HOST im Container einen von localhost abweichenden Namen hat.
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

Beta-User

Danke!

Das hat mir sehr weitergeholfen, diese Variante mit der Parameter-Übergabe war hilfreich rauszufinden, mit welcher Variante es klappt - das mit der Nutzerberechtigung ist nämlich schon irgendwie "verbogen"...

Über localhost wollte das z.B. nicht...

Jedenfalls spricht das jetzt auch mit meinem FHEM :) .

Mal sehen, wie das dann weitergeht, das sieht mir irgendwie "noch nicht fertig" aus...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files