From 227bba934af86b20bf5852354c41b75edf0906ee Mon Sep 17 00:00:00 2001 From: Zuinige Rijder Date: Wed, 20 Nov 2024 16:00:54 +0100 Subject: [PATCH] summary.py and dailystats.py now also sends data to Domoticz and/or MQTT Broker --- README.md | 701 ++++++++++++++++-- check_monitor.py | 17 +- dailystats.py | 86 ++- domoticz_utils.py | 113 ++- examples/MQTTExplorer.png | Bin 89706 -> 0 bytes examples/MQTTExplorer_dailystats.png | Bin 0 -> 83480 bytes examples/MQTTExplorer_monitor.png | Bin 0 -> 44848 bytes examples/MQTTExplorer_summary.png | Bin 0 -> 107109 bytes monitor.cfg | 340 ++++++++- monitor.py | 84 ++- monitor_utils.py | 92 ++- mqtt_utils.py | 139 +++- requirements.txt | 2 +- summary.py | 71 +- .../OUTPUT/test.dailystats.mqtt_domoticz.log | 96 +++ tests/OUTPUT/test.summary.mqtt_domoticz.log | 420 +++++++++++ tests/run_monitor.bat | 4 +- tests/run_mypy.bat | 19 + tests/run_tests.bat | 29 + 19 files changed, 1957 insertions(+), 256 deletions(-) delete mode 100644 examples/MQTTExplorer.png create mode 100644 examples/MQTTExplorer_dailystats.png create mode 100644 examples/MQTTExplorer_monitor.png create mode 100644 examples/MQTTExplorer_summary.png create mode 100644 tests/OUTPUT/test.dailystats.mqtt_domoticz.log create mode 100644 tests/OUTPUT/test.summary.mqtt_domoticz.log create mode 100644 tests/run_mypy.bat diff --git a/README.md b/README.md index bba330d..ee15cbc 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,9 @@ - [Translations](#translations) - [Domoticz](#domoticz) - [MQTT Broker (e.g. HomeAssistant, ioBroker)](#mqtt-broker-eg-homeassistant-iobroker) + - [MQTT-Explorer screenshot after running monitor.py](#mqtt-explorer-screenshot-after-running-monitorpy) + - [MQTT-Explorer screenshot after running summary.py](#mqtt-explorer-screenshot-after-running-summarypy) + - [MQTT-Explorer screenshot after running dailystats.py:](#mqtt-explorer-screenshot-after-running-dailystatspy) - [monitor.py](#monitorpy) - [summary.py](#summarypy) - [summary.py sheetupdate](#summarypy-sheetupdate) @@ -199,43 +202,317 @@ In the file "monitor.cfg" there is a configuration section for domoticz: send_to_domoticz = False domot_url = http://192.168.0.222:8081 -monitor_datetime = 0 -monitor_longitude = 0 -monitor_latitude = 0 -monitor_engineon = 0 -monitor_battery12v = 0 -monitor_odometer = 0 -monitor_soc = 0 -monitor_charging = 0 -monitor_plugged = 0 -monitor_address = 0 -monitor_evrange = 0 - -trip_date = 0 -trip_starttime = 0 -trip_drivetime = 0 -trip_idletime = 0 -trip_distance = 0 -trip_avgspeed = 0 -trip_maxspeed = 0 - -dailystats_date = 0 -dailystats_distance = 0 -dailystats_distance_unit = 0 -dailystats_total_consumed = 0 -dailystats_regenerated_energy = 0 -dailystats_engine_consumption = 0 -dailystats_climate_consumption = 0 -dailystats_onboard_electronics_consumption = 0 -dailystats_battery_care_consumption = 0 +monitor_monitor_datetime = 0 +monitor_monitor_longitude = 0 +monitor_monitor_latitude = 0 +monitor_monitor_engineon = 0 +monitor_monitor_battery12v = 0 +monitor_monitor_odometer = 0 +monitor_monitor_soc = 0 +monitor_monitor_charging = 0 +monitor_monitor_plugged = 0 +monitor_monitor_address = 0 +monitor_monitor_evrange = 0 + +monitor_tripinfo_date = 0 +monitor_tripinfo_starttime = 0 +monitor_tripinfo_drivetime = 0 +monitor_tripinfo_idletime = 0 +monitor_tripinfo_distance = 0 +monitor_tripinfo_avgspeed = 0 +monitor_tripinfo_maxspeed = 0 + +monitor_dailystats_date = 0 +monitor_dailystats_distance = 0 +monitor_dailystats_distance_unit = 0 +monitor_dailystats_total_consumed = 0 +monitor_dailystats_regenerated_energy = 0 +monitor_dailystats_engine_consumption = 0 +monitor_dailystats_climate_consumption = 0 +monitor_dailystats_onboard_electronics_consumption = 0 +monitor_dailystats_battery_care_consumption = 0 + +summary_TRIP_date = 0 +summary_TRIP_info = 0 +summary_TRIP_odometer = 0 +summary_TRIP_delta_distance = 0 +summary_TRIP_kwh_charged = 0 +summary_TRIP_kwh_discharged = 0 +summary_TRIP_distance_unit_per_kwh = 0 +summary_TRIP_kwh_per_100_distance_unit = 0 +summary_TRIP_cost = 0 +summary_TRIP_soc = 0 +summary_TRIP_soc_avg = 0 +summary_TRIP_soc_min = 0 +summary_TRIP_soc_max = 0 +summary_TRIP_battery12v = 0 +summary_TRIP_battery12v_avg = 0 +summary_TRIP_battery12v_min = 0 +summary_TRIP_battery12v_max = 0 +summary_TRIP_charging_sessions = 0 +summary_TRIP_trip_count = 0 +summary_TRIP_range = 0 +summary_TRIP_address = 0 + +summary_DAY_date = 0 +summary_DAY_info = 0 +summary_DAY_odometer = 0 +summary_DAY_delta_distance = 0 +summary_DAY_kwh_charged = 0 +summary_DAY_kwh_discharged = 0 +summary_DAY_distance_unit_per_kwh = 0 +summary_DAY_kwh_per_100_distance_unit = 0 +summary_DAY_cost = 0 +summary_DAY_soc = 0 +summary_DAY_soc_avg = 0 +summary_DAY_soc_min = 0 +summary_DAY_soc_max = 0 +summary_DAY_battery12v = 0 +summary_DAY_battery12v_avg = 0 +summary_DAY_battery12v_min = 0 +summary_DAY_battery12v_max = 0 +summary_DAY_charging_sessions = 0 +summary_DAY_trip_count = 0 +summary_DAY_range = 0 +summary_DAY_address = 0 + +summary_WEEK_date = 0 +summary_WEEK_info = 0 +summary_WEEK_odometer = 0 +summary_WEEK_delta_distance = 0 +summary_WEEK_kwh_charged = 0 +summary_WEEK_kwh_discharged = 0 +summary_WEEK_distance_unit_per_kwh = 0 +summary_WEEK_kwh_per_100_distance_unit = 0 +summary_WEEK_cost = 0 +summary_WEEK_soc = 0 +summary_WEEK_soc_avg = 0 +summary_WEEK_soc_min = 0 +summary_WEEK_soc_max = 0 +summary_WEEK_battery12v = 0 +summary_WEEK_battery12v_avg = 0 +summary_WEEK_battery12v_min = 0 +summary_WEEK_battery12v_max = 0 +summary_WEEK_charging_sessions = 0 +summary_WEEK_trip_count = 0 +summary_WEEK_range = 0 +summary_WEEK_address = 0 + +summary_MONTH_date = 0 +summary_MONTH_info = 0 +summary_MONTH_odometer = 0 +summary_MONTH_delta_distance = 0 +summary_MONTH_kwh_charged = 0 +summary_MONTH_kwh_discharged = 0 +summary_MONTH_distance_unit_per_kwh = 0 +summary_MONTH_kwh_per_100_distance_unit = 0 +summary_MONTH_cost = 0 +summary_MONTH_soc = 0 +summary_MONTH_soc_avg = 0 +summary_MONTH_soc_min = 0 +summary_MONTH_soc_max = 0 +summary_MONTH_battery12v = 0 +summary_MONTH_battery12v_avg = 0 +summary_MONTH_battery12v_min = 0 +summary_MONTH_battery12v_max = 0 +summary_MONTH_charging_sessions = 0 +summary_MONTH_trip_count = 0 +summary_MONTH_range = 0 +summary_MONTH_address = 0 + +summary_YEAR_date = 0 +summary_YEAR_info = 0 +summary_YEAR_odometer = 0 +summary_YEAR_delta_distance = 0 +summary_YEAR_kwh_charged = 0 +summary_YEAR_kwh_discharged = 0 +summary_YEAR_distance_unit_per_kwh = 0 +summary_YEAR_kwh_per_100_distance_unit = 0 +summary_YEAR_cost = 0 +summary_YEAR_soc = 0 +summary_YEAR_soc_avg = 0 +summary_YEAR_soc_min = 0 +summary_YEAR_soc_max = 0 +summary_YEAR_battery12v = 0 +summary_YEAR_battery12v_avg = 0 +summary_YEAR_battery12v_min = 0 +summary_YEAR_battery12v_max = 0 +summary_YEAR_charging_sessions = 0 +summary_YEAR_trip_count = 0 +summary_YEAR_range = 0 +summary_YEAR_address = 0 + +summary_TRIPAVG_date = 0 +summary_TRIPAVG_info = 0 +summary_TRIPAVG_odometer = 0 +summary_TRIPAVG_delta_distance = 0 +summary_TRIPAVG_kwh_charged = 0 +summary_TRIPAVG_kwh_discharged = 0 +summary_TRIPAVG_distance_unit_per_kwh = 0 +summary_TRIPAVG_kwh_per_100_distance_unit = 0 +summary_TRIPAVG_cost = 0 +summary_TRIPAVG_soc = 0 +summary_TRIPAVG_soc_avg = 0 +summary_TRIPAVG_soc_min = 0 +summary_TRIPAVG_soc_max = 0 +summary_TRIPAVG_battery12v = 0 +summary_TRIPAVG_battery12v_avg = 0 +summary_TRIPAVG_battery12v_min = 0 +summary_TRIPAVG_battery12v_max = 0 +summary_TRIPAVG_charging_sessions = 0 +summary_TRIPAVG_trip_count = 0 +summary_TRIPAVG_range = 0 +summary_TRIPAVG_address = 0 + +summary_DAYAVG_date = 0 +summary_DAYAVG_info = 0 +summary_DAYAVG_odometer = 0 +summary_DAYAVG_delta_distance = 0 +summary_DAYAVG_kwh_charged = 0 +summary_DAYAVG_kwh_discharged = 0 +summary_DAYAVG_distance_unit_per_kwh = 0 +summary_DAYAVG_kwh_per_100_distance_unit = 0 +summary_DAYAVG_cost = 0 +summary_DAYAVG_soc = 0 +summary_DAYAVG_soc_avg = 0 +summary_DAYAVG_soc_min = 0 +summary_DAYAVG_soc_max = 0 +summary_DAYAVG_battery12v = 0 +summary_DAYAVG_battery12v_avg = 0 +summary_DAYAVG_battery12v_min = 0 +summary_DAYAVG_battery12v_max = 0 +summary_DAYAVG_charging_sessions = 0 +summary_DAYAVG_trip_count = 0 +summary_DAYAVG_range = 0 +summary_DAYAVG_address = 0 + +summary_WEEKAVG_date = 0 +summary_WEEKAVG_info = 0 +summary_WEEKAVG_odometer = 0 +summary_WEEKAVG_delta_distance = 0 +summary_WEEKAVG_kwh_charged = 0 +summary_WEEKAVG_kwh_discharged = 0 +summary_WEEKAVG_distance_unit_per_kwh = 0 +summary_WEEKAVG_kwh_per_100_distance_unit = 0 +summary_WEEKAVG_cost = 0 +summary_WEEKAVG_soc = 0 +summary_WEEKAVG_soc_avg = 0 +summary_WEEKAVG_soc_min = 0 +summary_WEEKAVG_soc_max = 0 +summary_WEEKAVG_battery12v = 0 +summary_WEEKAVG_battery12v_avg = 0 +summary_WEEKAVG_battery12v_min = 0 +summary_WEEKAVG_battery12v_max = 0 +summary_WEEKAVG_charging_sessions = 0 +summary_WEEKAVG_trip_count = 0 +summary_WEEKAVG_range = 0 +summary_WEEKAVG_address = 0 + +summary_MONTHAVG_date = 0 +summary_MONTHAVG_info = 0 +summary_MONTHAVG_odometer = 0 +summary_MONTHAVG_delta_distance = 0 +summary_MONTHAVG_kwh_charged = 0 +summary_MONTHAVG_kwh_discharged = 0 +summary_MONTHAVG_distance_unit_per_kwh = 0 +summary_MONTHAVG_kwh_per_100_distance_unit = 0 +summary_MONTHAVG_cost = 0 +summary_MONTHAVG_soc = 0 +summary_MONTHAVG_soc_avg = 0 +summary_MONTHAVG_soc_min = 0 +summary_MONTHAVG_soc_max = 0 +summary_MONTHAVG_battery12v = 0 +summary_MONTHAVG_battery12v_avg = 0 +summary_MONTHAVG_battery12v_min = 0 +summary_MONTHAVG_battery12v_max = 0 +summary_MONTHAVG_charging_sessions = 0 +summary_MONTHAVG_trip_count = 0 +summary_MONTHAVG_range = 0 +summary_MONTHAVG_address = 0 + +summary_YEARLY_date = 0 +summary_YEARLY_info = 0 +summary_YEARLY_odometer = 0 +summary_YEARLY_delta_distance = 0 +summary_YEARLY_kwh_charged = 0 +summary_YEARLY_kwh_discharged = 0 +summary_YEARLY_distance_unit_per_kwh = 0 +summary_YEARLY_kwh_per_100_distance_unit = 0 +summary_YEARLY_cost = 0 +summary_YEARLY_soc = 0 +summary_YEARLY_soc_avg = 0 +summary_YEARLY_soc_min = 0 +summary_YEARLY_soc_max = 0 +summary_YEARLY_battery12v = 0 +summary_YEARLY_battery12v_avg = 0 +summary_YEARLY_battery12v_min = 0 +summary_YEARLY_battery12v_max = 0 +summary_YEARLY_charging_sessions = 0 +summary_YEARLY_trip_count = 0 +summary_YEARLY_range = 0 +summary_YEARLY_address = 0 + +dailystats_day_TOTALS_date = 0 +dailystats_day_TOTALS_total_consumption = 0 +dailystats_day_TOTALS_regenerated_energy = 0 +dailystats_day_TOTALS_average_consumption = 0 +dailystats_day_TOTALS_engine_consumption = 0 +dailystats_day_TOTALS_climate_consumption = 0 +dailystats_day_TOTALS_onboard_electronics_consumption = 0 +dailystats_day_TOTALS_battery_care_consumption = 0 +dailystats_day_TOTALS_driven = 0 +dailystats_day_TOTALS_regenerated_energy_percentage = 0 +dailystats_day_TOTALS_average_consumption_per_100 = 0 +dailystats_day_TOTALS_engine_consumption_percentage = 0 +dailystats_day_TOTALS_climate_consumption_percentage = 0 +dailystats_day_TOTALS_onboard_electronics_consumption_percentage = 0 +dailystats_day_TOTALS_battery_care_consumption_percentage = 0 + +dailystats_day_LAST_DAY_date = 0 +dailystats_day_LAST_DAY_total_consumption = 0 +dailystats_day_LAST_DAY_regenerated_energy = 0 +dailystats_day_LAST_DAY_average_consumption = 0 +dailystats_day_LAST_DAY_engine_consumption = 0 +dailystats_day_LAST_DAY_climate_consumption = 0 +dailystats_day_LAST_DAY_onboard_electronics_consumption = 0 +dailystats_day_LAST_DAY_battery_care_consumption = 0 +dailystats_day_LAST_DAY_driven = 0 +dailystats_day_LAST_DAY_regenerated_energy_percentage = 0 +dailystats_day_LAST_DAY_average_consumption_per_100 = 0 +dailystats_day_LAST_DAY_engine_consumption_percentage = 0 +dailystats_day_LAST_DAY_climate_consumption_percentage = 0 +dailystats_day_LAST_DAY_onboard_electronics_consumption_percentage = 0 +dailystats_day_LAST_DAY_battery_care_consumption_percentage = 0 + +dailystats_trip_TOTALS_computed_kwh_charged = 0 +dailystats_trip_TOTALS_computed_day_consumption = 0 +dailystats_trip_TOTALS_computed_kwh_used = 0 +dailystats_trip_TOTALS_trip_time = 0 +dailystats_trip_TOTALS_computed_consumption_or_distance = 0 +dailystats_trip_TOTALS_distance = 0 +dailystats_trip_TOTALS_avg_speed = 0 +dailystats_trip_TOTALS_max_speed = 0 +dailystats_trip_TOTALS_idle_time = 0 + +dailystats_trip_LAST_DAY_computed_kwh_charged = 0 +dailystats_trip_LAST_DAY_computed_day_consumption = 0 +dailystats_trip_LAST_DAY_computed_kwh_used = 0 +dailystats_trip_LAST_DAY_trip_time = 0 +dailystats_trip_LAST_DAY_computed_consumption_or_distance = 0 +dailystats_trip_LAST_DAY_distance = 0 +dailystats_trip_LAST_DAY_avg_speed = 0 +dailystats_trip_LAST_DAY_max_speed = 0 +dailystats_trip_LAST_DAY_idle_time = 0 ``` - set send_to_domoticz to True if you want to send updates to *.csv also to Domoticz - domot_url is the URL where to send the updates to -- the next items (e.g. monitor_odometer) you can configure the ID/IDX of each item, If the ID/IDX is 0, that item will NOT be send to Domoticz. +- the next items (e.g. monitor_monitor_odometer) you can configure the ID/IDX of each item, If the ID/IDX is 0, that item will NOT be send to Domoticz. +- the Domoticz configuration lines starting with monitor_ are the configuration items for monitor.py +- the Domoticz configuration lines starting with summary_ are the configuration items for summary.py +- the Domoticz configuration lines starting with dailystats_ are the configuration items for dailystats.py - -*Note: only when there is something added in monitor.csv, monitor.tripinfo.csv and/or monitor.dailystats.csv the corresponding line is splitted and send to MQTT. You can trigger this for testing by e.g. removing the last line of monitor.csv , monitor.tripinfo.csv and/or monitor.dailystats.csv.* +*Note: only when there is something added when running monitor.py (in monitor.csv, monitor.tripinfo.csv and/or monitor.dailystats.csv) the corresponding line is splitted and send to Domoticz. You can trigger this for testing by e.g. removing the last line of monitor.csv , monitor.tripinfo.csv and/or monitor.dailystats.csv. However, summary.py and dailystats.py will always send the latest values to Domoticz.* --- # MQTT Broker (e.g. HomeAssistant, ioBroker) @@ -260,11 +537,19 @@ mqtt_main_topic = hyundai_kia_connect_monitor - mqtt_broker_password is an optional password - mqtt_main_topic is the main topic -When configured, the data is send to mqtt_main_topic/VIN/subtopic. Example screenshot using MQTT Explorer: +When configured, the data is send to mqtt_main_topic/VIN/subtopic. + +*Note: only when there is something added when running monitor.py (in monitor.csv, monitor.tripinfo.csv and/or monitor.dailystats.csv) the corresponding line is splitted and send to MQTT. You can trigger this for testing by e.g. removing the last line of monitor.csv , monitor.tripinfo.csv and/or monitor.dailystats.csv. However, summary.py and dailystats.py will always send the latest values to MQTT.* + + +## MQTT-Explorer screenshot after running monitor.py +![alt text](https://raw.githubusercontent.com/ZuinigeRijder/hyundai_kia_connect_monitor/main/examples/MQTTExplorer_monitor.png) -![alt text](https://raw.githubusercontent.com/ZuinigeRijder/hyundai_kia_connect_monitor/main/examples/MQTTExplorer.png) +## MQTT-Explorer screenshot after running summary.py +![alt text](https://raw.githubusercontent.com/ZuinigeRijder/hyundai_kia_connect_monitor/main/examples/MQTTExplorer_summary.png) -*Note: only when there is something added in monitor.csv, monitor.tripinfo.csv and/or monitor.dailystats.csv the corresponding line is splitted and send to MQTT. You can trigger this for testing by e.g. removing the last line of monitor.csv , monitor.tripinfo.csv and/or monitor.dailystats.csv.* +## MQTT-Explorer screenshot after running dailystats.py: +![alt text](https://raw.githubusercontent.com/ZuinigeRijder/hyundai_kia_connect_monitor/main/examples/MQTTExplorer_dailystats.png) --- # monitor.py @@ -306,40 +591,6 @@ monitor_infinite = False monitor_infinite_interval_minutes = 60 monitor_execute_commands_when_something_written_or_error = -[Domoticz] -send_to_domoticz = False -domot_url = http://192.168.0.222:8081 - -monitor_datetime = 0 -monitor_longitude = 0 -monitor_latitude = 0 -monitor_engineon = 0 -monitor_battery12v = 0 -monitor_odometer = 0 -monitor_soc = 0 -monitor_charging = 0 -monitor_plugged = 0 -monitor_address = 0 -monitor_evrange = 0 - -trip_date = 0 -trip_starttime = 0 -trip_drivetime = 0 -trip_idletime = 0 -trip_distance = 0 -trip_avgspeed = 0 -trip_maxspeed = 0 - -dailystats_date = 0 -dailystats_distance = 0 -dailystats_distance_unit = 0 -dailystats_total_consumed = 0 -dailystats_regenerated_energy = 0 -dailystats_engine_consumption = 0 -dailystats_climate_consumption = 0 -dailystats_onboard_electronics_consumption = 0 -dailystats_battery_care_consumption = 0 - [MQTT] send_to_mqtt = False mqtt_broker_hostname = localhost @@ -347,6 +598,312 @@ mqtt_broker_port = 1883 mqtt_broker_username = mqtt_broker_password = mqtt_main_topic = hyundai_kia_connect_monitor + +[Domoticz] +send_to_domoticz = False +domot_url = http://192.168.0.222:8081 + +monitor_monitor_datetime = 0 +monitor_monitor_longitude = 0 +monitor_monitor_latitude = 0 +monitor_monitor_engineon = 0 +monitor_monitor_battery12v = 0 +monitor_monitor_odometer = 0 +monitor_monitor_soc = 0 +monitor_monitor_charging = 0 +monitor_monitor_plugged = 0 +monitor_monitor_address = 0 +monitor_monitor_evrange = 0 + +monitor_tripinfo_date = 0 +monitor_tripinfo_starttime = 0 +monitor_tripinfo_drivetime = 0 +monitor_tripinfo_idletime = 0 +monitor_tripinfo_distance = 0 +monitor_tripinfo_avgspeed = 0 +monitor_tripinfo_maxspeed = 0 + +monitor_dailystats_date = 0 +monitor_dailystats_distance = 0 +monitor_dailystats_distance_unit = 0 +monitor_dailystats_total_consumed = 0 +monitor_dailystats_regenerated_energy = 0 +monitor_dailystats_engine_consumption = 0 +monitor_dailystats_climate_consumption = 0 +monitor_dailystats_onboard_electronics_consumption = 0 +monitor_dailystats_battery_care_consumption = 0 + +summary_TRIP_date = 0 +summary_TRIP_info = 0 +summary_TRIP_odometer = 0 +summary_TRIP_delta_distance = 0 +summary_TRIP_kwh_charged = 0 +summary_TRIP_kwh_discharged = 0 +summary_TRIP_distance_unit_per_kwh = 0 +summary_TRIP_kwh_per_100_distance_unit = 0 +summary_TRIP_cost = 0 +summary_TRIP_soc = 0 +summary_TRIP_soc_avg = 0 +summary_TRIP_soc_min = 0 +summary_TRIP_soc_max = 0 +summary_TRIP_battery12v = 0 +summary_TRIP_battery12v_avg = 0 +summary_TRIP_battery12v_min = 0 +summary_TRIP_battery12v_max = 0 +summary_TRIP_charging_sessions = 0 +summary_TRIP_trip_count = 0 +summary_TRIP_range = 0 +summary_TRIP_address = 0 + +summary_DAY_date = 0 +summary_DAY_info = 0 +summary_DAY_odometer = 0 +summary_DAY_delta_distance = 0 +summary_DAY_kwh_charged = 0 +summary_DAY_kwh_discharged = 0 +summary_DAY_distance_unit_per_kwh = 0 +summary_DAY_kwh_per_100_distance_unit = 0 +summary_DAY_cost = 0 +summary_DAY_soc = 0 +summary_DAY_soc_avg = 0 +summary_DAY_soc_min = 0 +summary_DAY_soc_max = 0 +summary_DAY_battery12v = 0 +summary_DAY_battery12v_avg = 0 +summary_DAY_battery12v_min = 0 +summary_DAY_battery12v_max = 0 +summary_DAY_charging_sessions = 0 +summary_DAY_trip_count = 0 +summary_DAY_range = 0 +summary_DAY_address = 0 + +summary_WEEK_date = 0 +summary_WEEK_info = 0 +summary_WEEK_odometer = 0 +summary_WEEK_delta_distance = 0 +summary_WEEK_kwh_charged = 0 +summary_WEEK_kwh_discharged = 0 +summary_WEEK_distance_unit_per_kwh = 0 +summary_WEEK_kwh_per_100_distance_unit = 0 +summary_WEEK_cost = 0 +summary_WEEK_soc = 0 +summary_WEEK_soc_avg = 0 +summary_WEEK_soc_min = 0 +summary_WEEK_soc_max = 0 +summary_WEEK_battery12v = 0 +summary_WEEK_battery12v_avg = 0 +summary_WEEK_battery12v_min = 0 +summary_WEEK_battery12v_max = 0 +summary_WEEK_charging_sessions = 0 +summary_WEEK_trip_count = 0 +summary_WEEK_range = 0 +summary_WEEK_address = 0 + +summary_MONTH_date = 0 +summary_MONTH_info = 0 +summary_MONTH_odometer = 0 +summary_MONTH_delta_distance = 0 +summary_MONTH_kwh_charged = 0 +summary_MONTH_kwh_discharged = 0 +summary_MONTH_distance_unit_per_kwh = 0 +summary_MONTH_kwh_per_100_distance_unit = 0 +summary_MONTH_cost = 0 +summary_MONTH_soc = 0 +summary_MONTH_soc_avg = 0 +summary_MONTH_soc_min = 0 +summary_MONTH_soc_max = 0 +summary_MONTH_battery12v = 0 +summary_MONTH_battery12v_avg = 0 +summary_MONTH_battery12v_min = 0 +summary_MONTH_battery12v_max = 0 +summary_MONTH_charging_sessions = 0 +summary_MONTH_trip_count = 0 +summary_MONTH_range = 0 +summary_MONTH_address = 0 + +summary_YEAR_date = 0 +summary_YEAR_info = 0 +summary_YEAR_odometer = 0 +summary_YEAR_delta_distance = 0 +summary_YEAR_kwh_charged = 0 +summary_YEAR_kwh_discharged = 0 +summary_YEAR_distance_unit_per_kwh = 0 +summary_YEAR_kwh_per_100_distance_unit = 0 +summary_YEAR_cost = 0 +summary_YEAR_soc = 0 +summary_YEAR_soc_avg = 0 +summary_YEAR_soc_min = 0 +summary_YEAR_soc_max = 0 +summary_YEAR_battery12v = 0 +summary_YEAR_battery12v_avg = 0 +summary_YEAR_battery12v_min = 0 +summary_YEAR_battery12v_max = 0 +summary_YEAR_charging_sessions = 0 +summary_YEAR_trip_count = 0 +summary_YEAR_range = 0 +summary_YEAR_address = 0 + +summary_TRIPAVG_date = 0 +summary_TRIPAVG_info = 0 +summary_TRIPAVG_odometer = 0 +summary_TRIPAVG_delta_distance = 0 +summary_TRIPAVG_kwh_charged = 0 +summary_TRIPAVG_kwh_discharged = 0 +summary_TRIPAVG_distance_unit_per_kwh = 0 +summary_TRIPAVG_kwh_per_100_distance_unit = 0 +summary_TRIPAVG_cost = 0 +summary_TRIPAVG_soc = 0 +summary_TRIPAVG_soc_avg = 0 +summary_TRIPAVG_soc_min = 0 +summary_TRIPAVG_soc_max = 0 +summary_TRIPAVG_battery12v = 0 +summary_TRIPAVG_battery12v_avg = 0 +summary_TRIPAVG_battery12v_min = 0 +summary_TRIPAVG_battery12v_max = 0 +summary_TRIPAVG_charging_sessions = 0 +summary_TRIPAVG_trip_count = 0 +summary_TRIPAVG_range = 0 +summary_TRIPAVG_address = 0 + +summary_DAYAVG_date = 0 +summary_DAYAVG_info = 0 +summary_DAYAVG_odometer = 0 +summary_DAYAVG_delta_distance = 0 +summary_DAYAVG_kwh_charged = 0 +summary_DAYAVG_kwh_discharged = 0 +summary_DAYAVG_distance_unit_per_kwh = 0 +summary_DAYAVG_kwh_per_100_distance_unit = 0 +summary_DAYAVG_cost = 0 +summary_DAYAVG_soc = 0 +summary_DAYAVG_soc_avg = 0 +summary_DAYAVG_soc_min = 0 +summary_DAYAVG_soc_max = 0 +summary_DAYAVG_battery12v = 0 +summary_DAYAVG_battery12v_avg = 0 +summary_DAYAVG_battery12v_min = 0 +summary_DAYAVG_battery12v_max = 0 +summary_DAYAVG_charging_sessions = 0 +summary_DAYAVG_trip_count = 0 +summary_DAYAVG_range = 0 +summary_DAYAVG_address = 0 + +summary_WEEKAVG_date = 0 +summary_WEEKAVG_info = 0 +summary_WEEKAVG_odometer = 0 +summary_WEEKAVG_delta_distance = 0 +summary_WEEKAVG_kwh_charged = 0 +summary_WEEKAVG_kwh_discharged = 0 +summary_WEEKAVG_distance_unit_per_kwh = 0 +summary_WEEKAVG_kwh_per_100_distance_unit = 0 +summary_WEEKAVG_cost = 0 +summary_WEEKAVG_soc = 0 +summary_WEEKAVG_soc_avg = 0 +summary_WEEKAVG_soc_min = 0 +summary_WEEKAVG_soc_max = 0 +summary_WEEKAVG_battery12v = 0 +summary_WEEKAVG_battery12v_avg = 0 +summary_WEEKAVG_battery12v_min = 0 +summary_WEEKAVG_battery12v_max = 0 +summary_WEEKAVG_charging_sessions = 0 +summary_WEEKAVG_trip_count = 0 +summary_WEEKAVG_range = 0 +summary_WEEKAVG_address = 0 + +summary_MONTHAVG_date = 0 +summary_MONTHAVG_info = 0 +summary_MONTHAVG_odometer = 0 +summary_MONTHAVG_delta_distance = 0 +summary_MONTHAVG_kwh_charged = 0 +summary_MONTHAVG_kwh_discharged = 0 +summary_MONTHAVG_distance_unit_per_kwh = 0 +summary_MONTHAVG_kwh_per_100_distance_unit = 0 +summary_MONTHAVG_cost = 0 +summary_MONTHAVG_soc = 0 +summary_MONTHAVG_soc_avg = 0 +summary_MONTHAVG_soc_min = 0 +summary_MONTHAVG_soc_max = 0 +summary_MONTHAVG_battery12v = 0 +summary_MONTHAVG_battery12v_avg = 0 +summary_MONTHAVG_battery12v_min = 0 +summary_MONTHAVG_battery12v_max = 0 +summary_MONTHAVG_charging_sessions = 0 +summary_MONTHAVG_trip_count = 0 +summary_MONTHAVG_range = 0 +summary_MONTHAVG_address = 0 + +summary_YEARLY_date = 0 +summary_YEARLY_info = 0 +summary_YEARLY_odometer = 0 +summary_YEARLY_delta_distance = 0 +summary_YEARLY_kwh_charged = 0 +summary_YEARLY_kwh_discharged = 0 +summary_YEARLY_distance_unit_per_kwh = 0 +summary_YEARLY_kwh_per_100_distance_unit = 0 +summary_YEARLY_cost = 0 +summary_YEARLY_soc = 0 +summary_YEARLY_soc_avg = 0 +summary_YEARLY_soc_min = 0 +summary_YEARLY_soc_max = 0 +summary_YEARLY_battery12v = 0 +summary_YEARLY_battery12v_avg = 0 +summary_YEARLY_battery12v_min = 0 +summary_YEARLY_battery12v_max = 0 +summary_YEARLY_charging_sessions = 0 +summary_YEARLY_trip_count = 0 +summary_YEARLY_range = 0 +summary_YEARLY_address = 0 + +dailystats_day_TOTALS_date = 0 +dailystats_day_TOTALS_total_consumption = 0 +dailystats_day_TOTALS_regenerated_energy = 0 +dailystats_day_TOTALS_average_consumption = 0 +dailystats_day_TOTALS_engine_consumption = 0 +dailystats_day_TOTALS_climate_consumption = 0 +dailystats_day_TOTALS_onboard_electronics_consumption = 0 +dailystats_day_TOTALS_battery_care_consumption = 0 +dailystats_day_TOTALS_driven = 0 +dailystats_day_TOTALS_regenerated_energy_percentage = 0 +dailystats_day_TOTALS_average_consumption_per_100 = 0 +dailystats_day_TOTALS_engine_consumption_percentage = 0 +dailystats_day_TOTALS_climate_consumption_percentage = 0 +dailystats_day_TOTALS_onboard_electronics_consumption_percentage = 0 +dailystats_day_TOTALS_battery_care_consumption_percentage = 0 + +dailystats_day_LAST_DAY_date = 0 +dailystats_day_LAST_DAY_total_consumption = 0 +dailystats_day_LAST_DAY_regenerated_energy = 0 +dailystats_day_LAST_DAY_average_consumption = 0 +dailystats_day_LAST_DAY_engine_consumption = 0 +dailystats_day_LAST_DAY_climate_consumption = 0 +dailystats_day_LAST_DAY_onboard_electronics_consumption = 0 +dailystats_day_LAST_DAY_battery_care_consumption = 0 +dailystats_day_LAST_DAY_driven = 0 +dailystats_day_LAST_DAY_regenerated_energy_percentage = 0 +dailystats_day_LAST_DAY_average_consumption_per_100 = 0 +dailystats_day_LAST_DAY_engine_consumption_percentage = 0 +dailystats_day_LAST_DAY_climate_consumption_percentage = 0 +dailystats_day_LAST_DAY_onboard_electronics_consumption_percentage = 0 +dailystats_day_LAST_DAY_battery_care_consumption_percentage = 0 + +dailystats_trip_TOTALS_computed_kwh_charged = 0 +dailystats_trip_TOTALS_computed_day_consumption = 0 +dailystats_trip_TOTALS_computed_kwh_used = 0 +dailystats_trip_TOTALS_trip_time = 0 +dailystats_trip_TOTALS_computed_consumption_or_distance = 0 +dailystats_trip_TOTALS_distance = 0 +dailystats_trip_TOTALS_avg_speed = 0 +dailystats_trip_TOTALS_max_speed = 0 +dailystats_trip_TOTALS_idle_time = 0 + +dailystats_trip_LAST_DAY_computed_kwh_charged = 0 +dailystats_trip_LAST_DAY_computed_day_consumption = 0 +dailystats_trip_LAST_DAY_computed_kwh_used = 0 +dailystats_trip_LAST_DAY_trip_time = 0 +dailystats_trip_LAST_DAY_computed_consumption_or_distance = 0 +dailystats_trip_LAST_DAY_distance = 0 +dailystats_trip_LAST_DAY_avg_speed = 0 +dailystats_trip_LAST_DAY_max_speed = 0 +dailystats_trip_LAST_DAY_idle_time = 0 ``` Explanation of the configuration items: @@ -373,7 +930,9 @@ Explanation of the configuration items: *Note 2: I think that the consumption values ​​of the on-board computer are corrected with an efficiency number, e.g. 1 kWh of energy results in 0.9 kWh of real energy (losses when converting battery kWh by the car). So therefor I introduced an efficiency configuration factor in monitor.cfg, consumption_efficiency_factor_dailystats and consumption_efficiency_factor_summary. For example, when setting this to 0.9, 10% of the energy is lost during the conversion and is used in the consumption calculation. Default the values are 1.0, so no correction.* -*Note 3: language is only implemented for Europe currently.* +*Note 3: The last TRIP, DAY, WEEK, MONTH, YEAR, TRIPAVG, DAYAVG, WEEKAVG, MONTHAVG, YEARLY lines are also send to [Domoticz](#domoticz) and/or [MQTT Broker](#mqtt-broker-eg-homeassistant-iobroker) (e.g. HomeAssistant, ioBroker) when configured.* + +*Note 4: language is only implemented for Europe currently.* [For a list of language codes, see here.](https://www.science.co.il/language/Codes.php). Currently in Europe the Bluelink App shows the following languages: - "en" English @@ -529,6 +1088,8 @@ Explanation of configuration items: - ignore_small_negative_delta_soc, do not see this as discharge% when not moved, because with temperature changes the percentage can decrease - show_zero_values = True shows also zero values in the standard output, can be easier for spreadsheets, but more difficult to read +*Note: The dailystats DAY totals, TRIP Totals and last DAY and TRIP lines are also send to [Domoticz](#domoticz) and/or [MQTT Broker](#mqtt-broker-eg-homeassistant-iobroker) (e.g. HomeAssistant, ioBroker) when configured.* + --- # summary.py sheetupdate make summary per TRIP, DAY, WEEK, MONTH, YEAR with monitor.csv as input and write summary to Google Spreadsheet diff --git a/check_monitor.py b/check_monitor.py index bd69645..6bb7f13 100644 --- a/check_monitor.py +++ b/check_monitor.py @@ -1,20 +1,19 @@ # == check_monitor.py Author: Zuinige Rijder ========= """ Simple Python3 script to check monitor.csv """ +from os import path from datetime import datetime from io import TextIOWrapper +import logging +import logging.config from pathlib import Path -from monitor_utils import arg_has, split_on_comma +from monitor_utils import arg_has, dbg, set_dbg, split_on_comma +SCRIPT_DIRNAME = path.abspath(path.dirname(__file__)) +logging.config.fileConfig(f"{SCRIPT_DIRNAME}/logging_config.ini") D = arg_has("debug") - - -def dbg(line: str) -> bool: - """print line if debugging""" - if D: - print(line) - return D # just to make a lazy evaluation expression possible - +if D: + set_dbg() # indexes to splitted monitor.csv items DT = 0 # datetime diff --git a/dailystats.py b/dailystats.py index 819d3eb..748aec0 100644 --- a/dailystats.py +++ b/dailystats.py @@ -17,13 +17,21 @@ import typing from dateutil.relativedelta import relativedelta import gspread +from domoticz_utils import ( + SEND_TO_DOMOTICZ, + send_dailystats_day_line_to_domoticz, + send_dailystats_trip_line_to_domoticz, +) from monitor_utils import ( + dbg, + determine_vin, float_to_string_no_trailing_zero, get, get_filepath, arg_has, get_vin_arg, safe_divide, + set_dbg, sleep_a_minute, split_on_comma, split_output_to_sheet_float_list, @@ -36,25 +44,23 @@ read_reverse_order_init, split_output_to_sheet_list, ) +from mqtt_utils import ( + SEND_TO_MQTT, + send_dailystats_day_line_to_mqtt, + send_dailystats_trip_line_to_mqtt, + stop_mqtt, +) SCRIPT_DIRNAME = path.abspath(path.dirname(__file__)) logging.config.fileConfig(f"{SCRIPT_DIRNAME}/logging_config.ini") D = arg_has("debug") if D: - logging.getLogger().setLevel(logging.DEBUG) + set_dbg() # Initializing a queue for about 30 days MAX_QUEUE_LEN = 122 PRINTED_OUTPUT_QUEUE: deque[str] = deque(maxlen=MAX_QUEUE_LEN) - -def dbg(line: str) -> bool: - """print line if debugging""" - if D: - logging.debug(line) - return D # just to make a lazy evaluation expression possible - - KEYWORD_LIST = ["help", "sheetupdate", "debug"] KEYWORD_ERROR = False for kindex in range(1, len(sys.argv)): @@ -74,6 +80,7 @@ def dbg(line: str) -> bool: OUTPUT_SPREADSHEET_NAME = "monitor.dailystats" SHEET: typing.Any = None +LASTRUN_FILENAME = Path("monitor.lastrun") DAILYSTATS_CSV_FILE = Path("monitor.dailystats.csv") TRIPINFO_CSV_FILE = Path("monitor.tripinfo.csv") SUMMARY_CHARGE_CSV_FILE = Path("summary.charge.csv") @@ -82,6 +89,7 @@ def dbg(line: str) -> bool: LENCHECK = 1 VIN = get_vin_arg() if VIN != "": + LASTRUN_FILENAME = Path(f"monitor.{VIN}.lastrun") DAILYSTATS_CSV_FILE = Path(f"monitor.dailystats.{VIN}.csv") TRIPINFO_CSV_FILE = Path(f"monitor.tripinfo.{VIN}.csv") SUMMARY_CHARGE_CSV_FILE = Path(f"summary.charge.{VIN}.csv") @@ -118,6 +126,7 @@ def dbg(line: str) -> bool: TR_HELPER: dict[str, str] = read_translations() COLUMN_WIDTHS = [11, 12, 14, 10, 9, 9, 8] +EMPTY_ROW = ",,,,,," def update_width(text: str, index_column_widths: int) -> None: @@ -320,8 +329,9 @@ def print_output(output: str) -> None: print(text, end="") print("") - if SHEETUPDATE and len(PRINTED_OUTPUT_QUEUE) < MAX_QUEUE_LEN: - PRINTED_OUTPUT_QUEUE.append(output) + if SHEETUPDATE or SEND_TO_DOMOTICZ or SEND_TO_MQTT: + if len(PRINTED_OUTPUT_QUEUE) < MAX_QUEUE_LEN: + PRINTED_OUTPUT_QUEUE.append(output) def get_charge_for_date(date: str) -> str: @@ -580,7 +590,7 @@ def print_dailystats( time_str = now.strftime("%H:%M") tr_last_run = get_translation_and_update_width("Last run", 0) print_output(f"{tr_last_run},{date_str},{time_str},{tr_weekday},,,") - print_output(",,,,,,") # empty line/row + print_output(EMPTY_ROW) print_output( f"{totals},{TR.recuperation},{TR.consumption},{TR.engine},{TR.climate},{TR.electronic_devices},{TR.battery_care}" # noqa @@ -674,7 +684,7 @@ def summary_tripinfo() -> None: avg_speed=f"{average_speed}", max_speed=f"{TOTAL_TRIPINFO_MAX_SPEED}", ) - print_output(",,,,,,") # empty line/row + print_output(EMPTY_ROW) def reverse_print_dailystats_one_line(val: list[str]) -> None: @@ -694,7 +704,7 @@ def reverse_print_dailystats_one_line(val: list[str]) -> None: ) if date != "Totals": print_day_trip_info(date) - print_output(",,,,,,") # empty line/row + print_output(EMPTY_ROW) def compute_cumulative_dailystats(val: list[str], total: list[str]) -> list[str]: @@ -824,7 +834,7 @@ def print_output_queue() -> None: array.append({"range": f"N{cd_row}", "values": [[cd_date]]}) cd_date = "" else: - if ct_header and queue_output != ",,,,,,": + if ct_header and queue_output != EMPTY_ROW: # tripinfo trip = [ct_date, 0, "", 0, 0, 0, 0] # clear consumption tmp = re.sub(r"[^0-9.,:-]", "", queue_output) @@ -864,6 +874,45 @@ def print_output_queue() -> None: SHEET.batch_format(formats) +def send_to_mqtt_domoticz() -> None: + """send_to_mqtt_domoticz""" + idx = 0 + items = [] + for item in PRINTED_OUTPUT_QUEUE: + idx += 1 + _ = D and dbg(f"{idx}: {item}") + items.append(item) + if idx > 13 and item == EMPTY_ROW: # no more trips + break + + # send dailystats day info + totals_day = f"{items[0].split(',')[1]},{items[3]},{items[4]}" + last_day = f"{items[8].split(',')[0]},{items[9]},{items[10]}" + + if SEND_TO_MQTT: + determine_vin(LASTRUN_FILENAME) + send_dailystats_day_line_to_mqtt("TOTALS", totals_day) + send_dailystats_day_line_to_mqtt("LAST_DAY", last_day) + + if SEND_TO_DOMOTICZ: + send_dailystats_day_line_to_domoticz("TOTALS", totals_day) + send_dailystats_day_line_to_domoticz("LAST_DAY", last_day) + + # send also the dailystats_trip info + totals_trip = f"{items[5].split(',')[0]},{items[5].split(',')[2]}, {items[6]}" + last_trip = f"{items[11].split(',')[0]},{items[11].split(',')[2]}, {items[12]}" + + if SEND_TO_MQTT: + send_dailystats_trip_line_to_mqtt("TOTALS", totals_trip) + send_dailystats_trip_line_to_mqtt("LAST_DAY", last_trip) + + if SEND_TO_DOMOTICZ: + send_dailystats_trip_line_to_domoticz("TOTALS", totals_trip) + send_dailystats_trip_line_to_domoticz("LAST_DAY", last_trip) + + stop_mqtt() + + # main program RETRIES = -1 if SHEETUPDATE: @@ -910,6 +959,9 @@ def print_output_queue() -> None: traceback.print_exc() RETRIES = sleep_a_minute(RETRIES) +if SEND_TO_DOMOTICZ or SEND_TO_MQTT: + send_to_mqtt_domoticz() + if RETRIES == -1: - exit(0) -exit(-1) + sys.exit(0) +sys.exit(-1) diff --git a/domoticz_utils.py b/domoticz_utils.py index efb986c..08bb8c8 100644 --- a/domoticz_utils.py +++ b/domoticz_utils.py @@ -7,13 +7,18 @@ import logging.config from monitor_utils import ( + dbg, execute_request, get, + d, get_bool, get_filepath, + get_items_dailystat_trip, + get_items_dailystats_day, get_items_monitor_csv, get_items_monitor_dailystats_csv, get_items_monitor_tripinfo_csv, + get_items_summary, ) PARSER = configparser.ConfigParser() @@ -25,15 +30,30 @@ DOMOTICZ_URL = get(domoticz_settings, "domot_url") ITEMS_MONITOR_CSV = get_items_monitor_csv() -ITEMS_MONITOR_TRIPINFO_CSV = get_items_monitor_tripinfo_csv() -ITEMS_MONITOR_DAILYSTATS_CSV = get_items_monitor_dailystats_csv() +for IDX in range(len(ITEMS_MONITOR_CSV)): # pylint:disable=consider-using-enumerate + ITEMS_MONITOR_CSV[IDX] = f"monitor_monitor_{ITEMS_MONITOR_CSV[IDX]}" + +ITEMS_TRIPINFO_CSV = get_items_monitor_tripinfo_csv() +for IDX in range(len(ITEMS_TRIPINFO_CSV)): # pylint:disable=consider-using-enumerate + ITEMS_TRIPINFO_CSV[IDX] = f"monitor_tripinfo_{ITEMS_TRIPINFO_CSV[IDX]}" + +ITEMS_DAILYSTATS_CSV = get_items_monitor_dailystats_csv() +for IDX in range(len(ITEMS_DAILYSTATS_CSV)): # pylint:disable=consider-using-enumerate + ITEMS_DAILYSTATS_CSV[IDX] = f"monitor_dailystats_{ITEMS_DAILYSTATS_CSV[IDX]}" + +ITEMS_SUMMARY = get_items_summary() + +ITEMS_DAILYSTATS_DAY = get_items_dailystats_day() + +ITEMS_DAILYSTATS_TRIP = get_items_dailystat_trip() # == send to Domoticz ======================================================== def send_to_domoticz(header: str, value: str) -> None: """send_to_Domoticz""" + reference_test = DOMOTICZ_URL == "domoticz_reference_test" idx = get(domoticz_settings, header, "0") - if idx == "0": + if idx == "0" and not reference_test: return # nothing to do url = ( @@ -43,9 +63,12 @@ def send_to_domoticz(header: str, value: str) -> None: + "&svalue=" + value ) - logging.debug(url) + if reference_test: + _ = d() and dbg(f"send_to_domoticz: {header} = {value}") + else: + _ = d() and dbg(url) retry = 0 - while True: + while not reference_test: retry += 1 content = execute_request(url, "", {}) if content != "ERROR" or retry > 30: @@ -54,15 +77,34 @@ def send_to_domoticz(header: str, value: str) -> None: return -def send_line(headers: list, line: str) -> None: - """send_line""" - splitted = line.split(",") +def send_splitted_line( + headers: list, splitted: list, replace_empty_by_0: bool, skip_first: bool +) -> None: + """send_splitted_line""" if len(splitted) < len(headers): - logging.info(f"line does not have all elements: {line}\n{headers}") + logging.warning( + f"line does not have all elements: {splitted}\nHEADERS={headers}" + ) return + skipped_first = not skip_first for i in range(len(splitted)): # pylint:disable=consider-using-enumerate - send_to_domoticz(headers[i], splitted[i].strip()) + if i < len(headers): + if skipped_first: + value = splitted[i].strip() + if replace_empty_by_0 and value == "": + value = "0" + send_to_domoticz(headers[i], value) + else: + skipped_first = True + + +def send_line( + headers: list, line: str, replace_empty_by_0: bool = True, skip_first: bool = False +) -> None: + """send_line""" + splitted = line.split(",") + send_splitted_line(headers, splitted, replace_empty_by_0, skip_first) def send_monitor_csv_line_to_domoticz(line: str) -> None: @@ -71,13 +113,52 @@ def send_monitor_csv_line_to_domoticz(line: str) -> None: send_line(ITEMS_MONITOR_CSV, line) -def send_tripinfo_line_to_domoticz(line: str) -> None: - """send_tripinfo_line_to_domoticz""" +def send_tripinfo_csv_line_to_domoticz(line: str) -> None: + """send_tripinfo_csv_line_to_domoticz""" + if SEND_TO_DOMOTICZ: + send_line(ITEMS_TRIPINFO_CSV, line) + + +def send_dailystats_csv_line_to_domoticz(line: str) -> None: + """send_dailystats_csv_line_to_domoticz""" + if SEND_TO_DOMOTICZ: + send_line(ITEMS_DAILYSTATS_CSV, line) + + +def get_items(subtopic: str, items: list[str]) -> list[str]: + """get_items""" + new_items: list[str] = [] + for item in items: + new_items.append(f"{subtopic}_{item}") + return new_items + + +def send_summary_line_to_domoticz(line: str) -> None: + """send_summary_line_to_domoticz""" + if SEND_TO_DOMOTICZ: + splitted = [x.strip() for x in line.split(",")] + period = splitted[0].replace(" ", "") + if ( + period + in "TRIP, DAY, WEEK, MONTH, YEAR, TRIPAVG, DAYAVG, WEEKAVG, MONTHAVG, YEARLY" # noqa + ): + send_splitted_line( + get_items(f"summary_{period}", ITEMS_SUMMARY), splitted, True, True + ) + + +def send_dailystats_day_line_to_domoticz(postfix: str, line: str) -> None: + """send_dailystats_day_line_to_domoticz""" if SEND_TO_DOMOTICZ: - send_line(ITEMS_MONITOR_TRIPINFO_CSV, line) + send_line(get_items(f"dailystats_day_{postfix}", ITEMS_DAILYSTATS_DAY), line) -def send_dailystats_line_to_domoticz(line: str) -> None: - """send_dailystats_line_to_domoticz""" +def send_dailystats_trip_line_to_domoticz( + postfix: str, line: str, skip_first_two: bool = False +) -> None: + """send_dailystats_trip_line_to_domoticz""" if SEND_TO_DOMOTICZ: - send_line(ITEMS_MONITOR_DAILYSTATS_CSV, line) + items = get_items(f"dailystats_trip_{postfix}", ITEMS_DAILYSTATS_TRIP) + if skip_first_two: + items = items[2:] + send_line(items, line, replace_empty_by_0=False) diff --git a/examples/MQTTExplorer.png b/examples/MQTTExplorer.png deleted file mode 100644 index cd784c016955bb8316ddd947e09bb6a2e0b2e316..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89706 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 diff --git a/examples/MQTTExplorer_dailystats.png b/examples/MQTTExplorer_dailystats.png new file mode 100644 index 0000000000000000000000000000000000000000..65f201eba102a0342c00f704324fda136de9e815 GIT binary patch literal 83480 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%0DFbH7s$=MXuRr0}ymEd-x@h$Q+4X~a1OU_< zr#)R9h`Y<`eYGn3@7>&u8GvWLp@fR}y$cP% zs@e17 zt)#rm#Pf-3mORz0blnQYYQEq>HMZ^(EmE{tTo&lqBLx;h-b-<;{B*>!wdXy4Bt^lm zUwhv&%w>Fb(kIyQc;O9htY!|OK4S5@sw{Xp+>hO!3=lln4i3x*JX2yw6Im?cck0C*+f@PF5|^ zV8_4M#UBR>1S669GGh1!=)IcJ4;OWiaV_5c>8nyxuHS?gfTdTBjA=NV58E7NxZkR7 zYN+h_pNL1A85(NT?)@NQRk+>R*$Ft^v~nt;;H|IfW`kK83ZSp zEOm#8&VeHf$!n#ak=*GsVu09?p`y*qza9`IrvS zp5O0Do#>buAhmvQuM5d`bb>n^vCbA8h+FESHYXgPsFE2T2mVz)ypU7~ga9+D+SYXF zO76qB4%aNe5n;*$oPa^frODcR)q@=bN(H1STQ#*2cm@YqzTN6#!Qz8GdS1J^5;) z5l>}7?Cu10=Q&n+1?v|9T7QFz+`wHqg5)&FNj-%Sp!(`a`xSIY7JYW}mBQ7NSaPa6 z<{CZL7G6>e(4ri!G!Cd~x;XnBeS&!iE zohd^kJv)geyJ8*QOy?CKqF#5`<<^yGaJx!W2<oX4}pZR#wqHh(5LJt`YG>+ zK1UKX`z!!L5YRhP@hGg$o;H;J*i4j+QG%pS&UcS){OzxIO0qm*(C%kC&%ad_Ie0NY ze4Unxvh=eFiHc$@$kZ%nBDzX`daYfv=nf-w_3%;}xZ;y!ww-VBb944ubqY15HeKGU znv~voUI+LOQ1sF#nc!bci?Q;Sd9HnOQuICTA;0YF7pJ8W6oO~RhOFsNw!3RDWq!Js zzx|Gl1_D4bIqBAWg+Zc3cUW+FV%&a=)fb7r)X(Xx6?M(CnlQsRvCl*29_ed5)cr&t zS#fQm87#pu{^ZFM>d<0)72|l{)2!DT#8Iiihe7b7nwUIoLT0R6K~h0{TA&t60p2F8 z)2sPDxvX2C|wY}m&pNed+S49lJa+te~NBF|+U|MECn5qO~mL?5o4KTDnK{hjbbT}i5_y@Wh_ z1b0Qk!F4WB*wi1n{6#2-&5PKo&};uvM=w6 zw2KHfz9ZrHw#J}uw?=Z}x=~(_sZRh@0z#cviKOAz5*rvzzj!l4Q>KcarmOATz>CiY zM-fSG$ZFm`+PUM&4z?bWze#SI?5W*NGSmcG9COXh&F;``3U&crg;paBW2VG76Jfx1 z)L1;Fdgw9d_|232Dj+BBNi$=^+#9vT%7r&H#+7g@j?o&SP!8}2zIaAO7q zwfQ#rez}6)YzQs!gq8*G{N;V!{{Gw3c-Mbo{|>3@p1_oMU$kvt;2zdLF(u!8_a zb5Ghk-#neEKW+(dvG+qpp~t0qd5I~ywSeZOF_=ChzxF!&_c#Nxa-|xJ z!?IY`FXYMj>8QeCNh!5*=L08Ox~r0P(Y&iat37eBHbLCa{{X+9RUF(O5W@TQ!8To9 zJxvth@aE0KoILS-t6EV&nnsU)!iY8~#P*JR$C_J}prgoHb#Hn`DKc-}YZM8{S-j2l zl%N!~{&(8nsUiqWoe=I|WMssvP$=ww^l$ISr$mSh7qx_PFA2y=@rT`?FCy06(GH#3 zQo9Uoxz7=0Wo1M&@%4b16_E;vlr=yIyMF=X1M!JE^XWrCDWUrA-&OI?#v(WGHck@$ zlO{B=`I9dR$Ce}ueVI?*YOTX_)ix3t?-`GK5kVoaN>k*XOBh|6506+PAD=&42vvE~ zk&1=SppF`gT=o<(9tHXsOiGf<*T)J}TwU&YOSJ1_f6J6~%cXhw{rmTKt^OW-L7BBv zmVsYvNQ-c7SmNT9JC}n2RlF|25^xfJkC%(5*e987`l|p401N#6&{<@~#7KB=w@4$Y zr2L-f2on$mKV`pYx>WH@@DiExud3dp4kaaXDE{-Rk8UoBBvwyq?LFz&H3#K&Q*<+b zdKg&~djLb`Z+%;EM}_D8jA#Sb=_!b|M(C58rxWZ`gnTAOR9invb0@Zc{*Dupq>U|V z<$0&0GYrte2`y_re z5kkhbgbP&Re7TP)*RiN-jT=UA2K7H}pLIoX+}!{mCvhob`|iyuB}TkT1*H06#-j`z z)cd%W`Fz2;y1LhC-eJn+o@H;}e>5)8QB}`@0{@|^cvl^^e^)9nZF(9%j@S&d)d~hw zLTWm#!Z1$t_U^WJcH7i2T76`iHtJ%?Q-vqlNC$U%y_2 zgxgAzkm|Fp(To@W1~eQ_p$h5&jy~sC_=e90ykTDxE_vOZz5?rLlNu%MoeO61u?*d4|V#FcOx~Ef%A08xhkfrKR)rsoF}u-irA2 zbl{r^y#I%=w~mVXi@SfNJEgn3r9ry8yQPM5=#cJ|7NxsErKFMW?ozr`q?Fcs#_#i6 z_qli7weDZ8}1Zw-*3MP&-zeESlDG`o2GO>Qd);c9nXy%D# zLL=$vn&TXM5q3(ZxYWVv9gZI(Y4?-09}U`~*IcRc17mZ1JbK+M35D9(hoZB-*|G0> z>F9HLrT(wWJ&T_)VP{?(&d|H@hO!G=_aO?lcDHA{h#?)yjW+r8g3nZ56c8b-Xz6T8 z2E~7@m{~iPyr&-O)1ml_wAQ_BwluJs zlWf^(2DK_=d~8*g;#7!>SlqQ~^|$zU1j@v-b=`<+P2MeHXFum_)h>upbI!?b|H=?_ zq_jXf->hZzizUvDx51sS&fK%s+KUeN>JB#JMMQ?vbT>p(h(ju$#7}6M_}KUrKJg`r zgIsLb=e%p6i+YK#prohFNOj7eHtUbdR{6aWuLDSraT9_~X#?HNGMzC}o4GXhvg1Nx z`}oXh^y-lxqQ&4~!x(zX5fME(^Zc5?Fqr}~9kXOS{9MGF+hCF>s`0}vU{VxM(NVCa zbRSM*Y?y$mCo|zIrxR=tAWjQDM)tv7QWK`{$1+$$>`BH=@XhC0`LtOh@GDeT0Hou- z7cM)`C(8bMYB5rPJP~IBjz-AML}6ZR8x5(%2HKuuL&r1Ov^=9Yf9F)MbiJzLs4T=e zCHTBaas}Va@zJ7Bkdag(u=T65;)acFzx=|&yJXn+2+1G!ir)~Q=GZF@QT%08Yon5? z?luoNW`8w*u3)DQXTgnV(g^%4jz{ehh1+iua~($xqWIg~)he+X$^)7xD=9VTee7&( z!g-&;$x7$(EHa$-8jD;IdIx0mrV+X@d~Pz%Iix%93Q@gIS4#&5>1eUiT6_0?rh(1J zyOZG}<^(fcblK!n@T$%Za$eGnoo~xCAT9n|ijvaqtE-8E_u04ewJ}lSZG~hz#3)JH z0uYA94S_Jj;N3jqhSEfI{%qcKRSVp&ydp>of_MYZgcZKit4vxV)Zo zOPiq5KX?zmO<*}*OGyIgN5h%ZD0hmknZEDyzdr6_P&G0j?vr@_owZyq%CS}6a{h!edlZtv(njR$ffUObK zVED4X24bZ%kXBr8AT`!zEE6&>`v6dZVXVsVweUb+U%xWnXT44xD9Gnq5jZEiMlE1P zs9D6|c?a`&UJPNv-y=Hr0Plr~(<4PE11LUU>a6PJVJrTT1hWK?e}Cg+M9&(JjGA&e z;!d|He0}>8T`qdXyeps?`&QPEQirC*#dk!V+fi84Z$kuu7tN67obYYfIEEQr+&oet zyp}zs$MOC7BLvRSswFeE)^KsW&7Fn}R7Hpyo|_AkBc@$E++JRPU)9ysElEW6H4aVq ziNaPjP)-zFB4Xxj8^IcMu{TN-_*q_CA1SW}iRRYSz`y{A8kDSrGf!`7l7Wt)FzAV8 z2U|Fdjz-Xl7zK$-en#;g;&b;r@M$t_n?U1nUvrta>tS%&WZTu66Z%d)A^pR<18r)b zbwCoSc2P?7gccpc*IHG~qN)Rhm$2YUpV+@Zs~kM4%RKE;>8_?X<6tJyIs~e=lUR2t zn!mQpj+Tkq)_*#3_{PVm=J*7JI83&#*Sc)%><~}Oj9v8~Dbkb15~Qk3Gh{$Dor0Fv zjqs~G(5FV-G3&!c<51V@XEgsN!cVTkHq(ON)RE-R4z$#Yl35Do1=ArFqPgm(Qr@3%wBWKBYVbG9f86n>yLfqyj3?F*ybLQmL^f4ITdbCFk z#zmNqa>b=&z(1R5KrEF6NLg9ck25H}6H1-U8*O4Kq12ahX7k)`ZT^%|e!8D9$3FO- z+pL*6Q@~$TYhW8IIy_o1P?7Fva5_!^PYK`H`K9s>L@j&Mk|T?3^cuFygTv#keOfN}Y*8fdR&|WEnv4S0di zVxno4I}m)e{3uzAzBTm~l8jJCL_jN26W=*g?+^&@%cu=Wx!lx5h~$-VZ{v4ZFz|X5 ztD@gMD>b9NdrUu#@pAm#WEX~2GM`#NEkC9}rdkB-YXM z&V;4V?%00fffg(rG{R-@eEfM{^r|o&)t9Wdb5eLvI#;ILjA5qqnESJ8cb2)&yOt;h zVP3w{wo+m5lLb}oE!(YMZTW<3p z>6jgLWy$(k61lHPBtX4FOYkwJ@)k>obsD+DjZ6sJ{feIXT^jsmTw}NSp4T{9gm zKa;nf=3#af&-%1f$rP|z>V7`Nzy5VX!NLE{3_jKpIJc1W-Qi^V^6fBqsh{ZQ$=gyP ztjPz;8z+ge2|wS4J6@qf>?LmArC|$rYcTVts^4L%@U=%`0!*sCO1B~n{t>Z^QLaz@ zzVcq1Uz%%yj0L#_Q6+72K_2{E3MNfx#}Rit`UR))xD9_M93*7P%jL1>(aAV>7K$x< zf&n$?bD@q{>m35W$s;PpC{C3?%#D5BPNno2Xvf-RGQsu}q=_U~$QtDF4X|a`)b%5p zkq?PifT4-x)#|hj3{-#U+}9B%DFq7`S)DVyv@RB>!gIOEo4_dGH2Rm>9!$Kmd^|Di ze-1zOa6ql4|ut^?@+)Bu((+3rr+n^Q5Y)q`{^G3hMQ zglsS{k18NM?}-%*KXY8|Y@xjjnZ_Yb!7#OyYbh^h+CcllR9#cE4%FB$RssVf4cRj# z$M6XHy=1xlItCupP8QsW8?*Z2MAlX3k)JLw$o3GDp!w7unx);YbJ0lQ@`>g^{r&?m zwHWE%`*OGa+?x7!CqQP9Vq6sd;Q@#+RC4Io!LPm%N)i8Y`RN{o)jJy&@tN2hE-kek z;c3De!}mVBUUV$o1%(P5xaSX2{Ax;r$`kxDJ6>?d3~$U*pPDPQs`Zx17QVXN)PJKZ zoO-oBFdwCA;Lvu%WjVsqBI_QQ@glO#^HAd9tiS8kHTHEvnA&o!v97i@-rw4SPCd#x zxI(V59@uMuGdjw%nDZCT>xl)P;*XV&vg3kwTd(S8#sb$4Aj|^!4xAtB5cjp04Pp@t(Witx`YG5aH~jQHfiQ=WeamW;agzz{Ii7BvSEVcEqTYAl z#3-Ru^*QOb;_$^sjv^q>@z_t0_{=vEhB<~+U?_Q#hEbHL5b$v|yW`sF`&c<#dZi+_ z&5O+?LcA+@%u+|RF9QHnFWwo$H9BIUDGtAuR2e14>(|$FGsw;N#9`t!UOZ|vij7qR zq*=1o1oO6u)f`{V%vD_bdjlbiZmkp{-&5+2^CZLDFzJYrLStnvn^bz^)Uq;!5`rPlboPmFQL}_25rv=H7)J_Uft^D?X?)Z^wBbA8D=(4x z+WQgIm32o4G*~(u=vcc(it>@oJynB0q5aRQ6wCegwQ`Poye6$K7o_k29R5m9NqZ(e zZd*y|g5LUf@wCJH<9da>*~;7!8Y<@K=C}0#bJ>!5+l|bSABDQ~bt;ZswlxPmk?YPe zyzQ4_XD=!xa@vz8A6QtKTb>=y5J+$AXz@PW*2rxmFH-7fy1tSSH)oLX(IcG`)sUv2 zVTyZ6k-dyT|8-A##-9UxAOH(ptGXv3zC<^Z@SkZmDH7KaSzA7P8DYN?rUtVe%_BLA)q5i6J8$pH8@rzMxjfb^({$9PQbVlNk-{oq3z4 z8FZo>a_t*Jd`fDLZ#ye)4vO(;otxzW{sCM&F{UF|G=$sra2zK(@x!hXR{)ab|3`*R zMXLX!Knmv4($b*wupGd||5TQ6iSF-6Oru>-BfR9V_j=p%Srz$*R;P^P?}#ccrB@bY z%^{$dKz-Totbblbrj@Q$>}>FD7S3id7t)VAQg@{aZZxgJ+0>6BSDj%yP01Txl(@aW zuP?%?x&9MNK@WyWobI^)-F8h{XW$dsNY4!60fz2*#{#NeGFLZ!ft^kwD1#9t75=jD zGf_Ul{WSKgIIY%sC%?4ja(c~Rl7(MV6g6CtSvYICZ3Q3C#n`AqU~vk)gDyu;laLYe_A|mEa5_Rr*UUVDO zQbY~A{4Z$CeAxQwlf{b@&1}oI$a=Y}+2brRn?w8Nl{ln2xzG*w>c8*PW6z1hAb^*J zWnpye&r_BGV%uPtz`(6v@$zf;lxzCZ+l7Gi@AxCMpIG3{$q0*bgVmE>D?mO?y)5*! zv~P{uf`HYZ*?`dJjj5)}2o3_h?o7BkMA_YQ*xUjU!XG*a;|Y^u{q<&ai#G!=CmCu` zAzCCVQM~f!L|kSh)Dr1GfqtVD0=)Y@41%}No?OJS3KSyJIA}&7t51s5Ct?e~?e6>2 z-CFBjmGip+%M$Ogs)Yd{2uV6Gap=5w1rEsQUN`dlW{4Vx)s%XjN{s{O7*bBvFMsbx zaDChFm;M3Fg(e#^D|c#fKU`PyMtdwfrCfYgc6MEA)@^KA1mUQj>M5Xi1431O_;cP+ zy2s369V#%!^lswfv$4z;$kxvdYduZS%6~uT!jq&Oq@I zhB=qsz9Co_mxpk1Z-|#@EJqv?aZO9rs8^A&l~NoDH>JFvJDeqZ9?)c|VaHIWk&e)| zWfjpVoJFV2IIRgxX!e0Q;sV2MaX<0Mq>cH|d&mh~j+@v1_S@;GI{ zx98qG5pxIn@j>J&HVa1pevrNooCh3>rTS6a1=@D_3GfK!7x~wJ3vqFv22=>mJ}r3D zM@{QyoKIA1b$Z-XDm>uVXq-hXYCa9!rcpD}Ibr_L*{6k5D^F)-W%KQJpM#BlYG(sl zfmcR!YAe%Q8n+!xpU$MN<6KGP*wnXM`GmiD9yN98VA}xSe0UtCidXK%ZWs!cR!3D$ zItnAf?`U$jSe%Mba{W9C;@F{upSf`WbMCqnkU{Dz*2s^Sm(Qu-o&w=uO?BK(d+F!*)55rfb3}=b@RT1vYngv%m%Qj4 z4r$&+GkRQ|kfuHj;!5SlD6KOqm$bxll9SQ=n2ds#`9{AJ^{drf+G-vdCnA* z`8Bde4>bGWBfid-C_WvLA}^9dvK_u9g<#g7VN#a*EX+q)7kD4>oXR8-mCvg z&Wb?mB~BXs0e!1nS2#~siLGPusk^JZFCTXgcoLnrs+UfNm3DjdIkl`(;<_^61KrBv z;@N>sEwNFM7VmevMa9m}e!tHhQl%_Olb~CnQFMXygE=QAc$Rh>3_KU_220-7pK9{bRsMXq&cnk zY{tqWWDl#j`RE*%#6oyddg{*a=?g}tK{HpA2xGzHcL!ol6M|FFI7dR6Gr>yyY!*!Y z9?}|19suX#`JdrFC5Bqw64K66I9sLs@cHCnJGjsF_a9??+^d-5AFnRB2V9M>H~a6A4( zne{qIT3)RWMj%p%c))~S6MuK$VnD{(@msC?qhVo+4NV#9jP^zE7ME2%aQX!AJgfB8 zBOtk)SBGn&wT0X8uV6%$-|lT5T!;M&f=cd+USH$0iD%PFlNCtgPL10`TU&Fp;!p5y z#^VyRGqV%kd(P98vqzJ!!Ti!R_+u76<&XCx^vSsOAKNaX>?@EybN5)XWyKa`oh+*0 z;JdAt$=VeJoK!_W>*Ckv@mVBrlEUV+==1|{6o`~%i+Z!UKiHa&^&zoUwJKs$|CQVR z6fNbTs-m*N{4+-Pjp2X?HBi$*eJbwht4fBw!QbHLY&K$wv*M!p3SfndNeu;X%=NLH zqm~Tbc!>xU@Nc8Zg+Et5?t+G`>*rKT9LPeyREo-Y{3Lki04x1_8z;oC=#U`%F#Rm< zn2H&dIlRaIQ;(J(T?WHxVmS0qF^wreHb}O(Llwg_QaW)lPWp_c_;8J?@Z)^$^#L62vIuQGCL_#dkX0F_lWeo`y0(b5!tPFC5Ke+L`S4MEq4xIPDAprrQoBY7)O>18)8+< zdfFy~A7I}}@#A!e-amaG0knP8CY&~h4n*F>;*sRS@pOdgMANzCADHh6;%-iA2MIZ4ilFV!Qy6NFgOIhl^l@Fi2YB898| zRaXFuI4JN{oCKEDH&I&SJCa>30|SL$ZLx1pnk0$kiS-;mdeF%&wFx8|r1gtb{T|L!P zYfQc=DegW5Ui?ih+#VxCOwKbJxN}katvBsh*Dq4&4+2}~mDXyNC`2_>PGuuvhQ-ao zGxh)niSA_;Q8IF(O*dj3Dap4*l@enos`@L{tN)=)G3!|&%^T}nMGuxE4JnK(6+Fck zfvLh8DEUScCqDxZ#ir;q`n`G92ph8TCSPT9xn`rzlH}KjAL-dz^f7BQ+Vw|^CC#K- z(MF4bzAcOAN>VmocV$VDKlRZof)o7Ssb=HAQ-^^@uVbC%obYe!M?Xo;-SMPT!+yi? zjG)jHd8fB0kvyT}M;BNnb>OX}7hM?_cS#k&eOKIV7$5uj)`xM|Mo(cLkMI0pcu}#D z3wY4BzXLH?$`8*<<=uRJ2WU_0N;%gb2YY<(Xr_qDqi01>37I5QF0uQD6YY!$XU&}cD zwfu9D72E3KS(sN4^m{e<@eZ=gGsS+3cLj#p7u+w@XhS?2LrE9|%2GaCyPmhwap9ZQ zS~aB|rahHQuiH~pWz$3mv> zv%hRime(qW$~{1c;GpfRA|Lpt-N&&DB@V1yA3=8XJ%&;%q(JGKloi=sFRvxM7C39P z=;Caa=kMv74C4c|3dfK7#oR_^; zA(n~oUvXGLn{N!MpWFdEm^PgLlYt%j%Krg<$^Qk7|ED6r|LK)b`1IpE(Z~7eIHYcy zK#L+wP5xgVg)jX-|E2r|@Lyf4QiW3#BST`F^2Id}y9hTvB7UORT3+=DanI=MJqXA9 z0$$HVC-u|;MB;10y-`7Y1)y;@XwT9kmVCiR(W+E|W+pmr?s+|6>Ii?obIz+p0QHbNl zw_DO+wPu$S&%n}65`^E8Evs0yIj098TIjFhYnj(^$`2q%Cp0At>_7w@aVhzSdRQLk zqDA)OrVP@`O|LXKJpcjs`DBEg;FNnZ!#Z&ggvCd6$KnRlI}D8XR$lWZPspbQ+8I3z z{&rn|0a*j;xQ*O|sN*F?4TBSeX`#_En_ zsL~yI*h-(ZRzy8z)>v3x9(R=?yVA70o6D-qXshB+tXHN&+`OhKYCAZS@&x4u*fl;t zQQ-4K>($_%>6Is!Spw$&VyWPVqT2#u%fRzL_dl08LR?*cfNhq?WrYV+KH2(g!dnBu z%4=)`dr%Owqy)Sg#VMe_HG;nivv)ivCyVo+Y~Z(cN5s0I5W8Y5J*U&SwFV#GY{Uv4 zp-nGckVFal{$>8CR)d_&!?+6CPdvQ;RauC`raq>iah8uZZN-S=S6jASHqPVi(@4*5Br)g;Tj$c zw{_dZEwWw!NP0`?$C4*NS7g@A$Gj#l`cz+67j(Oy1!y|AOh8M3Bo?S5@deEUZb&nL zl{L`Q1JcbUj3~?#bldQoR~Lfl2bExWY<-4%di5Jw;C+2Pwr}EZ_-DV*hpBOVxp2+y z;^4Nshrz#sLn*q@6Y>}O^#vdS082Z6f^BH-y$JGIO&k(87<1P7F9B1>?o4K$ZuxLQ z41}Ge=cF!uAmR}H7~XX`$Q`ULs~0jVi%E*a#^(Up%ONT7Qu>jqNHt4a_MKWM(81Z+ zY~uJ%HFg}^EOsFfL_*M&)zCLsUV#!CgM z*<8Ukc8~b+1CF4gQ~=p~fEEoZYIq9(3$<2D9+Q-MAVq*g#-KR0m``m_b@J>YsB8Un z@uH~btPcacLDZUC;0!~=VFU#qbA_sJ@K;6`D`y$SrQ&)pxGG&!qUx!C;?vy(P-Pqp zG$q7_E}tJJe=Z8`g?pdWH7e1>#1=ZDq8EoY4+^@Ih_U}aXsWN}>N(+&xu=fss-b~zO5k#% z^8NeioUX4K0mWnX zt)($F`h7J)CVb;J0>y1TQgyi-mJr(W)mXWj%1SN7v|=m>@7m-`9ZGfC$;$6uZef#0 z4n<6vW5oJ)QDXSqShKCCCRItE6>9H_pgy8s4Zg%j8`h_DDoF;lXI8~-Rbp8p47jgxzmEX2-RS{|d@9?cZ#&D$-z zJhL}zwyF89)X8t=UjHhPF+lp9g~5LmJC>tc(^3bv*kRtgb>AKgs0C?xHk6NDSy*e) z?{Qt`mR1tTrdJdMw}0M95})mQ1#v?%za)g0MfOxE#`PzlJiplvBk*hLTVZ|8VH571e9?{WRsz-Cq@hd+Fem!0$zN2RY&;R7gx12TC8jc7u*6kU*h`iong_E6sQ;0h49Po~)_MqD*@}MVD#~m2LjY>&tQQLk@xh0ZHbTpkS3O_+WcTxCT zUDafkXH$deE>xYWTA~6GjVgWkT0D&OT8p1v?lj8u>m-PR@y{j+eIYS)y^xut-%O5R z8xgN~z^p(mIs-S9m}vKl(Npi~&a^dBgE)9?9guy$Q|?8eP7p8ah}-_=ErIdb6VKQ);6OP{7a{yA z-jlNUK9w!NZfc8>C<%6wM6Y7N(unCGkMe%NL$(XoTU=VYTP0jcG;5YmAhH(rTole5 zFRjsa$<)`_DH(xeDZt=@1rRFX5`GVdKIAGJ7_ahfzNr~YI-~9RLO(=Yx@yFH<}WK5 z_>nSK@?q{`iOz4qfaOxe_VNe}sz=z$C>~)bVVHS)CyYFHORSVQ5+~>rSvLi|ZR2g{y z_mZyl7D~xlHQEYPb%5L5TZtca@o>KV21kCnsYfW*ytgXGT9Hc3Acn;iT zb{0IpNyE6Xuu8~>9&myK#xYM*){LQ{;nP!#7S9uE+WY0$*FymL0|DgsRfK<9`WND@ zn`nO>=mHqH#4}ZJ|H8rCX$%}w>A(K(;u~=-9UYr+x28yV$-`qUP|_s#Qy6TG@0&ya z+JCw~7r}2sN?CYJ>gL$#A!iOQ-1E3j*3p=0@dIr*4?_-Fx*OBGV+ks$GTHN(H0pne zy?q{iW*C`PmBd={+u>Wk6ZE!ff&XrB7B5h)=?O$vU0uDEI`l~$#*CtDnxM^8fn*4% zn*pgT3UR*=MA3Q=Hbq6%;+90u1FrmFoUk^_(dNU5DgRhkLqi&B#_w50>R*`)Fy$B^ zxuPC>u|BIHZqgvpfz*dK`sW}aAWtG_tt%@oTXD@{e=PIGP+}3ogPmzuuD+?MDjI~^ z2LQD1p(PO@AWncj-Fb;u^m0kN^7UUT(Y^p!QbWw=`w;m{%m{evwHDVLBHEcx9Xhg{ zr^0RP45KK){Q+PjbXltP4+A0@jwetFdDIbK4PI&J`JR zkh1gy8yVfqNifi@+{0T(D=h}JUw#7NmUcu+czD*LrB0Zkt+?3SS|9!!MBU=w*rHDH zaEaf3oN2oyK|sgS5a99Zml70~<8Nt0+T1csl|Dy1JV4%@iAUfv`9Dw`YYFBR0c!(! zd-xcu8J$X-u^~AZB~taom{N=$eXWa~dTvF2fJ#Np7+3d(8O!U7Vk;vkDhl0TOMy!% zNqwDJt{e`z`&>h`QX{+8JNzl*!VBi`jQ2(#`z+;S5I3{zLV4@$Mjn2~#cBr8*O*nM zu*IE?A1htj!Rg~Q==Xb|cyWH|!AifJTC~8@s zwf^8~nJwS5ZI*Y-^XCmgdP}up31|rMuno_*_&@?87x7?N2UHiTWs@Ub3$u`$xH?_w ztyCcfBSx9%kKmG&B%|bvR4&3q?2Om0 z6FNe*$Zc&j#`sy1C|;51bZ`WrKX@!cEqzTgqdjDB7PwBW=_CA>kSrSbg9a8JK{dwK zf;u$l<7$5%_<#qZeT^-3a+Fc0Bw+gUsGZG?0pqFs8AVH^SXeVVjb^GB7PxU}Ves;& z;+!l`<;gQ`UZ4k7(Xavr4lOm9|>39ih~%0{=P!VGb^A8zvw@74}`Pyc22xw zcg2wBjM>OFwQcoH^WOkXAAf2dKXpycwgZpa+XvD>Nrhc#>`2jr)sLWDS&lhztLn6p z|3@uK6`eN4kxe}5-*cMk1L@AWv5Co0*3XYa=8A?trtw_Ac2f!rXZYly7=rVTMG57R zN7EaIPt<%#1|F}V32Y_+W%h=69kTG?SE&2l9am_3iW(XUNIIVsANEl*le&%r1=GW( zh~8EljfCdv??22hpPKdcUvfNq?CFV0FBoHopENQh6BmJ)&e6iQL-pww1>YT=Zwo$- zFWIPpRD6+!{4-kHAK%|&?qH1C7s@EqE}))g4>_=zNHKh~=Qh^9IbrfL-c5Sirlw>K z^HsH6GWgxu6bgTNO@OF8POhl;SSE^YRu9=bv^&AVPbJOXFX?9(G>BJ#3*Tg_2ldWQ z+SP3QP$vaV(rmpSB_=UhTwZqevo^!^Xb7yYeKD|1$_=j?HjE%|U&`IVEv^+RmN3BY z|D<73t%*sEf6zSQf02RL54!X|ys2wGJUJ`Zaw(>~qGIn@?-z*F%n1m*ft;JMI{3P{~FVJO`K z^=xx9AJyqw;vFWK2Q*0a@UNp8_uqk-2*}`ooo&-2=QY|>rWv>2!FNb-(w`QIOtFR9 z|HBxKLO{Cc(LBWLb1m>ZQd`z`nBD$1KB%=d;TY+xaJ|dg z(>k|C(jnZ9AvBQNvRiy(lzW6O+z-xDGyt45fF0EW4n5D#h(B_G+XlBmKH2<}+a{19 zVbN+RJSdA&nSkv?rUQ1O;Gp>MjjF`i<1`m7Ko{2D(xrPdN707(4#eAKSetT|1!sNL zlx$l=XoW#ae9NjCnFLIp2F^5rVAKZ1WKN!I)Zs_lD(}{!o1K@x082SIb~bZ#I=R>} zpqua29*G_9lMx<8;VQ0EfmoI5w%E9eX_vS|rwMNG!=7PWfOH5e?<4c0OE; ziDXb91MSs>L?_n@WRnU_-;F4I(p*a{)RaY;DktWt^b*(w zKp&xo_6-pJd_XIK&oQ#uu!1d!$t*1{s=wvwo$#brQReywN;bnlNu-&mKD(ce5C+Na zB{c_nJkFNkXAw7JX=6Suxc_j;d~LZ%(>{cO7E8Jp4^%6#8ZyFN)Zk+*WFo6sOMUBYay0QZ8Bu zAX**r{iE|09=pD+urTnh?hAevuR!8gffm2?vQxR(W5|w45+iThu9|{!!BJ!a<8Uy7 zSJh%gg(MFD?o3J-^{|pjxxX+}?&G+@XXSJzZF@nz$=2s2DEn-kuQO)6O{}#rzve40~rq6v?NL64GTP_fpGtnmqCYO^^8_mMTDOvw@-p&%&NSzWy4own1*}XEs zEpYoRLcEU;*5S=0wue7oey&7Lc;1ntCk|XL6AAO5TrwPyg(kQl2-@7XJc<5ot?_P( z$dBx)KA$$toSv*z7#;3EVw^+?}YA@wIOPi}% z9t6*3w?b=wLfUy={&u9l7i6&=W5mN%r05>Lbs!raDW8&tB*BqGvVUXV!v>D zq)suYse14WviqhU^Y&N#KWZ6fuUR@P*J-fyOY3J}@YPBGl^#RCeu-mFoQLH0dxI3N zQp7jBC5cNFqRa&d!2#YIc}KtKnjB9qxPkYzwF`c?H|M*sS1m3tFJii-T_K*00dQX?f835*AN#5;swcP1^M|Wf2|&=zgPP?NOTajpJHe_U>fDnO1?ATiZaLeeCZRtJ1<9xm2zssgl%{u?pEG`_r__t#rTyPxyS!Rq1 zgxJ`=a9zRf1T(9GZp=MZz<&95)_!>n>Id~$i$QlS z9f_l1iU^RYn>`s&CuU)C&-IO3tTAk?aTO}qVy^7vkQ0~0RWC7Dn&1x~qrrc6@l<sYC+Fo#weM?U>FbPnK1!a)Y1(qn6UEdkRbdIdCpOPBkr%cqW=(B9hUSMTB-kS4y$ zdk&!6k;iaL51KW#>3O69bA>`|7LJaA0zubo^x6?fp+Sl0hYE~she@s~Z5bV!+<{{g zGlAn5EQH%Sw(*LHf4#UYqp#!apPQ#Nhm?U7GY*s)x)V>xuEd~J8)p9!p%#*M;SUsr zU81I@oAz(@7}xW(Osf!Me*9sX!#fzc$UJ^{$BuL%b#W!w!INOX&LCkk)*ra2ZwN6} zTs=tL6=9|vfJf49#kuQCmlPc&mqlb?nq`hq$v-%TpEFY^lt4v^N>p{F*wf71A9c9D z!v?>eh^sY zdAqN>ep=f?A$^4eO1Y;=L(JS!P%&+*)5xa>zlz7xQKYkM2?Vs{JD%lJP$5u71Gz2V zRE?H^K^zxB40~5eGq_j?Svq{h?Og5YAeSjz-d73_j3B-Y8j_LQ7@INzMufX}8LPgc)VMwvRVm;Ycov!-LTgx?biyk;iB^Rz{)bLpASf z7|@3D4$dk6_4O7zkGV9Z2PC9%PW7bZmjSbbqY;JovfgfY zpwFE74^PvR=Uqn6-Npuq`I6q}{2HS13m9&Rs=(MXqk5Gnq4xr~qLGyd&^ZNBetFza z!g`pK@Q^=j+O5*wimn1}8!DQ_xYOASm9KNdJp>lb;=k{THPgV)I#PpbnG@Nt)oX;+ z*#uCP!+}s_=#SI8 z3XHS)*>ufR)SsRCTr~LtRij#rLFk1CI=0mCA}XhHx&Xbd(aN|++nG-|@|ed`E08ef ztU}yG4TZJ~$?&Ad6?zs`t``~|6)ccL7FgIVZl0qU4tH(XSa7%VwX7ANPmv4P;qAY1 zhii1hBFJ&W^jH6GkGb2K1_p#-Nm!M(0^HeWE4&xKZTcEPhEclq*8uektX+7U@Goy1 zhXhG*g{0YL>_(*XkXZ3G5LHEGC$h-yKQP5i%1>g{I= zGZ<2Z;0c9QU*Vj5^ZY1mh~Za!+!uC;&_(Q?eCSgMT`Tg7n#tz2yHG)CF7q#1 zMR8D;YJK`$VTvv?q3j2jj0VvmUtnvTy4%_t;>mHv4k@u|5FpV1FtrcjOT^q3xdtSs zXW2vE^P!t12m1&DG0^!Dq)LCF9Ra5H4pD;;e>vcXDA-yf zvLg0v;RP^kV_V_kI2acMvhcc(icdj9jyksEhXYMKEB7eO%#DFU0gU;yIm-7?d=aA7PSiQaEl>srGRA#x?Q+)1o->jm!;iAbkP$@d zsAE1n<1lO0vf%D}0k@ZPRMX4N93}=|K=n3>p-=mwY(*M=6VS9#K)*|Fj7DM~{3iCQ zVV8Sf&xvm5Ryqv3r!qI;^RZcTL_9I%jc_oWlKQX7?m#OG2~_5Des1cxx@@1rSo^L( zE#o{4z))4z)n%IH8*)>FHZ6D8LCcn1)yg?|P|}+NtJ2UuB&jyk}T1==B>yX;)}{DgCjmh(5ZAf{k^Ho`u4WM&Zo$}-9ipjE}@7w zo^4td5_2X3Kc>*8+zw0-jtgf=c+HG2^b4zN#p37JH^xzz=U%xRfBY)svXXLhGgAVM z8Q>N|I>_JC*pe6!uMptxbM&D|VFnkQWT8lF2AZJzM8wJn8gKre5N+CliVeuxI$V zigUOHU?5eGrLH=m7(>xlQ(0#N$I(*!ux}YG1ZpEc2ZH-YyRLP%MkuF7N>Fn{U4M7aEv=A?YN$VatmD|pHx_<>-D>^&l5Ef zB*P>l2NmzSCM7S!%}(t}sX8q{afe#65ixN}KUcnEHrVybhjY`VVxYt)<8Xd5J~?)o z2)@__crkuw1o=e~3mP@S_nsO53&fpzT4srXCN05-X-)Wfk{l{pk)r35!@RSGzW8>z z8TN9W*7DMkk7szn7IVU&#~oEUW+b>G#ISw<*z3c`>#v&Vxu&M3ullisBP%&A%`EV4`cbbo2Q}=ud>{wLDds7m%v{>ekcyW-9>XQ}K<+aK zY+u3IIVQLuB_ehNZK?loTz?+$jo!$P>n3~f@Q6i4&k|01x#qVtseO@kQn?hhMVy)T zYWCo364raB^FT{0g9XiJGcPZq8AVpeP7q%SXK&yT8|+nSh9d1JLkSQ?%c zldgYAqe?A6X(!W@bU{tN;nz?^PM_%v^n$v;T(6R6sS^7(67v6%xuD9tf)5Z96i1a4!g zdmR2$RW}6#l`KruE9%eNj#K#VB^iw6|Il3h@upw+u`Pfl(*NQ+B~GabNS>IAg!aN+ zi`ok_qN7G^SMnb?P7>>$b)k=~LdjGNp&H-*qd*W9L207bQHnu!E;uyz{3(v8cmZmH zU2dquWo+MNb9KnMDl#!Uw+T}PU1=*sZB4jN4zXyJ$e)=Li38*aT%OX~u;v1l?O3if z7tKbQsZ4)Ln$-TW0*0T)9>;G-x5MnPKldXHgY`eVrEX<@^BCXkU#srppI_>9nH)>^ zxpsI}e%IA}z6dSPDn}ox&z8X&DT;MQk~Ge0fQG5Cou<-bG443+31L9kW;6$q-;a#( z#@{4mS@29nQCg1yAr{2xo`sD{?*EYriG{9D!1yR?V;t zlt&40Ywp9+r*2RlRSWIG`?NGT!}VRdI6_w^jb8fef3-GT?~yj{H2yKTvlUh2;W!~T z{TR z!*pw7YXDnO9&3k+sR$T@D7@xROXvaoeT{U5*J~F4Pk=|+sc3l#yI!@8&k$pE$ z9Q?Yl^-OqAW~+l2`SXcn;SAWsi5PNJmZn~P13^QZ(Ps9q%3>p+(28mtB{Q|v=XxuR zr&ZX=gDG-DWmp2kd%b792QoH&GYlVgW2=}YPeng7&tf5+i?D<3#T2eA-zDY6HjZoO zYtq&-xBf?xy;xSVQ+^pG_WcMqWcI}}S<=>-1?^wI?w^6x2E7@_Fa{uDtF8XRcoA7O z$x-!E=2cDdi;XW47?0BZ7R_iy9$^$O2l~Iw=4ssF%jNTbPd+1|AFa}bC7#_B_@?KB;Vp8Zc!n`MG_HKFu){f#?XuHO64@!(tk-zm&aMRF;elXFBn z@x6rKqWCz`)c+MEs5TA&X3lFd4jvlyWLV6Dy_@H&5j+73ITr9T2ZlB5|KH zFzwu(emT8O5pZ9qjNnrFhO{~wFJ>5Dm9){2J~QG#x{n3h6FN)h_l4vZuo`GD<|jW{ zeYj*%a9lNW5X}CF_3SKm!q7{=V}>IepVXR)A(2Si((>iMv~gbC6>FB}+bGyQVJIpW zS8rgg5QgOm^{_jvQzcI>9f}+Rso?Kec7xQH*FA4~oKCWu2EMNH&BcspmYk2Asv}>& zs*-tl%jV#t0MJMEBLX7P07G;0=X7X&WpPNw?-5s}-s7nw#WRO5s)KtuxGTMhVvw96 zKd=le7_b#rnHcW7tk7HP&z(JjFn4+!i;&P(W@18Iu26|8zBD={n?kjzJpqKWhA|Rt zO`vr6VP>{N?6j4B1A@Lyf#r)Xh2cn(F;do3Pt{r`uLL9&Y8QiM3^{7VlM>G;$K!5* z$6U{ffH+$;u4p3g{pRNv78l)@z%^Q4Fcbw>bU0%iGzEtMHUcp4xWzB4Fysp0lc=8G zy`a7)S*t4(2`p`N6&s&rHlqC;v@~tWDew$*iT}C7sE6IEr9=B@be$@+0XFjNviZ*a zG{;h6=ll-+cRXF24Jz9o6`sq_gAB~dfh9uQpoYNL@BtY9`{3QkB~{gQF#&A43IQ&7 z@btBX^9~eeV_{d;U}wMF=4gkrea`nSJRh{~z}LKU)gwd@;T!$JbW@N2Q1*Y(_LgB) zb#J@3ARyfhO2?8e>F!QNX^@ug?(Py0>28n?r9rv{DG5OurKDkxh4=lh_j%sq*?S-R zs|ss6*PLUF>$=YKcisjix8=rhm=4pIR}ivCqV$-YLRFkT;PQON_sz=fm7V8#{&egj}$*>;{h z!8`YQhu>5b-o6W)x}yd2QBg&jQW-YQHivLyVE zg1$3ov7`(8wk2Uz1cB~rrB*#MmZpJ`v6IUmI0{@PXi#oX7NisAFTu%G(zy7eIV1Fx zmz7ZwjM7lKZ>n4)uGfH`^jgrBXh6>_cO6he|f<6oV@l*i)RsI$Mn+lrDhe*n4J`S1;^{}Erfbxk3 z5=aocL(p1RLrChZ9=rmmU4`8uXt*3Gd{qvxiqApYer`NBApo~uzU=g<5eQ-$8lnuH z)Ik3?wK$E_?PNl_JNtnzw)ioUpX5hS(}Nft?(P*@5o}E{*KmGh9o7t?10942eqy&T5M~scC)eV6d+JcgRf+Pp5f^S4)6^JP60=h03u&* z6eU2@T7#R)z3f%{URgvLG*+T?70vHdJU zXz>9o8nq+(4Jdogpk=S(^wUQbsL`7##W=y)xTL^dG?9=nAABX#;CnsG;pliU%eNiI zKR;4A{5$y&gd2`?<8I|pK6zzQ_^7L{s7TddRRv&qc5)YIRW|_NcG5gb07`S#8e@$b z1+f*(g*uZjTHn@d>*?vKs`}d)y$uD{{$$IH6L3E_nMYO6lTctk0V59fVe}h3esYkHxUa6c;uZ9A|Ddyi&8Bk*@9%=vOap_k=6d@>E1g$A~zu z<9C--(1uY?G1?GtWr4JZn`Cvz4vpF7IY$X}kDAL%kK+_511KHw5=0hpwM_)JnfimE zpRc_^Rrlt8@|WOY8gD3kwf+q8ir^0yJG&@#0ZI`cc7_W3S7}XUVXx6N z-rKRmsugP3Sn{*6zf0ia8)XJZL3;zy0$|L*PI9Fr!PdVJqeLk{*davr$F*tMrgg}F z`?Ww`9pnaNM0woz5GP7x9PR9{9%uCjLRS?-gPix-0OqkC;Pnx@qZ<0%J8YQ$*#Eua z5@(@#GN{x`aG#JWE*gq)J{S*Re+nc!$Worp_uvz37=Cx)9mPPa95yg{G}+aP_#S-l}RQ7rQG;!D4#I7EkfO(PA4GkN=OhY zTA*1#&pJQ*_0gpofIMG%mzU+iV!3|f1$=T>5G}zeN(NRFFygOsB8JYwph`nENH1MF zn8+Ccm(jW*dPXSGdz*ilBuf$IZ4fbt6F%o*bs_57M`ZYh6=66LhC8A}A<6iH1VO&_ zLagia_!0!oCngg3PnjmFYn+iML>45bnj?O8&5_3?Q3(kmo|WybUHQvJ7~%AX=u?F* zql@u25N@tO7BRAAlKekzVIu%R#`CZA!=M)l4bN&Ysl_>Hz3o`HO{64}+RQl~%Q=29 z_U{2SeC|g8aEN6S^6Q#LM+-AN?Ar7V@rv%(Z06B*c%S_gu=FF?EGF|= z>HRzePsYWy+(LB~+$y?UfQw`ODuSVso`E5etPN0(95{JOa=wbVYjCwog~V$*uy3q& z=Z!v$?c=3;XC)7d+v$IjZIZeV_H#rN!g*3T&?niYZD~f~ol6Bfwk7=Em}?sXfVp1s z*zKWkb&;hOM}C|?)o80fDLwQT=z8`Zbp0q^au3s9v0WjR)n9$FoRhw!4n6`Ulzn{K z$qmS>?qpO?lR*JitflIram|DkfJRU+^ghe^VI-7%2)(RW-Z?Aja$ z8TjBIf$0*F`lN_{*9s_esf9)|5KPcbxxP`@`vgt{^F~J>usUH{G$J~60RCfgFWTR% zYeSU|z)9XB_##cYhMU?}3%0qra1yDuf$-0iWF;?wHB-meoB( zv4B)0@KjDWVg)2Yb#LE3bQqCH>4EXlF(E&enI~|5*mP;$GIQGQO5;p!M3Zpi3vJ|{ zEIA=ZL={u?q%8xOFd7mpiH#O5*4mb|QVYHs5EMDgG`>%!7zH95+;)2CG^ymkf&;@l zpkQ^DOKGj(AXgHWI3-oX@W z%Y)|gY8lE%yI5i_WM>hwjM>)!1iw6WZ65ZRJqNM}Opv)I%8KXb+d%g{q>Q;%1H8i6 z6o7_CjC*l05!xjHREbWkxPDG?8k-$5ICJ^RNF4u$XA0U;8boY7-p(-(&>>DYf&2E1 zkVXaDDCDzNw3L{oN;oMsFw(0tOw@LzE{7iE$>e~Qm~EfMW^Caeqm`n`BqGtU6z85=IoT^8@uj)9B}gC5^aBw4f)-GdZY!~qkv=83%M71lM(NL6PLtS z5G%-(T-Xb2MuP4~`E5&3+uO;{WnbV`+MzzNS6}eCwIqBT$6=;0zVKM11l;Jw?Jk~2 z;(`Ia5FE{5sPPd$c_O89FXT~LZk`RK4iHYku7kjC)SY;+3_nV6p?hHI_o(HHT+RO6<>bRjd;XQE9;~*U8PxlF&&o`vHTxkl~$KA zQp=t;_=f@OBp4X5O0&g%E-enfu$PvLh2^;z1mgOknK35*&8tRtYRJ!*7@8GXn?!*^ z{wHITf;g#OJX@tMOA3cHn_U6@KtH#jzm*I7&QdG)CowyoeXVKpLj; z*spyv$dTY}LR83?QtF90s0ak<^(#jD07ezlKmLBQ{PCBkKg0Od|pQy z{!9M4P`Er(%Ukk4j`#8B1|PwTvIDl6G!C&3iMD~ zUpK!Au37mQ!nFk`4LyP@RT!@cc^?Sg`=?gprFz}YiNbNjnx;SNd#jY@<4mpX7I)Qa z<&^h=L;C()t@KQ8^192eYhW#9J>LP?aaj?je!QGaIO?u{K|o@0URpZv$R%UH#I7{T zX8@U*T8Jdx8~_+2MAYgin50@S6if50Q66JtV6I(#eH{xND=jg}Ha`HIgj^q2pQ7f3 ztq<_`qmITiQ+K8Vk~J2PpNct$`5}=Z5J~Cv?~_8=)e-igOpFv$q;KXa%kDi%TNq)n z_R)IOqx(iCRNRD1FPmxxr^4uZ^?B*kg2e0?h}E!8&~;HT^2e>b#1NHrNS00oQ#%~e z^X(q}#jWnB=Wx#ua98t3Kc#QODFzR`vjFEbAd?)pz(hY0^5WT6p>_`1N#1f;9NZ3x zx82zt+jud~rBAUgqpp_uLz4c9us|Ga0AZh!eLjRiJ90Nf6w;IEAfL-1Mq&O`Hr%|6 zS|CoW_V7kj79{#=g>S^{E9h@9dXSa-6zqj5H^;RJLjzrq{V9f0+D>R34mTCd>%i-2 z_*TA67EL_^v(cf&aQ%JyH9fJYL!JfPyMd@hq|Ht#M9vJ#zlqh1U#=O|!Y&2?u{!iN z(D(yQ_f4UAP+k7@FVh>_>=!cce~9$U3kUtv1XTe7boYRKdD~e_U|FmdATr<2$8&j$ z3p~aXIlhhPu4EaRDpD?L*7-hV4#ibt+0S+wlnP(%)!yFU1mN}G3OIfYEna$vM<_{| zI&QycfD(>mk<>%$nv>P^jin{4(!??-Hb9+0$+^lFt8LR9%orw8Gppl>23yhTe~E`q zktd^Uq-N}IQS~bOzqC5V8X4u|Sc5}dJbUpF%(Jd+N{Y{*wZ#ZtqoK}9$0v%PfADGO zB2spA_&=ngqF^?cl!TApw*A`6I?K{n$s7c=uro2|06&r3`7D>FcF!8axb+8$@mD=5 zP;@n_33zq4uFGN2@-m=$tKY(RZZ@0a-_7~p^DqKqF3G^R5A`dJOGHsDGLD0mMaHc9 zI1Ak7&l~)1)(DzVy*rMMIv`?L#68Cf27hg)T;aqyO_5WLwMgx-5TG{pw-O-5ZidT4 z@a-R$(hpf^8mAM>z70Av6w-xbq0a1Uzd6lpd@sf#f%`p3te-KE@G-^^u z7wpwJ9U`zpvyV|j1NWsgu?Z8RTK{ma zv7)Wf5^wsm&x1JhX5x4=X(dKCs)ocMTXF1zBI@`Ndl+AzE3IOy4vw_U+ilaUnEc+9 z`fm(9Aczd=Iz2a8P=2O{I{SiIDK``?hllT}P7HdD2+dUTzzM|o&mf!brp zLlVw_n%A1MstXZO3a>+?vF#xz`wIk#I(TMVBFce(vJMW8%fS2andO~fI-SGXN`N%Y zft-;_^?LG)mm6%*s9eA_1sPuhE+PCVU0`ty+7IuK)om6f#ifbR?cdkEjPUQ`#PPyVsxyxn@o0c#oj z42#J5_Q18h)uXaio-x2A9NL69BUtGt_CGj#1m*n7{|YEC<$Q5 zG;UcPmb%7ms)tg#II!P6`v~IVRqdK*R~lC7x5`0+2Y9Xndn`yRHS!NaCK{5Ge~68{ z-@5mISaF-jl7Rn>_yTTyVxyBEyQzBIb!UEtkq+ZY0G_K^r<75e1QmN%k3o7qsB3fW ze(9>2bJ2?hP$8*MBNrag=YgESr}qD6q--u!<9~v(MQH#NPKv99d}#n!0x}?vDeP}A zK{n4?ReLporb_PE>6b6Y3lJWfB!xEwln@nydCUpALVRu8xL=}y^mK}%^4OwmOBz1@ z$C4ova)0>M0l{H$hPcOduN{MPqT77j`U`k&sY-)Ur3+eXWfT(4C8SapaY#g8P{*=G zkZaObU(G9*giN5XuS`);+r;fHRtPQZl!7OkH)loFj|iu%ilF4_ zs`&ZB(BF@=(fil`n*^Vg^V4IWPzP&k0X?FrwT)nG$5w&YVxcL@b zaoP_#Sn3R=1i#G+Ojmphi>IW8N*NwY&a)791C1Hnl~XZ;8zw-pm-n46R=sVBJz>6l z7b9^VS&E&jj(s=<^K88|;1@7iDAC!0hM-o=B-kCx4%% z5_CMOX8Z)XBQ^xzz6{T3&SS{xSJwu?eXqfH!H(RxpCs?=2o zw#%wB>_y9?2bv7)`rhQgY#BfnYMt_@DCf2tb_8kl3ineP7NPhoNXl=R@3{Pj;VUD& z3SC`vk)WY7%1yh~3lfh{K$;dPj^0?(+{%~70{4orya6AX|qTN$@gch8Im5@-&U$69#^@)i3vs<3+}HVuBh zX_0wwD7rv-l+4$f-le~fJ*rwm9*oc531WGI0bg=}-0lyK`*D6VlnHAw$WZl>-S_qy z)KL4t`B+n<#vmHKG!9z=lHuJr;Rmx6@VVp%m<>4yM{4+8-$#i! zwKNTkQ?tUL2=2d3EQ96Z%-+I6B%_SZ@TS^C@xgL3oSS|A|K?&z{nStPtma=GEL!K$ zKkO=2{|)@29(RQh-rG0BLb9b9h&zg zT8N=v)kK^I7*)uLUsO+-_tb$JF+%yWH1eY|{S@GjT#V9BX6tDUnE>=f@i7z#_E>*1 z=-#Meoh9TAC?y<5J%|pmRpQ~_;NR+fh5%boT{FwzVWA6oM%#iimOi`x9&lz3+R-6V zsvuOtuR#+Y`g7T)cfop_OKHy63JeBQ$mUuihku$xQ(A-RyDwI9p&g?79-BT^J|PFu z+3jWVS+zzFAufi}&=>Ti>M`v#v)AWZ92wCPYokQfKiRKeOOP+>SB#J7n!`&lJwUQD zhnLO>PA$ckVcl?2NA3amMv#UkBj-Ax>@_ndGbEc z7@EI;FYY@qN>*-l@4)PEtrgeMZ(E~}N{(2^%}-a4@n9AQWJ;Ewq&;M;27a)>FP4CU zqHEx3R8PSjMvh@kmEF%fV9y#4%AY?REX`0tLcNomdrYXv;ZY}ZjMPpG; zIv25bsIcsj6_)3KkFsBqEoxNBCtV`2kW1p9lyGetb2n z?k$Pw+08X+RS?fK2Ad)8M@DwV{2E;_rtpKj^(dcKOTpQ8xekV5yW))anPxBu5DX;GpRSwrrT=OD1VURsFY+rI&Iw$<#b@!Jbal>j zw@tN9UgjuQiGU8glb*wAp82Xl+>7VW4d2BObIIW#rdgV^?NCtmYyu`0>nIu6P#7-u z%zkRu_227*ozN!>bqa5LKey)Ij|zq5#!FLD3-lt>!?K*0$_KeX&ZNE#XuxB{B~*)N}js9kvem4*F#?zL16%xD{WhE1rBy+ z7_0nk#?`;cK8agzGMS?)J3&vrH6nZ2Wx={aUqIq$RX}(>Q^tEC9}UG=^SjpOUz5A* z4UWgDUp#g}CcHm*4du@aVt=wJ6G$oXI?}QPjD}rhQu|_|bL(cO_Sk1Kyr|L}sccx1 zSyWbuEEefGemFt61b8%sSc{~v)TZlnx&7hHR62z#lN95hE)Jd!LDFR|0gt(hrmR-S z>n{2#%7`ELvo!A|nBk4<|7Nhi7zW;X4{-A=A_r8c2SxO##niNh6S}~Ema0m}=};2D zR?kF3XLx+EqQ+f8gVSoR=GRN)w#^8@_f`U_EeisD`F*e30Us2iFW{b^x@-2;KYTMN5ewJ=;?s%JvRx8VGEh$B7*C2|*9 z;5(6>Y8Ddpu_sK>W-^QXU{aIZWV8JyAO@0H+>>w?-Z?p}Y{T+Gu72)q$gbT3!#Q9d#CAn`=VK{u&e@G_JP4i34OXA> z6r5%BISgx=Eia%hJF(? zojcsh1R&u<2J{j#?|u(}5Dg$p=>zYNT_Nm z1)Rb0KJ?%1*Awz%&{J2(IiQ}H1qx9ZIf_M22N+8|kn40%mnP(WX|DJ=ip9VYgI(*3 z|0k~pzfVDv$L8Z+| z(SP{?!f`WQ)X0e`kf#msp^D9n)M&MFNO&?AJh`{zuOTuPx+3|JBCg6rrJ$>a{bIi} zNV)=tluX>#XC!IUeCoET_yDHKhLn4wsN`UBM_Dr<4NtB5f%6jO5;#9}Lz% z#lYemq$G-5oOD=GW5pz}^rB;L{r;<&oF4r4v;L-WV0)5!N%&t>uKd1+_TS~dA_toh z(?_547rVuqhJPpUn;sqtjcqj+vUxX9cS>7w4w?$I3aNn9s=@*^z6DL|Yx44AnY<(i z&RTW%MC?o{Mf8?aL_GAC@cQ+f)>)iHBmV9Uc)3z(-J&-oVvTn02m(sf1xCej@rL#I zN6#;#!a#FoKcyBk>xn~WCxV$hvt+KpUa8x?wqJ~av5$cJEK*M4iQ532N&>J`5kJc# z%!X~+pbnSyLe84`!H1Gmk}R1N4WVy04O&wp30?3jjTh1?{8xE@e%NE~Kz#I8An)H2 zwfNw63JfU(`K~{Qu_%o4-H;FF@oRK!w?rlT*rL4X{xKYH4nTQG&F(d}9d5fs3gH zC7+;n)EfCzXKJgz1WJlmcem%+AhETm6m|(1`89nk#3EZpjK-i(HT7KMAdCS9uKQ0( zU}qugs18RcDk>7rwtYC;Xh;Sgw8}mj0(~7V-^!`6oHu?tP_?}4Hc-p&u`F*$!evzE zTmsGuR@yHSWI{OsdE%lWW5?L6j(mV9=k$+?#FEnxaY+Yi`2&lS?RX%UkKt>%(7{u# ze-UJLom)zco4R=FNo7JF6hqgI`2uFq3AxA-S=OY{owBlGOR1$M1*2Uv`>@lOCLDWG z_FR}%MF6~)ul4wyOHXvXiyFt9`6HciD5{IX##S=u{LKR6>hdvTBvJ@O*?)=*1JR1X z5RNt2#nbTn{fs}9V#2S3u@5m7K{R44{I7mNFiA^|0K?j^I$``fvQ7F*%SE9*@m@G) z6vb4p%x!|&HKgmA;o6In;CN2=%!DdJSd>?y-0EO z-PK-3dy2fPq02{sT55i*V>hgO8bkg-XrA#%Rh}M3) z_%8VqV5VWskie=*WHy?~)Vz6c_xsfL>zM&qU^4>iASvzoN5%KPD)$GkSn7MB(guf) z4=MW0ARnWOi5UDdG<=VyxpxyOT;aBQBpES180Dj62Xs2FcYv@Ok%MRi>RTVg*2{Fc zR%*(2Oxy(w?x^4S<$JmXG)o{2g>NkLXN{lPmv5a-e%XF9##d*b*I)jbuswgmF@r$} z4U;O1goa6(nwKf-8ESs-+L-5xLg@ly<`?tur=(m}P{Dg7_8-AJ=u(2|uO)$}yRD~t zoL#1e2V9weDPxrkDbw@*h8fH(5Jjymzq!&G7|fDuK)4zH{j;xn8eP?0tk9+TufAjc zhb~aL`)k90m%BHy@iaMcVu--qS|U+%*Szq`c#puQ%SI{g`R{;f!?q)MR~rPMiyO6O ziR+IVRWCf^>=u|GKfRh(SLRCJE+`53P*$k&(7_xC#enchtKRYp81aRFr`uJ-XI7Ez z6?8a1r$cV%0?Q&DXdEoAafH4GMrA6xBTf6dXGFdLt^!O#&5>akCsMZ#^g!0G8k0nU z${uyBEZcZ_?FDH8#pi-;`_h?PMw_sNZ^$Ej+J_{c9fD_=5%-osWVTkyFd71Dpvq^08Vo-39~e0ZNz;d2olRi6DuE(kwP2mc@f2BzSSejLcC zy)_H+E-zim;&@7#Pps40WF)NRiL`#i=e-rUIhoRVeEFnC1+kvr?H74-x{!C80+RIF zhneO!fcSQrFxS4opi}~uOFVPJeQ}H1!to5&!#y@?Y3ABbYCWPnge+wkGER)-f?_lu z%v5P0@@|YF)a=aGTfIQlG!APeqCpN|(%P}9xJYI1>_ZT4!&S6O!;^xpV0u_)@WfFB zWJLZ&w9ZQgasjgNWCLSr4QILo5inxio8TY=fZ&3M$nx=*n78*0knwciWCuzQn%M82 zDf5Y4N>)~Ruy;3A18+pq5#8btijv5OTa|^PLCxU;JgDN6VEh`Tt`2bk(+dL79MS4rTiJHl`AARj15z6(8y&W`(6fx0TCM6?z? zR{pDbjW7lTO;^6yhEwt!qhevlT4VcFgs#sGQ1*44Cy<|8V3r2DNMjcrs23{Ow_A@# z=?sEU-PXdyj8U}Y2__<`R)71$+o>C=k(HS5Kjw9f9 zv2EVK59TjsneB~M0tf#__hVDK<@A{P1LbUzzTkrOOwZee+4juS!Hjr>kY_vLgT|40 z6kGhK2ufZ%z$4oQ-3>-t3*QAs;^)c+nr>=?s(3#1@{;sZ=(kMrjg8LM5W@F1P0^jV zZG`Y`WNNr+q!{-abI{u?5E++$`t!o}&ft%}JP0HZ{87eTKp;#btD%x$8_@L!RvQp> zy1yxW$1BCx3Tj3UD6S{(_z(#FcF&r@DE_Lk{f3F808KyQ2a4snq%EWe@sgMA5a*Xm z2)n>)1xG<_$jL$>itp%08X(*VD4dvsRszeXm98IDU(A$oN|$ZA5TC$$HsLslf#j~r z;^MC)UY6}ZIq9hna&Jum|D^{E=%Lie8$Lec{+~a_WyTCr8^5l?izYV-X`=-a6DUn^ z$AJbWI3hS1uL6uvlxg$zkxv2UfwL*A1(*II2&M@Uh56crSnwBYnwI-3dBC309h0pY zgh4Eq3Ndu;9L&Z4$(eI)T27*h7INykc`!l+QJ-{*dAvp9a~P>_UfD-$1~z4^3)Q-O zZRTlG3h^I>@bcJD;138EK*oSmF+-sB41C+!oh>EaR9PA0s47bwJOxCk;b~?(O=0{2 zzbI}(xNZd2#Qj0dpaW#)t4iwm^Tyu5p2wPiC?5C=@FQ8PyCP3s~WaE_|ZA=hg%-Y2l znYHof`7D@VrGHZYk*p=WiH@&HCcgucV$~!DUM=^^2_`J~CIJ57N>G6V^%nG2v}t== z$Zq;#d@`Zs2x0oM52U`JT+jPgcr=9y)~1C&^QOH1CH96+vqM1)IB8H%t*qo8`)aOx z#>J5Y{e_LjaRb4&cqE)-+MHlITcT11p_EO*iq zmk4wd8NP$?+MWQ%4QBO(T$aAh#>oUygU<@M6Ij$c{eFbIggZW;C4u3;k{zq-3wzPkZ;`uD*SP%rWN-gsq+e`v%V}k@mnu89TvW~0S-;h7TnWQnu3g5;I>4-Fov4k zU)K?&eux#mb!&2@5HY(uB)e0!^aLVx4n86KHMoUKAPQU#k%2(v-~gn%8WY-1{&=bT z@A`{GH#VfV+2PlAdtWB%Gtq}?zJ$B6hD+nm<1^I5dd~C3El1x62`kJ{^tuAhzR#-D z4NVUjq!qK|0`!P*6H;;Mxqw_wkuWLz2%eia&(u)!Rg{tx`)PEmIM`~@ zLmfV!p&nKE0ZG~BXRe`$aGDKn94$tE3{1FsCX?kQC7_8g2F_Z~9lnUs6ND`yTswbp zI>cevO;Is!8~`JPaifYyq1iylv7p~V2V2mEpsb^yfiejy@yOc;$6lc01x7*>6nPA4 z%N4lt6pP#IAOD6*laCF6SSV=a>%99yswVq$LQzZ+E{#c&$7Y7B5Kukw#Xq9`SJBg( z*~$$T49gH4RPuCx4u4Y0fLsdtur45W`1)^JCyl&4Fj}^ruY<_&;O!J7sKY<4f%e@* z8g0NM-E{MN0SP3H2zUnuu~4@_%wroVsT8k!c*2xV)7EUijnnjF5T)~e5edhrct0raFy_pzYSRqD5A?!u;hRfSHs z^QDEPsm^UL!oHsv6H|QpmZfwM*_B$4IM;ruUX5gvvI#j995s2kA-D=Ys!qi(lelh> z1(8i?*Fj~#&c20E9Ol6MW>0?OFUjRC%cL3Zeh>7{ zy|vLkpHA_wQ;<)!|sQWexoiu@weC+2L1Ton>Q$Wnoz_Oq1q{2YEM0`fZC&C z#Ibf$Qx5ZIZBE9(C}ID><#Lxn*B|vUUy^0ZUYd1ZRM`uww~xb9LKsG!T^S~%v)ynL zJ{mtN)5ydFD7(-;YeqYHcu65W^Do!IJXJATM zI3vC_{x#s7OOJa6cf@t3$J0wZk(3tjaU+MHrjE)uG7VrVHvcy5CNh4|T_>*x?m`^UK$0f*fGBu!((eez_!mbj9!;Y3JbYM?&8{x6;+sZCalGsvtjzv1vb&DL$JX_=C;(>18`RuMggfq$0g`$a>mQt89x=-Npkj)=iSN*gR>m8L1kb$;+}nDIy=Zhr*p zqa@nTs6`dzRa3o{QJ)q6N7W6W03*txBon|0I!-ruXqkR+)hQF1g^*0}+AEWRvzTuQ zsgJ2~Q4C*#eC|zUGs0oQJ4o;vrZW3IfZ9OV;eQ68K3_}d1dygMt&9I{05uAcbMI=> znAZ;uTtA6^vGA>L;_*oN0TSx_)F(Tu{TYL58h1S*xDT&Wv}qO7dQ^?(7q)bh5^QLE zPfOm#-Y#i&-!MPK7zV4?*A@Fgd{}Vet|=L#-H4(s6&_$3H`A`ps3ye2tvZd0FsZc_(1-}gGJqB zjV>n$GNC2V#NX=7RA_UXjgp4^#=Zoh*j>;gvZTv@0jjpL>;)G`bN20OyZ!E}D%cac z^?s&(Gq|xhR~umr9Uz(RfF>Y6femzT&PchmDcIamgieF_1kv6!rwhITFlR;otYato zWX4yyuIXJjeY093whf49-yNwPP{>QbP)I+#$Cq2_T4W&hhnys@=)xKZQ#mHd(p_uK z`urBLD6#D-4T5fQ*89Wg%Sp4`jU2r-V$|$|NjJQJFk-R zE wqxwvNk|khB6F6T9TpfJidA753eXh+p6ktL%;0-KNV25s7xdf7{v$)0`lm#HE zc6sv=Q%UAGxBm1lkenQRQkWK)6k^bOsb4kzCLYT{p-6BMFnCPW5NZ;06MJSo@Im;0Y; zKFyb-ymsKLY`e6ydfA9rjnNFUV+(V0#g=!k#xo2i%)CbOpHAH-z3Woff|dORdO=!c zBJ7GycN3(2Z4ow*rSxwXn?#VFtPOJ(^)b6()F!%1xpUET3wpW}k^QwN&)CDv zbXRC1ck>8=MUJ5D7krUTz;5KolLI)J_iOU!a-5IZ(@RPMyL!x&DnI?6mx+l1X1zqs zG!Eng zbl%&rzSF0%>}kA?h1i-^;-t%LaieN;ZV{Aa^G9_GKoVh>nH)AvOSuqzUR*1m2%^p( zjEH?dwh3@N^r&pk$4HJrj^h`SwZ_~3j7~I z#s2})8bQ{B`Px2VqHmh}ntpy;n6b-2w4XJ?9bxOPdt6FiSU^~f^p2Zym^8^lqXkNc z4wo`E%jppfkj2-=vyWZyKqvB!=hqGo<&QRIAn#Qv%6*4f<1*%p5I$sAl=DBvTHAdd zbdzpsEXCl7mH^x!XsS`u$^2&s|R%Y z2IkN8_1o>g_t`BsVXm*%OTPLXR>h$Qmke8o88IxQ@1pOP{Q%11K6+sM{++pEs(C~! zLVR(8oB*&1I3i z&{Io!^Muf_NdeKQ65^Y&fTk(-|0P@JuQH|B)p8_)W#+_7jsUmoMl*~*(#V_Kj$sye zr4k4gsrjr$N_paYWP{p4@G~C`mhfW(ai1rMRmH_CPOu>EME0~B2RURBps6~xWis(! zQLA8!I@}~!f?;-1nf~zVga33 z9Y(87v*KsK5isZW6uuEtW#1qBsdKm=qRAL#v?`UdXKL6#}*#1cMCuIP?CIaguO{ zux(C3FF_qo{&tO&;BgTg zZ<;S?ALK39ZT>;ABXkx+W78Wp7Qkhc};VF>fI zX`|1*2u2b7^96wZ5%eIZr>E(ux^(eZpf=K{A4+gk(<-fX<2wq-Z1H$wS#L6$`1-1}>Veg!fuZ4Wa}OwhhVvwOVk>7pt!)97 zbiD^ztV-YfbAF>yBJ%DzG18b9+?VC#(r?iu?a-MyXZny`h@(?2C9T#H+jep(8rXpw zH}z)}CE89wy$(44hVW6r%oiT`Ts?4C6d1ti zbH-2F1K2L{oT8{-Wb8a`!_(>v7ZQoZ!0h*X4zDcYJ_AtY;Uo9$nl5PGS69*{$J)5l z-$_@~$jxZwVpI2g1)+!EzKr$e9Pj$EH zfiOX~PxK_~rz>6zO~I;ZJGtKCHx&_NMeu^lE|G)Jc;6=zZnFU8*wElVgIr zMs=Ki8v;vpcwG;V9vyNz-W@#}i?Bku;1~U}jma;^J5{}~HW*CNal<&jV7|;ogqveR zU8L(RQq+=dkVA&pHccU_CD_YR6ld9OoBN1cGfZhu{BaAUbsTz2JO*8yfOE z2iYLxN#a!{k@asYlW%@6;zen<6n`7)X8`$c+@@yQrt!4KQ@_63E;da>SD}c0f1?Qh zOXqOh6gAPEolClE8+TC3YjpBDXb!99=wXxu)?!Njqu53ES`+)!f9@MT8fJ2k)P0}|8VNAwY##y6aIk8 z^K&AmxjYmKxiD?iOyAF_@Vrwi?f_hS)h{#grq!6x6`n@B=?R39wj%+;MA z>GBT_LAo@To{-OV6Nx?ntg@;qAc9XrVt>Fa?nKe2{7eln?-xybhv8G0FRqv|g`{Yl zC^Vxll@iwpo_}uV9SybYtn9iVnU@x1NCmk_4mmR-Y{1x>uva+x;1G!Veb*D3Pf8%I z7PmCm+ISHyX!%8Ht2wshZ=BM-RMpgyo2GE@^gV4K7W6uQbDv}ykP3{$^fy3z@r<=* zQ3^#m@RiGeocX7T;@8#Y>@lpe3xjpj?}%7pt`I$3>EMhJUM6%u(Bm;ZE1x37heyi! zFj*0GXz{p?7>0k)P_*0s^>B(xQb@lbeV5qU*OvjVzPfiiW%Az6pO(;W+P;kalo^3$ z2WmdQ`Kf+Z(SmU(2ldIUEqyT2MX(shd|EO!zqGWEA3&#e$X9z?-$`W8()cSS&#C-V zv`rMDs`~L;>AQ4H_`6xgT~n z=}n^!^)|E0XlrSmkXAhMQsg=ziN?fQJI3pdhIK;0z#JI?K|ucDpT6m%<*}EzJAKpi zJ^z`7(g>zlQG>MBgC_f~?V8%!H}_%(LKW?&b89-Fl>ee!qM;2Y$+@7Ej}Y1aveve- z=Bt~qDUU-%vfI5I(L!*drbzf6uBbz~cJ8Ad;V0D3v-pp?w7a{H17D}s5kMs1eBae2 zcSOTPCl^J68X5@Xp^gNLx2n&(qgOg?jy()d)Ph(fk6Bq>zI^ScKWfTBk?dO`%W@ST_nGPp!NO6pw`I^<2UWUU;Gr%W>q{e&)IA@<2S^p>^S-9;#==uX#$> zv}1yaxjA=`krrw`S5g3QXXEMa}a0|kdE#RK*vaU`4Su+2x}sn7pVhA5(rWA?e=Wr_17(6PmNZ3&ypVMffp;8rO{Tf#(-CeE z_AgZazC1-N-B%J>nauR_!s?YNO$bfcJa#~hXpC(i zXWh{PJRgtUidC05UVOeyK#nF<;m^Hjs?G})1uhMQn&d5Cglv}pMsh< zn#KkmeGn1F{TbM1ceRwY7EJ+*ow$`K%B6hl1fw;?+7`yJ6KJP00I;i~x6>~Vyt>pG zh5abUd7Mm2N84n`?qb(&1Is-+E6bg zBssov07jh_x!G-k)O&Phx|lV&CIdZ|5N;Z{PY<3%QWM2<<<*L|V%6JGAvD5pcLRe! zvn^YSN}QcE>K;!N)zU@yH$pffqt;#&Mch^^cqbo6dbUl)-I@83hg|uYM2=0_@OE9% zdLT}Lky0{mI*O=HbzgBW8C9QVhinvmlfIP~Yg`e1S~&@^jPlERU9e6K%R`f`MDH1% z-YCqrRvPjfkmx?i=t^;%9v|yLd3X(o>)lamOhK!qH0?C0IPcsRhf_TbHIU6m;uUOB zDS;gIQO;g`csc7ZM2QMbjlGGRiA#ah)64i<2+61Xa9tlt$tk}1;ga{cWhmu2=br&4{Ps>+CCOV0_k2vg&5+etr1an<2B>bZjYF zWHWU(a#dZULZIJ&;t=eg6N3wbSQfJd~b;Sp=FtVCel>ab+isbx=mW)p`U8{t}%ENZ~MWvvm^uk z8Yv{*Ff!f`UPKZm(Hu4@r@eoFN(v@J+du{_x9EI!^peSY0+nBdUb?{jH6|(c*}%#y zsZ7WTW{Eh!Vy?0nmP&Y?di=S(yD8OmW%y}ued5%fkPPEej8I4X!6PA2kIijZLu)H5 z4dtieXK*3{-6U-C$&3{KF~K#=ft=>H;^Gf^i-nhtVJI^{^R4bRrD&fIZO92-*Eddt zl5pw2c-Z14Z<){4JRJ@TT-<~(S&z{XhF@%$2wNTF~GDW)oj--@c1KN z0MeMLrY6CR$6D-%5VoM{`Ov$-FjK4MeJUCF5GMF7{PLW_!a{Hm4DK}6EZUs;!us^l zdnos`m{zSwXJ!GKW-LXqby3}a4`e_VEkV?efJ(+xf-oX4JLPAYN!QH%X-k4U#dENXKwH|axb+l&xrkkkU9j z^cgLv%+;{kBNlLQhJk(dB)t3ulC`-xd4loMkGbz!a#V6)?3yDo0u*K4(J*vY#VoJF~Exq|Kmykqr|ioKDb z=HI?Czl*CYzjixID&j7em5QQdBTX^|WCcD}lDo(I5<_XoaqZaWr?In%-332hvgK<8 z6v5I51bi(Zdbk>){umlbpow0Ib6wi>ClJyN2%WQo6fSl$20HKvJZ; zy9DV@0i{DgI+X72mhPN)&;5U%=fnHW!vmO^YxcFTwa;~~-W(`6OK(ofLCMDE(zOT|_kFsny{#_sY0mjfWk@QpR|aF~s*W`9kt z{L+&+aQk~pHclQ3xHAC7TeO$Wl;h(?k_80Kq8!0mgV;uw^2YK_gFShDxQS@aqKpZK zk7&3E*$vEti+82PF@?zkIR&RVpZkTC?GnX~eYLycto0jZ(d6{7FFqOtT~#c7G!8}1Y@{(OcYLf9 zwxL1u)Z-<5(^;cv5*5aZcpwY$TSNo2TNYn-n%x;~M8(p~0QtCMM0m2EpE?8VYcg+| z5K+3oFbQ7zu98$s$pF}A_hzGP{8%LP0CHO^A#1SsvMC0h0EXO_O(+%b>~IeUnF}1x z)8w8?{5Vj8yOvtJIZ=B0Bn@y3IbN{u@aO>Kwg>;=AWF>9hT-#D7;-z~?VxT!+IQB7 zuByb8SeZ!`qZ3md4aG|7VX+yCZ9&nT;s}`q-&73)?Z=lM>q`l~?k*fSaz1}iIRa|G z&-Unc_GBKONrlS4u0FyG3NP2#kXeVHPPL``4e3BVKY06E5`3C9InF`$#eTY>2)G!S=fpjkn+Vp!6OjU8H|i90ViKJF1f6Oi-GsAy)(z%PMg31NI*6I~;h zRsKBb@z+{of>Tz;#WA81L3!>~Q%7EXCN0&NzlOq00n$t{Qi|IKYJS}{e~Q`W=(oUV zMGiMx3}`V5?}v1syUluBF?Gh~g*SgS`S)Nz!_GPSlvZTC>r8?Ce@!jqjjuy1EMsZDhgKF( zRxiqgHJSwf`|iSQj!9(~5uVd^X$!bJ+(8VB@$iI5Zr`&envl2*8slq~cTL}7{V;4? z97$E{zDN8SNveKIETnKyyWgb94)UkV%oqOJ$Iyjsq;i zb#(-^DdjI0iGIIN12p_9#ukN~FX6OX49l9e@ieo_jt_-`Hm(#8WmzRB$pW!sGx#1zs+U~ACI%7d+WL@E8|LLz5=d&^t_ zHj*(iW5)&-L5S%hoCZeL1D8KPci2=0ch?8>XZ)g7?DKtjGemBrGW}T--;MdqNneiB zo}K@82;2@OU&G1nEw$i60Xu`NHp>(rpVwtDQ5ISQsMi0h>bFLomY~K#4Thl1N9U4! zh2F)4%mA~=^yKJxUfN8d-MQX$F;{`Y}E2jK@1CH?#B-BqN49I71=H$l}auM1$)r^;^KE*_9YJ#V4tu8Pmk)B z7K2xvApEWUqL6bAZCh8)TIMjBwM%WZDPLbC1@Z2?wCP4~U>fJCA?rKwEVeu(ly{>Z zr#(bn(YdRDXd?(*$dm612S7s4{Q>7)q@07?ER3Jvuuy{Q!FE9-7`|L(ph8KqM^t2_cUZ?BmTvF4&SBwJ%HA> z=qUnd?JcP+Yx?#lp9(_;pSLzMaH0y0KmLUFww(>KipqPqmzmj?u}=E`i)eg(QsXL! zMpXKJokDP2gP~H^ry;JG=27M0Lg_nhU{E&MQMM$}x7V-EHV4-_%d4swzeC8;BA&UG zGU37d>>ybuaz3BImKT`=%#p^GrDBPrK%ddU*T9NI>d8Fr>#boYxkG^;X_(pzyzB zcXd$a#JRFWNg{ync1Ue}t&hO3y`y$(@g)w z@a_^(h+`~Hy>n0<6zTg~96dQiSr|1~>{rDuWV+6=UW(WB_eu!|X>C<&8WPv|H@&6w zhvgEOOp2rqk5VSJiBaWS)2Ds^K>W5WV_-$9AkzB$f2KAK(2sSNce5R!0 z^+la-xfgw$@Qs@WO_5dO7#g>`O~SJ-^w(v7LWLaitn=p&Vl893jS2ocfRuc1c06^U z`pj)fiDncpqz#hmElpkwjxwHpZ&Gr)0a7f%-n+PWZ_N64N(1_|_pkQLtK=xOq9Y0| z2MfOh93kku#CJoh5Ba<$gViZD?LtQEG9q#wRkJki@I2~euq}to=D=TBRm6dqf)>mZ zMIFVtaPYL7tAxzD8UcTD$bVwkSY$f)?yG*{yzR4G%vw!vwD1(A-r24x0*bdWNGPLS zk{0YqAix0}jlMmIoiY=hxlOQPAFF)Zk=cJ`0}mz()NC6yzv0V|;*kG)e}tfd?u#kY z5PFM;1BPeb$TFk(enku} zw)H>%%}{osy5|uLBFrU}7Oqz#QO|tVd9EA{xlBlWdFdQiFQS7HZE63Njbl+lWIb5lyA*UKyzoPazkgoH74Qzc z-4=|Gy6%qq2dFgt5SQo(cy`X=*gTMz)nmNm83uF^LEL^hj$;oa+3B4NPQ+VogL!xs~-RxovRyT~5N2US5@Es-e zrmBlQpRAF+X+$%~){zgvoKY!)E?3obG8#TmzbZ**=3Cx8Kxl_00*vsW_=*O|vq;1x zexC~?Z9n}-+FnTLlgWC1QD6qh**wfsR}VZkNhsH(>iOVQ*EQ>M&JOvv7=d&5YUW$? z2iq=q5t{!gQISP5`+oz2#!PHrUgn1l%Fy;!U>|`HsNE&~@i-T^1kh&$aOkMRwg*Eu zkSXQTH<8ZZU+4y4+vj>?*T`woc}TZdO!NGf&>VTJ%FElQ5(ZuFit~LF)L9RVj`WgV z^t+sa&l2V>RqqZPfm{IojyF%YHV3VI%)|Ul8=<`++UY-xS9d*mvXNYyNN1WaY!2>? z6`so;Wp4!hdngsWY(LFj18*dGQs+0>9dH!1pCwlXk+x#z9~XG@IXit?C0%R1UPd#2 z&i9-anRQ&X$qJ7H*hF0-KB1-vGCh0k+`mpU zEuwOM8hrb#@P{HIp~-=#sd9ocs>@fY1Cc&NeXJby86a?Vk+=E~bYfsBUAIcl%0!z& z#OkCgc0^^OF8I#LDx#_$u_h9|5DRh(8;#Y^RQ*RsG6c`T+~AwRa1SLq_{`k|8h8?; zuOE@Kqg=7AnVX(Ht7s)U0`s7|I2Wi?W(ACCJG-{?^H5|_Es9fuxRA*>X__`>z+nhX zR+TU@YH=r}1i?ur9L#q+BzcB+7noqel&e6?*uX{3BhMX^_#>3@4z(W+4{|TGo-Wlc zVYXL=W*F7GV|M`xQt@w1N-P^gm!C17d3%I%p_|WYYI6r1MP108lRdbFBqDB*%O(@>;=1$35!P8VdiIENp{&+8Vc;(CKEFL-{h^M-F*~Uk0czHMy>}W7*!Q zZeV>~{Hlk%2%$hf7k``(SLGW)42X=F>YIL2KL;PA_XWIt8=|S}FlwB+i}sb+>F{+Y z4C+zXSfG)~?BRT3teW>ROy=QXY?te0W}_Q&4=_1N3}pyn93FB88Fal!(mT$xD6y0E zHx<)arUs{Xrg1$3Lp@2tI}B-ULi;vYwh8hD+c5v%*9J0!m*dn$_QRB#NMQ`S$I%_y zQmLKb^KzBAUyQ9hu3=?k{U1%%b#QBB`Wu=MDCKBIYrKx85}0AVOq>$-Z!mf;en1{d z^D=_ELB_#Ot1=726P03tPbEStftuJRq1F}~tO0X*|An)(IFm`=eL<~N8l6$y=i;ndAnO#$bLg11o>1qqFC{rourH$Xje z|1maX*?lJy6eoBN>XU?L#ca7u zvbUAClXFWLV+N6!rmf-F-Mczm_?d>1Uk2%qSGk=R2YH0CKDeR8|2l&_0}u7|mxs&mObuu@j+^0%ny0xb@%iGY zCc^5r4N5`?_bRYn-(6Z7fiLET6n|?dxShaj$8lF)W6CNkN2a?L#R13JBdLHv^sXY!F=PDMpUO-9#h#f)60Cnrlny=6_z@Feumxm=e?w#tmJz7 zz8Z6*n6KLPQZS3dzA)3}KV6ZwXfhNI znqao3Nhl&Q<@f%U#4rIlYoJ%mcIa$|3&@$dxw&hAE)Awrs6PM({R1!vG`Fn=4-XF` zQG9s^<|#UGvip3sf#|E;UC<(K>w4N7NDWpd~tPdfC`E^oN{XwCrAnysa*81&(MF%CiCBw5cGCBe&y4fnV4%j62r#upTEORPKg zPR|Rr(TF%E@oJrrogNFUco@~qW?lCunPs;nF%W_z>S%hmiXKX%$|0~|B+0db^A|X{ z!l)oStp%|CX&y5kmtU)fU3jX*a}b{bb3gs6Q;|}~*h~i76^j$l4I{!=d0cMloZdZr z`1n4XDj$e)k)Ba`WnhBm7s$8kI;68oOY;T80%i&2t}e9lnyhpGWUBvEl)CSY)4S>3 z46R{XZjj1R*l?OudPweUzpb_y0J9A4UfYVdz}D;$AXiY!f~Ma0AZrsoMtuUjfz?gm z&H%P0V66K{rkrZQ+5X^^3fu%o`yf`9QozB_VZN*Gw}rEhJd9*&H#a^Wz$`!3{YRSF zb07oZ2lx!x51Wh~x!&iICJzDQp!w5oJI6z@`IBjjJMd0J8aIb%oTNdF>m63v1;88M zk&yQtGnF0Mpk3gGPCN%J%9KCaIXsmOr31i0ngp3NzkmYkO_(L8b^WImpY`r=E?Fvf z8Th#bW5&ot1(BUFTS}iBQCd1 zwDi0ea!5@t0g4-hH0P)G(2h(Lg(%5F26`-|xEN^Q+Q=>m1UdH^yA@p>udGZ?$~ZT^ z%P@Jnid{HUWO{)@cqecA!)9!}v6-={wP_$;=Li*HxakQf^S;Dvb8q#vH2Zo}^d{LD zv6((*8mz4rZhB^kLnJS*kRTi6x1J z7h8FP7$`z@$y>^zu(O2q7Qa3b-9LW>k_-y>&3G=B6Bb#w(nLIW!1W=n9W`M&#ySU6 zW$T)Z4n*ada*)n3kv}>at3Z6n$gv4?yI+5yQwgsNVbZkqY&gR}cxu8GRJd=D>{j z@K4gcbO#_e+^MMkQqL<(12J3L5A%Xm@qNjQOfvgEhu(Wo?U&StxKq5p@!TDyZWqhI z92Pbwc>GPBB;}U7EwkP90C|4YxDn$32GKP@70VX1J;Yk zywX_hUYXr;z(SJuv30SskrmBH3g}LRJX8JWJV?)|&2he3{ z?ZL>JmMER>G0I8GkE~r+9g2e7C$?wt!}`SnsJcogb{rJ5#Bdhcv_i89n>j3|@*j=s zT3e06?}IW(NlBO3UUH{l&jL7Ga=c6RUXk!%Cs<#TFBkq1XaNYbn{w8=m5}VYj>|iF zd3iGtM&lvU&GPT8nU(b3|^+XB{FA zR&&=$&e%K`nRPk)(_Z`Iij8t%xsnAW5LqvEnM=}m?%)1?r+zzk4HB4*YyxAe*)?(m z!@|eEoEPjG_Q=`0`ejS8op+}&$9b!+@#rWO*WO9mo3>FTd1eM-o#&R80-UKDuV7|o zCV2j~fIow8bht7Enk7?c=(K9F>SHTDH-E&J$)Dc62jzo~0KncTx7Re+{}-bpcNrLL zEZhm>59VX1{#Td>Xn39vH3Ug+^yZl`n+&=*tZCcdt^NM+Y3mQ^bNc;0n`;vFdBsya zt1*t8G8{d~Z7zP;PENq0`tCdee1vI=acwb4B?D&l;O7@+IyfJ4u^1LV9kuaP;vtWM zF~81e(nz&RWAvGZB2Y63I;={71^MtR@m*&S3Ye>=d*<2nvXlIg-VQM}{<(7zECc~i zqJ85v^F2yiowhc(tkBVq-mr(;8;Wb3fBpIu++EhrV|5>;jrFhxfzhu&6leMfEQ<8B zG;Hl4+`|~(C+VdNM?93-NHW$oUkx)iw+86@>XGmMf)lCW=R4kY3vb%-mci}Z{aH853Kvn4z+x^Sfbx39#; z=90l&w+qoo2Z_jfuW7_+f=MAV)GD5Mska2{G43=6!v`7{&a&sm5Er!#ddS!lV1Pn* zZ)rc)$w8762k+D^{)M-g-8|pfPC?Eva$Ki90eyZUd17+YOk8CMad{9qw~Ei4DUf|gA1s{j+7~z!>Z|8o?Hq1^{u^g`(I^)MDDr( zOk&~BY+G8=ch3YFRCvK@$ot!oU^S6AQph)dfr%VV(2aFSd?|OSWx$)a&+bxbeuPv} z&_D6YjmV8wk3~Ixk+eB}lUFkGc8_U^A}wk1=P8O33Jvxsy#HEE+v@gCTY_d$@>Q5- z@~9z226Lr45)tuUDb_XJD?yupS!S(EnV!bzM^w6X%V7plx%M&7eU-sH8G^y0nx$GY z$TN@Fhb59X1(Nl%Iyf;&Vyqi@JPsBTgt>V@ooIszAg9Z+Y$~8^VtfbM(EfgTz|7Eq1*Y!*-h^y z@m@TZ6X@Ii=ID(9`pcY@!Ot!4pK5gM=Q2P4y#5WCF;v6|lgsGNQ<~Gw9FuV#cRL)I z#UY`ApmX+sDw|o_6#H)lJp&;>He=oPyk1=oGB=7kQ2VkflsCHC9x309xzm87nUFS* zmH-(DwVXvbjjR?rAq%&owjsY$2WeHrVDDfb&xBmImo0Y9d$^(CebyIq%aub9mb~aR zmk9NAbZnbcfvXz_n_8w{SmR&MU3R`Xo#r+Iq=@Juav13^v8Y#zR?R-RMy3`U;6luF zeUrONwbMZ?)G9>|I1*1d-+i>uBr~)q)*~;WNJh{1urvY%*T{0zE#V2TWunr)9*=8L zk-e@}_Sd%i%Ve@Ih7Qwi`tn=yQ#m1%+B+N|C>>+w)(n;rNS3hld`rq1GDEPf1OZ5& zLhK@$sQ12NG7dO{fAwC;_0EK`M%gyTt=kd1Sd!fKiRbe$_ZLGK8D(7^;=i{2{Hgi= z^hXslxr=s-%Z_FFkCXdQrNOG;m2VO}IslKZC6b!BG?; zw@nrG@djI^7V@OL};$r4&S zMF<_5fY!rI)mk+95UZ@d?-i1v_dB54105^3MkA^ikaSnb={+#{YraFO$|D7e2zPI_ z{7#^8^cV?jRNW$OA?)9R=G*}rF-oLF?~f=a0j6FjD0}#6Kj{b-f*}@?`2`c?SO2dK zr~VbX0G9dR;u3K9ozf=Z&b!jiuHJG6KTwuMf1hID6T=v zOG5*gA|P^G8uvgZ36?bfO@;J%1dFUU@apQSw^y$7f{{$X;T@<06j)l4dbvmLZL;~W zt~h?;?ttg03tAc68c4$KC^ zV2rSpFnU!DODrv$=lvi!In`-M(kQS;v|Ekk)n1n#Hy>1v_*~W86%cwpfIZ&ic2IAz zFT1-Yg->!Gq5rG?p0jUPiHuU=d_1iPx1!2ZfJu#9*B5QZJ*P@al>A(UZyjn@D56Tw{Nl@vmxZDu-R{rS_7xqq0VBV&@Fvn&QyP~_E@+ITApo)nNYewmh_cco3tY3+eJ{bM%t6}b(Qeha6-%W zSDfPYWj9mP0e1w8TWxgXEYsfr<>lfql2$*j@ModEJd!e8b=m~&v%u&0|kx;NE9 zcy;L23R|+$)Av_KNKuORuaR&V4SEAX!du12xfHyb2{=L!$d$U(!KC&w`Y~kHU)SKA z<37oPX;vJLxSA`edxn&p@g3w4_MERNiiv2wW5`!3nFVulEiw$9{C-?&?OHfEih$)gcER`YV4c#{Or6Ph2#pyrkkWfr=8p=xo#$X%h(8`1AI^cv{ zEqvm1Gkg_ADra}7s@v|x;r2n3+)%*ETv|GiG@EXn35TVZh?%P*`jay=v`71P;cZ1`%bv%g%~Iczlt(fYR+rwSCm|=vA}+Fqm+)r(&B^1V z^MO8I6U21guFpG+5W0{*UjuS)9g4y&Xk6ljMj%IZgYICF$6CFq4sPLiSlY^Mro4&A zUZ`o%7+QU?v9_d4C)0*p?#zcla_>)YB9SKwI{pN_Aq23aLX~ogc}{vDT7LEKA~DFX z20VMc7n8*;Ey9PqI$b3QHp+T-w~N$rykpnB4%(=J@J+$D9vYSR9Y364zPE?lb3k6j zf&EUXzV&b)7fT!v9)@UR|K4IjsgJ9iK?kXKG~wmenK(4PuugC2zfepZrYYkl4|;Ui z#IvsQP+0l)DiAXBA%+#Lw?$cRQ{m6gp9vc{*j`P){na6}{3{09Sz6`kHR*6T73tR* z3!E9rU&SsbwLKPO2u3w&T3AceMc$kf!@3Yfk|dzMs?Jw@ zAy<32Zo6*fbEj`BEQIMM^JH@^=zgQhclvB>nC}6jgnMx}I1l(Z?tsJ|Kd1_{!!a}eyWtu(I-3*@qw#H6>&$gR=bw-yIXHq!P@OI)mu`aVNL!ci zw2znC5)gZN`5p=mX6GP$wx1X~^kEfAT)`G|NT!NO%M0Rfd7aX8N1Pt3UfSRmZy-lOZmv!QfUaGSeZ!6TNek@E;!mKm_z3 z`et>MoF+t`JN2%;IT{S@2Lr3Y?eQYIWbwbLBV07H`{`bECxWQ9iWTV7H8@0&*_%YZ z7H~9aacI;pQ}qwaFVNrL1pBHxVe#YQj+onKe|&cxLjSMUR`P|F)_B#>`x;i5#s`ug ziP~>^9EAPE)=EBk9~gjT3JFvL=6Dv}>m;=Kpjm62WROO5d$m3AF1pJBL>>Iy00Wr% z;F&QW6kmym2)c7XnR!8NP9=E(n+gQ9EW8g^V?^8~P22P(y+R{>!L&T#)I~_;)i+)Y zREv#Y8|$4Kp=^2FfkISOm6m|HDd9Zci**{z=|!!2K`V{SW!2;(*N8}Uza=XmA`qYTE|qKn#_YALIyxUUMI4tN+E@`>FwpNv{#%H0`j~C|ZKrVH4g8{G ztq%1|9z-x7AN=zfPxgCe;c=C1nUbdI8jJ>QiD{g-PSb|ix=zL!FrrQf@jAa7!qYvM zV+pUh^!&SU2aqqI`0f7Raw|+;Q{%nG=z`EG0i|CTns3#-%k?wl+UsdRUY}J}mPc24|Ce-}gf z=_@~IQ^zOL{HhOA8xX{)H>DU;aWRMw+n)Q$7hmSIlg0?>5dL9AT1WSd5VknmO#yJD zZ6B}`k;qPrIw}S*7+~~&Y`X3XY z+I;gyfkug>%kA){3b4;80U(*d}5e zP=5Kr*Tw|yC03?hoXCx(q(_18e^b`6h4uf#mBGkihLVdb`lY1xPpy2#pp8CZ0wepdOa`3lgb zVgxFUTbrAjZb4%Nl-7&2)`=JMp$y+a6GT~?kB`rSO*k#Fva<4~6PL?rvmdlWb`!00 zlCaMp&cB41}%JApc zn_%>$%2Er{Yb#kVfG(RXlI3TL>idH%MSp{N(Owo-rx&HSpz(e=TS69KD9)VrcOVh+ z8R(u$@pE)9sViE`NL42|uHg=fk89Y==mxlCU6BVQOcVCr6uO-vgwgHrRZ$5I{!b^N z^@$u;_$%*SIauz}Bd;KgCS-{5Ob?-Cre<|J#ycmhx6uKxvHhSDoQK3Xmz{?xKBN|7Q&x3A*X@7&Y() zWjjDj=m1Bdnn*@gkM08s;=$Q{{C6K=8G1dUALzG8;rQ6Z^_RLWLxON_O- zq46+2`!`>Az$kvJ=wLrwMEI1ueE3jN2GUXg_(Zw#M*vQidsgkbKbI)j!0|ToC zx*4A!{ym}qX=qJ(*Z+38#f{Sxm42jud??@onPZ=r^1+JJ*ND=IJBnQRtCKZmt3MfD z5&PlcVVlY|*<57y^RB<(fum`G>+G!txCSIyfP^Xab7JnGHy7YNUh(tC3%1q*;MIGz z{11Oq*BI=gbifH|exJyN1D`{nf?+o+tqK2!WaG`^{0cb#(8D)B@f{SKZ}9r1%|C~K z-_*H!wB9)tSa5Ei%OVQcCL-Uo7QvG_u(tGOZ>~U-FZxAUE14R@V5q8PJJls)LaIlJLj`_hF^PGNS zJ_yJFPP+(NJ~wNjhI+V;m2!7M<&g+VduksozQDb*HZO3z+}FMMweL$bwS*gQKJ4wq zEoHXIkCSqYPP3khx9KMw@iED~X+?*=LYbndpN`!-ZFOPDwTPc7g%3m*BIji_1Gh^U9E)dlui@ ztF*q*bvnhm(e6aHidFmaj`}?VI;*Vo#vSsoJ9P@uOzb}b3N~0TCb!@D&5Oy`JQYLT zWRPAfu@9jiKJ0om!}BxpjAXu$8$9 zb^W{UNa6d4zI{pjl927-^$CXOK_pkD2^Yp*j_&ryP9yzr=L7D93Jlk@pc>5ZP<#I% zi$;Mqo9v6Sj$Y$;O4X?15hjkY3FcI#iy55UN1OY*rpetFbN_fQHaY^$Wv8QO=*vZT zqO~2vw!}85^n^g>3#onyZmXokmCwt$tB5tGPO@g`uaWbcM0K(7N056UJD$ml)S0F~ zrs=-=LGI=v>e$e|zrU|ZI zQ&q&79P5dy7Q_chO=F}-s_lBaVr@4NTPBH7THO3f)4`vVqDIqba2qHyf->h=@40__ zIb|WbP4jt6Mh$=Jp42_o#M{S{E8H+4AnR<(!RKJ%U`Jj5$5gF;AdJHjGMCHsRumN3 z``G}v!{yiW2tRHvVi1>b0wYGdR)4^S(gkopQbbm#PQwtuFmV*JJxE z%94Hl^66blxr47D~)fe*72(C6vHW>Dg@PS z?@mhHc~{N|7wB#AQi`$RnLCO{z~z#}djFd-A&|vky&EM(i#y5z)q?6{KBYPIB)@3; zAUYQM?xR7Y^+l&{zvu{ihb*NW@l1egshh|h<6!StH&7dv-q1`G}pstK(gp8f%6>*bKUF5 z{>!v0B)m0-hbD$fEkocZNDx^^X*oV+N`b6m^H_e#;VEf)4HY2%K2fDmNL1ZeXPc$q z6_vxVNrvp>(qS;^HC3jo&ne3d44sLbG2n$nuNR#`-s<`+aDiERMt~xc3y?+Yki{eJ zlpmYkf5(&TBVv2wHy0Tq#O&g5GnmY(X;<+Wv_)}*oJ!G1HL4Y$?`<$&p$l>SPAE22 zR;J%$4H|y>v+CcH5bKhUsSBDaDu#w~DTQ2+`Ayoqn#5mN*?lbQ;EHSA2h`Ny%?(yc zq7JDU{ed~O09uDL)j*XN-QC(hxlNIvl}Zz1#gs>Oq_8HnYEA8^tF9Lzm(p)D>|SKJ z+F|^P8yPfb=5*tp`vdt3)Vb|@-<+6#lQkFo8lgYo{u#IzO<@vdYmfO$#wI0>m+PuG z`dY^8qiEEAaEBkYWRE0W7ihm*_<)@ul=PWBy?r-qh8bPqlzV_H%2av8W7qUY+L+X) zlLNIp;Tk3uanD_R99+nG_wQCUFJmeA=tt6TPT_$Zyb1y)`BB)LDv|(Zygm!=0v4XJ zyQ9Pw`1a=Ekz+tS&9H>a*_DkX?CGQH;tFA}tK)yOtNRJ$8H4kV^qXSU^m@Sh>K1ev zzfq$`wwm${ufBKv+0^vy)DHmw-m`?=?6b32_!ls*Jz{A4<5V{DQZlxZX+)@AP1*rI zOO%#{)YHn{bOX&dm2W)3+|031AMi4Wg*g1aH(w@9Y9CEt=h_g>IapSZylU)13YbcP z$gU1fvC5{xJXu^eaVetyyN|3LP->ZN>nR{w>zp{pzDRiyzs6cUZ4K6OZle)({9`cGR_f_A_A-x)78>@M6U=Y%8vbo2&yZ_xY1@C9d zUwWg6y?t)dFs{S|RkB0`7hj_1CouKvbF8Wh*kT&mw@n>DB~g%nD3`x&3P;8TRF&zT z;#_lCI_W{JU#J9?Jofw2jooc4C@BK#X0t`>67~vq;_U&=hqaFE%Ag6<*@2 zN;)1BmQc_KcxhN&1sZiHigocL!O!oENAbmp49KG%$dMxVIsl8ii z^9Fhfy)TRUYp}{_R1!gVk^ccC=S_Jk`>R}k zm-?MOA9}tSQxKYv$~Lg3nHJ=~f0JVRFAS$2uQRCAhTb4tGej>!Chilu9lU<9CLaF$ z78UCzF6rB^wrOr?TM{DMBCa_M^U0#RQjXqgO;!r#85*hMnXk~xYC*RV9+Y3Ms$V0c zK;E|O*?^yy7*P5*g<ksz^u;_}bS#`+2E?I3LQ>ggnJ9a3^Mo4U=}nezjsk8qBYS z@`P`vJbp`*IVOyk`q_BdVns1S=AM&qH0ICM6;2@!OfZ#MGTeO6&q3;&swG(jjE4Rv*}Y9t%_urp?8d9K9W;X7CP^Cu2%Yg?NSh>iG%YOXC2Hul!N zd==Y)@YSN*iZ`f3a$I&Aht-cg8yqURO6byuTjjDV1gJXEqH&d#9N%4QL@~NbKHJ!Yta$9Ae^gaf z1xgZHU_-sIC%M1<(PK<+9~8bHJY5o)r=m*SA4q*?>$f;NkzuMuwPL2zZSV2Ie_Ifu z>Ff|JAQB(fSrRrkfFE!<8XeIEyWa&j;|$R)y_6g>NetJDhC4%A%73{dr8yv4+h1ml(az|~m${KIDspgxgrOnTeShlMGI{|Ho1 zrt5<;WSF>6UVeX34EkI^QF~s>+^f&=CjS~}=D_H|=gIYH`PYBiWzb{nQnHE_vx6$< zj{y!(R15p9>kTM!(SRBoD1Ye zXysL`U4`K^EPEVWw?iL+wjR3hZ1)(PIC;@+E+M{Cnw6m_Q1Cu<@eEsT4yvl|!CPQ< z%r>%t^yZA#PNRXoF>{fk`7DwPK;Qf?`W`E5b0PVrB7z3wJes51CZv_ z*PSd+`Y1CFYy%DY`ALCEyd>=0Lp5AzS~19#hD{0WYLCncz0AHS?I1naN;D1PW|Q0FQ|FY6IW`{U z^Xs(}qeH8ySDws^7aqSc*iXO^Ro*sJwfHZ7KE5A{jQL~w`Uw=Dm)U6!4w}1VSbD)~ zSMe8njBQki@zXI~&U*_~1n#pC z&GOWgEV?f-N=9(H!Z35ng9b*^)&{3}YzW~OknN;gI1Uaxb>Bj3vI4;XKuFNqS$@es z69mzxmK9+9g3T>5eQHgA*t$kNddoWki$`dDu zVD!P3s+XC{sowM29^QUiW`fPJn9yD=q?<#!(?_Jpah>dLmB;;T6I6xPFEZML9(6aY z&3#hjYUA6_P~HR4GUs|U6fsJXuDWa4j^XyH0Hwhizw{x&8m;3}>LNb7{cH()G!kE4*&ms{Q7!1%6 zi&dtjV3Ug`DGbF07blDaD52OAcsN$IvqL4IA~9ryLFGKmV*}A(o5ntK^p842Gp=b- zaxXi4Q@`Ux*w1|WA1f|RA>GN^mJf*tR_Ap553>+}0voiDWa?Zue6kca)sdj{asI(z zHmpuLF^UWS>Iq3J+4Iw&$8&3q5mFOf*w>RrQ?cb_GzV^FIQam7zW`vdt^=B8e>|=2 z_U(8dSJaxEq_F|u#72D;|D|TaVz$`^av4z7QD57U^`o*p{=b>mQf=#1Al3j;KXpQ( zIO|no8ED23ApRVs)n>IKcKoh;}-CuyDjSI(Ilc`psguo@#S<>;}4Cl_7Il z&WbxpmdaSs+UApgw7;O_=Qr+Q$g8NNBgM?IRytM5hDUmIg19o+0e zAZO)RzWfAPjNPYCGm}b+0%M(_cmpfkH^;6ucX;`uRMtjQHch3>{E=BmPUtLpM+vm412c^RzM1 z&in~HDyjds=E_k1<9;v+@Dm(dLLY*!v7R<9^sZYdO`34!bj4q-xJ)eJ^$s;2FQ2+C z{+2LI17brCJ zB$#w-^m00V;bjHdE00@7S8bo`1NB8A8~inI&f_N#L-4Uj9a@2Oup|EYoV`J2ogCVg zLg{@HFNhFBAvF4wV!)`9aWmBi-JS6fH7wpDO5u2%GI?5!`PshBb9#G|A1kzA@?}H( z(rX%D5S!s~1I5H=wH*a^W*DS)#eDpT#-cge4(+16uNPduQR=J2lYeq@3{RM%Ps1$ z&Oq$4l&g$reU8+=`$Rrqe$9`AyD=bHbSc(o*-kV36jge{?Ju!TGm$YLNiLkt^xQhsH7PBPTwa=gI z?@P50El@_NHDTe%TcU`Yr{*d9w5=WJ35Wb+zGj0pX952x7@dRDDact7rJf4r4!M_liK5pr;MCf?y}PlTWVL z3YevKPkcHJ3Q$!YB_nxn15SaLIXYzuu-G0jb2P{X+H2_fhGpBzny`Oh+5FD{#?AD9 zCirah{}g@!nU$olIuPW`;oCEI7>~#CEDp;z=8!Bmv$Vqtz{P3o>pUT58l-=UvW~qge#Re1qzuL|+tjcwJ_rz3E zqy?l)KxvSaoRoyrQfVnk=}=Nax&>+J5)llfq#Hq61VOqHq@~Z8EZ08!f6m??&WGbC zlsV_+HQ)Dro@da1xDua+q#{T|NrLJ86up0zRln z2Yv{Xwiwm4MVQ%knG;Hr>gsvEnBfb00Yz&hm7w)NuF|wyH&>7xIsz*CfZJ}au0(sg zq;fF6M}Rj17s#oWDAu@Nu)kE-)Xd6P)B8YH`}Sh*zVg0?BZwoz3#+B|KfZkfv5}5L zb_Zs8*k{1x_B~da*1fgS=XcRf?`tK|$yIF<(}fY~0Jv;JdT_km>zqhD)c_}O7R9a3 zw;tpV`A^Zl@N?HFO5N9qtzbq7#k7lvBPMSNC0 z(4xG@`* zJ;|!923cE?4wRzDx+3bG_)J0=Pc+{Qxw`08Uc^zKx}&%rlZ}&P&NaM1sn(LMeZtFByzK*;o5rZo-f?j_*d< z-3Kx=l!4gJv?twFe9J1LfmGFMtj=H7;B-)KMUkP7k4Li_q-^AlQ6VHG64y2Htbu{B z`rd(Z62*)wsXLLcB+TC3y4TLJ7NFvMhKAl2di;=R|2q((=KGGA*X956_|=HT+r<`z zwN3wM5)Kax4ok0FKART?k+A9^FdUKV>C}ZTf?c;}+c#}mSq&D8bLFwOkXjuXErBpy zs0y@PO+FKp_i2R}V<=by8B7w;%`VOSa>tfU`jXf#UTCJm?Qa&@5lw|sv3Jr%pZ)dbSOlS!PN7EkNIM0; zTU=;>4a`DUGtE=fVu?`0>WXONJRpZ@;6FQ_psktqKO9e{;f}VRo;Ae#I3kb_QLSTZ zvh$$M_soYQfUPWCRcJzk+^6JQ?#I!Gr7@bOj|a$%hsxDSgzm^;xw*J7w>iJtsVVd& zc6}FLr_UUlM)N4YkqiUj!Z_sm^ydwm6x25GTF2*A*Q7v4u!NGA3?oU9b68Go*z`^< zEVv<+{EH&L>`xc$+oEWSdn9<7CPK70+HAtdd0;tdZ<}K`tan`gA^YE)PgMBeosQgz zVQ??9CsK|JQOK&)05qiIu~a|!T(vPf=`WErd}QeX%>^nF37RCVF&Kb7)pjjZ*!1E+ z1F(wG2jtW4q~)&9cSFmHK^{-(`~F8BPoaDxjZNYT;@FM~#nor zYJf)rtK__lL`ola1!m#4d;O7t+q3U}qFRr}lpV*k#a$mR4Wp?fQCwQI=H8StQQ{BC zkiU?LRf$0s#SboVF6I4Z)`C0r#A4h2N&Az&lNnNX0q72Elp{C@OVHG(+al$z z-Q!LMh5BP&9*gM(jFl>r*0A)(t;?4#T^cQRUC1gf{(MF?%FB1ZRyl(OGtY}KbJ*&s z!6E70RHDKs1_tT%9fcZsL(uYLJ)CMVC}HW3T*cxDjW7h#EH(U%!PTv5e|0dnwO299 z7{0Hsmjq`T3;;Qj5%#1>l4z`3Utiy=hb0Ag>m$Sca|85}vkv3nS7wLqm$!}{ls&Mh ze5B0@Rd^Nolft3dlC!eTi8qQ4AKx<;H#N%1d(>M68bovr`1zERZ1OuMsI008ruhKE z^J^Uto*ezwvUleMk6_CmfM>Y)9?Tc>0%)8gDi2q{`UlS0SGr=F zRgd#ijniyew7W?1t?Kt>&cV*AH5bN;-~%4xIxFK!E*8i z5!X-6=!$Ium}CVSGuMrujd{cL0>Rs4Jn4q|8< zS^Ug|A};kkoz|5OJ_lrq7)BY}1FasyV#PgpOJQ$jv4MvlE)eHon@9?f(zskgRNt1@ zhJ_JF`y2Mw){M@F?IpYN|FAJDdD#A6T)R&)6G)#NF09Yk&E0NA&ip7e{NIiz6TkoI zc*;+$QMXu`b^1T;PRS6_pSt2D_fSfLjo`r4mE&&$=2UmLThiUplJAm2uE5Dm^dlLa zWl{_7fz%*K98jjL79i&fqAUQs3z3(zMoa4He#I%YkMyyxFZKX9e?>ZHuy<(gd6tLWQ-SjE0c94&Sac+dWGFl~H3p4nL@g}e^%+Iu=19Y>>!hyv3jnDM#!Ng_xelqb0`~JxAx}4CWx2Qs zXhcb$kas@4`@4>t*m-KmIg)qB`eBgTY;NX)m1Leg+o~H6#|uX6>Nl++ONtl3D!dhL zg;>X>Oqh0)Fl)q#C=zd)dmc-BkSVb_tYOx@Me$?NOIddzRLE^_g3C4Mznh~vSxtUv z+RgbjSA7QEXB=>ZCp(V(wB9q|jtUitImlB^1W;<;x=E)wjvmr0#NM^r=IFxqcoaP+ z?jfl|igjgl`7f+j3M|cqKXeiSqIxf6T6f{Ndo(xhFhM1~s7Q}&tRQd0$D0L<_Db4r z`d5tu4Z%W&-JvRFQakl#*Sc@x0C5GI?MqelQMb816G^qxP2-tA+-C3}coL{dHE9qO zV>$qoh!aEWcj8XJaA)B8?dwlI7UNi4s-XpcZ_gs#Swt7Il=JSb|I0ijM3XBfsrT&J zq@=c{59cvFZM>p~w@LjZbgEt0z16s5FRQxsUb3P|pi5C{?(~C*JSGc|xH@zGEov$D zl}oQ0wJ-!VGA@&2v&?j$$tI<-tEuLDd||vNR*^I1{K`M1hZYfv+z_ta3JkmwCu*b~W1mKw1xF#8veV$s`zmZmgZ~^#92_ zb@gm&Km0+~Rf&{EUK^Xf>C-1rX?dTWJe!6dgVEtYqDl|mQ=G%T0B-?%9%}ui{QwXu zOQp9m*$YnP z>5X9lQ}tnLvWmW7XmR+?6Jer3D6OyybIS%MCTQ%8K116VD&zsleGKA8W!Y&p>B21! zJvBO|>e5~uBX zic)ncdzu+ddrMTp#e3a3L(FMTan6P*<-OZa-C;lLv!9cvB`LEhQ~COq9nfc&p2>{z zevPyQ2ZOrSiCQ*MDfEPFdSXzp`hv6BmqtgfjPJNN2Jzi-9TvJNb0hr_{k}lt!R%4B zq%1jFT0&`p7PfqCzh!1H!^UYccOkk)zuY=u^+m1cK8N2dRGKt`)}(^D1ToH2y!f;7n&0T;`0KnC z1T-w@)n9xM!`4k-2j&#HlTgq!wpx?ahw-=t;dzKT&^?RM96(B^EZ*NJ1BuEU(NZ?H zOM|?;lzfN*+_7v{LizFL30l}tpNpxEB~|_aU_@4JbJD4^p=5)~E>Xz~S1c;R(&f4T z_)bNK_M8ulQopociOKY8vWW2~PFH}hd--<#tHtpG5f zCuF$)yuEHVf99eT&Zfp%zc7djUlE+qZiKr^i%>d)NcdU`%&`9#HBK_YzS9XKF^IkO z&)BTtWfUF~H#q(}3SYv!_ z>c?rm^JC!8T(v5%T}a^>VuJ*+AdS|cp`F+BCSi8)Goo7t1U)v43ogLU!KB zpCw#7B5}Wbvs^b1gB1G=byaigS+DeA-d;PDHkhNcp^!&sGtRnvl&J6V!--Pn3b|G0 z6g0-M2&jdje+1LbCrl!bL2ci_r=Mzj1&|($6*36NvaC{&DzB-jDZhKq*?D_qxY)Zy z2tP;B^41RH^~3BseNFn1I=t{MbOSe=Js9No1nh;n$Te7jGEUYkz<0<+wF|aAjqAdU zgZOB=qmB@+0|mef2h)U_^6GrG^ez&e`g@H0_&EdY4IWDvB7-eW|Hf>2J9|q-ugK}& zf6B_$&||P9wTRbb&NkyrHMK&bbmLePY4Q#UZs!lSrQhec`6BPvxK{oE&Lgd<#A7RQ zAmi~&=wgPi;jS?$;tGM*)gX;V()J59uU@$}Kp4w340I0?6OY+|i4v$cg(|Ew4DGef@g+V703`srJ5MOkS6SC0_#u<3G@Ri7}L`9{(%9x9pxci_G? z*Liq&_#25euSxAm6Y{XlG;mz?L4nO6=j)}?vL*7nbKJ&qhw2u|d(&>23qxnH;^~?# zOrUYdE`IpbrP{zCQ$dGSk-Oi&9HNN;Rg@$6cJgAk&bYu)I7L6KJT znFe%&nx;X5LzY9lO)gn?GYxtnt<3A)D{!gIr*cAdOEuc9L8Wh-5&ICv z3Lm6$-ohS*N(ToLt#)gbjP_P{qoM8x^^xB9%f33*6^sh$Q$$E}LUzBLpbHQ2T$)qt z+g@R2CS73#%DQ%Zp`IqArZCdNCwh9{+aj-?1V0s;^m>l) zNjx74slBwdvN9$)65xBDS#CXgRpA!n)P3iB7x(sUr&c`ZJlI6-%~n!{mcW4U3+X*0&yKfgQ(^j}INN ztqF)2UIL5@3e7h>gaEIM>N?P?J!{(|2jveG8*YL(H97U(CWFOG-H&z?RCF=$MT$a) z^e@*d5c$7&!0V+wyZof5w}lx z^%Q&0IuT+bZW?R?t`ZC`GHuQrg-N?}HcXoYRwOQ?(+?%*s|=#=H>1iqJXTJ45#^G$ z&Zqx-K$oB(lL`vt3~LykDG7#EhgY24fHQgI?DllxNc95SmD)hA@dA}D{s>55>`4_O z>3jnbnX?cuq#t>S{)%-X)X z=&Kj<3TE!jciniFRa_NsJ_CdbcH{3QGq7&SIch~`UisX3p)&Ltic%`(Ku335ZgwwO zZDPgw`o>^&X0Y!qV;qAyyWun3d&wOfTwHHo#B1a#Q#@P$S{820X&@Gb`Qk zw4;g9X~f~5UU1&}%vl!xc)+4^K}zaKKPC2JT!G&2)<{v5d_Ew6Y_nKoY0+&?Z>aM= z0tH9;RQu)Yhdn8BNvz;!wfW5;v`;wo$+%EMZ3nzt9CmdF3yj#JD?x$A8H{>P<(Nr% z;Hivp#wiKEewpH({ColigN>!7`k`&d-TM3TE!uYCC-bxEZho0b>yF5lc$InLFZs@dM}Iy_$yoAR?VN z1JFaAUeL2+Z=x1u-Tw4sn`fY(@AYS%oA+-M8p{}$$Cb1wjwLQ7FcQsOl}&xBGEte1 zXC??8Yg@Chi?NiIdoCpcSN|O>Q`Cv~eiObLaKmK!4_Y?n zF2K=&D>#C&YMcM0!l8|?V<0hJto06aZ@hBa@5{MU)J6}CU={iFy0wpq1ai8ysbIy@ zdZeoHLJvvK`%p|&wCN|>K?*9nXojUcq3iQ?IdShaA%8l~eszL)1uLWLg7s^?Y0M~6 zFRZm>Qf|9)p#w9)C7K|RQtdG{!=2lZ07WcclRk^L*})Y3OK8z#Dd{-Hhz}oaIM^6{-CFx&HXG@&0l>D6!em1uauv>Z*M)D!MZ~dRSp_3m#54O-|OGoDoz&R}xYKVSF(#%8)Ju z-?LzOUhzk-H_)$#d`&V_S1x#k@g1T%Qcl{_b_HYY15}sJhd`HJT5``?hifyg;ze$q z+CaF}A!CugaGELXe@E#7#uO)Q)cT|(L*r*EIOztp9=l-aQ@dzGQ8rTa=-$1=uR(~4 zEtC2xXo@|mn7GL|DJp{U+LjAVKzCFi4CA8k*u?lawcS1!c8+}}Hi=X_j%ma-uG}B? zkVv6>@816M9bZuZ8D}qQdTw*x;;z#c{FeHMA$z&zs<(+M7(5zF9A@HhdPFSk{8Zhn zUNqmy2sx`3Rj5)7dtQqFtAI-X@WbfkM4ZaeXlQ`I%pZM>U@Br`K(TX?_nUvZ6b`_a z6|-rOAR1Y}a($%p972CZ_QvXXH}RV{w3y;6dkqEgP1Or)=U?bGJxBnglXB=0lr)xI z?|UU`VD?&*og-3!H0Lj8yyFBC{QX!WjKh-+-;9=Ua?Y+K=P5!0=I_Au-q45Sku)_8 zwgWbB?A`4Yz!AmtDj*-q&CAQHt1}EON_e3;Z4c|&u|F_RFS>T-JUOx1JiQAYDtnnc z1u<~5Z|hpE!eVG&cfgt;?Iu0!R;EN!_~~!;?B zgZJrhrMOTeY%SUW)J)rfUds=66LX)Z2ZVPJ*KqO1hCvxrt$9?Whs(GWdi|+bAA7eR z0&la4i@+2!&10`h{IxSjVEUJHh>Y0*ATsTLAhM>g5F63d`Uu3APpZs|@yb+%2QXPI z#>rxYg!K-miu@{tk3cor3(q3$u^RW%o7)aww>2y%AVcLNg`M0Ha*x}e*61%s=Zv585)1G9mE#*bD`rBki@#6*&&UBP;xjJ9eU(AYzu`>VQWTA>ZZ&Ti1c9e|S zntJDTu(h}6X7S#FBw0!bf3}VP6ZvA8SmR@+By!k<8f_K6zAx}Fr+3D#?*1kf@m%tQ zEo7V`#=ArFb!OB!$J6jb4T1ts9KAXcEQ%(2zq;H0K zw?ub{xM=k%B^unV{cdaG-t=L9dl5%<;S)SE0b;>XV|*XjoEc~e9BlL2JD{sO27uMzV6Q^&Ysrzjap2!@y=oOI@3Q&Jg>-lq zgY@S|<#O;z{^~aMp)lQt^l1teqV~{2|G3w!sqm@d@xlYumbA%R`B^LoyW`8bhX|bG z1iWFXR!l3>4Px0gn_VKsWeYn9mNC}is`~a1gf;}79Ef_E0%I-o?kCHP1A+>{IWi6| zhA=Ge3oF;6URRh?$iHRx&y2?TB=lOpYD?5RKjhZwOgJ}(IQ#u_-ZNZ|01U?UyKZTM zHeVqXChc5x7_gSygwKR6IHOh~qFJ&J1$bfm( zAA5V>G8USb(TP{AqS)vPR#Z=lpWbYIoZ0a^mr%WWPn7t%h@tO^Yy7=;a6r|mz`dWL z9tmyoI1xGZpYxW$;Qy)5NapAJD{C>oX!h*-*@%+CRq+$;+S0^bV4pFeF(owG_6z`yb*CY^=O=Jhjz#5OkSeKrlMz@5At|FRJmS$z< zGMtDkPvD{vpX`|0tV#`0%fdl%aA=$-i0p4hZU9)ee)|gRl!u{5mDui!K`T`mToWHE z`Lug*fJW9)lbFOEHx4M7x1neb)7(VRkjZ}D(K1ef?>z<$^MycNc&LCtuc47qv?T|t zWT*t!hwGBsrCC{i)P-fvvgpw18@Vp9#u(}IewZ7PqE5V*5@w7~Vtx8My1v$@R-_UT znL+{pHOEi8`Q^^dTS1(xOAIMBA$|W5jgvUn0WUQEd;VV21Amk-L1?Xf;TMVlH%@wn z`a4C~6!RE-KHA@&us=NKzj|2%!#tL#O`pH~Ug=orxx)nwMx6X9ME1JK{$}yeSP&B^ zf+yltfi{)K(PlecupZ!0^23@O3AO~N6hQhRpPhaM<31kTMqoASVH7m%sDRD9>ojTt zKx|SVqKO`F!iQ84w-sXce0PhDhyk9_jr-T4Q*lT#Rt&Gbsw^&v+nuI!I%ae&+r>y|lYAPPGnd{L5dMTPF|?bU0+9Zv=4j|v9?{U7K%J7TrL5QSLiTY zo=YC)NWP;(Lv_0H&@U!B&5g>x4khQA#-ilIecdUE*|K5AmwuyQZ82gUh2sgE>< z;LD?kw>}+}^vrG7=Du*|OHAQdKJl{E-6h8Pas39y6=^}<(|#w#ByexffBfCqk1`-wTLjs zO`(?`vJJ%1rx}@i$qGw;I^IKFMw{J=l$2jOJl`mfS7}Hm2+n+nwL8L>ahB*DtQd`n zs5^$2f7UFV-7zVRT*#PexZ{RnKX@`fsp~6ty!xo7hbM;g$|UyL#zDK7=B7{O{uvKJ z(}TXS2mIsn7#V~}b?=Jlffc%6rkW7AwYTopG8l{?di6svaC1b37D>XQ&G_?T#C(R5 v%o*abd*SJ`EvI!ltKBU5>3Rt!`Qx(yYzexIwjX3@@JC5b4f#gqf&c#kZ0QWO literal 0 HcmV?d00001 diff --git a/examples/MQTTExplorer_monitor.png b/examples/MQTTExplorer_monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..f9f5b237f73fea3d0e161c2b58b56d563fbf00f2 GIT binary patch literal 44848 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

75UN2lYj*X3Wj`KhAlRv>exhPVyqNFnpU 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

tcGSy}&g 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

Mj) z>+T@=y?DPUWjf$1RYo&DyT^KyZctb(_rIcSaCo@&$IDj(rL{D8V%3Z_Y@?Ht_OOC& z%@GL-TnT>p`Za)8oMa;Ltk+!5h^vQlw%aEQj07{NHBE}ah4J#-TM_|>m4QrUMb0Te zl?AHpC?KPzAhn#U)MJoNh`gfMz0kAv&H}unCNqx6%IySkc(I zgj=o0iq|Nqs6goK^w-nYeHAx_5FT7XdF(5$y*GM|anu^jk)M19cqug2C8$2Tg+gE?E4Hn;Vu$ms)7f%=lB+c{ zGxOQ*PvP@h_RnvzklbERZk{I)kwHL1 zc>NNbq*biLYrY*0bxi`jG$rnBpmzVS{zBH9>1P09_~2R0TNl%8fPF57*>C~R?+le| z#f`P0j%SedTkMDgD-FP8_4uylu4=T#JM~P%NqI2YTEie@Elyq2%#U{2ehriq_=Rvd zW0r6xjg&ic9I5>r+O5w~}*rHClehwgsUhu+n7hk>+ zYOixMp(h-qeq>*Kq7J_&j4vQJvlIA2;Wvl^PSJ*1rh>@>97&Gr-Yu|yw#AOPLtRXW z9wvf=YymCO18H+#7X9Y^!K5=+6Ubnd@$LH9IA76B2cH}M)w-+~k&&RJ>H1^2Ol8Ur z(2jfmc9?ASKUGCSwQQmtmz2p7qtom=U=;TluF0o~2?{Ez($doGENgn0?DXzVY_%YXA<(Ordj6)X#0P5^0gUL>KempY9g>f~uFsa_!_@QWp?lic|? zAeo{?C8@uJ!9zDTNf5mljOX;0{g9B&$@|;AEhU09mvQ0!aMfrMKlDup2Mo_q2v22n zsN8**7NG)Hpnc+3hsOxJJV#pEEd%n3#w9!+tmS9kuVmn4CQ)fk9*4@9Ml-P~f0WF4 zmjvbI{0289Z=xKjheCop=q7Rtt7+|l1+A4_hYxLe805%NdPfII?!L)Se5;B&oG(A$ zyxDp2DeIpsi0eY&7znxKwD?}PAP?DgD%LeM(FET6EkYOhlBEHIXyO34p|<@5A2jQo zg)VdUKK_6;=m|62J*M@WrXYz)G5AgWuU9uv^pGgCY_BqQ`03qw*)_(%Cw@YQCC>?7 zJK@o%+Q5K|O$&yQ3(X6#eWgOPmvCqW*R+_=> zwDR*uZ=jlazi3DI|E|UE4U@+k{#T1F?*B3BFj#VO4oC)};9JwRri&hZF5z~Xgckl7 zEq>6MPyUDkIQtFi5Y_!RjlSdaB?m+c6AB`5PVLS74&g|4u{Xf0ujy`?D^&Pt?#fFGl z46!=>{uz}I(E#ZHDauqBi^1F7I!kbpMh3+K)Tqs5e9}`=4J9xbs-IXSMdO6_Xl((q ztE%`>;$_JipIs{|QJ$8M5hiRqupx#wdz}e8SIrTDYK7#`N^k|5sRc`biir>K)oB_PfC6p=+c5!pj)($ zAR<>O5WU#WN5lTw&kuOH2wVW!1p(lXPYQqd3_U+i1QoAwgn<}iKa4@A8(jD~Ib&9T z`qoJtbd`f*s$P=1$~k_}*!Xx{TpU*xUUC$y#Ro9|Nq^ow+DPKiJCSwtkw^v!`nex} znQ-OLsmpUfKA-wD__Xr;HWɂ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 literal 0 HcmV?d00001 diff --git a/monitor.cfg b/monitor.cfg index 0413f72..8e394be 100644 --- a/monitor.cfg +++ b/monitor.cfg @@ -15,40 +15,6 @@ monitor_infinite = False monitor_infinite_interval_minutes = 60 monitor_execute_commands_when_something_written_or_error = -[Domoticz] -send_to_domoticz = False -domot_url = http://192.168.0.222:8081 - -monitor_datetime = 0 -monitor_longitude = 0 -monitor_latitude = 0 -monitor_engineon = 0 -monitor_battery12v = 0 -monitor_odometer = 0 -monitor_soc = 0 -monitor_charging = 0 -monitor_plugged = 0 -monitor_address = 0 -monitor_evrange = 0 - -trip_date = 0 -trip_starttime = 0 -trip_drivetime = 0 -trip_idletime = 0 -trip_distance = 0 -trip_avgspeed = 0 -trip_maxspeed = 0 - -dailystats_date = 0 -dailystats_distance = 0 -dailystats_distance_unit = 0 -dailystats_total_consumed = 0 -dailystats_regenerated_energy = 0 -dailystats_engine_consumption = 0 -dailystats_climate_consumption = 0 -dailystats_onboard_electronics_consumption = 0 -dailystats_battery_care_consumption = 0 - [MQTT] send_to_mqtt = False mqtt_broker_hostname = localhost @@ -56,3 +22,309 @@ mqtt_broker_port = 1883 mqtt_broker_username = mqtt_broker_password = mqtt_main_topic = hyundai_kia_connect_monitor + +[Domoticz] +send_to_domoticz = False +domot_url = http://192.168.0.222:8081 + +monitor_monitor_datetime = 0 +monitor_monitor_longitude = 0 +monitor_monitor_latitude = 0 +monitor_monitor_engineon = 0 +monitor_monitor_battery12v = 0 +monitor_monitor_odometer = 0 +monitor_monitor_soc = 0 +monitor_monitor_charging = 0 +monitor_monitor_plugged = 0 +monitor_monitor_address = 0 +monitor_monitor_evrange = 0 + +monitor_tripinfo_date = 0 +monitor_tripinfo_starttime = 0 +monitor_tripinfo_drivetime = 0 +monitor_tripinfo_idletime = 0 +monitor_tripinfo_distance = 0 +monitor_tripinfo_avgspeed = 0 +monitor_tripinfo_maxspeed = 0 + +monitor_dailystats_date = 0 +monitor_dailystats_distance = 0 +monitor_dailystats_distance_unit = 0 +monitor_dailystats_total_consumed = 0 +monitor_dailystats_regenerated_energy = 0 +monitor_dailystats_engine_consumption = 0 +monitor_dailystats_climate_consumption = 0 +monitor_dailystats_onboard_electronics_consumption = 0 +monitor_dailystats_battery_care_consumption = 0 + +summary_TRIP_date = 0 +summary_TRIP_info = 0 +summary_TRIP_odometer = 0 +summary_TRIP_delta_distance = 0 +summary_TRIP_kwh_charged = 0 +summary_TRIP_kwh_discharged = 0 +summary_TRIP_distance_unit_per_kwh = 0 +summary_TRIP_kwh_per_100_distance_unit = 0 +summary_TRIP_cost = 0 +summary_TRIP_soc = 0 +summary_TRIP_soc_avg = 0 +summary_TRIP_soc_min = 0 +summary_TRIP_soc_max = 0 +summary_TRIP_battery12v = 0 +summary_TRIP_battery12v_avg = 0 +summary_TRIP_battery12v_min = 0 +summary_TRIP_battery12v_max = 0 +summary_TRIP_charging_sessions = 0 +summary_TRIP_trip_count = 0 +summary_TRIP_range = 0 +summary_TRIP_address = 0 + +summary_DAY_date = 0 +summary_DAY_info = 0 +summary_DAY_odometer = 0 +summary_DAY_delta_distance = 0 +summary_DAY_kwh_charged = 0 +summary_DAY_kwh_discharged = 0 +summary_DAY_distance_unit_per_kwh = 0 +summary_DAY_kwh_per_100_distance_unit = 0 +summary_DAY_cost = 0 +summary_DAY_soc = 0 +summary_DAY_soc_avg = 0 +summary_DAY_soc_min = 0 +summary_DAY_soc_max = 0 +summary_DAY_battery12v = 0 +summary_DAY_battery12v_avg = 0 +summary_DAY_battery12v_min = 0 +summary_DAY_battery12v_max = 0 +summary_DAY_charging_sessions = 0 +summary_DAY_trip_count = 0 +summary_DAY_range = 0 +summary_DAY_address = 0 + +summary_WEEK_date = 0 +summary_WEEK_info = 0 +summary_WEEK_odometer = 0 +summary_WEEK_delta_distance = 0 +summary_WEEK_kwh_charged = 0 +summary_WEEK_kwh_discharged = 0 +summary_WEEK_distance_unit_per_kwh = 0 +summary_WEEK_kwh_per_100_distance_unit = 0 +summary_WEEK_cost = 0 +summary_WEEK_soc = 0 +summary_WEEK_soc_avg = 0 +summary_WEEK_soc_min = 0 +summary_WEEK_soc_max = 0 +summary_WEEK_battery12v = 0 +summary_WEEK_battery12v_avg = 0 +summary_WEEK_battery12v_min = 0 +summary_WEEK_battery12v_max = 0 +summary_WEEK_charging_sessions = 0 +summary_WEEK_trip_count = 0 +summary_WEEK_range = 0 +summary_WEEK_address = 0 + +summary_MONTH_date = 0 +summary_MONTH_info = 0 +summary_MONTH_odometer = 0 +summary_MONTH_delta_distance = 0 +summary_MONTH_kwh_charged = 0 +summary_MONTH_kwh_discharged = 0 +summary_MONTH_distance_unit_per_kwh = 0 +summary_MONTH_kwh_per_100_distance_unit = 0 +summary_MONTH_cost = 0 +summary_MONTH_soc = 0 +summary_MONTH_soc_avg = 0 +summary_MONTH_soc_min = 0 +summary_MONTH_soc_max = 0 +summary_MONTH_battery12v = 0 +summary_MONTH_battery12v_avg = 0 +summary_MONTH_battery12v_min = 0 +summary_MONTH_battery12v_max = 0 +summary_MONTH_charging_sessions = 0 +summary_MONTH_trip_count = 0 +summary_MONTH_range = 0 +summary_MONTH_address = 0 + +summary_YEAR_date = 0 +summary_YEAR_info = 0 +summary_YEAR_odometer = 0 +summary_YEAR_delta_distance = 0 +summary_YEAR_kwh_charged = 0 +summary_YEAR_kwh_discharged = 0 +summary_YEAR_distance_unit_per_kwh = 0 +summary_YEAR_kwh_per_100_distance_unit = 0 +summary_YEAR_cost = 0 +summary_YEAR_soc = 0 +summary_YEAR_soc_avg = 0 +summary_YEAR_soc_min = 0 +summary_YEAR_soc_max = 0 +summary_YEAR_battery12v = 0 +summary_YEAR_battery12v_avg = 0 +summary_YEAR_battery12v_min = 0 +summary_YEAR_battery12v_max = 0 +summary_YEAR_charging_sessions = 0 +summary_YEAR_trip_count = 0 +summary_YEAR_range = 0 +summary_YEAR_address = 0 + +summary_TRIPAVG_date = 0 +summary_TRIPAVG_info = 0 +summary_TRIPAVG_odometer = 0 +summary_TRIPAVG_delta_distance = 0 +summary_TRIPAVG_kwh_charged = 0 +summary_TRIPAVG_kwh_discharged = 0 +summary_TRIPAVG_distance_unit_per_kwh = 0 +summary_TRIPAVG_kwh_per_100_distance_unit = 0 +summary_TRIPAVG_cost = 0 +summary_TRIPAVG_soc = 0 +summary_TRIPAVG_soc_avg = 0 +summary_TRIPAVG_soc_min = 0 +summary_TRIPAVG_soc_max = 0 +summary_TRIPAVG_battery12v = 0 +summary_TRIPAVG_battery12v_avg = 0 +summary_TRIPAVG_battery12v_min = 0 +summary_TRIPAVG_battery12v_max = 0 +summary_TRIPAVG_charging_sessions = 0 +summary_TRIPAVG_trip_count = 0 +summary_TRIPAVG_range = 0 +summary_TRIPAVG_address = 0 + +summary_DAYAVG_date = 0 +summary_DAYAVG_info = 0 +summary_DAYAVG_odometer = 0 +summary_DAYAVG_delta_distance = 0 +summary_DAYAVG_kwh_charged = 0 +summary_DAYAVG_kwh_discharged = 0 +summary_DAYAVG_distance_unit_per_kwh = 0 +summary_DAYAVG_kwh_per_100_distance_unit = 0 +summary_DAYAVG_cost = 0 +summary_DAYAVG_soc = 0 +summary_DAYAVG_soc_avg = 0 +summary_DAYAVG_soc_min = 0 +summary_DAYAVG_soc_max = 0 +summary_DAYAVG_battery12v = 0 +summary_DAYAVG_battery12v_avg = 0 +summary_DAYAVG_battery12v_min = 0 +summary_DAYAVG_battery12v_max = 0 +summary_DAYAVG_charging_sessions = 0 +summary_DAYAVG_trip_count = 0 +summary_DAYAVG_range = 0 +summary_DAYAVG_address = 0 + +summary_WEEKAVG_date = 0 +summary_WEEKAVG_info = 0 +summary_WEEKAVG_odometer = 0 +summary_WEEKAVG_delta_distance = 0 +summary_WEEKAVG_kwh_charged = 0 +summary_WEEKAVG_kwh_discharged = 0 +summary_WEEKAVG_distance_unit_per_kwh = 0 +summary_WEEKAVG_kwh_per_100_distance_unit = 0 +summary_WEEKAVG_cost = 0 +summary_WEEKAVG_soc = 0 +summary_WEEKAVG_soc_avg = 0 +summary_WEEKAVG_soc_min = 0 +summary_WEEKAVG_soc_max = 0 +summary_WEEKAVG_battery12v = 0 +summary_WEEKAVG_battery12v_avg = 0 +summary_WEEKAVG_battery12v_min = 0 +summary_WEEKAVG_battery12v_max = 0 +summary_WEEKAVG_charging_sessions = 0 +summary_WEEKAVG_trip_count = 0 +summary_WEEKAVG_range = 0 +summary_WEEKAVG_address = 0 + +summary_MONTHAVG_date = 0 +summary_MONTHAVG_info = 0 +summary_MONTHAVG_odometer = 0 +summary_MONTHAVG_delta_distance = 0 +summary_MONTHAVG_kwh_charged = 0 +summary_MONTHAVG_kwh_discharged = 0 +summary_MONTHAVG_distance_unit_per_kwh = 0 +summary_MONTHAVG_kwh_per_100_distance_unit = 0 +summary_MONTHAVG_cost = 0 +summary_MONTHAVG_soc = 0 +summary_MONTHAVG_soc_avg = 0 +summary_MONTHAVG_soc_min = 0 +summary_MONTHAVG_soc_max = 0 +summary_MONTHAVG_battery12v = 0 +summary_MONTHAVG_battery12v_avg = 0 +summary_MONTHAVG_battery12v_min = 0 +summary_MONTHAVG_battery12v_max = 0 +summary_MONTHAVG_charging_sessions = 0 +summary_MONTHAVG_trip_count = 0 +summary_MONTHAVG_range = 0 +summary_MONTHAVG_address = 0 + +summary_YEARLY_date = 0 +summary_YEARLY_info = 0 +summary_YEARLY_odometer = 0 +summary_YEARLY_delta_distance = 0 +summary_YEARLY_kwh_charged = 0 +summary_YEARLY_kwh_discharged = 0 +summary_YEARLY_distance_unit_per_kwh = 0 +summary_YEARLY_kwh_per_100_distance_unit = 0 +summary_YEARLY_cost = 0 +summary_YEARLY_soc = 0 +summary_YEARLY_soc_avg = 0 +summary_YEARLY_soc_min = 0 +summary_YEARLY_soc_max = 0 +summary_YEARLY_battery12v = 0 +summary_YEARLY_battery12v_avg = 0 +summary_YEARLY_battery12v_min = 0 +summary_YEARLY_battery12v_max = 0 +summary_YEARLY_charging_sessions = 0 +summary_YEARLY_trip_count = 0 +summary_YEARLY_range = 0 +summary_YEARLY_address = 0 + +dailystats_day_TOTALS_date = 0 +dailystats_day_TOTALS_total_consumption = 0 +dailystats_day_TOTALS_regenerated_energy = 0 +dailystats_day_TOTALS_average_consumption = 0 +dailystats_day_TOTALS_engine_consumption = 0 +dailystats_day_TOTALS_climate_consumption = 0 +dailystats_day_TOTALS_onboard_electronics_consumption = 0 +dailystats_day_TOTALS_battery_care_consumption = 0 +dailystats_day_TOTALS_driven = 0 +dailystats_day_TOTALS_regenerated_energy_percentage = 0 +dailystats_day_TOTALS_average_consumption_per_100 = 0 +dailystats_day_TOTALS_engine_consumption_percentage = 0 +dailystats_day_TOTALS_climate_consumption_percentage = 0 +dailystats_day_TOTALS_onboard_electronics_consumption_percentage = 0 +dailystats_day_TOTALS_battery_care_consumption_percentage = 0 + +dailystats_day_LAST_DAY_date = 0 +dailystats_day_LAST_DAY_total_consumption = 0 +dailystats_day_LAST_DAY_regenerated_energy = 0 +dailystats_day_LAST_DAY_average_consumption = 0 +dailystats_day_LAST_DAY_engine_consumption = 0 +dailystats_day_LAST_DAY_climate_consumption = 0 +dailystats_day_LAST_DAY_onboard_electronics_consumption = 0 +dailystats_day_LAST_DAY_battery_care_consumption = 0 +dailystats_day_LAST_DAY_driven = 0 +dailystats_day_LAST_DAY_regenerated_energy_percentage = 0 +dailystats_day_LAST_DAY_average_consumption_per_100 = 0 +dailystats_day_LAST_DAY_engine_consumption_percentage = 0 +dailystats_day_LAST_DAY_climate_consumption_percentage = 0 +dailystats_day_LAST_DAY_onboard_electronics_consumption_percentage = 0 +dailystats_day_LAST_DAY_battery_care_consumption_percentage = 0 + +dailystats_trip_TOTALS_computed_kwh_charged = 0 +dailystats_trip_TOTALS_computed_day_consumption = 0 +dailystats_trip_TOTALS_computed_kwh_used = 0 +dailystats_trip_TOTALS_trip_time = 0 +dailystats_trip_TOTALS_computed_consumption_or_distance = 0 +dailystats_trip_TOTALS_distance = 0 +dailystats_trip_TOTALS_avg_speed = 0 +dailystats_trip_TOTALS_max_speed = 0 +dailystats_trip_TOTALS_idle_time = 0 + +dailystats_trip_LAST_DAY_computed_kwh_charged = 0 +dailystats_trip_LAST_DAY_computed_day_consumption = 0 +dailystats_trip_LAST_DAY_computed_kwh_used = 0 +dailystats_trip_LAST_DAY_trip_time = 0 +dailystats_trip_LAST_DAY_computed_consumption_or_distance = 0 +dailystats_trip_LAST_DAY_distance = 0 +dailystats_trip_LAST_DAY_avg_speed = 0 +dailystats_trip_LAST_DAY_max_speed = 0 +dailystats_trip_LAST_DAY_idle_time = 0 diff --git a/monitor.py b/monitor.py index 434641d..3a32ef9 100644 --- a/monitor.py +++ b/monitor.py @@ -47,6 +47,7 @@ from hyundai_kia_connect_api import VehicleManager, Vehicle, exceptions from monitor_utils import ( arg_has, + dbg, float_to_string_no_trailing_zero, get, get_bool, @@ -56,32 +57,33 @@ get_safe_float, km_to_mile, same_day, + set_dbg, + set_vin, sleep_a_minute, sleep_seconds, to_int, ) -from domoticz_utils import ( - send_dailystats_line_to_domoticz, - send_monitor_csv_line_to_domoticz, - send_tripinfo_line_to_domoticz, -) from mqtt_utils import ( - send_dailystats_line_to_mqtt, + send_dailystats_csv_line_to_mqtt, send_monitor_csv_line_to_mqtt, - send_tripinfo_line_to_mqtt, - set_vin, - stop_mqtt_loop, + send_tripinfo_csv_line_to_mqtt, + stop_mqtt, +) +from domoticz_utils import ( + send_dailystats_csv_line_to_domoticz, + send_monitor_csv_line_to_domoticz, + send_tripinfo_csv_line_to_domoticz, ) SCRIPT_DIRNAME = path.abspath(path.dirname(__file__)) logging.config.fileConfig(f"{SCRIPT_DIRNAME}/logging_config.ini") D = arg_has("debug") if D: - logging.getLogger().setLevel(logging.DEBUG) + set_dbg() # keep forceupdate and cacheupdate as keyword, but do nothing with them -KEYWORD_LIST = ["forceupdate", "cacheupdate", "debug"] +KEYWORD_LIST = ["forceupdate", "cacheupdate", "debug", "test"] KEYWORD_ERROR = False for kindex in range(1, len(sys.argv)): if sys.argv[kindex].lower() not in KEYWORD_LIST: @@ -92,6 +94,7 @@ print("Usage: python monitor.py") exit() +TEST = arg_has("test") # == read monitor in monitor.cfg =========================== parser = configparser.ConfigParser() parser.read(get_filepath("monitor.cfg")) @@ -117,14 +120,6 @@ MONITOR_SOMETHING_WRITTEN_OR_ERROR = False -# == subroutines ============================================================= -def dbg(line: str) -> bool: - """print line if debugging""" - if D: - logging.debug(line) - return D # just to make a lazy evaluation expression possible - - def writeln(filename: str, string: str) -> None: """append line at monitor text file with end of line character""" global MONITOR_SOMETHING_WRITTEN_OR_ERROR # pylint:disable=global-statement @@ -175,6 +170,7 @@ def handle_daily_stats(vehicle: Vehicle, number_of_vehicles: int) -> None: usa = int(REGION) == 3 today_time_str = datetime.now().strftime("%H:%M") last_line = get_last_line(Path(filename)) + last_line_file = last_line last_date = last_line.split(",")[0].strip() # get yyymmdd hh:mm if not usa: # get rid of timestamp, always write new cumulative data from today @@ -213,12 +209,19 @@ def handle_daily_stats(vehicle: Vehicle, number_of_vehicles: int) -> None: print( f"Writing dailystats {dailystats_date} {last_date}\nflin=[{full_line}]\nline=[{line}]\nlast=[{last_line}]" # noqa ) - file.write(full_line) - file.write("\n") + MONITOR_SOMETHING_WRITTEN_OR_ERROR = True + if TEST: + send_dailystats_csv_line_to_mqtt(last_line_file) + send_dailystats_csv_line_to_domoticz(last_line_file) + else: + file.write(full_line) + file.write("\n") + send_dailystats_csv_line_to_mqtt(full_line) + send_dailystats_csv_line_to_domoticz(full_line) + last_line = line - send_dailystats_line_to_domoticz(full_line) - send_dailystats_line_to_mqtt(full_line) + else: if D: print( @@ -235,6 +238,8 @@ def write_last_run( vehicle: Vehicle, number_of_vehicles: int, vehicle_stats: list[str] ) -> None: """write last run""" + if TEST: # do not write last run + return filename = "monitor.lastrun" vin = vehicle.VIN if number_of_vehicles > 1: @@ -272,6 +277,7 @@ def handle_day_trip_info( month_trip_info, last_date: str, last_hhmmss: str, + last_line: str, ) -> tuple[str, str]: """handle_day_trip_info""" global MONITOR_SOMETHING_WRITTEN_OR_ERROR # pylint:disable=global-statement @@ -299,13 +305,18 @@ def handle_day_trip_info( max_speed = km_to_mile(max_speed) line = f"{yyyymmdd},{hhmmss},{trip.drive_time},{trip.idle_time},{float_to_string_no_trailing_zero(distance)},{avg_speed:.0f},{max_speed:.0f}" # noqa _ = D and dbg(f"Writing tripinfo line:[{line}]") - file.write(line) - file.write("\n") MONITOR_SOMETHING_WRITTEN_OR_ERROR = True + if TEST: + send_tripinfo_csv_line_to_mqtt(last_line) + send_tripinfo_csv_line_to_domoticz(last_line) + else: + file.write(line) + file.write("\n") + send_tripinfo_csv_line_to_mqtt(line) + send_tripinfo_csv_line_to_domoticz(line) + last_date = yyyymmdd last_hhmmss = hhmmss - send_tripinfo_line_to_domoticz(line) - send_tripinfo_line_to_mqtt(line) else: _ = D and dbg(f"Skipping trip: {yyyymmdd},{hhmmss}") else: @@ -363,6 +374,7 @@ def handle_trip_info( month_trip_info, last_date, last_hhmmss, + last_line, ) @@ -445,10 +457,14 @@ def handle_one_vehicle( break # finished if not same: _ = D and dbg(f"Writing1:\nline=[{line}]\nlast=[{last_line}]") + if TEST: + send_monitor_csv_line_to_mqtt(last_line) + send_monitor_csv_line_to_domoticz(last_line) + else: + writeln(filename, line) + send_monitor_csv_line_to_mqtt(line) + send_monitor_csv_line_to_domoticz(line) - writeln(filename, line) - send_monitor_csv_line_to_domoticz(line) - send_monitor_csv_line_to_mqtt(line) handle_daily_stats(vehicle, number_of_vehicles) vehicle_stats = [ str(newest_updated_at), @@ -555,7 +571,10 @@ def handle_vehicles(login: bool) -> bool: error = False number_of_vehicles = len(MANAGER.vehicles) for _, vehicle in MANAGER.vehicles.items(): - set_vin(vehicle.VIN) + if TEST: # use fake VIN + set_vin("KMHKR81CPNU012345") + else: + set_vin(vehicle.VIN) error = handle_one_vehicle(MANAGER, vehicle, number_of_vehicles) if error: # something gone wrong, exit vehicles loop error_string = "Error occurred in handle_one_vehicle()" @@ -641,7 +660,8 @@ def monitor(): logging.error("Too many subsequent errors occurred, exiting monitor.py") sys.exit(-1) - stop_mqtt_loop() + stop_mqtt() + sys.exit(0) monitor() diff --git a/monitor_utils.py b/monitor_utils.py index 58d5fc7..0996ff3 100644 --- a/monitor_utils.py +++ b/monitor_utils.py @@ -1,6 +1,7 @@ # == monitor_utils.py Author: Zuinige Rijder ========= """ monitor utils """ # pylint:disable=logging-fstring-interpolation + import configparser import errno import logging @@ -18,24 +19,99 @@ from urllib.request import urlopen, Request +VIN = "" # filled by set_vin() or determine_vin() method + +D = False + + +def d() -> bool: + """return D""" + return D + + +def dbg(line: str) -> bool: + """print line if debugging""" + if D: + logging.debug(line) + return D # just to make a lazy evaluation expression possible + + +def set_dbg() -> None: + """set_dbg""" + global D # pylint:disable=global-statement + D = True + logging.getLogger().setLevel(logging.DEBUG) + + +def get_splitted_list_item(the_list: list[str], index: int) -> list[str]: + """get splitted item from list""" + if index < 0 or index >= len(the_list): + return ["", ""] + items = the_list[index].split(";") + if len(items) != 2: + return ["", ""] + return [items[0].strip(), items[1].strip()] + + +def set_vin(vin: str) -> None: + """set_vin""" + global VIN # pylint: disable=global-statement + VIN = vin + + +def determine_vin(lastrun_filename: Path) -> None: + """determine_vin""" + # get vin information from monitor.lastrun + with lastrun_filename.open("r", encoding="utf-8") as lastrun_file: + lastrun_lines = lastrun_file.readlines() + vin = get_splitted_list_item(lastrun_lines, 1)[1] + set_vin(vin) + + +def get_vin() -> str: + """get_vin""" + return VIN + + def get_items_monitor_csv() -> list: """get_items_monitor_csv""" - items = "monitor_datetime, monitor_longitude, monitor_latitude, monitor_engineon, monitor_battery12v, monitor_odometer, monitor_soc, monitor_charging, monitor_plugged, monitor_address, monitor_evrange" # noqa - result = [x.strip() for x in items.split(",")] + items = "datetime, longitude, latitude, engineon, battery12v, odometer, soc, charging, plugged, address, evrange" # noqa + result = [x.strip().lower() for x in items.split(",")] return result def get_items_monitor_tripinfo_csv() -> list: """get_items_monitor_tripinfo_csv""" - items = "trip_date, trip_starttime, trip_drivetime, trip_idletime, trip_distance, trip_avgspeed, trip_maxspeed" # noqa - result = [x.strip() for x in items.split(",")] + items = "date, starttime, drivetime, idletime, distance, avgspeed, maxspeed" + result = [x.strip().lower() for x in items.split(",")] return result def get_items_monitor_dailystats_csv() -> list: """get_items_monitor_dailystats_csv""" - items = "dailystats_date, dailystats_distance, dailystats_distance_unit, dailystats_total_consumed, dailystats_regenerated_energy, dailystats_engine_consumption, dailystats_climate_consumption, dailystats_onboard_electronics_consumption, dailystats_battery_care_consumption" # noqa - result = [x.strip() for x in items.split(",")] + items = "date, distance, distance_unit, total_consumed, regenerated_energy, engine_consumption, climate_consumption, onboard_electronics_consumption, battery_care_consumption" # noqa + result = [x.strip().lower() for x in items.split(",")] + return result + + +def get_items_summary() -> list: + """get_items_summary""" + items = "period, date, info, odometer, delta_distance, kwh_charged, kwh_discharged, distance_unit_per_kwh, kwh_per_100_distance_unit, cost, soc, soc_avg, soc_min, soc_max, battery12v, battery12v_avg, battery12v_min, battery12v_max, charging_sessions, trip_count, range, address" # noqa + result = [x.strip().lower() for x in items.split(",")] + return result + + +def get_items_dailystats_day() -> list: + """get_items_dailystat_day""" + items = "date, total_consumption, regenerated_energy, average_consumption, engine_consumption, climate_consumption, onboard_electronics_consumption, battery_care_consumption, driven, regenerated_energy_percentage, average_consumption_per_100, engine_consumption_percentage, climate_consumption_percentage, onboard_electronics_consumption_percentage, battery_care_consumption_percentage" # noqa + result = [x.strip().lower() for x in items.split(",")] + return result + + +def get_items_dailystat_trip() -> list: + """get_items_dailystat_trip""" + items = "computed_kwh_charged, computed_day_consumption, computed_kwh_used, trip_time, computed_consumption_or_distance, distance, avg_speed, max_speed, idle_time" # noqa + result = [x.strip().lower() for x in items.split(",")] return result @@ -89,7 +165,7 @@ def get_vin_arg() -> str: def sleep_seconds(seconds: int) -> None: """sleep seconds""" - logging.debug(f"Sleeping {seconds} seconds") + _ = D and dbg(f"Sleeping {seconds} seconds") time.sleep(seconds) @@ -365,7 +441,7 @@ def execute_request(url: str, data: str, headers: dict) -> str: with urlopen(request, timeout=30) as response: body = response.read() content = body.decode("utf-8") - logging.debug(content) + _ = D and dbg(content) return content except HTTPError as error: errorstring = str(error.status) + ": " + error.reason diff --git a/mqtt_utils.py b/mqtt_utils.py index 8a8ef24..dbb63bf 100644 --- a/mqtt_utils.py +++ b/mqtt_utils.py @@ -11,18 +11,37 @@ from paho.mqtt import client as mqtt_client from monitor_utils import ( + dbg, get, + d, get_bool, get_filepath, + get_items_dailystat_trip, + get_items_dailystats_day, get_items_monitor_csv, get_items_monitor_dailystats_csv, get_items_monitor_tripinfo_csv, + get_items_summary, + get_vin, ) ITEMS_MONITOR_CSV = get_items_monitor_csv() -ITEMS_MONITOR_TRIPINFO_CSV = get_items_monitor_tripinfo_csv() -ITEMS_MONITOR_DAILYSTATS_CSV = get_items_monitor_dailystats_csv() +for IDX in range(len(ITEMS_MONITOR_CSV)): # pylint:disable=consider-using-enumerate + ITEMS_MONITOR_CSV[IDX] = f"monitor/monitor/{ITEMS_MONITOR_CSV[IDX]}" +ITEMS_TRIPINFO_CSV = get_items_monitor_tripinfo_csv() +for IDX in range(len(ITEMS_TRIPINFO_CSV)): # pylint:disable=consider-using-enumerate + ITEMS_TRIPINFO_CSV[IDX] = f"monitor/tripinfo/{ITEMS_TRIPINFO_CSV[IDX]}" + +ITEMS_DAILYSTATS_CSV = get_items_monitor_dailystats_csv() +for IDX in range(len(ITEMS_DAILYSTATS_CSV)): # pylint:disable=consider-using-enumerate + ITEMS_DAILYSTATS_CSV[IDX] = f"monitor/dailystats/{ITEMS_DAILYSTATS_CSV[IDX]}" + +ITEMS_SUMMARY = get_items_summary() + +ITEMS_DAILYSTATS_DAY = get_items_dailystats_day() + +ITEMS_DAILYSTATS_TRIP = get_items_dailystat_trip() PARSER = configparser.ConfigParser() PARSER.read(get_filepath("monitor.cfg")) @@ -37,13 +56,6 @@ MQTT_MAIN_TOPIC = get(mqtt_settings, "mqtt_main_topic", "hyundai_kia_connect_monitor") MQTT_CLIENT = None # will be filled at MQTT connect if configured -VIN = None # filled by set_vin() method - - -def set_vin(vin: str) -> None: - """set_vin""" - global VIN # pylint: disable=global-statement - VIN = vin # == connect MQTT ======================================================== @@ -57,31 +69,31 @@ def connect_mqtt() -> mqtt_client.Client: def on_connect(client, userdata, flags, rc): # pylint: disable=unused-argument if rc == 0: - logging.debug("Connected to MQTT Broker!") + _ = d() and dbg("Connected to MQTT Broker!") else: logging.error("Failed to connect to MQTT Broker, return code %d\n", rc) def on_disconnect(client, userdata, rc): # pylint: disable=unused-argument - logging.debug("Disconnected with result code: %s", rc) + _ = d() and dbg(f"Disconnected with result code: {rc}") reconnect_count = 0 reconnect_delay = mqtt_first_reconnect_delay while reconnect_count < mqtt_max_reconnect_count: - logging.debug("Reconnecting in %d seconds...", reconnect_delay) + _ = d() and dbg(f"Reconnecting in {reconnect_delay} seconds...") time.sleep(reconnect_delay) try: client.reconnect() - logging.debug("Reconnected successfully!") + _ = d() and dbg("Reconnected successfully!") return except Exception as reconnect_ex: # pylint: disable=broad-except - logging.error("%s. Reconnect failed. Retrying...", reconnect_ex) + logging.error(f"{reconnect_ex}. Reconnect failed. Retrying...") reconnect_delay *= mqtt_reconnect_rate reconnect_delay = min(reconnect_delay, mqtt_max_reconnect_delay) reconnect_count += 1 - logging.info("Reconnect failed after %s attempts. Exiting...", reconnect_count) + logging.info(f"Reconnect failed after {reconnect_count} attempts. Exiting...") - mqtt_client_id = f"{MQTT_MAIN_TOPIC}-{VIN}" + mqtt_client_id = f"{MQTT_MAIN_TOPIC}-{get_vin()}" client = mqtt_client.Client(mqtt_client_id) client.on_connect = on_connect client.on_disconnect = on_disconnect @@ -97,7 +109,7 @@ def start_mqtt_loop() -> None: if not MQTT_CLIENT: while True: try: - logging.debug("Trying to connected to MQTT Broker") + _ = d() and dbg("Trying to connected to MQTT Broker") MQTT_CLIENT = connect_mqtt() MQTT_CLIENT.loop_start() break @@ -109,10 +121,10 @@ def start_mqtt_loop() -> None: time.sleep(60) -def stop_mqtt_loop() -> None: - """stop_mqtt_loop""" - if MQTT_CLIENT: - logging.debug("Trying stop MQTT Broker loop") +def stop_mqtt() -> None: + """stop_mqtt""" + if MQTT_CLIENT and SEND_TO_MQTT: + logging.debug("Stopping MQTT") MQTT_CLIENT.loop_stop() @@ -122,10 +134,10 @@ def send_to_mqtt(subtopic: str, value: str) -> None: start_mqtt_loop() msg_count = 1 - topic = f"{MQTT_MAIN_TOPIC}/{VIN}/{subtopic}" + topic = f"{MQTT_MAIN_TOPIC}/{get_vin()}/{subtopic}" msg = f"{value}" logging.debug( # pylint:disable=logging-fstring-interpolation - f"topic: {topic}, msg: {msg}" + f"send_to_mqtt: {topic} = {msg}" ) while True: try: @@ -134,6 +146,7 @@ def send_to_mqtt(subtopic: str, value: str) -> None: result = MQTT_CLIENT.publish(topic, msg, qos=1, retain=True) status = result[0] if status == 0: + logging.debug(f"Send {msg} to topic {topic}") msg_count = 6 else: error = True @@ -155,15 +168,34 @@ def send_to_mqtt(subtopic: str, value: str) -> None: break -def send_line(headers: list, line: str) -> None: - """send_line""" - splitted = line.split(",") +def send_splitted_line( + headers: list, splitted: list, replace_empty_by_0: bool, skip_first: bool +) -> None: + """send_splitted_line""" if len(splitted) < len(headers): - logging.info(f"line does not have all elements: {line}\n{headers}") + logging.warning( + f"line does not have all elements: {splitted}\nHEADERS={headers}" + ) return + skipped_first = not skip_first for i in range(len(splitted)): # pylint:disable=consider-using-enumerate - send_to_mqtt(headers[i], splitted[i].strip()) + if i < len(headers): + if skipped_first: + value = splitted[i].strip() + if replace_empty_by_0 and value == "": + value = "0" + send_to_mqtt(headers[i], value) + else: + skipped_first = True + + +def send_line( + headers: list, line: str, replace_empty_by_0: bool = True, skip_first: bool = False +) -> None: + """send_line""" + splitted = line.split(",") + send_splitted_line(headers, splitted, replace_empty_by_0, skip_first) def send_monitor_csv_line_to_mqtt(line: str) -> None: @@ -172,13 +204,52 @@ def send_monitor_csv_line_to_mqtt(line: str) -> None: send_line(ITEMS_MONITOR_CSV, line) -def send_tripinfo_line_to_mqtt(line: str) -> None: - """send_tripinfo_line_to_mqtt""" +def send_tripinfo_csv_line_to_mqtt(line: str) -> None: + """send_tripinfo_csv_line_to_mqtt""" + if SEND_TO_MQTT: + send_line(ITEMS_TRIPINFO_CSV, line) + + +def send_dailystats_csv_line_to_mqtt(line: str) -> None: + """send_dailystats_csv_line_to_mqtt""" + if SEND_TO_MQTT: + send_line(ITEMS_DAILYSTATS_CSV, line) + + +def get_items(subtopic: str, items: list[str]) -> list[str]: + """get_items""" + new_items: list[str] = [] + for item in items: + new_items.append(f"{subtopic}/{item}") + return new_items + + +def send_summary_line_to_mqtt(line: str) -> None: + """send_summary_line_to_mqtt""" + if SEND_TO_MQTT: + splitted = [x.strip() for x in line.split(",")] + period = splitted[0].replace(" ", "") + if ( + period + in "TRIP, DAY, WEEK, MONTH, YEAR, TRIPAVG, DAYAVG, WEEKAVG, MONTHAVG, YEARLY" # noqa + ): + send_splitted_line( + get_items(f"summary/{period}", ITEMS_SUMMARY), splitted, True, True + ) + + +def send_dailystats_day_line_to_mqtt(postfix: str, line: str) -> None: + """send_dailystats_day_line_to_mqtt""" if SEND_TO_MQTT: - send_line(ITEMS_MONITOR_TRIPINFO_CSV, line) + send_line(get_items(f"dailystats_day/{postfix}", ITEMS_DAILYSTATS_DAY), line) -def send_dailystats_line_to_mqtt(line: str) -> None: - """send_dailystats_line_to_mqtt""" +def send_dailystats_trip_line_to_mqtt( + postfix: str, line: str, skip_first_two: bool = False +) -> None: + """send_dailystats_trip_line_to_mqtt""" if SEND_TO_MQTT: - send_line(ITEMS_MONITOR_DAILYSTATS_CSV, line) + items = get_items(f"dailystats_trip/{postfix}", ITEMS_DAILYSTATS_TRIP) + if skip_first_two: + items = items[2:] + send_line(items, line, replace_empty_by_0=False) diff --git a/requirements.txt b/requirements.txt index 40539e9..68a1654 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ hyundai_kia_connect_api>=3.24.0 beautifulsoup4>=4.10.0 -paho_mqtt>=1.6.1 +paho_mqtt>=1.6.1,<2.0 python_dateutil>=2.8.2 pytz>=2021.3 requests>=2.28.1 diff --git a/summary.py b/summary.py index 2c9a596..d5794bd 100644 --- a/summary.py +++ b/summary.py @@ -18,12 +18,17 @@ import typing import gspread from dateutil import parser +from domoticz_utils import SEND_TO_DOMOTICZ, send_summary_line_to_domoticz from monitor_utils import ( + dbg, + determine_vin, get_filepath, arg_has, get, + get_splitted_list_item, get_vin_arg, safe_divide, + set_dbg, sleep_a_minute, split_on_comma, to_int, @@ -39,19 +44,13 @@ split_output_to_sheet_list, float_to_string_no_trailing_zero, ) +from mqtt_utils import SEND_TO_MQTT, send_summary_line_to_mqtt, stop_mqtt SCRIPT_DIRNAME = path.abspath(path.dirname(__file__)) logging.config.fileConfig(f"{SCRIPT_DIRNAME}/logging_config.ini") D = arg_has("debug") if D: - logging.getLogger().setLevel(logging.DEBUG) - - -def dbg(line: str) -> bool: - """print line if debugging""" - if D: - logging.debug(line) - return D # just to make a lazy evaluation expression possible + set_dbg() KEYWORD_LIST = [ @@ -334,8 +333,7 @@ def print_output_and_update_queue(output: str) -> None: total_line += ", " print(total_line) - if SHEETUPDATE: - LAST_OUTPUT_QUEUE.append(total_line) + LAST_OUTPUT_QUEUE.append(total_line) def sheet_append_first_rows(row_a: str, row_b: str) -> None: @@ -459,16 +457,6 @@ def get_address(split: list[str]) -> str: return location_str -def get_splitted_list_item(the_list: list[str], index: int) -> list[str]: - """get splitted item from list""" - if index < 0 or index >= len(the_list): - return ["", ""] - items = the_list[index].split(";") - if len(items) != 2: - return ["", ""] - return [items[0].strip(), items[1].strip()] - - if not MONITOR_CSV_FILENAME.is_file(): logging.error(f"ERROR: file does not exist: {MONITOR_CSV_FILENAME}") sys.exit(-1) @@ -686,6 +674,14 @@ def print_summary( f"{date} {time_str}, {odo:.1f}, {float_to_string_no_trailing_zero(delta_odo)}, {float_to_string_no_trailing_zero(discharged_kwh)}, {float_to_string_no_trailing_zero(charged_kwh)}" # noqa ) + # get information from monitor.lastrun + with LASTRUN_FILENAME.open("r", encoding="utf-8") as lastrun_file: + lastrun_lines = lastrun_file.readlines() + last_upd_dt = get_splitted_list_item(lastrun_lines, 2)[1] + location_last_upd_dt = get_splitted_list_item(lastrun_lines, 3)[1] + if len(lastrun_lines) > 6: # error occurred, line 6 contains error_string + last_upd_dt = f"{last_upd_dt} ERROR: {lastrun_lines[6]}" + if SHEETUPDATE and prefix.startswith("SHEET "): prefix = prefix.replace("SHEET ", "") last_line = get_last_line(MONITOR_CSV_FILENAME).replace(",", ";") @@ -693,17 +689,6 @@ def print_summary( last_run_dt = last_run_datetime.strftime("%Y-%m-%d %H:%M ") + get_translation( TR_HELPER, last_run_datetime.strftime("%a") ) - lastrun_lines = [] - if LASTRUN_FILENAME.is_file(): - with LASTRUN_FILENAME.open("r", encoding="utf-8") as lastrun_file: - lastrun_lines = lastrun_file.readlines() - last_updated_at = get_splitted_list_item(lastrun_lines, 2) - location_last_updated_at = get_splitted_list_item(lastrun_lines, 3) - last_upd_dt = last_updated_at[1] - location_last_upd_dt = location_last_updated_at[1] - if len(lastrun_lines) > 6: # error occurred, line 6 contains error_string - last_upd_dt = f"{last_upd_dt} ERROR: {lastrun_lines[6]}" - SHEET_ROW_A = f"{TR.last_run},{TR.vehicle_upd},{TR.gps_update},{TR.last_entry},{TR.last_address},{TR.odometer} {ODO_METRIC},{TR.driven} {ODO_METRIC},+kWh,-kWh,{ODO_METRIC}/kWh,kWh/100{ODO_METRIC},{TR.cost} {COST_CURRENCY},{TR.soc_perc},{TR.avg} {TR.soc_perc},{TR.min} {TR.soc_perc},{TR.max} {TR.soc_perc},{TR.volt12_perc},{TR.avg} {TR.volt12_perc},{TR.min} {TR.volt12_perc},{TR.max} {TR.volt12_perc},{TR.charges},{TR.trips},{TR.ev_range}" # noqa SHEET_ROW_B = f"{last_run_dt},{last_upd_dt},{location_last_upd_dt},{last_line},{location_str},{odo:.1f},{float_to_string_no_trailing_zero(delta_odo)},{float_to_string_no_trailing_zero(charged_kwh)},{float_to_string_no_trailing_zero(discharged_kwh)},{km_mi_per_kwh_str},{kwh_per_km_mi_str},{cost_str},{float_to_string_no_trailing_zero(t_soc_cur)},{float_to_string_no_trailing_zero(t_soc_avg)},{float_to_string_no_trailing_zero(t_soc_min)},{float_to_string_no_trailing_zero(t_soc_max)},{t_volt12_cur},{t_volt12_avg},{t_volt12_min},{t_volt12_max},{t_charges},{t_trips},{ev_range}" # noqa else: @@ -1084,6 +1069,20 @@ def summary(): print_header_and_update_queue() +def send_to_mqtt_domoticz() -> None: + """send_to_mqtt_domoticz""" + idx = 0 + for item in LAST_OUTPUT_QUEUE: + idx += 1 + if idx >= (len(LAST_OUTPUT_QUEUE) - 10) and idx != len( + LAST_OUTPUT_QUEUE + ): # last 10 items excluding last header item + send_summary_line_to_mqtt(item) + send_summary_line_to_domoticz(item) + + stop_mqtt() + + # always rewrite charge file, because input might be changed CHARGE_CSV_FILE = CHARGE_CSV_FILENAME.open("w", encoding="utf-8") write_charge_csv("date, odometer, +kWh, end charged SOC%") @@ -1119,6 +1118,12 @@ def summary(): traceback.print_exc() RETRIES = sleep_a_minute(RETRIES) +if SEND_TO_DOMOTICZ or SEND_TO_MQTT: + if SEND_TO_MQTT: + determine_vin(LASTRUN_FILENAME) + send_to_mqtt_domoticz() + + if RETRIES == -1: - exit(0) -exit(-1) + sys.exit(0) +sys.exit(-1) diff --git a/tests/OUTPUT/test.dailystats.mqtt_domoticz.log b/tests/OUTPUT/test.dailystats.mqtt_domoticz.log new file mode 100644 index 0000000..847ef48 --- /dev/null +++ b/tests/OUTPUT/test.dailystats.mqtt_domoticz.log @@ -0,0 +1,96 @@ +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/date = +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/total_consumption = 303.7kWh +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/regenerated_energy = 43kWh +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/average_consumption = 5.6km/kWh +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/engine_consumption = 262kWh +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/climate_consumption = 12.7kWh +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/onboard_electronics_consumption = 28.6kWh +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/battery_care_consumption = 0.4kWh +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/driven = 1698km +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/regenerated_energy_percentage = 14.2% +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/average_consumption_per_100 = 17.9kWh/100km +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/engine_consumption_percentage = 86% +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/climate_consumption_percentage = 4.2% +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/onboard_electronics_consumption_percentage = 9.4% +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/battery_care_consumption_percentage = 0.1% +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/LAST_DAY/date = 2023-02-19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/LAST_DAY/total_consumption = 2.3kWh +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/LAST_DAY/regenerated_energy = 0.8kWh +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/LAST_DAY/average_consumption = 5.7km/kWh +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/LAST_DAY/engine_consumption = 1.8kWh +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/LAST_DAY/climate_consumption = 0.1kWh +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/LAST_DAY/onboard_electronics_consumption = 0.4kWh +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/LAST_DAY/battery_care_consumption = 0kWh +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/LAST_DAY/driven = 13km +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/LAST_DAY/regenerated_energy_percentage = 35.5% +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/LAST_DAY/average_consumption_per_100 = 17.6kWh/100km +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/LAST_DAY/engine_consumption_percentage = 80% +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/LAST_DAY/climate_consumption_percentage = 3.4% +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/LAST_DAY/onboard_electronics_consumption_percentage = 17% +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/LAST_DAY/battery_care_consumption_percentage = 0% +dailystats_day_TOTALS_date = +dailystats_day_TOTALS_total_consumption = 303.7kWh +dailystats_day_TOTALS_regenerated_energy = 43kWh +dailystats_day_TOTALS_average_consumption = 5.6km/kWh +dailystats_day_TOTALS_engine_consumption = 262kWh +dailystats_day_TOTALS_climate_consumption = 12.7kWh +dailystats_day_TOTALS_onboard_electronics_consumption = 28.6kWh +dailystats_day_TOTALS_battery_care_consumption = 0.4kWh +dailystats_day_TOTALS_driven = 1698km +dailystats_day_TOTALS_regenerated_energy_percentage = 14.2% +dailystats_day_TOTALS_average_consumption_per_100 = 17.9kWh/100km +dailystats_day_TOTALS_engine_consumption_percentage = 86% +dailystats_day_TOTALS_climate_consumption_percentage = 4.2% +dailystats_day_TOTALS_onboard_electronics_consumption_percentage = 9.4% +dailystats_day_TOTALS_battery_care_consumption_percentage = 0.1% +dailystats_day_LAST_DAY_date = 2023-02-19 +dailystats_day_LAST_DAY_total_consumption = 2.3kWh +dailystats_day_LAST_DAY_regenerated_energy = 0.8kWh +dailystats_day_LAST_DAY_average_consumption = 5.7km/kWh +dailystats_day_LAST_DAY_engine_consumption = 1.8kWh +dailystats_day_LAST_DAY_climate_consumption = 0.1kWh +dailystats_day_LAST_DAY_onboard_electronics_consumption = 0.4kWh +dailystats_day_LAST_DAY_battery_care_consumption = 0kWh +dailystats_day_LAST_DAY_driven = 13km +dailystats_day_LAST_DAY_regenerated_energy_percentage = 35.5% +dailystats_day_LAST_DAY_average_consumption_per_100 = 17.6kWh/100km +dailystats_day_LAST_DAY_engine_consumption_percentage = 80% +dailystats_day_LAST_DAY_climate_consumption_percentage = 3.4% +dailystats_day_LAST_DAY_onboard_electronics_consumption_percentage = 17% +dailystats_day_LAST_DAY_battery_care_consumption_percentage = 0% +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/TOTALS/computed_kwh_charged = (+302.7kWh) +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/TOTALS/computed_day_consumption = (5.6km/kWh) +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/TOTALS/computed_kwh_used = +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/TOTALS/trip_time = 2551min +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/TOTALS/computed_consumption_or_distance = +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/TOTALS/distance = 2002km +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/TOTALS/avg_speed = 55km/h +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/TOTALS/max_speed = 125km/h +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/TOTALS/idle_time = 352min +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/LAST_DAY/computed_kwh_charged = (+27.6kWh) +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/LAST_DAY/computed_day_consumption = (6.3km/kWh) +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/LAST_DAY/computed_kwh_used = (0.7kWh) +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/LAST_DAY/trip_time = 17:36-17:44 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/LAST_DAY/computed_consumption_or_distance = (9.6km/kWh) +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/LAST_DAY/distance = 6km +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/LAST_DAY/avg_speed = 52km/h +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/LAST_DAY/max_speed = 116km/h +hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_trip/LAST_DAY/idle_time = 0min +dailystats_trip_TOTALS_computed_kwh_charged = (+302.7kWh) +dailystats_trip_TOTALS_computed_day_consumption = (5.6km/kWh) +dailystats_trip_TOTALS_computed_kwh_used = +dailystats_trip_TOTALS_trip_time = 2551min +dailystats_trip_TOTALS_computed_consumption_or_distance = +dailystats_trip_TOTALS_distance = 2002km +dailystats_trip_TOTALS_avg_speed = 55km/h +dailystats_trip_TOTALS_max_speed = 125km/h +dailystats_trip_TOTALS_idle_time = 352min +dailystats_trip_LAST_DAY_computed_kwh_charged = (+27.6kWh) +dailystats_trip_LAST_DAY_computed_day_consumption = (6.3km/kWh) +dailystats_trip_LAST_DAY_computed_kwh_used = (0.7kWh) +dailystats_trip_LAST_DAY_trip_time = 17:36-17:44 +dailystats_trip_LAST_DAY_computed_consumption_or_distance = (9.6km/kWh) +dailystats_trip_LAST_DAY_distance = 6km +dailystats_trip_LAST_DAY_avg_speed = 52km/h +dailystats_trip_LAST_DAY_max_speed = 116km/h +dailystats_trip_LAST_DAY_idle_time = 0min diff --git a/tests/OUTPUT/test.summary.mqtt_domoticz.log b/tests/OUTPUT/test.summary.mqtt_domoticz.log new file mode 100644 index 0000000..cb51f6b --- /dev/null +++ b/tests/OUTPUT/test.summary.mqtt_domoticz.log @@ -0,0 +1,420 @@ +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/date = 2023-02-19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/info = 17:48 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/odometer = 23589.5 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/delta_distance = 6.7 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/kwh_charged = 0 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/kwh_discharged = -0.7 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/distance_unit_per_kwh = 9.2 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/kwh_per_100_distance_unit = 10.8 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/cost = 0.18 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/soc = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/soc_avg = 58 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/soc_min = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/soc_max = 58 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/battery12v = 84 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/battery12v_avg = 85 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/battery12v_min = 84 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/battery12v_max = 86 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/charging_sessions = 0 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/trip_count = 1 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/range = 204 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIP/address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +summary_TRIP_date = 2023-02-19 +summary_TRIP_info = 17:48 +summary_TRIP_odometer = 23589.5 +summary_TRIP_delta_distance = 6.7 +summary_TRIP_kwh_charged = 0 +summary_TRIP_kwh_discharged = -0.7 +summary_TRIP_distance_unit_per_kwh = 9.2 +summary_TRIP_kwh_per_100_distance_unit = 10.8 +summary_TRIP_cost = 0.18 +summary_TRIP_soc = 57 +summary_TRIP_soc_avg = 58 +summary_TRIP_soc_min = 57 +summary_TRIP_soc_max = 58 +summary_TRIP_battery12v = 84 +summary_TRIP_battery12v_avg = 85 +summary_TRIP_battery12v_min = 84 +summary_TRIP_battery12v_max = 86 +summary_TRIP_charging_sessions = 0 +summary_TRIP_trip_count = 1 +summary_TRIP_range = 204 +summary_TRIP_address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/date = 2023-02-19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/info = Sun +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/odometer = 23589.5 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/delta_distance = 13.9 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/kwh_charged = 27.6 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/kwh_discharged = -2.2 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/distance_unit_per_kwh = 6.4 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/kwh_per_100_distance_unit = 15.7 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/cost = 0.54 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/soc = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/soc_avg = 49 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/soc_min = 22 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/soc_max = 60 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/battery12v = 84 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/battery12v_avg = 85 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/battery12v_min = 84 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/battery12v_max = 86 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/charging_sessions = 1 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/trip_count = 2 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/range = 204 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAY/address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +summary_DAY_date = 2023-02-19 +summary_DAY_info = Sun +summary_DAY_odometer = 23589.5 +summary_DAY_delta_distance = 13.9 +summary_DAY_kwh_charged = 27.6 +summary_DAY_kwh_discharged = -2.2 +summary_DAY_distance_unit_per_kwh = 6.4 +summary_DAY_kwh_per_100_distance_unit = 15.7 +summary_DAY_cost = 0.54 +summary_DAY_soc = 57 +summary_DAY_soc_avg = 49 +summary_DAY_soc_min = 22 +summary_DAY_soc_max = 60 +summary_DAY_battery12v = 84 +summary_DAY_battery12v_avg = 85 +summary_DAY_battery12v_min = 84 +summary_DAY_battery12v_max = 86 +summary_DAY_charging_sessions = 1 +summary_DAY_trip_count = 2 +summary_DAY_range = 204 +summary_DAY_address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/date = 2023-02-19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/info = WK 07 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/odometer = 23589.5 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/delta_distance = 452.3 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/kwh_charged = 92.2 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/kwh_discharged = -80.6 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/distance_unit_per_kwh = 5.6 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/kwh_per_100_distance_unit = 17.8 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/cost = 19.82 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/soc = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/soc_avg = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/soc_min = 22 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/soc_max = 100 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/battery12v = 84 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/battery12v_avg = 86 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/battery12v_min = 81 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/battery12v_max = 90 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/charging_sessions = 7 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/trip_count = 14 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/range = 204 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEK/address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +summary_WEEK_date = 2023-02-19 +summary_WEEK_info = WK 07 +summary_WEEK_odometer = 23589.5 +summary_WEEK_delta_distance = 452.3 +summary_WEEK_kwh_charged = 92.2 +summary_WEEK_kwh_discharged = -80.6 +summary_WEEK_distance_unit_per_kwh = 5.6 +summary_WEEK_kwh_per_100_distance_unit = 17.8 +summary_WEEK_cost = 19.82 +summary_WEEK_soc = 57 +summary_WEEK_soc_avg = 57 +summary_WEEK_soc_min = 22 +summary_WEEK_soc_max = 100 +summary_WEEK_battery12v = 84 +summary_WEEK_battery12v_avg = 86 +summary_WEEK_battery12v_min = 81 +summary_WEEK_battery12v_max = 90 +summary_WEEK_charging_sessions = 7 +summary_WEEK_trip_count = 14 +summary_WEEK_range = 204 +summary_WEEK_address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/date = 2023-02-19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/info = Feb +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/odometer = 23589.5 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/delta_distance = 590.3 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/kwh_charged = 106.7 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/kwh_discharged = -108.2 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/distance_unit_per_kwh = 5.5 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/kwh_per_100_distance_unit = 18.3 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/cost = 26.61 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/soc = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/soc_avg = 50 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/soc_min = 22 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/soc_max = 100 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/battery12v = 84 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/battery12v_avg = 86 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/battery12v_min = 76 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/battery12v_max = 93 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/charging_sessions = 10 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/trip_count = 35 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/range = 204 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTH/address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +summary_MONTH_date = 2023-02-19 +summary_MONTH_info = Feb +summary_MONTH_odometer = 23589.5 +summary_MONTH_delta_distance = 590.3 +summary_MONTH_kwh_charged = 106.7 +summary_MONTH_kwh_discharged = -108.2 +summary_MONTH_distance_unit_per_kwh = 5.5 +summary_MONTH_kwh_per_100_distance_unit = 18.3 +summary_MONTH_cost = 26.61 +summary_MONTH_soc = 57 +summary_MONTH_soc_avg = 50 +summary_MONTH_soc_min = 22 +summary_MONTH_soc_max = 100 +summary_MONTH_battery12v = 84 +summary_MONTH_battery12v_avg = 86 +summary_MONTH_battery12v_min = 76 +summary_MONTH_battery12v_max = 93 +summary_MONTH_charging_sessions = 10 +summary_MONTH_trip_count = 35 +summary_MONTH_range = 204 +summary_MONTH_address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/date = 2023-02-19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/info = 2023 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/odometer = 23589.5 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/delta_distance = 1742.4 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/kwh_charged = 298.4 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/kwh_discharged = -312.2 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/distance_unit_per_kwh = 5.6 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/kwh_per_100_distance_unit = 17.9 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/cost = 76.80 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/soc = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/soc_avg = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/soc_min = 19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/soc_max = 100 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/battery12v = 84 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/battery12v_avg = 86 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/battery12v_min = 76 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/battery12v_max = 95 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/charging_sessions = 18 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/trip_count = 89 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/range = 204 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEAR/address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +summary_YEAR_date = 2023-02-19 +summary_YEAR_info = 2023 +summary_YEAR_odometer = 23589.5 +summary_YEAR_delta_distance = 1742.4 +summary_YEAR_kwh_charged = 298.4 +summary_YEAR_kwh_discharged = -312.2 +summary_YEAR_distance_unit_per_kwh = 5.6 +summary_YEAR_kwh_per_100_distance_unit = 17.9 +summary_YEAR_cost = 76.80 +summary_YEAR_soc = 57 +summary_YEAR_soc_avg = 57 +summary_YEAR_soc_min = 19 +summary_YEAR_soc_max = 100 +summary_YEAR_battery12v = 84 +summary_YEAR_battery12v_avg = 86 +summary_YEAR_battery12v_min = 76 +summary_YEAR_battery12v_max = 95 +summary_YEAR_charging_sessions = 18 +summary_YEAR_trip_count = 89 +summary_YEAR_range = 204 +summary_YEAR_address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/date = 2023-02-19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/info = 89t +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/odometer = 23589.5 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/delta_distance = 19.6 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/kwh_charged = 3.4 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/kwh_discharged = -3.5 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/distance_unit_per_kwh = 5.6 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/kwh_per_100_distance_unit = 17.9 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/cost = 0.86 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/soc = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/soc_avg = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/soc_min = 19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/soc_max = 100 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/battery12v = 84 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/battery12v_avg = 86 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/battery12v_min = 76 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/battery12v_max = 95 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/charging_sessions = 0.2 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/trip_count = 1 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/range = 204 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/TRIPAVG/address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +summary_TRIPAVG_date = 2023-02-19 +summary_TRIPAVG_info = 89t +summary_TRIPAVG_odometer = 23589.5 +summary_TRIPAVG_delta_distance = 19.6 +summary_TRIPAVG_kwh_charged = 3.4 +summary_TRIPAVG_kwh_discharged = -3.5 +summary_TRIPAVG_distance_unit_per_kwh = 5.6 +summary_TRIPAVG_kwh_per_100_distance_unit = 17.9 +summary_TRIPAVG_cost = 0.86 +summary_TRIPAVG_soc = 57 +summary_TRIPAVG_soc_avg = 57 +summary_TRIPAVG_soc_min = 19 +summary_TRIPAVG_soc_max = 100 +summary_TRIPAVG_battery12v = 84 +summary_TRIPAVG_battery12v_avg = 86 +summary_TRIPAVG_battery12v_min = 76 +summary_TRIPAVG_battery12v_max = 95 +summary_TRIPAVG_charging_sessions = 0.2 +summary_TRIPAVG_trip_count = 1 +summary_TRIPAVG_range = 204 +summary_TRIPAVG_address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/date = 2023-02-19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/info = 47d +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/odometer = 23589.5 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/delta_distance = 37.1 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/kwh_charged = 6.3 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/kwh_discharged = -6.6 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/distance_unit_per_kwh = 5.6 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/kwh_per_100_distance_unit = 17.9 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/cost = 1.63 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/soc = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/soc_avg = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/soc_min = 19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/soc_max = 100 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/battery12v = 84 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/battery12v_avg = 86 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/battery12v_min = 76 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/battery12v_max = 95 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/charging_sessions = 0.4 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/trip_count = 1.9 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/range = 204 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/DAYAVG/address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +summary_DAYAVG_date = 2023-02-19 +summary_DAYAVG_info = 47d +summary_DAYAVG_odometer = 23589.5 +summary_DAYAVG_delta_distance = 37.1 +summary_DAYAVG_kwh_charged = 6.3 +summary_DAYAVG_kwh_discharged = -6.6 +summary_DAYAVG_distance_unit_per_kwh = 5.6 +summary_DAYAVG_kwh_per_100_distance_unit = 17.9 +summary_DAYAVG_cost = 1.63 +summary_DAYAVG_soc = 57 +summary_DAYAVG_soc_avg = 57 +summary_DAYAVG_soc_min = 19 +summary_DAYAVG_soc_max = 100 +summary_DAYAVG_battery12v = 84 +summary_DAYAVG_battery12v_avg = 86 +summary_DAYAVG_battery12v_min = 76 +summary_DAYAVG_battery12v_max = 95 +summary_DAYAVG_charging_sessions = 0.4 +summary_DAYAVG_trip_count = 1.9 +summary_DAYAVG_range = 204 +summary_DAYAVG_address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/date = 2023-02-19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/info = 47d +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/odometer = 23589.5 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/delta_distance = 259.5 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/kwh_charged = 44.4 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/kwh_discharged = -46.5 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/distance_unit_per_kwh = 5.6 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/kwh_per_100_distance_unit = 17.9 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/cost = 11.44 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/soc = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/soc_avg = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/soc_min = 19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/soc_max = 100 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/battery12v = 84 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/battery12v_avg = 86 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/battery12v_min = 76 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/battery12v_max = 95 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/charging_sessions = 2.7 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/trip_count = 13.3 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/range = 204 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/WEEKAVG/address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +summary_WEEKAVG_date = 2023-02-19 +summary_WEEKAVG_info = 47d +summary_WEEKAVG_odometer = 23589.5 +summary_WEEKAVG_delta_distance = 259.5 +summary_WEEKAVG_kwh_charged = 44.4 +summary_WEEKAVG_kwh_discharged = -46.5 +summary_WEEKAVG_distance_unit_per_kwh = 5.6 +summary_WEEKAVG_kwh_per_100_distance_unit = 17.9 +summary_WEEKAVG_cost = 11.44 +summary_WEEKAVG_soc = 57 +summary_WEEKAVG_soc_avg = 57 +summary_WEEKAVG_soc_min = 19 +summary_WEEKAVG_soc_max = 100 +summary_WEEKAVG_battery12v = 84 +summary_WEEKAVG_battery12v_avg = 86 +summary_WEEKAVG_battery12v_min = 76 +summary_WEEKAVG_battery12v_max = 95 +summary_WEEKAVG_charging_sessions = 2.7 +summary_WEEKAVG_trip_count = 13.3 +summary_WEEKAVG_range = 204 +summary_WEEKAVG_address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/date = 2023-02-19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/info = 47d +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/odometer = 23589.5 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/delta_distance = 1127.6 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/kwh_charged = 193.1 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/kwh_discharged = -202.0 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/distance_unit_per_kwh = 5.6 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/kwh_per_100_distance_unit = 17.9 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/cost = 49.70 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/soc = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/soc_avg = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/soc_min = 19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/soc_max = 100 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/battery12v = 84 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/battery12v_avg = 86 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/battery12v_min = 76 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/battery12v_max = 95 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/charging_sessions = 11.6 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/trip_count = 57.6 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/range = 204 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/MONTHAVG/address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +summary_MONTHAVG_date = 2023-02-19 +summary_MONTHAVG_info = 47d +summary_MONTHAVG_odometer = 23589.5 +summary_MONTHAVG_delta_distance = 1127.6 +summary_MONTHAVG_kwh_charged = 193.1 +summary_MONTHAVG_kwh_discharged = -202.0 +summary_MONTHAVG_distance_unit_per_kwh = 5.6 +summary_MONTHAVG_kwh_per_100_distance_unit = 17.9 +summary_MONTHAVG_cost = 49.70 +summary_MONTHAVG_soc = 57 +summary_MONTHAVG_soc_avg = 57 +summary_MONTHAVG_soc_min = 19 +summary_MONTHAVG_soc_max = 100 +summary_MONTHAVG_battery12v = 84 +summary_MONTHAVG_battery12v_avg = 86 +summary_MONTHAVG_battery12v_min = 76 +summary_MONTHAVG_battery12v_max = 95 +summary_MONTHAVG_charging_sessions = 11.6 +summary_MONTHAVG_trip_count = 57.6 +summary_MONTHAVG_range = 204 +summary_MONTHAVG_address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/date = 2023-02-19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/info = 47d +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/odometer = 23589.5 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/delta_distance = 13531.4 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/kwh_charged = 2317.3 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/kwh_discharged = -2424.4 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/distance_unit_per_kwh = 5.6 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/kwh_per_100_distance_unit = 17.9 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/cost = 596.40 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/soc = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/soc_avg = 57 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/soc_min = 19 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/soc_max = 100 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/battery12v = 84 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/battery12v_avg = 86 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/battery12v_min = 76 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/battery12v_max = 95 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/charging_sessions = 139.8 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/trip_count = 691.2 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/range = 204 +hyundai_kia_connect_monitor/KMHKR81CPNU012345/summary/YEARLY/address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" +summary_YEARLY_date = 2023-02-19 +summary_YEARLY_info = 47d +summary_YEARLY_odometer = 23589.5 +summary_YEARLY_delta_distance = 13531.4 +summary_YEARLY_kwh_charged = 2317.3 +summary_YEARLY_kwh_discharged = -2424.4 +summary_YEARLY_distance_unit_per_kwh = 5.6 +summary_YEARLY_kwh_per_100_distance_unit = 17.9 +summary_YEARLY_cost = 596.40 +summary_YEARLY_soc = 57 +summary_YEARLY_soc_avg = 57 +summary_YEARLY_soc_min = 19 +summary_YEARLY_soc_max = 100 +summary_YEARLY_battery12v = 84 +summary_YEARLY_battery12v_avg = 86 +summary_YEARLY_battery12v_min = 76 +summary_YEARLY_battery12v_max = 95 +summary_YEARLY_charging_sessions = 139.8 +summary_YEARLY_trip_count = 691.2 +summary_YEARLY_range = 204 +summary_YEARLY_address = "9;Kwakstraat; Duckstad; Nederland; 7054; AN" diff --git a/tests/run_monitor.bat b/tests/run_monitor.bat index 017e6c5..4d2c209 100644 --- a/tests/run_monitor.bat +++ b/tests/run_monitor.bat @@ -27,8 +27,8 @@ IF EXIST monitor.kml del /Q monitor.kml echo ################## copying INPUT ############# copy /Y tests\INPUT\* . -echo ################## python monitor.py ############# -call python monitor.py > test.monitor.log 2>&1 +echo ################## python monitor.py test ##### +call python monitor.py test > test.monitor.log 2>&1 type test.monitor.log echo ################## check manually differences with Beyond Compare #### diff --git a/tests/run_mypy.bat b/tests/run_mypy.bat new file mode 100644 index 0000000..9304400 --- /dev/null +++ b/tests/run_mypy.bat @@ -0,0 +1,19 @@ +@echo on +setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION + +IF not EXIST tests\run_mypy.bat ( + echo Run this script one directory higher: tests\run_mypy.bat + goto :error +) + +mypy monitor_utils.py +mypy mqtt_utils.py | egrep -v "^Found|paho.mqtt|: note:" +mypy domoticz_utils.py +mypy monitor.py | egrep -v "^Found|hyundai_kia_connect_api|paho.mqtt|: note:" +mypy summary.py | egrep -v "^Found|gspread|paho.mqtt|: note:" +mypy dailystats.py | egrep -v "^Found|gspread|paho.mqtt|: note:|: error: Argument 1 to .next." +mypy kml.py | egrep -v "^Success" +mypy shrink.py | egrep -v "^Success" +mypy debug.py | egrep -v "^Found|hyundai_kia_connect_api" + +pause \ No newline at end of file diff --git a/tests/run_tests.bat b/tests/run_tests.bat index 59548ed..16e2401 100644 --- a/tests/run_tests.bat +++ b/tests/run_tests.bat @@ -44,6 +44,10 @@ call :CHECK_DAILYSTATS "" test.dailystats.logday call :CHECK_SUMMARY sheetupdate test.summary.log call :CHECK_DAILYSTATS sheetupdate test.dailystats.log +call :CHECK_SUMMARY_MQTT_DOMOTICZ + +call :CHECK_DAILYSTATS_MQTT_DOMOTICZ + call :CHECK_TRANSLATIONS rem restore original monitor.cfg @@ -185,6 +189,31 @@ if "%args%" == "sheetupdate" ( ) EXIT /B +rem ####################### +:CHECK_SUMMARY_MQTT_DOMOTICZ +set args=debug trip day week month year +set output=test.summary.mqtt_domoticz.log + +echo ################## python summary.py %args% ^> %output% ############# +call python summary.py %args% | findstr "send_to_domoticz send_to_mqtt" | %SED% -e "s?^.*send_to_mqtt: ??" | %SED% -e "s?^.*send_to_domoticz: ??" > %output% + +call :CHECK_FILE %output% %output% + +EXIT /B + +rem ####################### +:CHECK_DAILYSTATS_MQTT_DOMOTICZ +set args=debug +set output=test.dailystats.mqtt_domoticz.log + +echo ################## python dailystats.py %args% ^> %output% ############# +call python dailystats.py %args% | findstr "send_to_domoticz send_to_mqtt" | %SED% -e "s?^.*send_to_mqtt: ??" | %SED% -e "s?^.*send_to_domoticz: ??" | %SED% -e "s?^dailystats_day_TOTALS_date =.*?dailystats_day_TOTALS_date =?" | %SED% -e "s?^hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/date =.*?hyundai_kia_connect_monitor/KMHKR81CPNU012345/dailystats_day/TOTALS/date =?" > %output% + +call :CHECK_FILE %output% %output% + +EXIT /B + + rem ####################### :CHECK_FILE set left=%1