ein curl-Abruf funktioniert nicht mehr

Das mit dem User-Agent hatte ich nicht nicht probiert, mache es gleich mal. Ich bin jetzt erstmal gesperrt (4 Fehlversuche = 30 Minuten Sperre).
Ich hatte bislang kein User-Agent im Header.

Den Header hole ich mir immer so raus

curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
...
echo 'CURLINFO_HEADER_OUT=' . curl_getinfo($ch, CURLINFO_HEADER_OUT) . PHP_EOL; 

Was mache diese URL, gibt man die einfach auf URL in dem curl-Auftruf an?

Nein, enthält nicht, aber ich hatte das PW testhalber mal aus 1234567 geändert -> ohne Erfolg.

gruß
demel

Die von mir verlinkte URL zeigt einfach nur als Text den User-Agent an. Ohne irgendwelche Abfragen „welchen Useragent könnte ich verwenden“. Wenn du sie mal in den Browser kopierst, wirst du das Ergebnis sehen. Das dann mal mit php und mit curl, dann siehst recht schnell die beiden eingesetzten User Agents.

Schau mal hier : Login to Dyson account failed: '403, Forbidden' · Issue #21 · JanJaapKo/DysonPureLink · GitHub
Das ist geanu das, was Tobias (und ich mit „Client“) meinte

<Edit>
Hier übrigens auch: adding headers that Dyson API now requires · lukasroegner/homebridge-dyson-pure-cool@a77a52d · GitHub

Hallo,

der fehlende User-Agent war’s, den scheint die Dyson-API jetzt zu erwarten, wobei egal zu sein scheint, was drin steht.
Ja, das steht ja auch in dem Link zu homebridge-dyson-pure-cool/, den Du gepostet hattest

Da bin ich leider überhaupt nicht drauf gekommen, das das Modul schon seit 1 1/2 Monaten ohne diese Angabe im Header funktionier. :banghead::banghead:

Tja, jetzt bin ich schlauer.

Vielen Dank für eure Hilfe
demel

Hallo Demel,

ich habe jetzt das Problem wie in deinem Thread beschrieben, kann man irgendwas machen damit es wieder geht? (siehe Bild)

Vielen Dank!
Gruß Robert

Hallo,

ja, ich sehe das gerade bei mir auch. Und bei schneller Suche in Internet sehe ich leider auch, das Dyson die Anmelde-Prozedur wieder mal komplett umgestellt hat.
Man bekommt nun beim Login in der App nach Eingabe der Mail-Adresse (= Benutzerkennung) per Mail ein Code zugeschickt, den man mit dem Passwort eingeben muss.

Wie doof … da muss ich überlegen, wie ich das in abbilden kann.

In den bereits oben erwähnten Repositories DysonPureLink/account.py at master · JanJaapKo/DysonPureLink · GitHub und GitHub - lukasroegner/homebridge-dyson-pure-cool: Plugin for using the Dyson Pure Cool fans in homebridge. gibt es ja schon eine Implementierung.

Wird aber leider etwas dauern, bis ich da eine Lösung habe, in 2 Wochen habe ich Urlaub und kann spätestens dann dran arbeiten.

demel

Hallo Demel,

wollte mal fragen ob Du schon Zeit gefunden hast?

Viele Grüße Robert

hi,

bin gerade im urlaubsort angekommen und wollte mich morgen damit beschäftigen. hatte mir das zwischenzeitlich nochmal angeschaut und habe auch überlegt wie ich es machen will

gruss
demel

Hallo,
leider gibt es bisher keine guten Nachrichten. Ich habe mal die gesammelten Erkenntnisse aus meinen Recherchen im Internet probiert, bekommen aber schon bei der Anfrage des Userstatus (https://appapi.cp.dyson.com/v3/userregistration/email/userstatus) ein „Unable to authenticate user.“

z.B.

Ich versuche es natürlich weiter…
demel

Hallo,

leider bekomme ich es weiterhin nicht hin, ich bekomme immer ein HTTP-Error 401 mit der Meldung „Unable to authenticate user.“.

Ich habe extra einen neuen Account eingerichtet, es mit unterschiedlichen IP’s probiert und auch Module anderer Systeme ausprobiert - immer mit dem gleichen Misserfolg.

Grundsätzlich muss es aber richtig sein, denn ich habe einmal (!) die korrekte Antwort bekommen, dann die Mail mit dem OneTime-Code erhalten und konnte den Token abrufen … aber das funktionierte genau einmal.

Kannst Du mal das Script mal bitte ausprobieren mit Deiner email und password?

<?php

declare(strict_types=1);

$email = '<uuu.domain.tdl>';
$password = 'xxx';
$country = 'DE';

$api_host = 'https://appapi.cp.dyson.com';

$url = $api_host . '/v3/userregistration/email/userstatus?country=' . $country;

$postdata = [
    'Email' => $email,
];

// $user_agent = 'Dalvik/2.1.0 (Linux; U; Android 6.0; Android SDK built for x86_64 Build/MASTER)';
$user_agent = 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Google Build/OPM6.171019.030.E1)';

$headers = [
    'User-Agent: ' . $user_agent,
    'Accept: */*',
    'Content-Type: application/json',
];

echo 'url=' . $url . PHP_EOL;
echo 'headers=' . print_r($headers, true) . PHP_EOL;
echo 'postdata=' . json_encode($postdata) . PHP_EOL;

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postdata));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);

$cdata = curl_exec($ch);
$cerrno = curl_errno($ch);
$cerror = $cerrno ? curl_error($ch) : '';
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);

echo 'cerrno=' . $cerrno, '(' . $cerror . '), httpcode=' . $httpcode . ', cdata=' . $cdata . PHP_EOL;

gruß
demel

Hi Demel,

schaut nicht gut aus:

url=https://appapi.cp.dyson.com/v3/userregistration/email/userstatus?country=DE
headers=Array
(
    [0] => User-Agent: Dalvik/2.1.0 (Linux; U; Android 8.1.0; Google Build/OPM6.171019.030.E1)
    [1] => Accept: */*
    [2] => Content-Type: application/json
)

postdata={"Email":"meine@mail.de"}
cerrno=0(), httpcode=401, cdata={"Message":"Unable to authenticate user."}

Hallo,

mach mal folgendes:

  1. in der Dyson-App abmelden
  2. wieder beginnen anzumelden, also Land und Mail-Adresse angeben → dann kommt die Eingabe von Passwort und Code: NICHT eingeben
  3. das og. Script aufrufen

es müsste eine anderen Antwort kommen

„accountStatus“:„ACTIVE“,„authenticationMethod“:„EMAIL_PWD_2FA“

Wichtig ist dabei nach meinen bisherigen Erkenntnissen, das sich das Mobilgerät mit der Dyson-App mit der gleichen IP-Adresse wie IPS bei Dyson meldet - sprich das Handy muss im lokalen WLAN arbeiten.

Wenn das reproduzierbar ist, kann ich den weiteren 2FA-Login-Prozess implementieren

demel

@rtausend

Hallo,

hast du den Test schon machen können?

Bei mir habe ich den Ablauf der http-Calls soweit machen können, das ich so ein Token bekommen habe.
Der Hack mit der Dyson-App ist besonders zu Test ein bisschen lästig und ein paar mal ein Fehler gemacht und Dyson sperrt das Konto für einige Zeit.

gruß
demel

Hallo,

ich habe nun eine beta mit dem Support der API V3 mit 2FA (Bestätigungscode per Mail) vorbereitet. Ist erstmal nur in der Konfigurator-Instanz implementiert, nicht in der Geräte-Instanz - kommt nach weiteren Tests bzw. falls jemand bestätigt, das es bei ihm funktioniert.

Wichtig ist, das man für die Anmeldeprozedur auch die Dyson-App benötigt (siehe README.md)

gruß
demel

Hi Demel,

sorry fürs späte Antworten, ich war am WE unterwegs :slight_smile: Ich schau das ich bald dazu komme … bin die Woche in einer schulung

Hallo,
bist du inzwischen dazu gekommen, die Änderung zu verifizieren?
Gruß
demel