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, to_date_str, to_time_str, FolderMgr, create_timestamp from deep_diff import deep_diff, deepcopy 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 initial_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 = [] initial_timestamp = create_timestamp().replace(':', '-').replace('.', '-') vehicle_data_last = {} try: print(f"{timestamp}: Retrieve vehicle data") # Create data difference vehicle_data = w.get(endpoint) vehicle_data_diff = deep_diff(vehicle_data, vehicle_data_last) vehicle_data_last = vehicle_data # Put vehicle data difference onto record list record_list.append({'info': {'record_id': record_id, 'timestamp': timestamp}, '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}_{initial_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()