Neue Version von HTTPMOD mit neuen Features zum Testen

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

Vorheriges Thema - Nächstes Thema

andies

Zitat von: amenomade am 30 Mai 2020, 20:20:51
Hast Du vor kurzem die IP Adresse von rasp geändert, bzw. wurde diese IP durch das Wechseln der Fritzbox geändert? In diesem Fall könnte ein flushdns helfen
Das war es: ich habe eine neue FB installiert und dabei wurden alle IP Adressen geändert. Danke, dann schaue ich mal nach dem Stichwort flushdns, das sollte das Problem lösen.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

amenomade

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

andies

danke, hatte mir schon einen Wolf gesucht. Jetzt kann ich pingen, klappt alles!
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Gisbert

Hallo,

ich habe mit der folgenden Definition ein Problem, in der Art und Weise, dass ich seit dem 26.6. keine neuen Readings mehr reinbekomme.

Zur Historie:
ich hab mir meine Linux-Installation am gleichen Tag so versemmelt, dass nur noch das Einspielen eines 2 Monate alten Backups der root-Partition half. Ein Fhem-Backup war nur eine Woche alt, dieses habe ich auch aufgespielt.
Das meiste lief ohne weiteres rund, gelegentlich hat ein Paket gefehlt, dass ich händisch nachinstalliert hatte.

Lediglich die nachfolgende Definition wehrt sich hartnäckig neue Readings zu liefern; notwendige Pakete hatte ich nachinstalliert:
sudo apt-get install libhtml-treebuilder-xpath-perl

Kann mir jemand unter die Arme greifen?

Internals:
   BUSY       0
   DEF        https://kurse.boerse.ard.de/ard/mobile/index.htn?mobilRedirect=1 600
   FUUID      5eb660c8-f33f-e986-feed-143cad5ec4289aea
   Interval   600
   LASTSEND   1593710494.0095
   MainURL    https://kurse.boerse.ard.de/ard/mobile/index.htn?mobilRedirect=1
   ModuleVersion 3.5.22 - 7.2.2020
   NAME       Indizes_ARD
   NOTIFYDEV  global
   NR         971
   NTFY_ORDER 50-Indizes_ARD
   STATE      Dax: 12089 (-0.73%)

Dow Jones: 25019 (-2.82%)

EuroStoxx50: 3204 (-0.46%)

Nasdaq 100: 9849 (-2.50%)
   TRIGGERTIME 1593711094
   TRIGGERTIME_FMT 2020-07-02 19:31:34
   TYPE       HTTPMOD
   TimeAlign  1593381694
   TimeAlignFmt 2020-06-29 00:01:34
   addr       https://kurse.boerse.ard.de:443
   auth       0
   code       200
   compress   1
   conn       
   data       
   displayurl https://kurse.boerse.ard.de/ard/mobile/index.htn?mobilRedirect=1
   header     Cookie: USF-C-usf_mobil=2; usf_mobil=2
   host       kurse.boerse.ard.de
   httpheader HTTP/1.1 200 OK
server: Apache
last-modified: Thu, 02 Jul 2020 17:21:34 GMT
content-encoding: gzip
x-powered-by: USF-10/83/039/22
set-cookie: usf_mobil=2; path=/
set-cookie: USF-C-usf_mobil=2; path=/
content-type: text/html; charset=UTF-8
date: Thu, 02 Jul 2020 17:21:34 GMT
age: 0
via: 1.1 varnish
expires: Thu, 02 Jul 2020 17:21:34 GMT
pragma: no-cache
cache-control: no-cache
vary: Accept-Encoding,X-USF-Cookie,Cookie
x-usf-cache: MISS
x-usf-cachen: 55
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
connection: close
   httpversion 1.0
   hu_blocking 0
   hu_filecount 289
   hu_port    443
   hu_portSfx
   ignoreredirects 1
   loglevel   4
   path       /ard/mobile/index.htn?mobilRedirect=1
   protocol   https
   redirects  0
   timeout    5
   url        https://kurse.boerse.ard.de/ard/mobile/index.htn?mobilRedirect=1
   value      0
   HTTPCookieHash:
     USF-C-usf_mobil;/:
       Name       USF-C-usf_mobil
       Options    path=/
       Path       /
       Value      2
     usf_mobil;/:
       Name       usf_mobil
       Options    path=/
       Path       /
       Value      2
   QUEUE:
   READINGS:
     2020-06-26 23:21:34   dax             12089
     2020-06-26 23:21:34   dax_perc        -0.73
     2020-06-26 23:21:34   dow_jones       25019
     2020-06-26 23:21:34   dow_jones_perc  -2.82
     2020-06-26 23:21:34   euro_stoxx_50   3204
     2020-06-26 23:21:34   euro_stoxx_50_perc -0.46
     2020-06-26 23:21:34   nasdaq_100      9849
     2020-06-26 23:21:34   nasdaq_100_perc -2.50
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 0
     type       update
     url        https://kurse.boerse.ard.de/ard/mobile/index.htn?mobilRedirect=1
     value      0
   helper:
     bm:
       HTTPMOD_Attr:
         cnt        2
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        02.07. 16:13:53
         max        0.00546693801879883
         tot        0.00553393363952637
         mAr:
           set
           Indizes_ARD
           verbose
           5
       HTTPMOD_Get:
         cnt        18
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        02.07. 16:14:41
         max        0.000158071517944336
         tot        0.00149178504943848
         mAr:
           HASH(0x561eb21b4f10)
           Indizes_ARD
           ?
       HTTPMOD_Notify:
         cnt        41
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        02.07. 10:37:11
         max        1.81198120117188e-05
         tot        0.000410079956054688
         mAr:
           HASH(0x561eb21b4f10)
           HASH(0x561ea72e4bf8)
       HTTPMOD_Set:
         cnt        82
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        29.06. 20:13:03
         max        0.0149388313293457
         tot        0.0722296237945557
         mAr:
           HASH(0x561eb21b4f10)
           Indizes_ARD
           ?
   sslargs:
Attributes:
   alias      börse.ARD.de
   alignTime  00:01:34
   event-min-interval .*:1800
   event-on-change-reading .*
   group      Index
   reading01Format %.0f
   reading01Name dax
   reading01OExpr $val =~ s/\.//g; $val =~ s/\,/./g; $val
   reading02Format %.0f
   reading02Name dow_jones
   reading02OExpr $val =~ s/\.//g; $val =~ s/\,/./g; $val
   reading03Format %.0f
   reading03Name euro_stoxx_50
   reading03OExpr $val =~ s/\.//g; $val =~ s/\,/./g; $val
   reading04Format %.0f
   reading04Name nasdaq_100
   reading04OExpr $val =~ s/\.//g; $val =~ s/\,/./g; $val
   reading05Name dax_perc
   reading05OExpr $val =~ s/\,/./g; $val =~ s/\+//g; $val =~ s/\%//g; $val
   reading06Name dow_jones_perc
   reading06OExpr $val =~ s/\,/./g; $val =~ s/\+//g; $val =~ s/\%//g; $val
   reading07Name euro_stoxx_50_perc
   reading07OExpr $val =~ s/\,/./g; $val =~ s/\+//g; $val =~ s/\%//g; $val
   reading08Name nasdaq_100_perc
   reading08OExpr $val =~ s/\,/./g; $val =~ s/\+//g; $val =~ s/\%//g; $val
   room       Finance
   sortby     1
   stateFormat Dax: [$name:dax] ([$name:dax_perc]%)

Dow Jones: [$name:dow_jones] ([$name:dow_jones_perc]%)

EuroStoxx50: [$name:euro_stoxx_50] ([$name:euro_stoxx_50_perc]%)

Nasdaq 100: [$name:nasdaq_100] ([$name:nasdaq_100_perc]%)
   timeout    5
   userattr   reading01Format reading01Name reading01OExpr reading01XPath reading02Format reading02Name reading02OExpr reading02XPath reading03Format reading03Name reading03OExpr reading03XPath reading04Format reading04Name reading04OExpr reading04XPath reading05Format reading05Name reading05OExpr reading05XPath reading06Format reading06Name reading06OExpr reading06XPath reading07Format reading07Name reading07OExpr reading07XPath reading08Format reading08Name reading08OExpr reading08XPath


Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

mumpitzstuff

Wie findet das Ding denn die Werte der Kurse? Ich sehe da irgendwie nur den readingname und wie der extrahierte Wert umformatiert werden soll, nicht aber wie der Wert selbst extrahiert werden soll. Fehlt da nicht irgendwas?

Gisbert

Zitat von: mumpitzstuff am 02 Juli 2020, 22:35:47
Wie findet das Ding denn die Werte der Kurse? Ich sehe da irgendwie nur den readingname und wie der extrahierte Wert umformatiert werden soll, nicht aber wie der Wert selbst extrahiert werden soll. Fehlt da nicht irgendwas?

Hallo mumpitzstuff,

danke für den entscheidenden Hinweis.
Es fehlten tatsächlich Attribute, die die Werte extrahieren können.

Warum fehlen die nach dem Einspielen des Fhem-Backups?
Ich kann es mir so erklären. Mit dem Backup des root-Verzeichnisses habe ich auch Fhem mit einem 2 Monate alten Stand zurückgespielt. Das Backup der nur eine Woche alten Fhem-Dateien hat dann offensichtlich dazu geführt, dass Attribute, die die nicht zum Fhem-Stand passen, entfernt wurden. Das ist auch bei einem anderen Fhem-Modul passiert, da ist es mir aber sehr schnell aufgefallen, und ich hab die Definition angepasst.

Merke:
Vor Einspielen eines Fhem-Backup ein update durchführen !!

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

ch.eick

Hallo zusammen,
ich habe da noch 2-3 HTTPMOD Verbindungen, die ich über Python Skripte anderer Zulieferer verwende. Hier fehlt mir leider die Kenntniss, um das direkt ins HTTPMOD umzusetzen.
Ich komme zwar mit Burp recht gut zurecht und habe es auch schon an anderer Stelle erfolgreich verwendet, jedoch komme ich bei den besagten Verbindungen/Abfragen nicht weiter.
Die Useranmeldung ist mir schleierhaft.

1) Kostal Plenticore 10 API
Das zeigt die undokumentierte API Schnittstelle des Gerätes

http://<IP-Adresse>/api/v1
auth : AuthenticationShow/HideList OperationsExpand Operations
POST /auth/start     Starts the authentication process
POST /auth/logout    Deletes the current session, the session id is no longer valid
POST /auth/create_session    Creates a session for regular access to the API
POST /auth/finish     Finishes the authentication process
POST /auth/set_password     Sets a new password after successful authentication with master-key or user-password
GET /auth/me    Returns information about the user


Und so wurde es in Python3 umgesetzt

import random
import string
import base64
import json
import requests
import hashlib
import os
import hmac
from Crypto.Cipher import AES
import binascii
# pip install pycryptodome

USER_TYPE = "user"
PASSWD = '<Passwort>'
BASE_URL = "http://<IP-Adresse>/api/v1"
AUTH_START = "/auth/start"
AUTH_FINISH = "/auth/finish"

AUTH_CREATE_SESSION = "/auth/create_session"
ME = "/auth/me"

#################################################################################
##
## Hier geht es schon mit der Generierung eines 12 Zeichen langen Strings los, der als "Schlüssel" verwendet wird
## Kann man das im HTTPMOD im sid Bereich auch irgend wie generieren???
##
def randomString(stringLength):
    letters = string.ascii_letters
    return ''.join(random.choice(letters) for i in range(stringLength))

u = randomString(12)
u = base64.b64encode(u.encode('utf-8')).decode('utf-8')

#################################################################################
##
## Hier wird der Data teil als json zusammen gesetzt
##
step1 = {
  "username": USER_TYPE,
  "nonce": u
}
step1 = json.dumps(step1)

#################################################################################
##
## Das wäre dann wohl der erste sid Aufruf
##
url = BASE_URL + AUTH_START
headers = {'Content-type': 'application/json', 'Accept': 'application/json'}
response = requests.post(url, data=step1, headers=headers)

#################################################################################
##
## Nun wird die Rückmeldung gelesen
##
## Wie kann ich denn im HTTPMOD dann die Aktion mit dem bitSalt abbilden???
##
response = json.loads(response.text)
i = response['nonce']
e = response['transactionId']
o = response['rounds']
a = response['salt']
bitSalt = base64.b64decode(a)

#################################################################################
##
## Und direkt danach muss ich dann das Passwort verschlüsseln, da habe ich auch keine Umsetzungsidee.
## Gibt es im FHEM äquivalente Funktionen für den HASH oder wie oben für zufällige Buchstaben???
##
def getPBKDF2Hash(password, bytedSalt, rounds):
    return hashlib.pbkdf2_hmac('sha256', password.encode('utf-8'), bytedSalt, rounds)

r = getPBKDF2Hash(PASSWD,bitSalt,o)
s = hmac.new(r, "Client Key".encode('utf-8'), hashlib.sha256).digest()
c = hmac.new(r, "Server Key".encode('utf-8'), hashlib.sha256).digest()
_ = hashlib.sha256(s).digest()
d = "n=user,r="+u+",r="+i+",s="+a+",i="+str(o)+",c=biws,r="+i
g = hmac.new(_, d.encode('utf-8'), hashlib.sha256).digest()
p = hmac.new(c, d.encode('utf-8'), hashlib.sha256).digest()
f = bytes(a ^ b for (a, b) in zip(s, g))
proof = base64.b64encode(f).decode('utf-8')

################## Hier stoppe ich erstmal mit den Fragen #############################################################################

step2 = {
  "transactionId": e,
  "proof": proof
}
step2 = json.dumps(step2)

url = BASE_URL + AUTH_FINISH
headers = {'Content-type': 'application/json', 'Accept': 'application/json'}
response = requests.post(url, data=step2, headers=headers)
response = json.loads(response.text)
token = response['token']
signature = response['signature']

y = hmac.new(_, "Session Key".encode('utf-8'), hashlib.sha256)
y.update(d.encode('utf-8'))
y.update(s)
P = y.digest()
protocol_key = P
t = os.urandom(16)

e2 = AES.new(protocol_key,AES.MODE_GCM,t)
e2, authtag = e2.encrypt_and_digest(token.encode('utf-8'))

step3 = {
  "transactionId": e,
  "iv": base64.b64encode(t).decode('utf-8'),
  "tag": base64.b64encode(authtag).decode("utf-8"),
  "payload": base64.b64encode(e2).decode('utf-8')
}
step3 = json.dumps(step3)

headers = { 'Content-type': 'application/json', 'Accept': 'application/json' }
url = BASE_URL + AUTH_CREATE_SESSION
response = requests.post(url, data=step3, headers=headers)
response = json.loads(response.text)
sessionId = response['sessionId']

#create a new header with the new Session-ID for all further requests
headers = { 'Content-type': 'application/json', 'Accept': 'application/json', 'authorization': "Session " + sessionId }
url = BASE_URL + ME
response = requests.get(url = url, headers = headers)
response = json.loads(response.text)
authOK = response['authenticated']
if not authOK:
    print("authorization NOT OK")
    sys.exit()

url = BASE_URL + "/info/version"
response = requests.get(url = url, headers = headers)
response = json.loads(response.text)
swversion = response['sw_version']
apiversion = response['api_version']
hostname = response['hostname']
name = response['name']
print("Connected to the inverter " + name + "/" + hostname + " with SW-Version " + swversion + " and API-Version " + apiversion)

# Auth OK, now send your desired requests


url = BASE_URL + "/auth/me"
response = requests.get(url = url, headers = headers)
response = json.loads(response.text)
print(json.dumps(response, indent=4, sort_keys=True))


Meine ersten Fragen habe ich als Kommentare in den Code Bereich geschrieben.

Über Starthilfe würde ich mich freuen, da ich ja auch noch zwei Weitere Fälle habe :-)
     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

Hallo nochmal,
ich bin dann doch schon einige Schritte gegangen...
Wie komme ich den an die internen values? Oder muss ich die nochmal selber einsammeln, obwohl das Modul die ja schon hat?

2020.08.14 17:36:12.575 5: PV_Anlage_test: JSON Flatter called : prefix , ref is HASH(0xa540840)
2020.08.14 17:36:12.575 5: PV_Anlage_test: JSON Flatter sets salt to 26d5h2QtrFzMf9Nq
2020.08.14 17:36:12.575 5: PV_Anlage_test: JSON Flatter sets rounds to 29000
2020.08.14 17:36:12.575 5: PV_Anlage_test: JSON Flatter sets nonce to 28ED3DE20522vNHrLfeyIqrYV7Eb
2020.08.14 17:36:12.575 5: PV_Anlage_test: JSON Flatter sets transactionId to fdbad8dc9be611f8ebd51e9b265bc4f05cc6a7e1836f069cb497fc2bdc76fd16
2020.08.14 17:36:12.575 4: PV_Anlage_test: extracted JSON values to internal
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

Sieht so aus wie Daten, die nicht entschlüsselt sind (wahrscheinlich weil Du nicht erfolgreich authentifiziert bist)
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

Vielen Dank für's mitdenken,
ich bin schon weiter und es sind die Informationen für den Session Aufbau.
mit "extractAllJSON 2" wurde die json Antwort gelesen und als readings angelegt, womit sich die Frage schon beantwortet hat.
durch "sidParseResponse 1" wurde das auch mit dem sid Teil gemacht.
Dann habe ich die Namen noch angepasst und schon sieht es echt gut aus.

auth_me_active 0 2020-08-14 18:11:07
auth_me_anonymous 1 2020-08-14 18:11:07
auth_me_authenticated 0 2020-08-14 18:11:07
auth_me_locked 0 2020-08-14 18:11:07
auth_me_role NONE 2020-08-14 18:11:07
auth_nonce 28ED3DE20522FVAZFiSelwrf3lEL 2020-08-14 18:11:06
auth_rounds 29000 2020-08-14 18:11:06
auth_salt 26d5h2QtrFzMf9Nq 2020-08-14 18:11:06
auth_transactionId 63ae2ddb40a8510c100ea4adcfb1a70cbb91e3c5e470de41c535cbc57b7452e3 2020-08-14 18:11:06


Nun kommt der zweite sid Teil mit den nonce, rounds, salt, und transactionId angaben.
Sollte das klappen, kann ich bald das Python Skript aus Fhem wieder ausbauen :-)

Wie immer kommt dann noch ein separater Thread für das gesamte Device, indem ich das dann vorstelle.

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

#790
Ach herje, was mach ich denn jetzt damit?

a = response['salt']                          <<<<<<<<<<das habe ich bereits als reading
bitSalt = base64.b64decode(a)

def getPBKDF2Hash(password, bytedSalt, rounds):
    return hashlib.pbkdf2_hmac('sha256', password.encode('utf-8'), bytedSalt, rounds)

r = getPBKDF2Hash(PASSWD,bitSalt,o)


s = hmac.new(r, "Client Key".encode('utf-8'), hashlib.sha256).digest()
c = hmac.new(r, "Server Key".encode('utf-8'), hashlib.sha256).digest()
_ = hashlib.sha256(s).digest()
d = "n=user,r="+u+",r="+i+",s="+a+",i="+str(o)+",c=biws,r="+i
g = hmac.new(_, d.encode('utf-8'), hashlib.sha256).digest()
p = hmac.new(c, d.encode('utf-8'), hashlib.sha256).digest()
f = bytes(a ^ b for (a, b) in zip(s, g))
proof = base64.b64encode(f).decode('utf-8')

step2 = {
  "transactionId": e,
  "proof": proof
}


Ich verstehe das jetzt mal so, dass ich nach einem bestimmten Algorithmus das Passwort umwandeln muss.
Gibt es dazu eine Perl Crypto Bibliothek?
Input wäre: sha256 Verschlüsselung, das Passwort, der salt String und die Anzahl der Durchläufe.
EDIT: https://metacpan.org/pod/Crypt::OpenSSL::FASTPBKDF2 das wäre was, aber wie baue ich das dann in HTTPMOD ein?

Wie es dann zu "proof" kommt verstehe ich bisher überhaupt nicht.

Hilfe, hilfe :-)
    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

Das kannst Du nicht ohne eine sub in myUtils.

Dann mit xxxReplacementMode expression
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

#792
Zitat von: amenomade am 14 August 2020, 18:40:31
Das kannst Du nicht ohne eine sub in myUtils.

Dann mit xxxReplacementMode expression

Okay, der Mechanismus ist mir geläufig, nur wie bekomme ich das nach Perl konvertiert?

Der zweite sid Teil wäre jetzt auch schon bereit, nur fehlt mir der Wert für "proof" :-(
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

Da muss man ggf die python Doku zu pbkdf2_hmac lesen, aber prinzipiell irgendwie so:
use Crypt::OpenSSL::FASTPBKDF2 qw/fastpbkdf2_hmac_sha256/;
sub cryptPW {
  my $pw = shift; #password
  my $salt = shift; #salt
  my $rounds = shift; #rounds
  return fastpbkdf2_hmac_sha256($pw, $salt,. ..) # welche Parameter?
}

da kenne ich die optionale Parameter von der Python Funktion nicht und kann dir deswegen nicht sagen, was Du für die entspr. Parameter der Perl Funktion mitgeben musst
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

#794
Zitat von: amenomade am 14 August 2020, 19:12:50
Da muss man ggf die python Doku zu pbkdf2_hmac lesen, aber prinzipiell irgendwie so:
use Crypt::OpenSSL::FASTPBKDF2 qw/fastpbkdf2_hmac_sha256/;
sub cryptPW {
  my $pw = shift; #password
  my $salt = shift; #salt
  my $rounds = shift; #rounds
  return fastpbkdf2_hmac_sha256($pw, $salt,. ..) # welche Parameter?
}

da kenne ich die optionale Parameter von der Python Funktion nicht und kann dir deswegen nicht sagen, was Du für die entspr. Parameter der Perl Funktion mitgeben musst

Okay, so in der Art hatte ich das auch schon in der Vorstellung. Danke.

Ich habe den Skript Autor vom Python Code mal angeschrieben, der war bisher immer sehr nett :-)
EDIT: Okay, der code kam damals von Stackoverflow und wurde nur angewendet...

Ansonsten müssen die Entwickler von Kostal wieder dran glauben.
EDIT: Das ist mal wieder enttäuschend gewesen, Kostal scheint noch nichtmals eine interne Dokumentation zu besitzen, wie man die API Web Seite anwendet. Hier kam dann nur der Hinweis auf OpenHub.

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