Skip to content

Instantly share code, notes, and snippets.

@LelandSindt
Last active April 4, 2020 16:02
Show Gist options
  • Save LelandSindt/5b6caac5a8fe5b320233149be953109e to your computer and use it in GitHub Desktop.
Save LelandSindt/5b6caac5a8fe5b320233149be953109e to your computer and use it in GitHub Desktop.
json2teslafi
#!/usr/bin/python3
import requests
import base64
import json
import string
import csv
import datetime
import os
header = ["data_id","Date","calendar_enabled","remote_start_enabled","vehicle_id","display_name","color","backseat_token","notifications_enabled","vin","backseat_token_updated_at","id","tokens","id_s","state","user_charge_enable_request","time_to_full_charge","charge_current_request","charge_enable_request","charge_to_max_range","charger_phases","battery_heater_on","managed_charging_start_time","battery_range","charger_power","charge_limit_soc","charger_pilot_current","charge_port_latch","battery_current","charger_actual_current","scheduled_charging_pending","fast_charger_type","usable_battery_level","motorized_charge_port","charge_limit_soc_std","not_enough_power_to_heat","battery_level","charge_energy_added","charge_port_door_open","max_range_charge_counter","charge_limit_soc_max","ideal_battery_range","managed_charging_active","charging_state","fast_charger_present","trip_charging","managed_charging_user_canceled","scheduled_charging_start_time","est_battery_range","charge_rate","charger_voltage","charge_current_request_max","eu_vehicle","charge_miles_added_ideal","charge_limit_soc_min","charge_miles_added_rated","inside_temp","longitude","heading","gps_as_of","latitude","speed","shift_state","seat_heater_rear_right","seat_heater_rear_left_back","seat_heater_left","passenger_temp_setting","is_auto_conditioning_on","driver_temp_setting","outside_temp","seat_heater_rear_center","is_rear_defroster_on","seat_heater_rear_right_back","smart_preconditioning","seat_heater_right","fan_status","is_front_defroster_on","seat_heater_rear_left","gui_charge_rate_units","gui_24_hour_time","gui_temperature_units","gui_range_display","gui_distance_units","sun_roof_installed","rhd","remote_start_supported","homelink_nearby","parsed_calendar_supported","spoiler_type","ft","odometer","remote_start","pr","has_spoiler","roof_color","perf_config","valet_mode","calendar_supported","pf","sun_roof_percent_open","third_row_seats","seat_type","api_version","rear_seat_heaters","rt","exterior_color","df","autopark_state","sun_roof_state","notifications_supported","vehicle_name","dr","autopark_style","car_type","wheel_type","locked","center_display_state","last_autopark_error","car_version","dark_rims","autopark_state_v2","inside_tempF","driver_temp_settingF","outside_tempF","odometerF","idleNumber","sleepNumber","driveNumber","chargeNumber","polling","idleTime","running","rerunning","maxRange","left_temp_direction","max_avail_temp","is_climate_on","right_temp_direction","min_avail_temp","rear_seat_type","power","steering_wheel_heater","wiper_blade_heater","side_mirror_heaters","elevation"]
fileName = None
lastFileName = None
csvFile = None
workingFile = "working"
r = requests.get("http://localhost:8443/streamr/ts_")
i = 1
for item in r.json()['kv']:
state = json.loads(base64.standard_b64decode(item['value']))
#print(json.dumps(state, indent= 2))
record = None
try:
fileName = "TeslaFi" + datetime.datetime.fromtimestamp(state['drive_state']['timestamp']/1000).strftime('%m%Y') + ".csv"
record = [i,datetime.datetime.fromtimestamp(state['drive_state']['timestamp']/1000).strftime('%Y-%m-%d %H:%M:%S'), state['vehicle']['calendar_enabled'], \
True,state['vehicle']['vehicle_id'],state['vehicle']['display_name'],state['vehicle']['color'],state['vehicle']['backseat_token'], \
state['vehicle_state']['notifications_supported'], state['vehicle']['vin'], state['vehicle']['backseat_token_updated_at'], state['vehicle']['id'], "", \
state['vehicle']['id_s'], state['vehicle']['state'], state['charge_state']['user_charge_enable_request'], state['charge_state']['time_to_full_charge'], \
state['charge_state']['charge_current_request'], state['charge_state']['charge_enable_request'], state['charge_state']['charge_to_max_range'], \
state['charge_state']['charger_phases'], state['charge_state']['battery_heater_on'], state['charge_state']['managed_charging_start_time'], \
state['charge_state']['battery_range'], state['charge_state']['charger_power'], state['charge_state']['charge_limit_soc'], state['charge_state']['charger_pilot_current'], \
state['charge_state']['charge_port_latch'], 0, state['charge_state']['charger_actual_current'], state['charge_state']['scheduled_charging_pending'], \
state['charge_state']['fast_charger_type'], state['charge_state']['usable_battery_level'], state['vehicle_config']['motorized_charge_port'], state['charge_state']['charge_limit_soc_std'], \
state['charge_state']['not_enough_power_to_heat'], state['charge_state']['battery_level'], state['charge_state']['charge_energy_added'], \
state['charge_state']['charge_port_door_open'], state['charge_state']['max_range_charge_counter'], state['charge_state']['charge_limit_soc_max'], \
state['charge_state']['ideal_battery_range'], state['charge_state']['managed_charging_active'], state['charge_state']['charging_state'], state['charge_state']['fast_charger_present'], \
state['charge_state']['trip_charging'], state['charge_state']['managed_charging_user_canceled'], state['charge_state']['scheduled_charging_start_time'], \
state['charge_state']['est_battery_range'], state['charge_state']['charge_rate'], state['charge_state']['charger_voltage'], \
state['charge_state']['charge_current_request_max'], state['vehicle_config']['eu_vehicle'], \
state['charge_state']['charge_miles_added_ideal'], state['charge_state']['charge_limit_soc_min'], state['charge_state']['charge_miles_added_rated'], \
state['climate_state']['inside_temp'], state['drive_state']['longitude'], state['drive_state']['heading'], state['drive_state']['gps_as_of'], \
state['drive_state']['latitude'], state['drive_state']['speed'], state['drive_state']['shift_state'], state['climate_state']['seat_heater_rear_right'], \
state['climate_state']['seat_heater_rear_left'], state['climate_state']['seat_heater_left'], state['climate_state']['passenger_temp_setting'], \
state['climate_state']['is_auto_conditioning_on'], state['climate_state']['driver_temp_setting'], state['climate_state']['outside_temp'], state['climate_state']['seat_heater_rear_center'], \
state['climate_state']['is_rear_defroster_on'], state['climate_state']['seat_heater_rear_right'], state['climate_state']['is_preconditioning'], \
state['climate_state']['seat_heater_right'], state['climate_state']['fan_status'], state['climate_state']['is_front_defroster_on'], \
state['climate_state']['seat_heater_rear_left'], state['gui_settings']['gui_charge_rate_units'], state['gui_settings']['gui_24_hour_time'], \
state['gui_settings']['gui_temperature_units'], state['gui_settings']['gui_range_display'], state['gui_settings']['gui_distance_units'], state['vehicle_config']['sun_roof_installed'], \
state['vehicle_config']['rhd'], state['vehicle_state']['remote_start_supported'], state['vehicle_state']['homelink_nearby'], state['vehicle_state']['parsed_calendar_supported'], \
state['vehicle_config']['spoiler_type'], state['vehicle_state']['ft'], state['vehicle_state']['odometer'], state['vehicle_state']['remote_start'], state['vehicle_state']['pr'], \
False, state['vehicle_config']['roof_color'], "P3", state['vehicle_state']['valet_mode'], state['vehicle_state']['calendar_supported'], state['vehicle_state']['pf'], \
0, False, state['vehicle_config']['seat_type'], state['vehicle']['api_version'], state['vehicle_config']['rear_seat_heaters'], state['vehicle_state']['rt'], \
state['vehicle_config']['exterior_color'], state['vehicle_state']['df'], state['vehicle_state']['autopark_state_v3'], "unknown", state['vehicle_state']['notifications_supported'], \
state['vehicle_state']['vehicle_name'], state['vehicle_state']['dr'], state['vehicle_state']['autopark_style'], state['vehicle_config']['car_type'], \
state['vehicle_config']['wheel_type'], state['vehicle_state']['locked'], state['vehicle_state']['center_display_state'], state['vehicle_state']['last_autopark_error'], \
state['vehicle_state']['car_version'], False, "disabled", \
"","","","",0,0,0,0,"",0,0,0,"","","","","","","","","","","","" ]
i += 1
except Exception as e:
#print(e)
next
if record:
if lastFileName != fileName and csvFile:
csvFile.close()
csvFile = None
lastFileName = fileName
os.rename(workingFile ,lastFileName)
if not csvFile:
csvFile = open(workingFile, "wt", newline='\n')
csvWriter = csv.writer(csvFile, delimiter=',', quotechar='"', quoting=csv.QUOTE_NONNUMERIC)
csvWriter.writerow(header)
#print(record)
csvWriter.writerow(record)
if csvFile:
csvFile.close()
os.rename(workingFile ,fileName)
@LelandSindt
Copy link
Author

json to TeslaFi csv converter...

teslamate-org/teslamate#452

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment