Posts by bravehurts

    Die Domains stehen bei dem -tup mit drin, aber abgeschnitten.


    Mit nslookup oder anderen tools kannst Du die IP Rückauflösen:
    ec2-35-167-218-97.us-west-2.compute.amazonaws.com
    ec2-54-70-161-168.us-west-2.compute.amazonaws.com


    Aber Vorsicht: Bei der Rückauflösung einer IP zu Domain kommt immer nur eine Domain zurück. Es können generell mehrere Domains auf eine IP auflösen. Probiere es mit den beiden oben.


    bzw. Du kannst auch die iptables rules direkt auf die IPs anpassen. Das mit der etc hosts ist so gemacht worden, weil die ot.io.mi.com auf eine ganze Menge IPs auflöst. Du musst auch schauen, ob beim nächsten Start des Robos nicht andere Server angesprochen werden. Wenn der Robo die Cloud kontaktiert, bekommt er eine Reihe IP-Adressen von Servern zurück. Welche er zurück bekommt, steht auch in dem erwähnten /mnt/data/rockrobo/rrlog/miio.log drin
    Vielleicht ist das doch der falsche Ansatz.

    Also die Lösung der Map ist eigentlich in dustcloud enthalten. Es gibt Code der die Map vom Sauger holt und die Route aus dem Log ins Bild zeichnet.
    Ich habe mir eine App gebaut mit der ich Zonen auf die Map zeichnen kann. Aber das ganze ist noch nicht veröffentlichungswürdig. Wenn sich immer mal wieder die Map dreht, bringen die Zonen nichts.


    Florie : Der Sauger erstellt immer wieder eine neue Map. Dem Sauger eine Map unterschieben geht nicht. Während der Sauger läuft, stehen alle abgefahrenen Koordinaten relativ zur Bildmitte im SLAM_fprintf.log. Das Bild hat 1024px. Dustcloud nimmt hier einen Faktor von 20 an. Also ist der Wert aus dem Log => 512 + Koordinate *20. Dann hast Du die Koordinate auf dem Bild der Map mit 1024x1024px. Und wenn Du ein Move Command des Robos aufrufen willst, dann hast du nicht 1024 Pixel, sondern 51000 Rasterpunkte. Die Koordinaten lassen sich mit einem Dreisatz hoch rechnen. Und in der Bildmitte steht zumindest bei mir immer der Dock.

    Wenn der Bereich fest vorgegeben ist, heißt das dann ja aber im Umkehrschluss auch, das die Entfernung, die zwei Koordination beschrieben wird, von der Raumgröße abhängt. Die Entfernung müsste dann also in einem normalen Zimmer zwischen zwei Koordinaten eine andere sein als z.B. in einem Saal.


    Nein, die Map ist eine Scheibe ;-) Ein Zimmer füllt nicht die ganze Map von 0,0 bis 51000x51000, sondern die Map hat eine Menge Platz für eine seehr große Wohnung. Die Entfernung eines Map Punktes, müsste immer die gleiche Entfernung in mm oder cm haben. Umgerechnet habe ich es noch nicht.

    Florie : Ich weiß nicht, wie FHEM die koordinaten berechnet. Wenn man die Move Kommandos für den Robo verwendet, liegen die Koordinaten zwischen 0,0 und 51000,51000. Bei mir liegt der die Ladestation in der Kartenmitte und das ist die Koordinate 25500,25500. 0,0 liegt links unten auf der Map und so kann man sich dann mit den Koordinaten nach vorne arbeiten. Ich denke, dass Du Koordinaten außerhalb des Zimmers gesendet hast. Dann versucht der Robo die anzufahren und iiirgendwo eine Lücke zu finden, die es nicht gibt ;-) Für Dich sieht es wirr aus und für den Robo ist es ein verzweifelter Versuch, irgendwie Deinem Kommando nachzukommen.


    und schickst Dir die Map und Positionsdaten an einen Webhook.


    Beim Webhook steigt der nicht-Programmierer aus. Ich habe verstanden, was Du machst, aber nicht wie ;-)

    Ich weiß nicht, ob das hier das richtige Platz ist für Hilfe der Art. Ich versuche in php das Paket zusammen zubauen. Analog zu miio.


    https://github.com/OpenMiHome/…tocol/blob/master/miio.py


    head = struct.pack(
    '!BBHIII16s',
    0x21, 0x31, # const magic value
    packet_len,
    0, # unknown const
    0x02af3988, # unknown const
    stamp,
    token # overwritten by the MD5 checksum later
    )


    Das 0x02af3988 sollte laut dem binary protocol die device id sein. Das token ist vor dem md5 mit 16 x 0x00 überschrieben


    analog zu python pack '!BBHIII16s' baue auch den head zusammen


    $length = strlen($encryptedData) + 32;


    ## mein $head //python pack type, pos
    pack('c', 0x21); //B, 1
    pack('c', 0x31); //B, 2
    pack('n', $length); //H, 3-4
    pack('N', 0); //I, 5-8
    pack('N', $did); //I, 9-12
    pack('N', $stamp ); //I, 13-16
    hex2bin('00000000000000000000000000000000');//16s, 17-32


    md5($head . $encryptedData, true) und die bytes 17-32 des paketes mit dem binären md5 überschreiben, und das fertige Paket absenden.


    Das device sendet immer die _otc_info, ich baue dann mit dem obigen head die otc_list, sende sie zurück und habe immer folgendes im Log:
    [INFO] STATE: (7)
    [INFO] cloud_recv_one(),total len is 208, msg_len is 208
    [WARNING] OT MD5 not match.


    Irgendetwas passt nicht mit dem md5. Hat jemand eine Idee oder Ahnung?

    ich bin mir nicht so sicher, ob die Sperrung eines Geräts in der Fritzbox nicht auch den internen Netwerkverkehr blockt. Der Sauger pingt wohl, läuft aber auf ein timeout.
    Aber ich glaube, dass der Sauger nicht mehr antwortet", weil "[WARNING] OT MD5 not match." in deinem Log.


    Ich habe versucht, dieses python miio zu durch php zu ersetzen, crypte die packages wie in der mioo binary packages beschrieben und bekomme im miio.log auch diese Warning. Vielleicht ist diese Meldung irreführend und es stimmt etwas anderes nicht, wie z.B. die DeviceId

    Hatte hier gerade ein Problem mit dem md5 der Pakete gepostet. Manchmal ist es seltsam. So bald man jemand mit einem Problem zutextet, erledigt es sich in wenigen Minuten von selbst. Selbst wenn man sich davor stundenlang damit beschäftigt hat. Da ich keine Antwort mehr benötige und das Problem hier wahrscheinlich nichts beiträgt, überschreibe ich meinen Text. Sollte ich dennoch Erkenntnisse daraus erlangen, poste ich das hier.

    dgi : ach, jetzt sehe ich das erst. Ich hatte mir die php Skripte gar nicht so genau angeschaut. Ich dachte, die sind nur zum anzeigen der Datensätze da. Und ich dachte, dass python als proxy dient, die Pakete durchleitet und alles in die db loggt. Aber im py ist gar kein INSERT drin für die queueu. Alles klar, habs verstanden :thumbsup:


    edit: habe einen Absatz gelöscht, weil ich den Fehler gefunden habe und das Geschriebene nicht richtig war.

    Ich will hier keine Diskussion entfachen und das ist mein letzter Post zu dem Thema, bevor die Welt untergeht. Wäre ich xiaomi, würde ich mir zuerst die Slides zum Hack reinziehen und mir dann ganz am Ende über download Links Gedanken machen. Völlig falsches Denkende. Mir hat das Thema hier einen offenen Austausch von Informationen suggeriert. Wenn es das nicht ist, bin ich hier falsch.
    Irgendjemand sollte noch github runter fahren.
    Gute Nacht an alle :sleep:

    Warum du bei der Befürchtung meinen Kommentar mit vollständigem Link übernommen hast, ist für mich fraglich. Aber da es eh zu spät ist, ist es zu spät.
    Ich glaube nicht, dass xiaomi hier mitliest. Es gibt keine deutsche Sprache in der App. Entweder kann keiner deutsch, oder der Markt ist unbedeutend.
    Wenn ich mir so überlege, was Hersteller so alles nicht im Blick haben! Wenn hier 20 Leute das Gerät rooten, ist fraglich, ob die Umstände der Absicherung, die Kosten für Sicherheitsmaßnahmen decken. Ich hätte im Büro besseres zu tun, als den Link zu meiner Firmware zu googlen :wink5:
    Und wenn jemand mitliest, dann um alle entstehenden Ideen abzugreifen und billig neue Features zu bauen.

    Bis auf das dir das Accesstoken und die Signatur fehlt. Im Moment noch nicht interessant, wird es aber spätestens jetzt wo du den link öffentlich gemacht hast aber werden. Ich rechne fest damit das da jetzt als nächstes das System "scharf geschaltet" wird.


    Oh, wenn das ein rotes Tuch ist, dann darf der Admin meinen Beitrag löschen. Wenn das die Befürchtung ist, dann solltet ihr als Befürchtende das unter solche Anfragen schreiben ;-)


    Jetzt habe ich es auch am Laufen. Ich habe es aber bisschen komplizierter gemacht in Docker :jummp:


    Port 80)
    Der py Server nimmt die Kommunikation des Robos auf, loggt sie in die Datenbank und leitet sie bei Bedarf an die xiaomi cloud weiter. Dass die Robo Kommunikation auf dem server.py ankommt, dafür brauchst du die iptables Regel ( robo <=> server.py <=> cloud )


    Port 81)
    Der Apache ist für die php Scripte da, die dir wiederum anzeigen, was in der Datenbank abgespeichert wurde. ( Du <=> apache <=> datenbank )


    Ich schätze mal, dass Dennis es leichter fand einen "Proxy" in python zu schreiben und die Datenbankausgabe in php.


    Du musst noch mit -t den table des iptables angeben. z.B.: iptables -vL -t nat


    Führe server.sh aus und leite mit iptables auf port 80 von server.py um und dann gehts. So wie es beschrieben steht ;-)


    In der Server.py


    Muss der Server auf dem Robi laufen oder da wo auch die DB und Webserver laufen? Dann hätte ich 2 Server parallel?


    Ich bekomme jedenfalls keine Daten ausgetauscht :/


    Das server.py Script muss auf dem Rechner mit der db laufen. Du hast dort apache für die php Scripte, du lässt dort das server.py laufen und auch die Datenbank.
    So wie ich es verstanden habe, muss die iptables Rule auf Port 80 gehen, da wo das server.py Script lauscht. Port 81 ist der Apache für die Administrations Scripte und Listen.
    iptables => https://github.com/dgiese/dust…aster/dustcloud/README.md

    iptables -t nat -A OUTPUT -p tcp --dport 80 -d 130.83.47.181 -j DNAT --to-destination 192.168.178.32:80


    edit: ach kann das sein, dass Du im py Script auch die Ports auf 81 geändert hast? mir ist das zu unformatiert, um da durchzublicken ;-)
    Wenn Dein Apache auf Port 81 lauscht, dann solltest Du das py Script auf Port 80 lassen. Sonst bekommt der Apache den Traffic ab. Zumindest habe ich mir das so zusammengereimt, dass der Robo mit dem Apache kein Kontakt aufnimmt, sondern mit dem server im py Script.