Neue Version von HTTPMOD mit neuen Features zum Testen

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

Vorheriges Thema - Nächstes Thema

Esjay

#870
Hat sich erledigt.

wires.io

#871
Zitat von: wires.io am 10 September 2020, 13:53:15
S.u. - es fehlt aber noch, dass der "state" aktualisiert wird, wenn ich schalte. Benötige ich dazu "notify" oder geht das auch einfacher?

Habe es damit realisiert und habe nun eine extreme Verzögerung (ca. 10s) zwischen Mausklick on/off und Relaisklick ein/aus. Habe ich mir einen Nebeneffekt eingefangen?

defmod sonoffdiy_on_off notify sonoffdiy { fhem "get sonoffdiy state" }

wires.io

#872
Entkoppeln hilft - ist aber nicht ideal:
define sonoffdiy_on_off notify sonoffdiy { fhem "sleep 1;; get sonoffdiy state" }

amenomade

Zitat von: wires.io am 10 September 2020, 17:11:24
Entkoppeln hilft - ist aber nicht ideal:
define sonoffdiy_on_off notify sonoffdiy { fhem "sleep 1;; get sonoffdiy state" }
Ein echter Trigger wäre auch nicht schlecht. Dein notify triggert bei jedem Event von sonoffdiy. Und mit dem sleep kann es zu endlose Schleifen führen.

Und "state" zu benutzen ist auch irreführend und könnte problematisch werden. Nimm lieber "status" oder was auch immer.

Wenn 1s zu viel ist, geht auch sleep 0.1


Das mit httpVersion hätte ich nie gedacht. Sorry für den Zeitverlust.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

wires.io

Zitat von: amenomade am 10 September 2020, 21:03:57
Das mit httpVersion hätte ich nie gedacht. Sorry für den Zeitverlust.
Kein Thema! Ohne Eure Hilfe hätte ich das garnicht geschafft.

ch.eick

Zitat von: amenomade am 10 September 2020, 21:03:57
Das mit httpVersion hätte ich nie gedacht. Sorry für den Zeitverlust.
Zusammen sind wir stark, Du hast mir ja auch schon sehr oft geholfen. Vielen Dank.

@amenomade: Soll ich meine beiden Themen, die hier noch offen sind in einen extra Thread verschieben? Ich denke das das recht komplex wird.

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

ch.eick

#876
EDIT: Dieses Problem ist jetzt erstmal gelöst, der Login funktioniert.
     Vielen Dank an alle, die zugehört haben.
     Die Lösung wird später hier zu  finden sein https://wiki.fhem.de/wiki/Kostal_Plenticore_10_Plus

EDIT: Ich bin wieder einen Schritt weiter..... der response Key wird jetzt korrekt berechnet.

Ich habe mal wieder an dem Key Problem weiter getestet und bekomme es nicht hin ;-(


# Aus dem Browser bekomme ich
Authorization: Digest username="installer", realm="BoxServer", nonce="d3617eeb83d0d0cc2e6da94426220296", uri="/asp/RunData.asp", algorithm=MD5, response="05119372c842faebdd6f992cf53454da", opaque="5ccc069c403ebaf9f0171e9517f40e41", qop=auth, nc=00000002, cnonce="64cb80f3880a32f5"

# Und das wollte ich nach dieser Dokumentation [url][https://en.wikipedia.org/wiki/Digest_access_authentication/url] nachbauen.
HA1 = md5_hex("installer:BoxServer:<Passwort>")
HA2 = md5_hex("GET:/asp/RunData.asp")      <<<< das ist somit für den Aufruf ein fixer Wert

{md5_hex(md5_hex("installer:BoxServer:<Passwort>").":d3617eeb83d0d0cc2e6da94426220296:00000002:64cb80f3880a32f5:auth:".md5_hex("GET:/asp/RunData.asp"))}
response 8986fb0a61e8cfab32892c87f3dc9425

{encode_base64(md5_hex(md5_hex("installer:BoxServer:<Passwort>").":d3617eeb83d0d0cc2e6da94426220296:00000002:64cb80f3880a32f5:auth:".md5_hex("GET:/asp/RunData.asp")))}
response ODk4NmZiMGE2MWU4Y2ZhYjMyODkyYzg3ZjNkYzk0MjU=

Aber beides ist halt nicht die responce 05119372c842faebdd6f992cf53454da , die erreicht werden soll.

Natürlich habe ich immer mit dem selben <Passwort>, was auch beim Browseraufruf verwendet wurde getestet.


Das Beispiel von der Wiki bringt auch das identische Ergebnis:
{md5_hex("Mufasa:testrealm\@host.com:Circle Of Life")}
939e7578ed9e3c518a452acee763bce9

Oh man, und schon habe ich Problem gefunden....Im Passwort ist ein @ , der mit \@ maskiert werden muss :-) Und schon kann ich weiter Testen....
{md5_hex(md5_hex("installer:BoxServer:<Passwort>").":d3617eeb83d0d0cc2e6da94426220296:00000002:64cb80f3880a32f5:auth:".md5_hex("GET:/asp/RunData.asp"))}
response 05119372c842faebdd6f992cf53454da  <<<<< identisch zum Browser s.o.


Der Ursprung dieser Anfrage ist hier im Thread https://forum.fhem.de/index.php/topic,45176.msg1084014.html#msg1084014

Wie komme ich da nun weiter? Der eft Service hat auch keine Information von BYD :-(

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

amenomade

Zitat von: ch.eick am 11 September 2020, 18:02:33

Wie komme ich da nun weiter? Der eft Service hat auch keine Information von BYD :-(

Gruß
      Christian
Jetzt weiss ich aber nicht wo Du stehst. Wie wäre es mit einem "list" deines HTTPMODs?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ch.eick

Zitat von: amenomade am 11 September 2020, 20:15:18
Jetzt weiss ich aber nicht wo Du stehst. Wie wäre es mit einem "list" deines HTTPMODs?
Vielen Dank für die Rückfrage.
Das Login zum BYD Speicher läuft jetzt mit dem Digest Login.
Ich beginne nun die Informationen einzulesen und erste readings zu erzeugen. Da ist noch so viel Bewegung drin, das es heir den Rahmen sprengen würde.
Ich werde es dann im Zusammenhang mit der Kostal Plenticore Implementierung auf dem Wiki dokumentieren.

Ein noch offenes Problem ist nun dies hier https://forum.fhem.de/index.php/topic,45176.msg1084262.html#msg1084262 . Da habe ich mit gzip gepackte Daten, die ich zuerst entpacken müsste, um dann readings zu erstellen.

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

amenomade

Zitat von: ch.eick am 10 September 2020, 11:18:52

Jetzt fehlt noch der Syntax für das Perl interne gunzip/gzip . Das Problem ist, dass ich nicht eine Variable übergeben kann und den Output dann auf STDOUT ausgegeben bekomme.

Das hier sollte von STDIN lesen, aber wie bekomme ich den Inhalt einer Variable im Perl auf STDIN des nächsten Befehls????

gzip "-" => "-"


use IO::Uncompress::Gunzip qw(gunzip $GunzipError);
my $compressed = "some compressed string $data";
my $uncompressed;
gunzip \$compressed => \$uncompressed
      or print "Cannot gunzip: $GunzipError\n";
print "Result: $uncompressed";

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ch.eick

#880
Zitat von: amenomade am 12 September 2020, 12:06:21
use IO::Uncompress::Gunzip qw(gunzip $GunzipError);
my $compressed = "some compressed string $data";
my $uncompressed;
gunzip \$compressed => \$uncompressed
      or print "Cannot gunzip: $GunzipError\n";
print "Result: $uncompressed";

Das habe ich auch gefunden, jedoch wird die Variable nicht entpackt. Im usereading mache ich folgendes und es kommt jetzt auch kein Fehler mehr vom gunzip.
Der Inhalt vom httbody und dem reading Daten sieht gleich aus. Also die gleichen cryptischen Zeichen.
Kann das etwas mit dem decode zu tun haben, das httpbody durch decode verändert wurde?
Könnte HTTPMOD auf den receive Header "Content-Type: application/vnd.google-earth.kmz" reagieren und dann die Daten entpacken?

Daten:P0178.* {my $dataout;; my $datain=InternalVal("DWD_Forecast","httpbody","");; gunzip \$datain => \$dataout or print "Cannot gunzip: $GunzipError\n";;$datain}



So klappt es schon mal

cat MOSMIX_L_LATEST_P0178.kmz |gunzip|less


Hier wären Musterdaten
https://opendata.dwd.de/weather/local_forecasts/mos/MOSMIX_L/single_stations/P0178/kml/MOSMIX_L_LATEST_P0178.kmz


defmod DWD_Forecast HTTPMOD https://opendata.dwd.de/weather/local_forecasts/mos/MOSMIX_L/single_stations/P0178/kml 0
attr DWD_Forecast userattr get01Name get01URL reading01Name reading01Regex
attr DWD_Forecast DbLogExclude .*
attr DWD_Forecast get01Name P0178
attr DWD_Forecast get01URL https://opendata.dwd.de/weather/local_forecasts/mos/MOSMIX_L/single_stations/P0178/kml/MOSMIX_L_LATEST_P0178.kmz
attr DWD_Forecast reading01Name P0178
attr DWD_Forecast reading01Regex vnd.google-earth.kmz
attr DWD_Forecast room Informationen->Wetter,Strom->Photovoltaik
attr DWD_Forecast showBody 1
attr DWD_Forecast userReadings Daten:P0178.* {my $dataout;;;; my $datain=InternalVal("DWD_Forecast","httpbody","");;;; gunzip \$datain => \$dataout or print "Cannot gunzip: $GunzipError\n";;;;$datain}
attr DWD_Forecast verbose 5
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

amenomade

Zitat von: ch.eick am 12 September 2020, 13:28:42
Könnte HTTPMOD auf den receive Header "Content-Type: application/vnd.google-earth.kmz" reagieren und dann die Daten entpacken?
Ja, wenn Du dir die entspr. Regex baust, und es in einem Reading packt, kann ein userReading darauf reagieren.

Das:attr DWD_Forecast reading01Regex vnd.google-earth.kmz

macht nix. Kein capture group.

Zitat von: ch.eick am 12 September 2020, 13:28:42
Das habe ich auch gefunden, jedoch wird die Variable nicht entpackt. Im usereading mache ich folgendes und es kommt jetzt auch kein Fehler mehr vom gunzip.

Baue dann Log3 Einträge. So wirst Du sehen, was passiert.

Zitat von: ch.eick am 12 September 2020, 13:28:42

attr DWD_Forecast userReadings Daten:P0178.* {my $dataout;;;; my $datain=InternalVal("DWD_Forecast","httpbody","");;;; gunzip \$datain => \$dataout or print "Cannot gunzip: $GunzipError\n";;;;$datain}

Log3 statt print wäre besser.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Ah, und übrigens:
attr DWD_Forecast userReadings Daten:P0178.* {my $dataout;;...;;$datain}

returns datain... Wäre wahrscheinlich besser mit dataout?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Wenn man wie im DWD_OpenData Modul macht:

myUtils
use IO::Uncompress::Unzip qw(unzip $UnzipError);
sub parseKmz {
    my ($datain) = @_;
    open my $zipFileHandle, '<', \$datain;
    my @xmlStrings;
    unzip($zipFileHandle => \@xmlStrings, MultiStream => 1) or Log3 "DWD_Forecast",1,"unzip failed: $UnzipError";
    my $out = "UnzipError: $UnzipError\n";
    foreach my $xmlString (@xmlStrings) {
        $out .= $$xmlString;
        $out .= "\n";
        Log3 "DWD_Forecast",1,"xmlString=$$xmlString";
    }
    return $out;
}


HTTPMOD:
defmod DWD_Forecast HTTPMOD https://opendata.dwd.de/weather/local_forecasts/mos/MOSMIX_L/single_stations/P0178/kml 0
attr DWD_Forecast userattr get01Name get01OExpr get01Regex get01URL reading01Name reading01OExpr reading01Regex
attr DWD_Forecast get01Name P0178
attr DWD_Forecast get01OExpr parseKmz($val)
attr DWD_Forecast get01Regex (?s)(PK.*)
attr DWD_Forecast get01URL https://opendata.dwd.de/weather/local_forecasts/mos/MOSMIX_L/single_stations/P0178/kml/MOSMIX_L_LATEST_P0178.kmz
attr DWD_Forecast room Informationen->Wetter,Strom->Photovoltaik
attr DWD_Forecast verbose 5


Ergebnis:
   READINGS:
     2020-09-13 00:47:43   P0178           UnzipError:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<kml:kml xmlns:dwd="https://opendata.dwd.de/weather/lib/pointforecast_dwd_extension_V1_0.xsd" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:xal="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
    <kml:Document>
        <kml:ExtendedData>
            <dwd:ProductDefinition>
                <dwd:Issuer>Deutscher Wetterdienst</dwd:Issuer>
                <dwd:ProductID>MOSMIX</dwd:ProductID>
                <dwd:GeneratingProcess>DWD MOSMIX hourly, Version 1.0</dwd:GeneratingProcess>
                <dwd:IssueTime>2020-09-12T21:00:00.000Z</dwd:IssueTime>
                <dwd:ReferencedModel>
                    <dwd:Model dwd:name="ICON" dwd:referenceTime="2020-09-12T12:00:00Z"/>
                    <dwd:Model dwd:name="ECMWF/IFS" dwd:referenceTime="2020-09-12T12:00:00Z"/>
                </dwd:ReferencedModel>
                <dwd:ForecastTimeSteps>
                    <dwd:TimeStep>2020-09-12T22:00:00.000Z</dwd:TimeStep>
                    <dwd:TimeStep>2020-09-12T23:00:00.000Z</dwd:TimeStep>
                    <dwd:TimeStep>2020-09-13T00:00:00.000Z</dwd:TimeStep>
                    <dwd:TimeStep>2020-09-13T01:00:00.000Z</dwd:TimeStep>
                    <dwd:TimeStep>2020-09-13T02:00:00.000Z</dwd:TimeStep>
                    <dwd:TimeStep>2020-09-13T03:00:00.000Z</dwd:TimeStep>
                    <dwd:TimeStep>2020-09-13T04:00:00.000Z</dwd:TimeStep>
                    <dwd:TimeStep>2020-09-13T05:00:00.000Z</dwd:TimeStep>
                    <dwd:TimeStep>2020-09-13T06:00:00.000Z</dwd:TimeStep>
.........


Also... grundsätzlich "unzip" statt "gunzip".
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ch.eick

#884
Zitat von: amenomade am 13 September 2020, 00:56:10
Wenn man wie im DWD_OpenData Modul macht:
Also... grundsätzlich "unzip" statt "gunzip".
Ooooh man, das Modul hatte ich gar nicht gesehen, man wird echt betriebsblind....
Entschuldige bitte die Störung, das schau ich mir natürlich noch an, ich will kein Rad neu erfinden.

EDIT: Der Tip war super und man kann auch noch weitere Werte, über den default hinaus abrufen. In meinem Fall ging es ja um Rad1h. Hier die Lösung als RAW mit dem "forcastProperties Rad1h"

defmod DWD_Forecast_test DWD_OpenData
attr DWD_Forecast_test DbLogExclude .*
attr DWD_Forecast_test forecastDays 1
attr DWD_Forecast_test forecastProperties Rad1h
attr DWD_Forecast_test forecastResolution 1
attr DWD_Forecast_test forecastStation P0178
attr DWD_Forecast_test room Informationen->Wetter,Strom->Photovoltaik


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