Neues Modul JSONREADINGS zur Einbindung beliebiger json-Daten per URL

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

Vorheriges Thema - Nächstes Thema

drhirn

Zitat von: TWART016 am 03 Dezember 2015, 00:04:44
Welches Recht muss man denn der Datei vergeben und mit welchem Befehl?

Der User fhem aus der Gruppe dialout muß der Besitzer sein. Stichwort chown

Zitat von: TWART016 am 03 Dezember 2015, 00:04:44
define BerlinMuenchen JSONREADINGS https://www.google.de/maps/dir/Berlin/M%C3%BCnchen/@50.3122547,9.90211,7z/data=!3m1!4b1!4m13!4m12!1m5!1m1!1s0x47a84e373f035901:0x42120465b5e3b70!2m2!1d13.404954!2d52.5200066!1m5!1m1!1s0x479e75f9a38c5fd9:0x10cb84a7db1987d!2m2!1d11.5819806!2d48.1351253 <poll-delay>
Wäre das so korrekt?

Ja

Zitat von: TWART016 am 03 Dezember 2015, 00:04:44
Was sollte man bei poll-delay eintragen?

Wie oft (in Sekunden) die Webseite abgefragt werden soll.

TWART016

nach dem einrichten des jsonreadings komme ich nich nicht mehr in FHEM.

Folgendes steht im fhem log
malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "<!DOCTYPE html>\n<ht...") at ./FHEM/70_JSONREADINGS.pm $
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 505, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/opt/yowsup-master/yowsup/demos/cli/cli.py", line 151, in startInputThread
    cmd = self._queuedCmds.pop(0) if len(self._queuedCmds) else input(self.getPrompt()).strip()
IOError: [Errno 104] Connection reset by peer


Der Fehler kommt genau dann, wenn ich in fhem.cfg schreibe und auf save klicke.


Folgendes habe ich gemacht:
1) sudo cpan install JSON
2) sudo apt-get install libjson-perl
3) neue Datei 70_JSONREADINGS.pm erstellt und den Text aus github rein kopiert.
4) Datei auf Raspberry Pi verschoben (/opt/fhem/FHEM/70_JSONREADINGS.pm) und Besitzer geändert: sudo chown  -c fhem:dialout /opt/fhem/FHEM/70_JSONREADINGS.pm
5) in fhem.cfg schreiben: define BerlinMuenchen JSONREADINGS https://www.google.de/maps/dir/Berlin/M%C3%BCnchen/@50.3122547,9.90211,7z/data=!3m1!4b1!4m13!4m12!1m5!1m1!1s0x47a84e373f035901:0x42120465b5e3b70!2m2!1d13.404954!2d52.5200066!1m5!1m1!1s0x479e75f9a38c5fd9:0x10cb84a7db1987d!2m2!1d11.5819806!2d48.1351253 120
u

6) save

anschließend geht die Verbindung zu FHEM innerhalb von wenigen Sekunden verloren: Diese Webseite ist nicht verfügbar.

ERR_CONNECTION_REFUSED




Was einer wie ich wieder in die FHEM GUI komme? Per ssh komme ich weiterhin auf den Raspberry Pi.

stefan-dd

Das Modul finde ich sehr gut.
Leider habe ich mit den Umlauten ein Problem, diese werden verfälscht dargestellt. Im TabletUI fehlt dann das komplette Reading. Kann man diese umwandeln, oder den entsprechenden Schriftsatz definieren?


Holger_Richter

Hallo zusammen,

besteht die Möglichkeit, in den URL Perl-Variablen einzusetzen? Alle meine Versuche führen zum FHEM Absturz. Ich möchte von meinem Discovergy-Zähler den Stand ablesen. Der Benötigt aber das heutige Datum als Parameter für den Abruf des Zählerstandes. (https://my.discovergy.com/json/Api/help)

Ich benötige die PERL-Variablen $month, $mday und $year als URL-Parameter.

Ich dachte, ich verwende die geschweiften Klammern und füge mir den String zusammen. Aber wie übergebe ich den an FHEM?

{my $string = join "[url="https://my.discovergy.com/json/Api.getReading?user=HolgerRichter200017@gmail.com&password=geheim&meterId=EASYMETER_1234567&day=",$mday,"&month=",$month,"&year=",$year"]https://my.discovergy.com/json/Api.getReading?user=HolgerRichter200017@gmail.com&password=geheim&meterId=EASYMETER_1234567&day=",$mday,"&month=",$month,"&year=",$year[/url]}

Gruß
Holger

costa2

Hallo.

Ich habe das Modul Heute mal getestet.

Leider liest es die wichtigsten Daten, wie z.B. Temperatur, nicht aus.

Das JSON File hat folgende Struktur:

{
    "020a3739d217": {
        "buffer": {
            "type": "Buffer",
            "data": [
                206,
                89,
                186,
                133,
                213,
                18,
                2,
                10,
                55,
                57,
                210,
                23,
                48,
                93,
                0,
                127,
                0,
                127,
                27,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                88
            ]
        },
        "unixTime": "2017-09-14T13:36:21.000Z",
        "packageLength": 18,
        "sensorType": 2,
        "timeoutInMinutes": 60,
        "ID": "020a3739d217",
        "tx": 12381,
        "bufferOffset": 14,
        "json": {
            "temperature": [
                12.7,
                12.7
            ],
            "id": "020a3739d217",
            "t": "2017-09-14T13:36:21.000Z"
        },
        "isOffline": true
    },
    "02083fb10bac": {
        "buffer": {
            "type": "Buffer",
            "data": [
                206,
                89,
                187,
                166,
                160,
                18,
                2,
                8,
                63,
                177,
                11,
                172,
                2,
                42,
                0,
                220,
                0,
                219,
                26,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                104
            ]
        },
        "unixTime": "2017-09-15T10:08:32.000Z",
        "packageLength": 18,
        "sensorType": 2,
        "timeoutInMinutes": 60,
        "ID": "02083fb10bac",
        "tx": 554,
        "bufferOffset": 14,
        "json": {
            "temperature": [
                22,
                21.9
            ],
            "id": "02083fb10bac",
            "t": "2017-09-15T10:08:32.000Z",
            "offline": false
        },
        "isOffline": false
    },
    "0315a0114432": {
        "buffer": {
            "type": "Buffer",
            "data": [
                210,
                89,
                187,
                167,
                55,
                22,
                3,
                21,
                160,
                17,
                68,
                50,
                27,
                33,
                128,
                168,
                74,
                70,
                128,
                162,
                10,
                73,
                26,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                28
            ]
        },
        "unixTime": "2017-09-15T10:11:03.000Z",
        "packageLength": 22,
        "sensorType": 3,
        "timeoutInMinutes": 60,
        "ID": "0315a0114432",
        "tx": 6945,
        "bufferOffset": 14,
        "json": {
            "temperature": [
                16.8,
                16.2
            ],
            "humidity": [
                70,
                73
            ],
            "id": "0315a0114432",
            "t": "2017-09-15T10:11:03.000Z",
            "offline": false
        },
        "isOffline": false
    },
    "022bd216fd85": {
        "buffer": {
            "type": "Buffer",
            "data": [
                206,
                89,
                187,
                166,
                146,
                18,
                2,
                43,
                210,
                22,
                253,
                133,
                31,
                181,
                128,
                156,
                128,
                152,
                26,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                101
            ]
        },
        "unixTime": "2017-09-15T10:08:18.000Z",
        "packageLength": 18,
        "sensorType": 2,
        "timeoutInMinutes": 60,
        "ID": "022bd216fd85",
        "tx": 8117,
        "bufferOffset": 14,
        "json": {
            "temperature": [
                15.6,
                15.2
            ],
            "id": "022bd216fd85",
            "t": "2017-09-15T10:08:18.000Z",
            "offline": false
        },
        "isOffline": false
    }
}


In den Readings taucht "temperature" leider nicht auf.

Readings
02083fb10bac_ID

02083fb10bac

2017-09-16 15:06:48
02083fb10bac_bufferOffset

14

2017-09-16 15:06:48
02083fb10bac_buffer_type

Buffer

2017-09-16 15:06:48
02083fb10bac_json_id

02083fb10bac

2017-09-16 15:06:48
02083fb10bac_json_t

2017-09-15T10:08:32.000Z

2017-09-16 15:06:48
02083fb10bac_packageLength

18

2017-09-16 15:06:48
02083fb10bac_sensorType

2

2017-09-16 15:06:48
02083fb10bac_timeoutInMinutes

60

2017-09-16 15:06:48
02083fb10bac_tx

554

2017-09-16 15:06:48
02083fb10bac_unixTime

2017-09-15T10:08:32.000Z

2017-09-16 15:06:48
020a3739d217_ID

020a3739d217

2017-09-16 15:06:48
020a3739d217_bufferOffset

14

2017-09-16 15:06:48
020a3739d217_buffer_type

Buffer

2017-09-16 15:06:48
020a3739d217_json_id

020a3739d217

2017-09-16 15:06:48
020a3739d217_json_t

2017-09-14T13:36:21.000Z

2017-09-16 15:06:48
020a3739d217_packageLength

18

2017-09-16 15:06:48
020a3739d217_sensorType

2

2017-09-16 15:06:48
020a3739d217_timeoutInMinutes

60

2017-09-16 15:06:48
020a3739d217_tx

12381

2017-09-16 15:06:48
020a3739d217_unixTime

2017-09-14T13:36:21.000Z

2017-09-16 15:06:48
022bd216fd85_ID

022bd216fd85

2017-09-16 15:06:48
022bd216fd85_bufferOffset

14

2017-09-16 15:06:48
022bd216fd85_buffer_type

Buffer

2017-09-16 15:06:48
022bd216fd85_json_id

022bd216fd85

2017-09-16 15:06:48
022bd216fd85_json_t

2017-09-15T10:08:18.000Z

2017-09-16 15:06:48
022bd216fd85_packageLength

18

2017-09-16 15:06:48
022bd216fd85_sensorType

2

2017-09-16 15:06:48
022bd216fd85_timeoutInMinutes

60

2017-09-16 15:06:48
022bd216fd85_tx

8117

2017-09-16 15:06:48
022bd216fd85_unixTime

2017-09-15T10:08:18.000Z

2017-09-16 15:06:48
0315a0114432_ID

0315a0114432

2017-09-16 15:06:48
0315a0114432_bufferOffset

14

2017-09-16 15:06:48
0315a0114432_buffer_type

Buffer

2017-09-16 15:06:48
0315a0114432_json_id

0315a0114432

2017-09-16 15:06:48
0315a0114432_json_t

2017-09-15T10:11:03.000Z

2017-09-16 15:06:48
0315a0114432_packageLength

22

2017-09-16 15:06:48
0315a0114432_sensorType

3

2017-09-16 15:06:48
0315a0114432_timeoutInMinutes

60

2017-09-16 15:06:48
0315a0114432_tx

6945

2017-09-16 15:06:48
0315a0114432_unixTime

2017-09-15T10:11:03.000Z

2017-09-16 15:06:48


Kann man die JSONREADINGS.pm dementsprechend anpassen?

Volker
RPI3, Nanocul 433 MHz, 433 MHz Steckdosen, DVB-T Stick für 868 MHz TX Sensoren, MOBILE ALERTS Sensoren und Gateway

bgewehr

Das Modul habe ich geschrieben für die Strukturen des JSON von einem Wetterdienst (weatherunderground). Der besteht aber nur aus key-Value-Pärchen. Der Code macht für Deine Strukturen das Falsche, sorry! Man müsste den Code verallgemeinern, so dass er beliebige Strukturen korrekt verarbeiten kann. Wenn du die Zeit hast, ich helfe gern etwas mit, kann mich aber im Moment nicht voll drum kümmern.
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

costa2

Das wäre nett.
Sehr viele Änderungen an der JSONREADINGS.pm sind sicherlich nicht nötig, oder?

Ich nutze Json um die Daten meiner Mobile Alerts Wetterstation, ohne Umweg über die Cloud, direkt auszulesen.
Das klappt soweit, nur bekomme ich keine Readings in Fhem.

Ich hänge mal eine Beispiel Json Datei an.
RPI3, Nanocul 433 MHz, 433 MHz Steckdosen, DVB-T Stick für 868 MHz TX Sensoren, MOBILE ALERTS Sensoren und Gateway

costa2

Gelöst.

Ich habe einfach das auswertende js Script neu formatiert, nun klappts auch mit dem Modul JSONREADINGS.....

RPI3, Nanocul 433 MHz, 433 MHz Steckdosen, DVB-T Stick für 868 MHz TX Sensoren, MOBILE ALERTS Sensoren und Gateway

maddhin

HI,

ich bekomme ein:

2017.10.14 15:09:00 1: reload: Error:Modul 70_JSONREADINGS deactivated:
Excessively long <> operator at /usr/share/fhem/FHEM/70_JSONREADINGS.pm line 66.

2017.10.14 15:09:00 0: Excessively long <> operator at /usr/share/fhem/FHEM/70_JSONREADINGS.pm line 66.


im Log bzw: "Cannot load module JSONREADINGS " in der Konsole.

Wie kann ich den Fehler beheben? :)

maddhin

OK, der letzte Fehler ist wohl davon gekommen, dass komischerweise allerhand Github Zeug in der Datei stand... habe das wohl falsch heruntergeladen.

Mit der "richtigen" Datei bekomme ich jetzt ein:

2017.10.14 15:24:59 1: reload: Error:Modul 70_JSONREADINGS deactivated:
Experimental each on scalar is now forbidden at /usr/share/fhem/FHEM/70_JSONREADINGS.pm line 122.
Type of arg 1 to each must be hash or array (not private variable) at /usr/share/fhem/FHEM/70_JSONREADINGS.pm line 122, near "$ref) "
Experimental each on scalar is now forbidden at /usr/share/fhem/FHEM/70_JSONREADINGS.pm line 126.
Type of arg 1 to each must be hash or array (not private variable) at /usr/share/fhem/FHEM/70_JSONREADINGS.pm line 126, near "$ref) "

2017.10.14 15:24:59 0: Experimental each on scalar is now forbidden at /usr/share/fhem/FHEM/70_JSONREADINGS.pm line 122.
Type of arg 1 to each must be hash or array (not private variable) at /usr/share/fhem/FHEM/70_JSONREADINGS.pm line 122, near "$ref) "
Experimental each on scalar is now forbidden at /usr/share/fhem/FHEM/70_JSONREADINGS.pm line 126.
Type of arg 1 to each must be hash or array (not private variable) at /usr/share/fhem/FHEM/70_JSONREADINGS.pm line 126, near "$ref) "


Wat nu?

Hans Franz

Moin,
Deine Perl-Version ist zu neu.  ;)

Du kannst die betreffenden Zeilen so umändern:
Vorher:
while( my ($key,$value) = each $ref) {
Nacher:
while( my ($key,$value) = each %{$ref}) {

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

dev0

Zitat von: Hans Franz am 14 Oktober 2017, 13:48:05
Du kannst die betreffenden Zeilen so umändern:
Wenn das wirklich so ist, dann besser den Autor darum bitten, sonst kommen diese Anfragen immer wieder...

maddhin

Super, danke! Also mit den Änderungen funktioniert es jetzt...

Ich habe ArchLinux und mache ab und zu mal nen Update... Ist Perl da so empfindlich oder der Code so "alt"? :)

Aber generell wäre es super, wenn das Modul irgendwie einen Wiki-Eintrag oder wenigstens Kurzanleitung hätte. Selbst den Syntax muss man sich aus dem Thread selbst zusammenreimen...

Könnte man das Modul nicht einchecken?

maddhin

Jetzt wo JSONREADINGS per se funktioniert, habe ich noch Probleme mit der "Abholung".

Ich versuche Werte von AQI zu holen, z.B.: http://api.waqi.info/feed/shanghai/?token=demo

Die API ist unter http://aqicn.org/json-api/doc/ recht gut beschrieben und JSON sieht so aus:

{
    "status": "ok",
    "data": {
        "aqi": 59,
        "idx": 1437,
        "attributions": [
            {
                "url": "http://113.108.142.147:20035/emcpublish/",
                "name": "China National Urban air quality real-time publishing platform (全国城市空气质量实时发布平台)"
            },
            {
                "url": "http://shanghai.usembassy-china.org.cn/airmonitor.html",
                "name": "U.S. Consulate Shanghai Air Quality Monitor"
            },
            {
                "url": "http://www.semc.gov.cn/",
                "name": "Shanghai Environment Monitoring Center(上海市环境监测中心)"
            }
        ],
        "city": {
            "geo": [
                31.2047372,
                121.4489017
            ],
            "name": "Shanghai",
            "url": "http://aqicn.org/city/shanghai/"
        },
        "dominentpol": "pm25",
        "iaqi": {
            "co": {
                "v": 5.5
            },
            "d": {
                "v": 12
            },
            "h": {
                "v": 60
            },
            "no2": {
                "v": 17.9
            },
            "o3": {
                "v": 37.7
            },
            "p": {
                "v": 1021
            },
            "pm10": {
                "v": 50
            },
            "pm25": {
                "v": 59
            },
            "so2": {
                "v": 5.1
            },
            "t": {
                "v": 20
            },
            "w": {
                "v": 5.8
            },
            "wd": {
                "v": 40
            }
        },
        "time": {
            "s": "2017-10-14 20:00:00",
            "tz": "+08:00",
            "v": 1508011200
        }
    }
}


Das kann man auch gut auf der API Website testen.

In FHEM bekomme ich leider nichts Brauchbares:( Was könnte ich machen, um die Werte von AQI abzurufen? Oder mache ich hier etwas falsch?

Danke im Voraus!

maddhin

Also heute morgen habe ich viele JSONREADINGS Fehlermeldungen im Log gehabt, besagten "kann HTTPS string nicht identifizieren bitte LWP::Protocol::https installieren" - die genaue Meldung kann ich im Moment nicht posten, weil nach Installation von LWP::Protocol::https Fhem nun immer abstürzt!!!!!

Im Log hierzu:
2017.10.15 12:30:34 1: Including /etc/fhem.cfg
2017.10.15 12:30:34 1: PERL WARNING: Subroutine myUtils_Initialize redefined at /usr/share/fhem/FHEM/99_MyUtils.pm line 15, <$fh> line 4.
2017.10.15 12:30:34 1: PERL WARNING: Subroutine movingAverage redefined at /usr/share/fhem/FHEM/99_MyUtils.pm line 27, <$fh> line 4.
2017.10.15 12:30:34 1: PERL WARNING: Subroutine myAverage redefined at /usr/share/fhem/FHEM/99_MyUtils.pm line 81, <$fh> line 4.
2017.10.15 12:30:34 3: telnetPort: port 7072 opened
2017.10.15 12:30:34 3: WEB: port 8083 opened
2017.10.15 12:30:34 3: WEBphone: port 8084 opened
2017.10.15 12:30:34 3: WEBtablet: port 8085 opened
2017.10.15 12:30:34 2: eventTypes: loaded 404 events from /var/lib/fhem/eventTypes.txt
2017.10.15 12:30:38 3: TABLETUI: new ext defined infix:ftui/: dir:/usr/share/fhem/www/tablet:
2017.10.15 12:30:38 3: Registering HTTPSRV TABLETUI for URL /ftui   and assigned link ftui/ ...
2017.10.15 12:30:38 2: ESPEasy espBridge: Opening bridge port tcp/8383 (v1.33)
2017.10.15 12:30:38 3: espBridge: port 8383 opened
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.
2017.10.15 12:30:39 1: Including /var/lib/fhem/fhem.save
2017.10.15 12:30:39 3: Plex: multicast server discovery started
2017.10.15 12:30:39 3: Plex: broadcast server discovery started
2017.10.15 12:30:39 3: Plex: multicast client discovery started
2017.10.15 12:30:39 3: Plex: broadcast client discovery started
2017.10.15 12:30:39 3: Plex: pht client discovery started
2017.10.15 12:30:39 3: Plex: timeline listener started
2017.10.15 12:30:39 1: usb create starting
2017.10.15 12:30:40 3: Probing CUL device /dev/ttyAMA0
2017.10.15 12:30:40 3: Can't open /dev/ttyAMA0: Permission denied
2017.10.15 12:30:40 1: usb create end
2017.10.15 12:30:40 3: Opening mqtt device 127.0.0.1:1883
2017.10.15 12:30:40 3: mqtt device opened
2017.10.15 12:30:40 2: SecurityCheck:  WEB,WEBphone,WEBtablet has no associated allowed device with basicAuth. telnetPort has no associated allowed device with password/globalpassword.  Restart FHEM for a new check if the problem is fix$
2017.10.15 12:30:40 0: Featurelevel: 5.8
2017.10.15 12:30:40 0: Server started with 55 defined entities (fhem.pl:15182/2017-10-03 perl:5.026001 os:linux user:fhem pid:414)
Not a HASH reference at /usr/share/fhem/FHEM/70_JSONREADINGS.pm line 122.


Perl wieder zu neu? :)

Ich finde man sollte das Modul "aufräumen" und dann einchecken. Das ist doch ein super Modul und ich kann mir vorstellen, dass viele das nutzen würden/wollen.



EDIT: hier noch die genaue Fehlermeldung im Log:

2017.10.15 12:08:59 2: JSONREADINGS Can't get https://api.waqi.info/feed/shanghai/?token=demo -- 501 Protocol scheme 'https' is not supported (LWP::Protocol::https not installed)