Skip to content

Commit

Permalink
Explicitly set car_id
Browse files Browse the repository at this point in the history
... because Grafana is buggy as hell.

Fixes #274
  • Loading branch information
adriankumpf committed Nov 26, 2019
1 parent d8eb4e5 commit d59cefe
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 7 deletions.
24 changes: 20 additions & 4 deletions grafana/dashboards/charges.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
"datasource": "TeslaMate",
"fontSize": "100%",
"gridPos": {
"h": 39,
"h": 15,
"w": 24,
"x": 0,
"y": 1
Expand Down Expand Up @@ -72,7 +72,7 @@
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"link": true,
"linkTooltip": "",
"linkUrl": "d/BHhxFeZRz/laden?orgId=1&from=${__cell_0}&to=${__cell_1}&var-charging_process_id=${__cell_19}&var-car_id=$car_id",
"linkUrl": "d/BHhxFeZRz/laden?orgId=1&from=${__cell_0}&to=${__cell_1}&var-charging_process_id=${__cell_19}&var-car_id=${__cell_21}",
"pattern": "start_date",
"type": "date"
},
Expand Down Expand Up @@ -523,6 +523,22 @@
"type": "number",
"unit": "percentunit"
},
{
"alias": "",
"colorMode": null,
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"mappingType": 1,
"pattern": "car_id",
"thresholds": [],
"type": "hidden",
"unit": "short"
},
{
"alias": "",
"colorMode": null,
Expand All @@ -544,7 +560,7 @@
"group": [],
"metricColumn": "none",
"rawQuery": true,
"rawSql": "WITH data AS (\n SELECT\n (round(extract(epoch FROM start_date)) * 1000) - 5000 AS start_date_ts,\n (round(extract(epoch FROM end_date)) * 1000) + 5000 AS end_date_ts,\n start_date,\n end_date,\n CONCAT_WS(', ', COALESCE(addresses.name, CONCAT_WS(' ', addresses.road, addresses.house_number)), addresses.city) AS address,\n g.name as geofence_name,\n g.id as geofence_id,\n p.latitude,\n p.longitude,\n charge_energy_added,\n charge_energy_used,\n duration_min,\n start_battery_level,\n end_battery_level,\n start_[[preferred_range]]_range_km,\n end_[[preferred_range]]_range_km,\n outside_temp_avg,\n c.id,\n lag(end_[[preferred_range]]_range_km) OVER (ORDER BY start_date) - start_[[preferred_range]]_range_km AS range_loss,\n p.odometer - lag(p.odometer) OVER (ORDER BY start_date) AS distance,\n cars.efficiency,\n cost\n FROM\n charging_processes c\n LEFT JOIN positions p ON p.id = c.position_id\n LEFT JOIN cars ON cars.id = c.car_id\n LEFT JOIN addresses ON addresses.id = c.address_id\n LEFT JOIN geofences g ON g.id = geofence_id\nWHERE \n c.car_id = $car_id AND\n $__timeFilter(start_date)\nORDER BY\n start_date\n)\nSELECT\n start_date_ts,\n end_date_ts,\n start_date,\n end_date,\n COALESCE(geofence_name, address) as address, \n duration_min,\n charge_energy_added,\n cost,\n charge_energy_used,\n CASE WHEN charge_energy_used IS NULL THEN NULL ELSE LEAST(charge_energy_added / charge_energy_used, 1.0) END as charging_efficiency,\n charge_energy_added * 60 / NULLIF (duration_min, 0) AS charge_energy_added_per_hour,\n convert_km((end_[[preferred_range]]_range_km - start_[[preferred_range]]_range_km) * 60 / NULLIF (duration_min, 0), '$length_unit') AS range_added_per_hour_$length_unit,\n start_battery_level,\n end_battery_level,\n convert_km(start_[[preferred_range]]_range_km, '$length_unit') AS start_range_$length_unit,\n convert_km(end_[[preferred_range]]_range_km, '$length_unit') AS end_range_$length_unit,\n convert_km(distance, '$length_unit') AS distance_$length_unit,\n range_loss * efficiency AS consumption_kWh,\n range_loss * efficiency / NULLIF (distance, 0) * 100 * \n CASE WHEN '$length_unit' = 'km' THEN 1\n WHEN '$length_unit' = 'mi' THEN 1.60934\n END AS consumption_kWh_100$length_unit,\n id,\n CASE WHEN geofence_id IS NULL THEN CONCAT('new?lat=', latitude, '&lng=', longitude)\n WHEN geofence_id IS NOT NULL THEN CONCAT(geofence_id, '/edit')\n END as path\n FROM\n data\nWHERE\n (distance >= 0 OR distance IS NULL) AND (charge_energy_added IS NULL OR charge_energy_added > 0.1);\n ",
"rawSql": "WITH data AS (\n SELECT\n (round(extract(epoch FROM start_date)) * 1000) - 5000 AS start_date_ts,\n (round(extract(epoch FROM end_date)) * 1000) + 5000 AS end_date_ts,\n start_date,\n end_date,\n CONCAT_WS(', ', COALESCE(addresses.name, CONCAT_WS(' ', addresses.road, addresses.house_number)), addresses.city) AS address,\n g.name as geofence_name,\n g.id as geofence_id,\n p.latitude,\n p.longitude,\n charge_energy_added,\n charge_energy_used,\n duration_min,\n start_battery_level,\n end_battery_level,\n start_[[preferred_range]]_range_km,\n end_[[preferred_range]]_range_km,\n outside_temp_avg,\n c.id,\n lag(end_[[preferred_range]]_range_km) OVER (ORDER BY start_date) - start_[[preferred_range]]_range_km AS range_loss,\n p.odometer - lag(p.odometer) OVER (ORDER BY start_date) AS distance,\n cars.efficiency,\n c.car_id,\n cost\n FROM\n charging_processes c\n LEFT JOIN positions p ON p.id = c.position_id\n LEFT JOIN cars ON cars.id = c.car_id\n LEFT JOIN addresses ON addresses.id = c.address_id\n LEFT JOIN geofences g ON g.id = geofence_id\nWHERE \n c.car_id = $car_id AND\n $__timeFilter(start_date)\nORDER BY\n start_date\n)\nSELECT\n start_date_ts,\n end_date_ts,\n start_date,\n end_date,\n COALESCE(geofence_name, address) as address, \n duration_min,\n charge_energy_added,\n cost,\n charge_energy_used,\n CASE WHEN charge_energy_used IS NULL THEN NULL ELSE LEAST(charge_energy_added / charge_energy_used, 1.0) END as charging_efficiency,\n charge_energy_added * 60 / NULLIF (duration_min, 0) AS charge_energy_added_per_hour,\n convert_km((end_[[preferred_range]]_range_km - start_[[preferred_range]]_range_km) * 60 / NULLIF (duration_min, 0), '$length_unit') AS range_added_per_hour_$length_unit,\n start_battery_level,\n end_battery_level,\n convert_km(start_[[preferred_range]]_range_km, '$length_unit') AS start_range_$length_unit,\n convert_km(end_[[preferred_range]]_range_km, '$length_unit') AS end_range_$length_unit,\n convert_km(distance, '$length_unit') AS distance_$length_unit,\n range_loss * efficiency AS consumption_kWh,\n range_loss * efficiency / NULLIF (distance, 0) * 100 * \n CASE WHEN '$length_unit' = 'km' THEN 1\n WHEN '$length_unit' = 'mi' THEN 1.60934\n END AS consumption_kWh_100$length_unit,\n id,\n CASE WHEN geofence_id IS NULL THEN CONCAT('new?lat=', latitude, '&lng=', longitude)\n WHEN geofence_id IS NOT NULL THEN CONCAT(geofence_id, '/edit')\n END as path,\n car_id\n FROM\n data\nWHERE\n (distance >= 0 OR distance IS NULL) AND (charge_energy_added IS NULL OR charge_energy_added > 0.1);\n ",
"refId": "A",
"select": [
[
Expand Down Expand Up @@ -589,7 +605,7 @@
"hide": 2,
"includeAll": true,
"label": "Car",
"multi": true,
"multi": false,
"name": "car_id",
"options": [],
"query": "SELECT name AS __text, id AS __value FROM cars;",
Expand Down
22 changes: 19 additions & 3 deletions grafana/dashboards/drives.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@
"decimals": 2,
"link": true,
"linkTooltip": "",
"linkUrl": "d/zm7wN6Zgz?from=${__cell_0}&to=${__cell_1}&var-car_id=$car_id",
"linkUrl": "d/zm7wN6Zgz?from=${__cell_0}&to=${__cell_1}&var-car_id=${__cell_27}",
"mappingType": 1,
"pattern": "start_date",
"thresholds": [],
Expand Down Expand Up @@ -668,6 +668,22 @@
"type": "hidden",
"unit": "short"
},
{
"alias": "",
"colorMode": null,
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": 2,
"mappingType": 1,
"pattern": "car_id",
"thresholds": [],
"type": "hidden",
"unit": "short"
},
{
"alias": "",
"colorMode": null,
Expand All @@ -690,7 +706,7 @@
"group": [],
"metricColumn": "none",
"rawQuery": true,
"rawSql": "SELECT\n round(extract(epoch FROM start_date)) * 1000 AS start_date_ts,\n round(extract(epoch FROM end_date)) * 1000 AS end_date_ts,\n start_date,\n end_date,\n COALESCE(start_geofence.name, CONCAT_WS(', ', COALESCE(start_address.name, CONCAT_WS(' ', start_address.road, start_address.house_number)), start_address.city)) AS start_address,\n COALESCE(end_geofence.name, CONCAT_WS(', ', COALESCE(end_address.name, CONCAT_WS(' ', end_address.road, end_address.house_number)), end_address.city)) AS end_address,\n duration_min,\n convert_km (distance, '$length_unit') AS distance_$length_unit,\n convert_km (start_[[preferred_range]]_range_km - end_[[preferred_range]]_range_km, '$length_unit') AS range_diff_$length_unit,\n convert_km (distance, '$length_unit') / duration_min * 60 AS speed_avg_$length_unit,\n (NULLIF(GREATEST(start_[[preferred_range]]_range_km - end_[[preferred_range]]_range_km, 0), 0) * car.efficiency / distance * 100) * \n CASE WHEN '$length_unit' = 'km' THEN 1\n WHEN '$length_unit' = 'mi' THEN 1.60934\n END AS consumption_kWh_100,\n NULLIF(GREATEST(start_[[preferred_range]]_range_km - end_[[preferred_range]]_range_km, 0), 0) * car.efficiency AS \"consumption_kWh\",\n distance / NULLIF(GREATEST(start_[[preferred_range]]_range_km - end_[[preferred_range]]_range_km, 0), 0) as efficiency,\n convert_celsius (outside_temp_avg, '$temp_unit') AS outside_temp_$temp_unit,\n convert_celsius (inside_temp_avg, '$temp_unit') AS inside_temp_$temp_unit,\n convert_km (speed_max, '$length_unit') as speed_max_$length_unit,\n power_max,\n power_min,\n power_avg,\n convert_km (start_[[preferred_range]]_range_km, '$length_unit') as start_range_$length_unit,\n convert_km (end_[[preferred_range]]_range_km, '$length_unit') as end_range_$length_unit,\n convert_km (start_km, '$length_unit') as start_$length_unit,\n convert_km (end_km, '$length_unit') as end_$length_unit,\n drives.id,\n CASE WHEN start_geofence.id IS NULL THEN CONCAT('new?lat=', start_position.latitude, '&lng=', start_position.longitude)\n WHEN start_geofence.id IS NOT NULL THEN CONCAT(start_geofence.id, '/edit')\n END as start_path,\n CASE WHEN end_geofence.id IS NULL THEN CONCAT('new?lat=', end_position.latitude, '&lng=', end_position.longitude)\n WHEN end_geofence.id IS NOT NULL THEN CONCAT(end_geofence.id, '/edit')\n END as end_path,\n TO_CHAR((duration_min * INTERVAL '1 minute'), 'HH24:MI') as duration_str\n FROM\n drives\n LEFT JOIN addresses start_address ON start_address_id = start_address.id\n LEFT JOIN addresses end_address ON end_address_id = end_address.id\n LEFT JOIN positions start_position ON start_position_id = start_position.id\n LEFT JOIN positions end_position ON end_position_id = end_position.id\n LEFT JOIN geofences start_geofence ON start_geofence_id = start_geofence.id\n LEFT JOIN geofences end_geofence ON end_geofence_id = end_geofence.id\n LEFT JOIN cars car ON car.id = drives.car_id\nWHERE\n $__timeFilter(start_date)\n AND (duration_min > 1 OR end_date IS NULL)\n AND drives.car_id = $car_id\nORDER BY\n start_date DESC;",
"rawSql": "SELECT\n round(extract(epoch FROM start_date)) * 1000 AS start_date_ts,\n round(extract(epoch FROM end_date)) * 1000 AS end_date_ts,\n start_date,\n end_date,\n COALESCE(start_geofence.name, CONCAT_WS(', ', COALESCE(start_address.name, CONCAT_WS(' ', start_address.road, start_address.house_number)), start_address.city)) AS start_address,\n COALESCE(end_geofence.name, CONCAT_WS(', ', COALESCE(end_address.name, CONCAT_WS(' ', end_address.road, end_address.house_number)), end_address.city)) AS end_address,\n duration_min,\n convert_km (distance, '$length_unit') AS distance_$length_unit,\n convert_km (start_[[preferred_range]]_range_km - end_[[preferred_range]]_range_km, '$length_unit') AS range_diff_$length_unit,\n convert_km (distance, '$length_unit') / duration_min * 60 AS speed_avg_$length_unit,\n (NULLIF(GREATEST(start_[[preferred_range]]_range_km - end_[[preferred_range]]_range_km, 0), 0) * car.efficiency / distance * 100) * \n CASE WHEN '$length_unit' = 'km' THEN 1\n WHEN '$length_unit' = 'mi' THEN 1.60934\n END AS consumption_kWh_100,\n NULLIF(GREATEST(start_[[preferred_range]]_range_km - end_[[preferred_range]]_range_km, 0), 0) * car.efficiency AS \"consumption_kWh\",\n distance / NULLIF(GREATEST(start_[[preferred_range]]_range_km - end_[[preferred_range]]_range_km, 0), 0) as efficiency,\n convert_celsius (outside_temp_avg, '$temp_unit') AS outside_temp_$temp_unit,\n convert_celsius (inside_temp_avg, '$temp_unit') AS inside_temp_$temp_unit,\n convert_km (speed_max, '$length_unit') as speed_max_$length_unit,\n power_max,\n power_min,\n power_avg,\n convert_km (start_[[preferred_range]]_range_km, '$length_unit') as start_range_$length_unit,\n convert_km (end_[[preferred_range]]_range_km, '$length_unit') as end_range_$length_unit,\n convert_km (start_km, '$length_unit') as start_$length_unit,\n convert_km (end_km, '$length_unit') as end_$length_unit,\n drives.id,\n CASE WHEN start_geofence.id IS NULL THEN CONCAT('new?lat=', start_position.latitude, '&lng=', start_position.longitude)\n WHEN start_geofence.id IS NOT NULL THEN CONCAT(start_geofence.id, '/edit')\n END as start_path,\n CASE WHEN end_geofence.id IS NULL THEN CONCAT('new?lat=', end_position.latitude, '&lng=', end_position.longitude)\n WHEN end_geofence.id IS NOT NULL THEN CONCAT(end_geofence.id, '/edit')\n END as end_path,\n TO_CHAR((duration_min * INTERVAL '1 minute'), 'HH24:MI') as duration_str,\n car.id as car_id\n FROM\n drives\n LEFT JOIN addresses start_address ON start_address_id = start_address.id\n LEFT JOIN addresses end_address ON end_address_id = end_address.id\n LEFT JOIN positions start_position ON start_position_id = start_position.id\n LEFT JOIN positions end_position ON end_position_id = end_position.id\n LEFT JOIN geofences start_geofence ON start_geofence_id = start_geofence.id\n LEFT JOIN geofences end_geofence ON end_geofence_id = end_geofence.id\n LEFT JOIN cars car ON car.id = drives.car_id\nWHERE\n $__timeFilter(start_date)\n AND (duration_min > 1 OR end_date IS NULL)\n AND drives.car_id = $car_id\nORDER BY\n start_date DESC;",
"refId": "A",
"select": [
[
Expand Down Expand Up @@ -733,7 +749,7 @@
"hide": 2,
"includeAll": true,
"label": "Car",
"multi": true,
"multi": false,
"name": "car_id",
"options": [],
"query": "SELECT name AS __text, id AS __value FROM cars;",
Expand Down

0 comments on commit d59cefe

Please sign in to comment.