onokje / node-red-contrib-tesla

Node red nodes to control Tesla vehicles and devices
MIT License
20 stars 11 forks source link

How to check if vehicle is sleeping or awake #38

Open Moosbueffel opened 2 years ago

Moosbueffel commented 2 years ago

How can I check if the vehicle is sleeping or awake? Perhaps it the temp == null?? But this seems me a workaround.

Could you please implement a command for this? I think it is always implemented in your code but not wired ouside!?

Thanks

LInks: https://support.teslafi.com/en/knowledge-bases/2/articles/640-enabling-sleep-settings-to-limit-vampire-loss https://www.domoticz.com/forum/viewtopic.php?p=240152#p240152

takipo commented 2 years ago

You can send the "vehicle" (retrieve general vehicle information) command and check for msg.payload.state == online. It will send == asleep when its sleeping.

Moosbueffel commented 2 years ago

Many thanks, I will try it, when I'm back home next week and give feedback.

Michael-K-at-GitHub commented 2 years ago

It may be msg.payload[0].state for the first vehicle if you have more than one car in your account there is also a msg.payload[0].state == offline a very short time while going to sleep.

I recommend a flow like tesla-command:vehicles --> switch node (msg.payload[0].state == online -> Output 1 / Otherwise -> Output 2) This will not wake your car. Use Output 1 for flows while car is awake and output 2 for flows while sleeping

last bit: If the car is not reachable, state is last known state. If you park in an underground parking lot with no wifi and no mobile coverage, it's shown as online (because that was the last state before going underground). If you (e.g.) issue a getVehicleData, the node will fail with error 408 and no output. Use a catch node to catch this event if needed.

Moosbueffel commented 2 years ago

Ok, danke. Dann sind die Werte die bei vehicle geliefert werden die vom letzten Wachzustand? Und Fahrzeug wird durch diesen Aufruf nicht aufgeweckt? Denn aufwecken will ich das Auto ja nicht.

Michael-K-at-GitHub commented 2 years ago

Ja, aber bei (vehicles) wird selbst ja nicht sehr viel zurückgeliefert. Nur welche Fahrzeuge du hast und ob diese wach sind.

Wenn Du den Batteriestand et al dauerhaft brauchst, musst du ihn dir merken. Weil danach fragen (vehicleData oder chargeState) weckt das Auto auf (weil er ja fragen muss, wie der Akku jetzt steht).

Was ich mache ist relativ simpel: tesla-command:vehicles --> switch node (msg.payload[0].state == online -> Output 1 / Otherwise -> Output 2)

an Output 1 get VehicleData --> change node: set flow.TeslaDataBackup to to value msg.payload; msg.Online to the value true

an Output 2 change node: set msg.payload to the value flow.TeslaDataBackup; msg.Online to the value false

dann die beiden flows zusammenführen und du hast in msg die aktuellen Daten und in msg.Online zusätzlich den Status ob wach oder nicht.

Königsklasse für den Fall, dass das Auto im Funkloch steht (weil in diesem Fall das Auto zwar als Online rückgemeldet wird (weil das Auto ja beim Einfahren in die Garage noch online war und sich dann nicht mehr melden konnte), aber das get Vehicledata wird fehlschlagen (error 408) und gar keinen Out liefern, daher zusätzlich eine catch node: auf die Node get VehicleData reagieren, die im Output 1 Strang liegt --> change node: set msg.payload to the value flow.TeslaDataBackup; msg.Online to the value false und diesen flow ebenfalls oben mit zusammenführen, dann hast du alle drei Fälle abgedeckt und immer die leztten bekannten oder aktuellen Daten in msg

Moosbueffel commented 2 years ago

cool @Michael-K-at-GitHub :). Habe ich so umgesetzt.

Zu erwähnen wäre noch, dass die Abfragefrequenz > 20 min sein muß, um dem Fahrzeug ein einschlafen zu ermöglichen. Scheinbar eben auch bei der status-Abfrage. Siehe auch die gute Beschreibung, die ich hier gefunden habe.

Michael-K-at-GitHub commented 2 years ago

Ich lasse obige Sequenz permanent alle 60 Sekunden laufen. Trotzdem schläft er zuverlässig nach 12 Minuten ein. Offensichtlich verlängert ein get VehicleData nicht den Timeout des Autos. Nachdem ich ja dann auch alle 60 Sekunden nachsehe ob er schläft oder nicht, sehe ich, dass er zuverlässig durchschläft. (jetzt gerade habe ich das Auto zum letzen mal vor 20 Stunden verwendet, und er schläft seit dem).

Moosbueffel commented 2 years ago

Ich lasse obige Sequenz alle 60 Sekunden laufen. Trotzdem schläft er zuverlässig nach 12 Minuten ein.

Ok, muß ich mal ausprobieren. Man soll ja auch nicht zu oft abfragen. Alle Minute, wäre natürlich gut

Michael-K-at-GitHub commented 2 years ago

Es gibt jedenfalls eine Limitierung, aber 1/Minute funktioniert bei mir seit Monaten zuverlässig.