Beiträge von marco79cgn

    So Leute, es liegt jetzt ein größeres Update bereit mit mehreren Änderungen:

    • Fehlerbehandlung, falls hashes Datei nicht vorliegt (oder im falschen Format)
    • (Innen-) Temperatur jetzt mit einer Nachkommastelle
    • Das Icon des Autos hat die korrekte Farbe (Modelltyp wird automatisch ermittelt)
    • mehrere Autos pro Benutzer werden unterstützt (auch fremde vin mit Digital Key Berechtigung)
    • Log Ausgaben aufgeräumt (→ leichtere Fehlersuche)
    • Layout optimiert


    Darf gerne getestet werden! Script bitte neu von github laden.


    Wenn was schief läuft, ist eine Kopie der Log-Ausgabe immer hilfreich. Man findet sie in der Scriptable App unten links, nachdem man das Skript manuell gestartet hat.

    Das habe ich bei mir auch schon eingebaut, eigentlich für eine andere Sache, aber man könnte es auch für die Bestimmung der Modellnummer benutzen. Denk aber dran, dass dein api call nicht nur ein Auto zurück liefert, sondern eine Liste an Autos. Wenn der Benutzer zum Beispiel mehrere Autos mit dem gleichen Account gekauft hat. Oder wahrscheinlicher, wenn der Benutzer auch gleichzeitig ein Auto steuern darf, für das er per digital key eine Berechtigung bekommen hat.


    Hier ist eine Methode, die alle Autos zurück liefert. Kannst du direkt so in das Skript einbauen.


    Das Ergebnis sieht dann zum Beispiel so aus:


    Du könntest dann einfach in der Liste data.list das entsprechende Auto suchen, das zur konfigurierten vin passt und davon dann den matCode auslesen. Das wäre zum Beispiel so möglich:

    Code
    const allCars = await getAllCars(credentials.apiAccessToken)
    let car = arr.find(o => o.vin === vin)
    const modelNumber = car.matCode

    Die Widgets aktualisieren sich in etwa alle 5-7 Minuten. Das bestimmt iOS und führt es auch automatisch durch. Wie oft genau hängt von vielen Dingen ab, z.B. ob das iPhone entsperrt ist, ob es im Energiesparmodus ist, wie hoch der Akkustand noch ist usw. Steht auch alles schon auf einer der letzten Seiten. ;)

    Danke Mentos, das farblich korrekte Bild je nach Auto hatte ich schon drin, das gab es ja auch schon in meinem Verfügbarkeits Widget hier. Mich hatte da initial gestört, dass über dem Auto recht viel weißer Bereich ist, daher hatte ich das nachträglich umgebaut und hart abgeschnitten (für den ersten Schritt). Aber ist schon netter, wenn die Farbe passt. Werde ich morgen wieder einbauen.


    Auch die Temperatur hatte ich zunächst mit einer Nachkommastelle und dachte dann, dass das irgendwie komisch ist und habe es wieder raus genommen bzw. auf eine ganze Zahl gerundet. Dafür muss jeweils nur eine Zeile geändert werden. Hatte dann gesehen, dass genau an der Stelle ein copy/paste Fehler bei der Benennung drin war, also habe ich eben direkt das Skript angepasst (Zeilen 217-220).

    Number.parseFloat(temperature).toFixed(1)

    Bin dieses Wochenende unterwegs und habe wenig Zeit. Habe die Anleitung aktualisiert und die hashes Datei direkt in der raw Version verlinkt. Die Dateigröße muss exakt 60 KB betragen, sonst funktioniert es nicht.


    chriscat

    Thanks for your PRs. I already reviewed, approved and merged two of them.
    The behaviour with more than one car sound strange. The api endpoint that returns the car data has the vin explicitly in the URL, so I assume it should just work with different vins. There is no direct connection between the Hello Smart App and the widget script. The only connection is that controlling the car (lock/unlock, air condition etc.) only works if your digital key in the app is connected. But login and data is completely unrelated. Maybe the implemented something in a strange way on their side of the api.


    Could you maybe debug it a little, put your credentials directly in the script and check it with different vins? Basically it's just one api call inside the getCarInfo() method. The result of it is already logged on the console (huge json response). I only have one car so I can't double check.

    chriscat
    Thanks for verification. The temperature is from the inside of the car. It changes here all the time, especially at night (7 degrees last night). If you start the air condition from the app, it should definetly change. That's one reason why I put it there. In a future update, I was thinking about starting the air condition from within the widget (bigger size).


    MySmart

    Dein iPhone scheint relativ voll belegt zu sein, was den Speicher angeht. Dann fängt iOS an und räumt Dateien weg, die seiner Ansicht nach nicht zwingend gebraucht werden. Ich teste mal, ob ich vorher prüfen kann, ob das File noch auf dem Gerät ist und falls nicht, den erneuten Download erzwingen kann. Ich könnte die abhängigen Dateien theoretisch auch im internen Speicher der App ablegen, dann ist es nach außen hin nicht transparent. Werde ich in einem künftigen Update berücksichtigen.

    chriscat
    And now it makes perfectly sense. I forgot to remove line 73 of the script where I already tested successfully to lock/unlock the car! That's why it makes noises when you have it set up on your phone. It was hard coded to always lock the car. Controlling the car only works at all if the device is connected via Bluetooth to your car and the digital key is active. That's why it didn't happen on your iPad. Please remove line 73 of the script or download the complete updated script again from github.


    An alle, die das Skript bereits installiert haben:
    Bitte in Scriptable Zeile 73 löschen. Sorry dafür!

    const lockIt = await lockCar(credentials.apiAccessToken);

    Alternativ das komplette Skript neu bei Github runterladen.


    Die Steuerung für's Auto will ich - wenn überhaupt - erst später einbauen. Das Problem ist, dass der Smart ständig den Digital Key verliert (zumindest bei mir), so dass das nicht zuverlässig funktioniert. So viele Bugs bei Smart. Echt frustrierend!

    I kept hearing the car every 10 minutes or so. the sound the car usually make when we lock it.

    That was a known bug or let‘s say strange behaviour on older Software versions of the Smart #1 (before 1.2.0 EU).

    I had it for some time as well as soon as my real key was or came in the range of the car (5-10 meters). In my case this was completely unrelated to the App (widget didn‘t even exist).


    I can hardly believe this is related to the widget. Once it is logged in, all it does is calling a single api endpoint to get the latest car data. It’s a reading request (http GET). Should be completely unrelated. And all things it does at all are exactly the same as within the App. That‘s where I got all api calls from in the first place.

    Ah, my bad, Sorry. Actually multiple users are not supported yet. Only one user with multiple cars.


    This is because I store the credentials and tokens for the user inside a file in iCloud Drive in order to cache them. This way I can reuse the tokens as long as possible without having to log in again.


    Please do the following:

    • delete all your Smart widgets from the home screen (to stop them running automatically every few minutes)
    • go to your iCloud Drive Scriptable folder (e.g. in the Files app) and delete the file smart-credentials.json
    • setup one script/widget again and see if it works (it should!)

    After that you can set up another car but it has to be the same user! All scripts/widgets use the same user tokens as of now.