NEWS
Authentication (redirect uri) ??
-
Moin Freunde,
es geht um folgende authorization von Netatmo:
https://dev.netatmo.com/apidocumentation/oauthich bin etwas überfragt…
Wie bekomme ich es hin, dass sich aus iobroker heraus beim jeweiligen Benutzer ein Link im Browser öffnet?Ich würde es über eine Blockly Funktion umsetzen wollen, welche über ein trigger ausgelöst wird.
Ich weiß leider nicht so recht wie die Funktion genau aussehen muss:Window.open(url, "_blank");
(url ist eine variable die von außen gefüttert wird.)
Funktioniert natürlich so einfach nicht
Bekomme direkt ein "ReferenceError: window is not defined".Außerdem müsste ich von der zurückgegeben url nach dem bestätigen einen Code extrahieren (also diese url wieder zurück in mein Blockly bekommen).
Bin über jede Hilfe dankbar!
-
@newpicsel Willst Du das für mehrere User machen, oder einen neuen Adapter schreiben?
Sonst müsstest ja nur einmal den OAuth-Token holen. -
Moin @great-sun
ja genau, es soll für mehrere Benutzer sein.
Einen Adapter will ich in Zukunft auch gerne draus machen, dafür muss ich mich allerdings noch etwas schlau lesen.Ich hab seit ein paar Jahren bereits ein Blockly laufen welches ähnlich wie ein Adapter arbeitet, dieses kann jeder verwenden.
Allerdings wurde die Methode der Tokenabfrage geändert, vorher wurde dieser via Benutzername und Passwort direkt angefordert, nun muss sich via Website angemeldet werden, wodurch ein Code generiert wird mit dem dann ein Token angefordert werden kann bzw. muss.Um dies für die Benutzer einfach und bequem zu gestalten, möchte ich diese Möglichkeit auch verwenden, außerdem lerne ich bereits viel aus dieser Arbeit.
Ich muss also einen Link in einem separaten Browserfenster öffnen und nachdem man sich dort erfolgreich angemeldet hat, die url auswerten um den Code zu extrahieren… 🤯
-
@Newpicsel wie hast Du es denn bisher gemacht, macht ja wenig Sinn jetzt alles neu zu machen. Vorschlag: Wir machen mal eine Session, in der Du zeigst, was Du da gemacht hast und dann überlegen wir gemeinsam, wie man das jetzt anpasst.
Das Ergebnis stellen wir dann hier wieder online (sofern das so passt für Dich). -
Unter dem Link oben ist auch noch die alte Methode aufgelistet (grand_type=password), vorher habe ich per "curl" Benutzerdaten wie Passwort übermittelt und die Token zurück bekommen, dies geht aber mittlerweile nicht mehr!
Nun muss wie gesagt ein Link aufgerufen werden, der im Browser geöffnet werden muss, wenn man sich nun dort angemeldet hat, wird man auf eine "redirect_uri" (eigene url) weitergeleitet, an der dann der Code angehängt ist, den man wiederum benötigt um ein Token (per POST Methode) anzufordern.
Das Problem ist nun die URL (um diesen Code anzufordern) im Browser aus iobroker heraus zu öffnen und am Ende eben die übermittelte URL mit dem Code wieder in iobroker zu bekommen.
Etwas verwirrend oder
aber in dem Link im ersten Post ist es gut von netatmo erklärt.
-
@newpicsel sagte in Authentication (redirect uri) ??:
Ich würde es über eine Blockly Funktion umsetzen wollen, welche über ein trigger ausgelöst wird.
Ich weiß leider nicht so recht wie die Funktion genau aussehen muss:
Window.open(url, "_blank");du musst dir bewusst machen, wo welcher code läuft.
alles im javascript-adapter läuft auf dem server.
also in node.
https://de.wikipedia.org/wiki/Node.js
mit node hat man sozusagen die javascript engine aus dem browser herausgelöst und als server-sprache umgesetzt.
da da aber jetzt kein browser mehr ist, gibt es gewisse dinge darin auch nicht mehr.
die globale Variable window ist ein beispiel dafür.Wenn du willst, das im browser sich ein fenster öffnet, musst du dafür sorgen, das der clientseitig (also lokal in einem browser fenster) ausgeführt wird.
wenn du bspw das folgende in ein html widget einträgst
<a href="https://www.google.de" target="_blank">Click mich</a>
dann wird da ein link erzeugt.
wenn du noch die url dynamisch machen willst, dann würde das so aussehen<a href="{0_userdata.0.test.test1}" target="_blank">Click mich</a>
in den datenpunkt schreibst du dann die volle url rein
die bindings werden allerdings nur im runtime-modus von vis aufgelöst -
Guten Morgen @oliverio
Danke für deine Nachricht, dass wusste ich tatsächlich nicht und erklärt einiges!
Über die VIS hatte ich tatsächlich auch schon nachgedacht, dies würde aber wieder voraussetzen, dass jeder Nutzer dies ebenfalls wieder vorher in die VIS einpflegt, was es für einige wohl erstmal zu kompliziert machen würde.
Ich bin aktuell dabei und versuche es komplett über curl Befehle umzusetzen.
Spricht das Browserfenster komplett zu umgehen.
Bin mir noch nicht sicher ob dies überhaupt möglich ist und am Ende nicht auch den Rahmen eines Blocklys komplett sprengt, aber zumindest ein Ansatz.Sobald ich hier etwas halbwegs brauchbares habe, was auch nur in die richtige Richtung gehen könnte, teile ich es mit euch
Gruß Peter
-
Es gibt einen netatmo Adapter
Der kann das nicht was du willst?Ansonsten könntest du diese Bibliothek verwenden
https://www.npmjs.com/package/netatmo -
Doch doch, theoretisch kann der Adapter das schon.
Mein Blockly hatte ich erstellt bevor es einen Adapter gabIch und ein paar weitere Nutzer, nutzen diesen jedoch weiterhin, weil er etwas mehr Funktionen bietet als der Adapter und ich müsste so ohnehin noch ein zusätzliches Blockly erstellen.
Das spare ich mir damit und es läuft einfach sehr gut.Einziges Problem ist halt nun die Token Anfrage für neue Nutzer, bei denjenigen, die das Blockly schon vorher genutzt haben (vor der Umstellung) läuft es weiterhin.
Außerdem und wohl das wichtigste, es macht mir Spaß daran zu arbeiten und ich lerne sehr viel