Files
we_collect/arielle.py
T
2024-10-20 19:45:09 +02:00

109 lines
3.7 KiB
Python

import os.path
import time
import pprint
import credentials
from wci import wci
from credentials import user, password
import json
from folder_mgr.folder_mgr import get_date, date_has_changed, FolderMgr, create_timestamp
from jay_diff import jay_diff_full
INTERVAL = 1*60
domains = [
"access",
"charging",
"climatisation",
"climatisationTimers",
"fuelStatus",
"userCapabilities",
"vehicleLights",
"vehicleHealthInspection",
"oilLevel",
"measurements"
]
# Values after training
# Convert and write JSON object to file
def main():
expired_token_for_test = 'eyJraWQiOiI0ODEyODgzZi05Y2FiLTQwMWMtYTI5OC0wZmEyMTA5Y2ViY2EiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxMDQyNmRjZC1mYzljLTRkODctODBmYy0yMDIyNzdmYzhkYzIiLCJhdWQiOiJhMjRmYmE2My0zNGIzLTRkNDMtYjE4MS05NDIxMTFlNmJkYThAYXBwc192dy1kaWxhYl9jb20iLCJzY3AiOiJvcGVuaWQgcHJvZmlsZSBiYWRnZSBjYXJzIGRlYWxlcnMgdmluIiwiYWF0IjoiaWRlbnRpdHlraXQiLCJpc3MiOiJodHRwczovL2lkZW50aXR5LnZ3Z3JvdXAuaW8iLCJqdHQiOiJhY2Nlc3NfdG9rZW4iLCJleHAiOjE3Mjg5ODQzMjAsImlhdCI6MTcyODk4MDcyMCwibGVlIjpbIlZPTEtTV0FHRU4iXSwianRpIjoiYWQ0MDhkMDEtYmQxMy00YWZkLWIyMWEtYmZiMTE5NTFhOGE3In0.r78z00BS0Je7mjUcukmrkuSiPO9F8me-bLs3ZZF6BokhPX8uqu_2j7I3Pu-8C1xwFBb-YDs6rr0iiVUeOeiKM4O-jOik8ny57sMKdYJ_FHZNo-GLMA_WPppNaGWkM8HojIxEW4mrO3Zqd9f_vDrTAYukG4WyULbxq_OH6c6yQdmEx4M1PGisVB0DI6DG0Dl4748BCJMA_TyNvKagQHZuRhT0ma7kj_GVSqlGGtW0erwPBwTHY_X_wDitngod2iUw9nRtli-HkJKqgER82jSu2k5b36ePglsRqx6k4ls8Tiz6ykgcjuuW4_zdsfUNuhBElVd1QwCzolQ4e7IzHbVaRZbub8tlisrHZMskGJmNJeAUv9xZMJ8o6YNyAz__WPvP6iubrCIixSKOThv-YLXa0cFkCPmoaLR9eeTy6sWFsFvslTdD-a0zrrdP8ais4g5Cxao6ph3NV1xCgkEldImI3n1hxeMLefe6sqfoZ6Ogz-EDVPBxS9qpazPWN6EQyyYLXQZA0s6p5hcrjVq7pD-5yXjeFhCrymzizaNm0JhVF_L36F3D5a3s8tnQ2kaMfdK6jdHQyauxL-8SHfAgk_py33XOcgGQkp4aOXN3pm7UhutQ8fAS9kMoquqikuxTAu-UlWAYRhDUaypab1F51f50eK84s1jpgWDAQ1aL7PIgwj8'
w = wci.WeConnectId(user, password, expired_token_for_test)
vehicles = w.get('/vehicles')['data']
print('list of vehicles:')
pprint.pprint(vehicles)
# Print vins
for vehicle in vehicles:
vin = vehicle['vin']
print(f'vin: {vin}')
vin = credentials.vin
# Create request url
endpoint = '/vehicles/' + vin + '/selectivestatus?jobs='
for domain in domains:
endpoint += domain + ','
endpoint = endpoint[:-1]
print(f'Endpoint: {endpoint}')
# Init collecting records
f_mgr = FolderMgr()
record_id = 0
record_list = None
_date_last = None
file_timestamp = None
vehicle_data_last = None
# Collecting loop
while True:
start = time.time()
_date = get_date()
timestamp = create_timestamp()
# Reset on start up or day change
if date_has_changed(_date_last, _date):
_date_last = _date
record_id = 0
record_list = []
file_timestamp = create_timestamp(with_ms=False).replace(':', '-').replace('.', '-')
vehicle_data_last = {}
try:
print(f"{timestamp}: Retrieve vehicle data")
# Create data difference
vehicle_data = w.get(endpoint)
vehicle_data_diff = jay_diff_full(vehicle_data_last, vehicle_data)
vehicle_data_last = vehicle_data
# Put vehicle data difference onto record list
record_list.append({'info': {'record_id': record_id, 'timestamp': timestamp, 'is_delta': (record_id > 0)}, 'data': vehicle_data_diff})
# Store record list
print(f"{timestamp}: Store record #{record_id:04d}")
folder = f_mgr.update(f"results/{vin}", _date)
filename = f"vehicle_{vin}_{file_timestamp}.json"
_path = os.path.join(folder, filename)
with open(_path, "w") as fp:
json.dump(record_list, fp, indent=4)
record_id += 1
except Exception as e:
print(f"Exception: {e}")
# wait until next loop
stop = time.time()
diff = stop - start
time_to_wait = INTERVAL - diff
if time_to_wait < 0:
time_to_wait = 0
time.sleep(time_to_wait)
if __name__ == '__main__':
main()