Neues Modul JSONREADINGS zur Einbindung beliebiger json-Daten per URL

Begonnen von bgewehr, 24 Juni 2015, 15:46:38

Vorheriges Thema - Nächstes Thema

dev0

Zitat501 Protocol scheme 'https' is not supported (LWP::Protocol::https not installed)
Man kann auch versuchen Hinweise im Log zu verstehen, anstatt sie blind zu posten.

ZitatIch finde man sollte das Modul "aufräumen" und dann einchecken.
Bevor Du selbst etwas für FHEM geleistet hat, ist diese Forderung mAn ziemlich dreist, denn mit dem Eincheck ins SVN ist auch Support verbunden.
Aber vielleicht möchtest Du ja einen Patch schreiben und dem Entwickler diesen dann anbieten?

Wenn Du ein offizielles Modul benutzen möchtest, dann bietet sich vmtl. HTTPMOD an.

maddhin

Zitat von: dev0 am 15 Oktober 2017, 10:26:27
Man kann auch versuchen Hinweise im Log zu verstehen, anstatt sie blind zu posten.

?? Ich habe auf Grund des Log-Hinweises LWP::Protocol::https installiert - was dann jetzt zu dem Fehler geführt hat!!! Die Frage ist ja was ich tun kann, DAMIT JSONREADINGS wieder funktioniert NACHDEM ich der Meldung gefolgt bin.

Nochmal, die eigentlichen Fehlermeldungen sind (siehe bereits meinem Log Auszug!!):

2017.10.15 12:30:39 1: PERL WARNING: main::toReadings() called too early to check prototype at /usr/share/fhem/FHEM/70_JSONREADINGS.pm line 121, <$fh> line 204.

Not a HASH reference at /usr/share/fhem/FHEM/70_JSONREADINGS.pm line 122.


Das hat nun wirklich nichts mit blind posten zu tun, oder?

Zitat von: dev0 am 15 Oktober 2017, 10:26:27
Bevor Du selbst etwas für FHEM geleistet hat, ist diese Forderung mAn ziemlich dreist, denn mit dem Eincheck ins SVN ist auch Support verbunden.
Aber vielleicht möchtest Du ja einen Patch schreiben und dem Entwickler diesen dann anbieten?

Ich versuche soviel zu helfen wie dies meine Fähigkeiten erlauben. Ich habe leider weder Programmier- noch IT Hintergrund und muss mir Fhem, Perl, etc pp erst aneignen. Wenn ich das Problem selbst lösen könnte, würde ich ja nicht fragen...

Bzgl. Einchecken: sorry, ich meinte dies nur positiv, weil ich denke, dass dies ein sehr nützliches Module ist. Nicht mehr und nicht weniger. Ich weiß nicht, was es bedeutet und welche Arbeit es macht, wein Module einzuchecken. Wenn dem Maintainer das Einchecken zu stressig ist, ist dies doch völlig ok.


Wzut

Das einchecken selbst ist noch keine echte Arbeit (paar Mausklicks) , aber man übernimmt damit gewisse Verpflichtungen :)
Ich habe mir das Modul mal angeschaut und denke das hätte man ohne das ganze LWP Zeugs auch nur mit FHEM Bordmittel und dazu noch non Blockuk machen können.
Schau dir doch mal die angehängte umgeschriebene Version an ob es damit klappt bei dir. Ich hatte auf die schnelle keine eigene JSON URL zur Hand und habe daher mit der http://api.waqi.info/feed/shanghai/?token=demo getestet.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

dev0

Es fehlt noch das Dereferenzieren von $ref in den beiden while Schleifen, sonst beschweren sich neuere Perlversionen ;)

Wzut

hmmm , den Teil hatte ich gestern Abend gar nicht auf dem Radar, aber stimmt auf der Seite davor wird das Thema ja bereits angesprochen. Allerdings ist meine Perl Version dann zu alt, denn ich darf es nur in der inneren Schleife ändern sonst bekomme ich die Meldung
Not a HASH reference at ./FHEM/70_JSONREADINGS.pm line 102.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

dev0

Ich habe es nicht getestet, aber ich verwende Bernds rekursive toReadings() abgewandelt auch im expandJSON Modul. Dort ist mir dieser Effekt nicht aufgefallen. Vielleicht eine Zeile vorher testen ob es eine hash reference ist und dann ggf. umwandeln.

Hans Franz

Ich mag mich irren, aber soweit ich mich erinnere ist die etwas seltsam anmutende zweifache Deklaration der sub der Rekursion geschuldet. Die Routine stammt ursprünglich von Andre und wirft bei nur einfacher Deklaration nach einem Neustart eine Fehlermeldung. Habe es jetzt aber nicht erneut eruiert.

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Wzut

Zitat von: dev0 am 17 Oktober 2017, 10:31:20
Vielleicht eine Zeile vorher testen ob es eine hash reference ist und dann ggf. umwandeln.
nö nicht nötig, eigene Dummheit ... macht man es richtig so wie du in expandJSON passt es :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

dev0

Um folgende Warnung, neuerer Perlversionen, vorzubeugen kann man die Sub toReadings() weiter oben im Quelltext noch zusätzlich deklarieren.
ZitatPERL WARNING: main::XXXfn() called too early to check prototype at...

Wenn es rund ist: Magst Du einen Pull Request stellen, wenn Du einen Github Account hast? Sonst kann ich das auch machen. Hier im Anfängerbereich geht Deine Arbeit sonst schnell unter.


dev0


Wzut

@dev0 , nein ich habe selbst keinen Account. Ich habe die Version von gestern Abend ausgetauscht, schau doch bitte nochmal drüber das jetzt alles so einigermaßen passt.
Dann kann bgewehr irgendwann wenn er mal Zeit und Lust hat sich aussuchen was er davon übernehmen möchte. 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

dev0

Ich weiss nicht wie es im "Original" ist, aber ich würde die Subs nicht JR_.* sondern durchgängig JSONREADINGS_.* benennen. Sonst sieht es auf den ersten Blick gut aus, habe es aber nicht getestet. Wäre nett, wenn das jemand macht, der das Modul auch nutzt.

bgewehr

Ja, bin dabei. Bei PR werde ich gern mergen, selbst ist es mir grad zeitlich schwer möglich, voll einzusteigen.
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

maddhin

Zuest mal herzlichen Dank, dass ihr der Sache nachgeht! Super!

Ich habe Perl v5.26.1 und das Modul funktioniert nun!

Zumindest mit dem https://api.waqi.info/feed/shanghai/?token=demo Link. Den Link (mit token), den ich eigentlich abrufen will geht nicht, aber das wird an der API liegen und sollte mit dem Module nichts zu tun haben. Muss ich mich später mal ranmachen.

War es naiv Arch Linux auf dem RPi für Fhem zu installieren? Aber ich hätte sonst eine andere App nicht installieren können.

Macht es Sinn bzw kann man Perl-updates stoppen, damit das nicht ein endloses Problem wird?

dev0

Zitat von: maddhin am 17 Oktober 2017, 13:47:28
War es naiv Arch Linux auf dem RPi für Fhem zu installieren?
Wenn Du Dich damit auskennst oder zumindest einarbeitest, dann nicht ;)

Offizielle FHEM Module sollten auch immer mit den aktuellsten Perl Versionen klar kommen. Bei den offiziellen Modulen ist das auch so oder es wird vom Maintainer angepasst, wenn er Kenntniss von einer Inkompatibilität erhält. Deine Anforderung würde sich aber wahrscheinlich auch mit offiziellen HTTPMOD Modul umsetzen lassen, das hatte ich aber auch schon geschrieben.