Neue Version von HTTPMOD mit neuen Features zum Testen

Begonnen von StefanStrobel, 05 Dezember 2015, 08:31:32

Vorheriges Thema - Nächstes Thema

ch.eick

#510
Hallo det.

Schau bitte mal hier, da habe ich viele Schritte als Liste bereits aufgeführt.
Zitat von: ch.eick am 14 Januar 2019, 13:31:56

Die Vorgehensweise ist immer die gleiche... und bereits in diesem Verlauf frisch für die Vallox Cloud beschrieben.

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

mar3d@RPi3

Hallo zusammen.

Ich wollte die DWD-Warnungen im JSON-format von
attr Wetterwarner getURL https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json
attr Wetterwarner get01JSON warnings_<regionID>
attr Wetterwarner get01Name warn

holen. Das geht mit den JSON-Object-Values dank
attr Wetterwarner preProcessRegex s/warnWetter..............|\);|\t|\n|\r//g
auch ganz gut, danke schon einmal dafür. Aber ich bekomme es einfach nicht hin die Readings-Namen so zu formatieren, dass die JSON-Object-Namen darin vorkommen. Anstatt:
"Wetterwarner warn-1 Es treten Sturmb�en...." und "Wetterwarner warn-2 1549...." hätte ich lieber gerne:
"Wetterwarner warn_01_headline Es treten Sturmb�en...." und "Wetterwarner warn_01_start 1549...." oder so ähnlich.
Ich habe jetzt schon sooooo viel gelesen und probiert aber ich bekomme es einfach nicht hin. Mein fhem.log überschreitet mittlerweile die Grenze zu gigantisch (verbose 5). Kann es sein, dass es nur mit getXXRegex nicht aber mit getXXJSON geht? Obwohl: Im log unter "got keylist" steht eigentlich alles drin. ¯\_(ツ)_/¯
Könnt Ihr mir bitte einen Tip geben?

StefanStrobel

Hallo

Meinst Du so was wie

define Wetterwarner HTTPMOD https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json 0
attr Wetterwarner enableControlSet 1
attr Wetterwarner preProcessRegex s/warnWetter..............|\);;|\t|\n|\r//g
attr Wetterwarner reading01JSON warnings_116065000_01_regionName
attr Wetterwarner reading01Name Region
attr Wetterwarner reading02JSON warnings_116065000_01_state
attr Wetterwarner reading02Name Bundesland
attr Wetterwarner reading03JSON warnings_116065000_01_headline
attr Wetterwarner reading03Name Titel


Gruß
   Stefan

mar3d@RPi3

nein, so legst du die Readings ja manuell an. Die Anzahl ändert sich aber immer. Mit reading01JSON warnings_116065000 hat HTTPMOD die Readings bei mir ja automatisch angelegt. Je nach dem, welche JSON-Objekte enthalten waren. Mal mit Hinweisen, die nicht immer da sind oder mal mehrere Warnungen gleichzeitig. Das funktioniert ja prima und soll auch so bleiben.
Ich möchte die Namen der Readings (nicht die Werte) jetzt aber so formatieren, das sie nicht nur eine fortlaufende Nummer erhalten. Sie sollen die Warnung-Nummer und JSON-Objekt-Namen enthalten:
Erste Warnung, erstes Objekt (z.B.: description), zweites Objekt (z.B.: end), Zweite Warnung, erstes Objekt (z.B.: description)...:
warn-01-description, warn-01-end, warn-02-description ...
UND im Prinzip macht HTTPMOD so etwas ja auch schon. Im log:
2019.02.09 08:37:43.387 5: Wetterwarner: ExtractReading warn with json warnings_116065000 did not match a key directly - trying regex match to create a list
2019.02.09 08:37:43.428 5: Wetterwarner: ExtractReading warn with json /^warnings_116065000/ got keylist warnings_116065000_01_description warnings_116065000_01_end warnings_116065000_01_event warnings_116065000_01_headline warnings_116065000_01_instruction warnings_116065000_01_level warnings_116065000_01_regionName warnings_116065000_01_start warnings_116065000_01_state warnings_116065000_01_stateShort warnings_116065000_01_type warnings_116065000_02_description ....

Bitte beachten: warnings_116065000_01_description .... warnings_116065000_02_description ....
Ich hoffe jetzt habe ich besser erklärt, wie ich es meine.

Hubi22

Hallo

bei der Abfrage auf Donnerwetter bekomme ich folgenden Wert in LAST_ERROR:

https://www.donnerwetter.de/pollenflug/broeckel/DE14995.html: Can't connect(2) to https://www.donnerwetter.de:443: SSL connect attempt failed error:14077102:SSL routines:SSL23_GET_SERVER_HELLO:unsupported protocol

Hat jmd bitte einen Tipp wie ich den Fehler beseitigen kann?

Gruß, Hubi

StefanStrobel

Hallo mar3d@RPi3,

der Mechanismus, der in Deiner Konfiguration die Readings automatisch anlegt, funktioniert folgendermassen:
Wenn der für das Parsen angegebene JSON-String nicht existiert, sucht HTTPMOD per regex-Match alle JSON-Objekte zu finden, die matchen.
Die Objekte werden dabei wie auch bei extractAllJSON durch Verketten der Hierarchie mit _ erzeugt.
Das Ergebnis ist eine Liste und daraus werden dann die am Ende durchnummerierten Namen.
Das ist leider keine zuverlässige Methode für Deinen Fall. Es gibt keine Garantie, dass eine bestimmte Listenposition immer die gleiche Bedeutung hat.

Da die Antwort des Servers alle Regionen enthält, ist vermutlich auch ein extractAllJSON keine sinnvoll Option für Dich. Was Du bräuchtest, wäre eine Art extractAllJSONFrom. Also ein Feature, das alle Objekte ab einer vorgegebenen Hierarchie automatisch in Readings umwandelt.
Das nehme ich gerne auf die Wunschliste auf. Bisher gibt es das aber nicht.

Die vermutlich vernünftigste Lösung ist deshalb doch das manuelle Definieren aller potentiellen Readings (vorsorglich für z.B. 10 Meldungen einer Region) also als reading03JSON warnings_116065000_01_headline, reading03JSON warnings_116065000_02_headline usw. für alle gewünschten Objekte.
Wenn dann bestimmte Objekte nicht existieren, werden sie auch nicht zu Readings und alte Readings könnte man per DeleteIfUnmatched oder MaxAge entfernen.

Gruss
   Stefan

StefanStrobel

Hallo Hubi22,

ich kann den Fehler (leider) nicht nachvollziehen.
Bei mir kommt für die URL eine Seite mit
<p>You don't have permission to access /pollenflug/broeckel/DE14995.html
als Antwort.

Gruss
   Stefan

Schlimbo

Hallo Stefan,
bekomme seit dem letzten Update von HTTPMOD folgende Meldung im Log:
2019.02.12 21:07:25.715 1: PERL WARNING: Use of uninitialized value in numeric eq (==) at ./FHEM/98_HTTPMOD.pm line 2683.
2019.02.12 21:07:25.715 1: stacktrace:
2019.02.12 21:07:25.715 1:     main::__ANON__                      called by ./FHEM/98_HTTPMOD.pm (2683)
2019.02.12 21:07:25.716 1:     main::HTTPMOD_Read                  called by FHEM/HttpUtils.pm (606)
2019.02.12 21:07:25.716 1:     main::__ANON__                      called by fhem.pl (739)
2019.02.12 21:09:25.734 1: PERL WARNING: Use of uninitialized value in numeric eq (==) at ./FHEM/98_HTTPMOD.pm line 2683.
2019.02.12 21:09:25.734 1: stacktrace:
2019.02.12 21:09:25.734 1:     main::__ANON__                      called by ./FHEM/98_HTTPMOD.pm (2683)
2019.02.12 21:09:25.735 1:     main::HTTPMOD_Read                  called by FHEM/HttpUtils.pm (606)
2019.02.12 21:09:25.735 1:     main::__ANON__                      called by fhem.pl (739)

Hast du eine Idee an was das liegen könnte?

Gruß Schlimbo

mar3d@RPi3

Danke StefanStrobel,

für die ausführliche Antwort und die Aufnahme in die Wunschliste. Ich werde mir also nach deinem Muster behelfen und verbleibe gespannt lauschend.

Gruß mar3d

StefanStrobel

Hallo,

anbei eine neue Version zum Testen.
Die Warnung aus Zeile 2683 sollte damit behoben sein und es gibt ein neues Attribut extractAllJSONFilter.
Wenn man extractAllJSON auf 1 oder 2 setzt und gleichzeitig extractAllJSONFilter z.B. auf 105362000, dann werden nur solche Readings bzw. Attribute erzeugt, bei denen der Filter als Regex matcht.

Anwendungsbeispiel:


define Wetterwarner HTTPMOD https://www.dwd.de/DWD/warnungen/warnapp/json/warnings.json 0
attr Wetterwarner enableControlSet 1
attr Wetterwarner extractAllJSON 1
attr Wetterwarner extractAllJSONFilter 105362000
attr Wetterwarner preProcessRegex s/warnWetter..............|\);;|\t|\n|\r//g


dann ein set Wetterwarner reread

Gruss
   Stefan

mar3d@RPi3

wow, JSON-Objekt-Namen werden zu Reading-Namen. Das sieht sehr gut aus, danke!

Schlimbo

Hallo Stefan,
danke, mit der Version von gestern gibt es keine Warnungen mehr.

Beta-User

Habe das mit dem DWD auch mal angetestet. Zwei Fragen dazu:
- Die Formatierung der Grad-Angaben paßt bei mir nicht (es erscheint ein Sonderzeichen-Fragezeichen). Liegt das ggf. an der Lokalisierung des OS?
- (Kann sein, dass das schon irgendwo steht, aber vielleicht hat das jemand ohne große Sucherei parat): Wie kommt man an eine passende Ortsangabe, habe beim DWD auf die Schnelle nichts gefunden
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


UHT

Hallo Forum,

ich benötige eine Möglichkeit ein HTTP PUT zu senden.
Das geht afaik mit HTTMOD adhoc nicht?
Wär es nicht eine Idee, da ein noch ein parameter set[0-9]+Method zu definieren? HttpUtils kann das ja schon.

Grüße
Uwe