MQTT2 für Worx Landroid Mähroboter

Begonnen von Otto123, 09 Juni 2020, 13:55:43

Vorheriges Thema - Nächstes Thema

frober

Zitat von: rudolfkoenig am 15 März 2023, 18:59:15
Zu 1: ueber den optimalen Weg denken wir nach, wenn der Rest funktioniert. Immerhin verstehe ich anhand des Codes, was Du meinst :)
Das passt, danke.

Zitat
Zu 2: nicht ganz, JavaScript kennt kein $a. Richtig waere `${a}.${b}`, JS Template ersetzt im Backquote ${...} mit dem Ergebnis von eval(...) aus.
Das war nur ein schnelles Bsp. mir ging es um den Punkt. Es ist richtig, dass der String mit einem Punkt zusammengesetzt ist. Bsp. Vorname.Nachname ?

Zitat
Zu 3: nein, das wird z.Zt nur bei define oder modify auf 0 gesetzt.
Hmm, dann bedarf es hier wahrscheinlich auch eine Lösung, sofern ich es zum "laufen" bekomme.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

rudolfkoenig

Zu 2, Beispiele

JavaScript:
var a="Vorname";
var b="Nachname";
`${a}.{$b}` => Vorname.Nachname
a+"."+b => Vorname.Nachname

Perl:
my $a="Vorname";
my $b="Nachname";
$a.".".$b => Vorname.Nachname

frober

Zitat von: rudolfkoenig am 15 März 2023, 19:31:00
Zu 2, Beispiele

JavaScript:
var a="Vorname";
var b="Nachname";
`${a}.{$b}` => Vorname.Nachname
a+"."+b => Vorname.Nachname

Perl:
my $a="Vorname";
my $b="Nachname";
$a.".".$b => Vorname.Nachname

Danke, dann kann ich hier einen Fehler ausschließen.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

frober

Laut AWS Developerguide erfolgt erst der Wechsel auf Websocket und dann wird die Authentifizierung überprüft.
D.h. aktuell schlägt diese fehl.
Weiter wird der Token signiert, d.h. ich bekomme den Token und die Signatur zugesendet (war mir bisher nicht bewusst)

Aktuell habe ich versucht, mich direkt mit dem MQTT Server zu verbinden.
Da ich aber den Token manipulieren muss, passt dieser nicht mehr zur Signatur.  ::)

Fazit:
Zuerst muss man sich bei der API authentifizieren und danach sollte, hoffentlich, auch die Anmeldung für MQTT funktionieren.

Wenn das funktioniert, muss jede Std noch der Token erneuert und vor einem reconnect die Gültigkeit überprüft werden.

Man was für einen Aufwand... :( >:(
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

remo

Nochmal ganz doof nachgefragt:
wäre der ioBroker Adapter nicht eine Inspiration?
Dort funktioniert es doch.
Kann man das nicht "einfach" von dort adaptieren?
Der Entwickler dieses Moduls hat das Rad doch sicherlich auch nicht neu erfunden ...

Ralli

Das versucht froober doch ... bzw. hat es in Teilen auch bereits getan.
Gruß,
Ralli

Proxmox 8.1 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.6.20240316) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

frober

Zitat von: remo am 17 März 2023, 14:21:08
Nochmal ganz doof nachgefragt:
wäre der ioBroker Adapter nicht eine Inspiration?
Dort funktioniert es doch.
Kann man das nicht "einfach" von dort adaptieren?
Der Entwickler dieses Moduls hat das Rad doch sicherlich auch nicht neu erfunden ...

Die Idee von hier, war ja, keine extra Software zu installieren.
Für ioBroker gibt es hier im Forum einen Thread.
Es steht jedem frei umzusteigen.

Die Entwickler vom ioBroker hatten mWn Unterstützung von Positec.

Wie Ralli geschrieben hat, versuche ich den Sourcecode vom ioBroker zu "entschlüsseln". Allerdings enthält dieser sehr viel Code, den wir hier nicht benötigen, was es nicht gerade einfach macht.

Für mich ist das auch Neuland (Javascript, http requests usw.).
Es gibt also keine Garantie, dass ich erfolgreich bin.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

remo

Ok. Es war ja nicht böse gemeint.
Ich möchte es ja nur verstehen.
Wenn ich irgendwie unterstützen kann, lass es mich wissen.

frober

Unterstützung kann ich immer gebrauchen, die Frage ist aktuell nur wie...

Gestern habe ich den Code umgebaut um zuerst mich bei der API zu authentifizieren.

Ein erster Fehler im Header brachte eine 401 unauthorized.
Nach Korrektur bekomme ich eine 403 forbidden und da spielt es keine Rolle, auf welches Zielverzeichnis ich gehe.
Wenn der Server die Meldung korrekt vergibt, dann habe ich die Authentifizierung bestanden, mir fehlen jedoch nachgelagerte Rechte.
Beim ioBroker wird nur die 401 behandelt, bezogen auf einen abgelaufen Token.

@Rudi, es werden Cookies verwendet, kann das damit zusammen hängen?

this.requestClient = axios.create({
            withCredentials: true,
            httpsAgent: new HttpsCookieAgent({
                cookies: {
                    jar: this.cookieJar,
                },
            }),
        });

Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

rudolfkoenig

Zitat@Rudi, es werden Cookies verwendet, kann das damit zusammen hängen?
Klar, die empfangenen Cookies sollte man bei jedem neuen Request vorzeigen.
HttpUtils hat dafuer (noch?) keinen Automatismus, das muss man explizit machen.

frober

Zitat von: rudolfkoenig am 18 März 2023, 11:24:50
Klar, die empfangenen Cookies sollte man bei jedem neuen Request vorzeigen.
HttpUtils hat dafuer (noch?) keinen Automatismus, das muss man explizit machen.

Danke für die schnelle Antwort.
HTTPMOD habe ich gesehen, macht das schon, mal sehen ob ich das nutzen kann.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

frober

#461
Hmm, ich komme aktuell nicht weiter.  :(

Soweit ich das aus HTTPMOD richtig interpretiere habe, bekomme ich mit
my $header = $param->{httpheader};den vom Server gesendeten Header und kann nach "set-cookie" filtern.

Nur werden keine Cookies gesetzt:

Beim Anfordern des Tokens kommt:
HTTP/1.1 200 OK
Date: Mon, 20 Mar 2023 16:27:31 GMT
Content-Type: application/json; charset=UTF-8
Connection: close
vary: Accept-Encoding
pragma: no-cache
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
expires: Mon, 01 Jan 1990 00:00:00 GMT
Content-Encoding: gzip
CF-Cache-Status: DYNAMIC
Server: cloudflare
CF-RAY: 7aaf52ac0b7730ed-FRA
alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400

und bei der API:
HTTP/1.1 403 Forbidden
Date: Mon, 20 Mar 2023 16:20:42 GMT
Content-Type: application/json
Connection: close
Server: nginx
Vary: Accept-Encoding
Cache-Control: no-cache, private
X-Robots-Tag: noindex, nofollow
Content-Encoding: gzip

Laut Developerguide gibt es auch nur, entweder den Token im Header oder über das Cookie.
Auch bin ich definitiv am Authorizer vorbei und die AWS Lambdafunktion sendet die 403, nur warum?

Nachtrag:
Wie kann ich das withCredentials: true setzen?
Möglich, dass es daran hängt, auch wenn ich es nur im Bezug auf die Cookies gelesen habe.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

rudolfkoenig

ZitatWie kann ich das withCredentials: true setzen?

axios ist ein HTTP Client, genau wie HttpUtils_NonblockingGet.
Laut Doku (https://www.npmjs.com/package/axios):
Zitat// `withCredentials` indicates whether or not cross-site Access-Control requests
// should be made using credentials

Ich kenne nur Access-Control-Allow-Origin (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin), wo der Server dem Browser erlaubt, dass JS-Programme auch andere Server kontaktieren.
Wie man das im Zusammnhang des Kommentars verstehen soll, weiss ich nicht.

frober

#463
Zitat von: rudolfkoenig am 21 März 2023, 12:45:33
ZitatWie kann ich das withCredentials: true setzen?

axios ist ein HTTP Client, genau wie HttpUtils_NonblockingGet.
Laut Doku (https://www.npmjs.com/package/axios):
Zitat// `withCredentials` indicates whether or not cross-site Access-Control requests
// should be made using credentials

Ich kenne nur Access-Control-Allow-Origin (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin), wo der Server dem rowser erlaubt, dass JS-Programme auch andere Server kontaktieren.
Wie man das im Zusammnhang des Kommentars verstehen soll, weiss ich nicht.

Ich habe das hier gefunden https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials

Bzgl. XHR habe ich es öftes im Bezug auf den Client gelesen. Bin bisher aber auch noch nicht richtig schlau daraus geworden.


Bsp aus einem Forum vom Server
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https:xxxx

Nachtrag:
Hier ist es soweit beschrieben:
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#requests_with_credentials

Relevant dürfe das sein:
Origin: https://foo.example
Cookie: pageAccess=2

Das Cookie habe ich auch zur Hälfte
cookies: {
                    jar: this.cookieJar,
                },

aber was kommt bei Origin hin, wir haben ja keine eigene Domain?  Das ist doch Domain vom Client?
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Heatseeker

Moin,
ich habe hier gerade nicht alles gelesen aber evtl geht es um das gleiche wie bei mir.
Mein Server hat gerade etwas gezickt, da die Festplatte nahezu voll war. Grund war, das seit Februar das MQTT für meinen Landroid sich nicht mehr verbinden konnte und sekündlich einen diconnect ins log geschrieben hat...

Habe das mal manuelle auf disconnect gestellt damit er es nicht ständig versucht und etwas aufgeräumt. Hat Landroid mal wieder (wie immer im Frühjahr) was am login geändert? Das wäre echt nervig!