Open Source Datenlogger.

Technische Informationen zum Model S...

Re: Open Source Datenlogger.

von cko » 19. Jul 2017, 15:33

Ich habe eben mal ein weiteres kleines Python tool gemacht, welches mir Daten, die mich gerade interessieren, aus einem log herausfiltert.
Konkret wollte ich wissen, wann wo und wie lange ich auf der Rückreise aus dem Urlaub Pause gemacht habe und wie lang die gesamte Fahrstrecke, Fahrzeit und Parkzeit war. Ich denke, ich habe mit 9 Stunden 56 Minuten Fahrzeit und 3 Stunden 10 Minuten Parkzeit ein sehr gesundes Verhältnis erreicht, bin aber auch mit einem Schnitt von über 100 km/h recht zügig gefahren.

Hier die Ausgabe des neuen tools:

Code: Alles auswählen
Tesla/py> python filter_log.py "Mon Jul 17" < voyager_vacation.log
Mon Jul 17 10:50:21 2017: 35332 D 46.46312 11.278713
Mon Jul 17 11:12:48 2017: 35339 P 46.486347 11.336776
Mon Jul 17 11:38:24 2017: 35342 D 46.486111 11.335332
Mon Jul 17 13:49:13 2017: 35519 P 47.334026 10.818599
Mon Jul 17 13:49:22 2017: 35519 D 47.334053 10.818612
Mon Jul 17 13:53:08 2017: 35519 P 47.344597 10.819002
Mon Jul 17 13:59:05 2017: 35520 D 47.344601 10.818916
Mon Jul 17 14:15:21 2017: 35533 P 47.394951 10.887546
Mon Jul 17 14:52:04 2017: 35535 D 47.394951 10.887546
Mon Jul 17 16:52:58 2017: 35758 P 48.955902 10.182326
Mon Jul 17 17:33:04 2017: 35758 D 48.955917 10.182394
Mon Jul 17 18:36:30 2017: 35881 P 49.912067 10.00176
Mon Jul 17 19:00:12 2017: 35881 D 49.912121 10.001744
Mon Jul 17 20:37:32 2017: 36079 P 51.370968 9.633323
Mon Jul 17 21:03:14 2017: 36083 D 51.370968 9.633323
Mon Jul 17 21:41:16 2017: 36144 P 51.947224 10.140475
Mon Jul 17 22:12:53 2017: 36169 D 51.947227 10.140487
Mon Jul 17 23:55:43 2017: 36349 P XXXX XXXX
Total trip: 1017 km.
Drive time: 9h 56min.
Park time:  3h 10min.


Meinen Wohnort habe ich aus Datenschutzgründen unkenntlich gemacht, alle anderen Parkpositionen könnt Ihr Euch zum Beispiel in google maps anzeigen lassen, indem Ihr mit copy and paste die Koordinaten übertragt. So sieht man zum Beispiel, dass ich von 14:15:21 bis 14:52:04 in Lermoos geladen habe.


Hier das tool selbst:
Code: Alles auswählen
import re
import sys
import time

km_per_mile = 1.609347219

drive_state = ''
last_shift_state = 'P'
last_event_time = 0
latitude = ''
longitude = ''
odometer = '0'
shift_state = ''
start_km = 0
last_time = 0
now = 0
park_time = 0
drive_time = 0
time_re = ".*"

interesting_states = ("drive_state ", "   shift_state=", "   latitude=",
                      "   longitude=", "   odometer=")
                     
if len(sys.argv) > 1:
    time_re = sys.argv[1]

for line in sys.stdin:
    for interesting_state in interesting_states:
        if line.startswith(interesting_state):
            name = interesting_state.strip().rstrip('=')
            value = line[len(interesting_state): -1]
            globals()[name] = value
            if shift_state == "None":
                shift_state = last_shift_state
            if shift_state != last_shift_state and re.match(time_re, drive_state):
                km = int(float(odometer)*km_per_mile)
                now = time.mktime(time.strptime(drive_state[:-1], "%a %b %d %H:%M:%S %Y"))
                if last_time != 0:
                    if last_shift_state == 'P':
                        park_time += now-last_time
                    else:
                        drive_time += now-last_time
                last_time = now
                if start_km == 0:
                   start_km = km
                if shift_state in ('P', 'D'):
                    print drive_state, km, shift_state, latitude, longitude
                    last_shift_state = shift_state
print "Total trip: %d km." % (km-start_km)
print "Drive time: %dh %dmin." % ((drive_time / 3600), (drive_time % 3600 + 30) / 60)
print "Park time:  %dh %dmin." % ((park_time / 3600), (park_time % 3600 + 30) / 60)


Am code ist vielleicht interessant, dass das Tesla REST API neben 'D', 'R' und 'P' manchmal den Gang "None" meldet. Soweit ich das bislang beobachtet habe, geht das Auto von P (Parken) nach None und später wieder nach P. Vermutlich wird None gemeldet, wenn das Auto aus ist. Ich habe None wie P (genauer: wie den vor None gemeldeten Gang) behandelt und zeige nur Umschalten auf P und D (Drive) an.
Kaufe Deinen Tesla günstiger über diesen link!
Benutzeravatar
 
Beiträge: 1567
Registriert: 10. Nov 2015, 16:34
Wohnort: zwischen HH und HB

Re: Open Source Datenlogger.

von cko » 23. Jul 2017, 18:46

Ersten Beitrag aktualisiert mit neuer Version.
Kaufe Deinen Tesla günstiger über diesen link!
Benutzeravatar
 
Beiträge: 1567
Registriert: 10. Nov 2015, 16:34
Wohnort: zwischen HH und HB

Re: Open Source Datenlogger.

von Gerdi » 25. Jul 2017, 09:39

Danke, das ist echt eine nette Sache. Viele interessante Sachen kann man nun sehen und loggen ;)
Model S60 FL Midnight Silver 3/2017 FW: 2018.21.9
http://ts.la/gerhard4857
Benutzeravatar
 
Beiträge: 255
Registriert: 9. Dez 2016, 20:42
Wohnort: Neumünster

Re: Open Source Datenlogger.

von past_petrol » 25. Jul 2017, 10:49

Hier noch eine Erfahrung. Wenn ich die API calls unterdrücke, sind meine Energieverbräuche wieder ganz die alten - das Fahrzeug schläft wieder. Also aus der Empirie heraus kann man sagen, dass ein laufender Datenlogger das Fahrzeug am Schlafen hindert, was zu signifikantem Mehrverbrauch führt. Ich kann es jetzt remote ein/ ausschalten und so ist es für mich i.O. ! :)
S85D, seit 03/2015
ZOE intens Z.E. 40, seit 03/2017
PV 10,494 kWp
KEBA P30-Cluster, Lokales Lastmanagement
digitalStrom
Benutzeravatar
 
Beiträge: 3339
Registriert: 11. Nov 2014, 11:17

Re: Open Source Datenlogger.

von stevelectric » 25. Jul 2017, 17:33

Ich hab eine Tesla-Erweiterung für FHEM programmiert und kann bestätigen dass das Auto nicht mehr schläft wenn man ständig abfragt. Stellt man das Abfrage-Intervall auf 10 Minuten, klappt das Energiesparen aber wieder.

Wenn man dann vor dem eigentlichen Abfragen der Daten mit dem "vehicles" Endpoint prüft, ob der Wagen online ist, wacht er auch nicht wieder durchs Logging auf.
Model S75D seit 14. März 2017, deep blue metallic, Pano, EAP, Premium Interior, Performance Upgrade
Benutzeravatar
 
Beiträge: 546
Registriert: 1. Nov 2016, 23:11
Wohnort: München

Re: Open Source Datenlogger.

von cko » 26. Jul 2017, 01:01

Danke für den Hinweis, stevelectric.
Weißt du zufällig, welchem REST API call die online Prüfung mit dem FHEM vehicles Endpoint entspricht?
Kaufe Deinen Tesla günstiger über diesen link!
Benutzeravatar
 
Beiträge: 1567
Registriert: 10. Nov 2015, 16:34
Wohnort: zwischen HH und HB

Re: Open Source Datenlogger.

von stevelectric » 26. Jul 2017, 08:23

Ich meine den hier: https://owner-api.teslamotors.com/api/1/vehicles
In der Antwort geben gibt es den "State" wo man sehen kann ob das Fahrzeug online ist oder schläft. Ich kann Python nicht so gut lesen aber es scheint mir als ob du das Auto dann aufweckst. Stattdessen könntest du aber auch einfach nur warten bis es aus anderen Gründen aufwacht.
Model S75D seit 14. März 2017, deep blue metallic, Pano, EAP, Premium Interior, Performance Upgrade
Benutzeravatar
 
Beiträge: 546
Registriert: 1. Nov 2016, 23:11
Wohnort: München

Re: Open Source Datenlogger.

von StefanSarzio » 26. Jul 2017, 08:50

Über den "Vehicles"-Aufruf kann man den Status abfragen, ohne dass das Auto wach sein muss und ohne dass man es am Schlafen hindert.

Mit den anderen Aufrufen für den Status hindert man das Auto am Schlafen, aber weckt es nicht.
S75, Glasdach, AP2 (EAP+FSD), März 2017
 
Beiträge: 804
Registriert: 8. Apr 2016, 07:32

Re: Open Source Datenlogger.

von cko » 29. Jul 2017, 18:57

Ich hab eben mal ein zweites Filter Tool gemacht, welches aus einem log alle Positionen und Zeiten extrahiert und als GPX Datei herausschreibt.
Diese kann man dann zum Beispiel mit
http://www.gpswandern.de/gpxviewer/gpxviewer.shtml
oder auch mit google earth importieren und visualisieren.

Bitte den Quelltext mit Humor lesen, da sind noch ein paar unbenutzte Dinge "for future enhancements" drin.

Code: Alles auswählen
 

import re
import sys
import time

km_per_mile = 1.609347219

drive_state = ''
last_shift_state = 'P'
latitude = ''
longitude = ''
last_longitude = ''
shift_state = ''
time_re = ".*"
odometer = ''
heading = ''
power = ''


interesting_states = ("drive_state ", "   shift_state=", "   latitude=",
                      "   longitude=", "   odometer=", "   heading=",
                      "   power=", "   speed=")

if len(sys.argv) > 1:
    time_re = sys.argv[1]

print """<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx version="1.1" creator="convert_to_log.py">
  <trk>
     <trkseg>
"""

for line in sys.stdin:
    for interesting_state in interesting_states:
        if line.startswith(interesting_state):
            name = interesting_state.strip().rstrip('=')
            if name == "drive_state" and re.match(time_re, drive_state) and longitude != last_longitude:
                last_longitude = longitude
                time_tuple = time.strptime(drive_state[:-1], "%a %b %d %H:%M:%S %Y")
                print """        <trkpt lat="%s" lon="%s">
           <time> %s
           </time>
           <cmt> %s
           </cmt>
        </trkpt>""" % (latitude, longitude, time.strftime("%Y-%m-%dT%H:%M:%SZ", time_tuple),
                       shift_state + ' ' + str(int(float(odometer)*km_per_mile)) + ' ' +
                       heading + ' ' + power)

            value = line[len(interesting_state): -1]
            globals()[name] = value
            if shift_state == "None":
                shift_state = last_shift_state
            if shift_state != last_shift_state and re.match(time_re, drive_state):
                if shift_state in ('P', 'D'):
                    print """     </trkseg>
     <trkseg>"""
                last_shift_state = shift_state
print """     </trkseg>
  </trk>
</gpx>
"""


Kaufe Deinen Tesla günstiger über diesen link!
Benutzeravatar
 
Beiträge: 1567
Registriert: 10. Nov 2015, 16:34
Wohnort: zwischen HH und HB

Probleme beim Anmelden

von Kap-Gallo » 2. Aug 2017, 17:47

servus cko,

ich möchte Dein Skript auf einer Ubuntu VM laufen lassen ...

Das Einrichten hat auch funktioniert. Auch das Setzen der Variablen ging mit export. Habe das auch mehrfach geprüft:

Code: Alles auswählen
echo $TESLA_EMAIL


Leider bekomme ich bei dem Versuch mich aufzuschalten immer den hartnäckigen Fehler, dass die "Indentation" nicht stimmt.

Code: Alles auswählen
hahn@ubuntuVM:~/tesla$ python log_all_data.py
  File "log_all_data.py", line 23
    import os
    ^
IndentationError: unexpected indent
hahn@ubuntuVM:~/tesla$


Bin mir aber sicher, die richtigen Daten zu übergeben. Kann es auch an den Berechtigungen liegen? Hast Du noch eine andere Idee?
 
Beiträge: 9
Registriert: 9. Jan 2015, 14:26

VorherigeNächste

Wer ist online?
Mitglieder in diesem Forum: Google Adsense [Bot], Mathie und 6 Gäste