Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion grafana/dashboards/battery-health.json
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,7 @@
"editorMode": "code",
"format": "time_series",
"rawQuery": true,
"rawSql": "WITH data AS (\n SELECT\n\t\tcp.id,\n\t\tcp.charge_energy_added,\n\t\tCASE WHEN NULLIF(mode() within group (order by charger_phases),0) is null THEN 'DC'\n\t\t\t\t ELSE 'AC'\n\t\tEND AS current,\n\t\tcp.charge_energy_used\n\tFROM charging_processes cp\n RIGHT JOIN charges ON cp.id = charges.charging_process_id\n WHERE\n\t cp.car_id = $car_id\n\t AND cp.charge_energy_added > 0.01\n GROUP BY 1,2\n)\nSELECT\n\tnow() AS time,\n\tSUM(GREATEST(charge_energy_added, charge_energy_used)) AS value,\n\tcurrent AS metric\nFROM data\nGROUP BY 3\nORDER BY metric DESC;",
"rawSql": "WITH data AS (\n SELECT\n\t\tcp.id,\n\t\tcp.charge_energy_added,\n\t\tCASE\n\t\t\tWHEN NULLIF(mode() within group (order by charger_phases), 0) IS NOT NULL THEN 'AC'\n\t\t\tWHEN bool_or(fast_charger_present) = true THEN 'DC'\n\t\t\tWHEN MAX(g.charge_type::text) IS NOT NULL THEN MAX(g.charge_type::text)\n\t\t\tELSE 'DC'\n\t\tEND AS current,\n\t\tcp.charge_energy_used\n\tFROM charging_processes cp\n RIGHT JOIN charges ON cp.id = charges.charging_process_id\n LEFT JOIN geofences g ON g.id = cp.geofence_id\n WHERE\n\t cp.car_id = $car_id\n\t AND cp.charge_energy_added > 0.01\n GROUP BY 1,2\n)\nSELECT\n\tnow() AS time,\n\tSUM(GREATEST(charge_energy_added, charge_energy_used)) AS value,\n\tcurrent AS metric\nFROM data\nGROUP BY 3\nORDER BY metric DESC;",
"refId": "A",
"sql": {
"columns": [
Expand Down
2 changes: 1 addition & 1 deletion grafana/dashboards/charges.json
Original file line number Diff line number Diff line change
Expand Up @@ -1178,7 +1178,7 @@
"editorMode": "code",
"format": "table",
"rawQuery": true,
"rawSql": "WITH data AS (\n SELECT\n floor(extract(epoch FROM start_date)) * 1000 AS start_date_ts,\n ceil(extract(epoch FROM end_date)) * 1000 AS end_date_ts,\n start_date,\n end_date,\n CONCAT_WS(', ', COALESCE(addresses.name, nullif(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 cp.charge_energy_added,\n cp.charge_energy_used,\n duration_min,\n start_battery_level,\n end_battery_level,\n end_${preferred_range}_range_km - start_${preferred_range}_range_km as range_added,\n outside_temp_avg,\n cp.id,\n p.odometer - lag(p.odometer) OVER (ORDER BY start_date) AS distance,\n cars.efficiency,\n cp.car_id,\n cost,\n max(c.charger_voltage) as max_charger_voltage,\n CASE WHEN NULLIF(mode() within group (order by charger_phases),0) is null THEN 'DC' ELSE 'AC' END AS charge_type,\n p.odometer as odometer\n FROM\n charging_processes cp\n\tLEFT JOIN charges c ON cp.id = c.charging_process_id\n LEFT JOIN positions p ON p.id = cp.position_id\n LEFT JOIN cars ON cars.id = cp.car_id\n LEFT JOIN addresses ON addresses.id = cp.address_id\n LEFT JOIN geofences g ON g.id = geofence_id\n WHERE \n cp.car_id = $car_id AND\n $__timeFilter(start_date) AND\n (cp.charge_energy_added IS NULL OR cp.charge_energy_added > 0) AND\n ('${geofence:pipe}' = '-1' OR geofence_id in ($geofence))\n GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, p.odometer\n ORDER BY\n start_date\n)\nSELECT\n start_date_ts,\n end_date_ts,\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 id,\n -- Columns\n start_date,\n end_date,\n COALESCE(geofence_name, address) as address, \n charge_type,\n duration_min,\n cost,\n cost / NULLIF(greatest(charge_energy_added, charge_energy_used), 0) as cost_per_kwh,\n charge_energy_added,\n greatest(charge_energy_used, charge_energy_added) as charge_energy_used,\n charge_energy_added / greatest(charge_energy_used, charge_energy_added) as charging_efficiency,\n convert_celsius(outside_temp_avg, '$temp_unit') AS outside_temp_avg_$temp_unit,\n charge_energy_added * 60 / NULLIF (duration_min, 0) AS charge_energy_added_per_hour,\n convert_km(range_added * 60 / NULLIF (duration_min, 0), '$length_unit') AS range_added_per_hour_$length_unit,\n convert_km(range_added, '$length_unit') AS range_added_$length_unit,\n start_battery_level,\n end_battery_level,\n convert_km(odometer::numeric, '$length_unit') AS odometer_$length_unit\n FROM\n data\nWHERE\n (distance >= 0 OR distance IS NULL)\n AND duration_min >= '$min_duration_min'\n AND \n CASE\n WHEN '$cost' !~ '^[0-9]+$' THEN TRUE \n ELSE cost >= COALESCE(NULLIF('$cost', '')::NUMERIC, 0) \n END\n AND charge_type = ANY(CASE WHEN array_to_string(ARRAY[$charge_type], ',') = 'DC' THEN ARRAY['DC'] WHEN array_to_string(ARRAY[$charge_type], ',') = 'AC' THEN ARRAY['AC'] ELSE ARRAY['DC', 'AC'] END)\n AND address ILIKE '%$location%'\nORDER BY\n start_date DESC;",
"rawSql": "WITH data AS (\n SELECT\n floor(extract(epoch FROM start_date)) * 1000 AS start_date_ts,\n ceil(extract(epoch FROM end_date)) * 1000 AS end_date_ts,\n start_date,\n end_date,\n CONCAT_WS(', ', COALESCE(addresses.name, nullif(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 cp.charge_energy_added,\n cp.charge_energy_used,\n duration_min,\n start_battery_level,\n end_battery_level,\n end_${preferred_range}_range_km - start_${preferred_range}_range_km as range_added,\n outside_temp_avg,\n cp.id,\n p.odometer - lag(p.odometer) OVER (ORDER BY start_date) AS distance,\n cars.efficiency,\n cp.car_id,\n cost,\n max(c.charger_voltage) as max_charger_voltage,\n CASE\n WHEN NULLIF(mode() within group (order by charger_phases), 0) IS NOT NULL THEN 'AC'\n WHEN bool_or(c.fast_charger_present) = true THEN 'DC'\n WHEN MAX(g.charge_type::text) IS NOT NULL THEN MAX(g.charge_type::text)\n ELSE 'DC'\n END AS charge_type,\n p.odometer as odometer\n FROM\n charging_processes cp\n\tLEFT JOIN charges c ON cp.id = c.charging_process_id\n LEFT JOIN positions p ON p.id = cp.position_id\n LEFT JOIN cars ON cars.id = cp.car_id\n LEFT JOIN addresses ON addresses.id = cp.address_id\n LEFT JOIN geofences g ON g.id = geofence_id\n WHERE \n cp.car_id = $car_id AND\n $__timeFilter(start_date) AND\n (cp.charge_energy_added IS NULL OR cp.charge_energy_added > 0) AND\n ('${geofence:pipe}' = '-1' OR geofence_id in ($geofence))\n GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, p.odometer\n ORDER BY\n start_date\n)\nSELECT\n start_date_ts,\n end_date_ts,\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 id,\n -- Columns\n start_date,\n end_date,\n COALESCE(geofence_name, address) as address, \n charge_type,\n duration_min,\n cost,\n cost / NULLIF(greatest(charge_energy_added, charge_energy_used), 0) as cost_per_kwh,\n charge_energy_added,\n greatest(charge_energy_used, charge_energy_added) as charge_energy_used,\n charge_energy_added / greatest(charge_energy_used, charge_energy_added) as charging_efficiency,\n convert_celsius(outside_temp_avg, '$temp_unit') AS outside_temp_avg_$temp_unit,\n charge_energy_added * 60 / NULLIF (duration_min, 0) AS charge_energy_added_per_hour,\n convert_km(range_added * 60 / NULLIF (duration_min, 0), '$length_unit') AS range_added_per_hour_$length_unit,\n convert_km(range_added, '$length_unit') AS range_added_$length_unit,\n start_battery_level,\n end_battery_level,\n convert_km(odometer::numeric, '$length_unit') AS odometer_$length_unit\n FROM\n data\nWHERE\n (distance >= 0 OR distance IS NULL)\n AND duration_min >= '$min_duration_min'\n AND \n CASE\n WHEN '$cost' !~ '^[0-9]+$' THEN TRUE \n ELSE cost >= COALESCE(NULLIF('$cost', '')::NUMERIC, 0) \n END\n AND charge_type = ANY(CASE WHEN array_to_string(ARRAY[$charge_type], ',') = 'DC' THEN ARRAY['DC'] WHEN array_to_string(ARRAY[$charge_type], ',') = 'AC' THEN ARRAY['AC'] ELSE ARRAY['DC', 'AC'] END)\n AND address ILIKE '%$location%'\nORDER BY\n start_date DESC;",
"refId": "A",
"sql": {
"columns": [
Expand Down
8 changes: 4 additions & 4 deletions grafana/dashboards/charging-stats.json
Original file line number Diff line number Diff line change
Expand Up @@ -614,7 +614,7 @@
"editorMode": "code",
"format": "table",
"rawQuery": true,
"rawSql": "WITH data AS (\n SELECT\n\t\tcp.id,\n cp.cost,\n cp.charge_energy_added,\n cp.charge_energy_used,\n\t\tCASE WHEN NULLIF(mode() within group (order by charger_phases),0) is null THEN 'DC'\n\t\t\t\t ELSE 'AC'\n\t\tEND AS current\n\tFROM charging_processes cp\n RIGHT JOIN charges ON cp.id = charges.charging_process_id\n WHERE\n\t cp.car_id = $car_id\n AND duration_min >= $min_duration\n\t AND $__timeFilter(end_date)\n GROUP BY 1\n)\n\nSELECT \n sum(cost) / sum(greatest(charge_energy_added, charge_energy_used))\nFROM data\n WHERE current = 'DC'",
"rawSql": "WITH data AS (\n SELECT\n\t\tcp.id,\n cp.cost,\n cp.charge_energy_added,\n cp.charge_energy_used,\n\t\tCASE\n\t\t\tWHEN NULLIF(mode() within group (order by charger_phases), 0) IS NOT NULL THEN 'AC'\n\t\t\tWHEN bool_or(fast_charger_present) = true THEN 'DC'\n\t\t\tWHEN MAX(g.charge_type::text) IS NOT NULL THEN MAX(g.charge_type::text)\n\t\t\tELSE 'DC'\n\t\tEND AS current\n\tFROM charging_processes cp\n RIGHT JOIN charges ON cp.id = charges.charging_process_id\n LEFT JOIN geofences g ON g.id = cp.geofence_id\n WHERE\n\t cp.car_id = $car_id\n AND duration_min >= $min_duration\n\t AND $__timeFilter(end_date)\n GROUP BY 1\n)\n\nSELECT \n sum(cost) / sum(greatest(charge_energy_added, charge_energy_used))\nFROM data\n WHERE current = 'DC'",
"refId": "A",
"sql": {
"columns": [
Expand Down Expand Up @@ -696,7 +696,7 @@
"editorMode": "code",
"format": "table",
"rawQuery": true,
"rawSql": "WITH data AS (\n SELECT\n\t\tcp.id,\n cp.cost,\n cp.charge_energy_added,\n cp.charge_energy_used,\n\t\tCASE WHEN NULLIF(mode() within group (order by charger_phases),0) is null THEN 'DC'\n\t\t\t\t ELSE 'AC'\n\t\tEND AS current\n\tFROM charging_processes cp\n RIGHT JOIN charges ON cp.id = charges.charging_process_id\n WHERE\n\t cp.car_id = $car_id\n AND duration_min >= $min_duration\n\t AND $__timeFilter(end_date)\n GROUP BY 1\n)\n\nSELECT \n sum(cost) / sum(greatest(charge_energy_added, charge_energy_used))\nFROM data\n WHERE current = 'AC'",
"rawSql": "WITH data AS (\n SELECT\n\t\tcp.id,\n cp.cost,\n cp.charge_energy_added,\n cp.charge_energy_used,\n\t\tCASE\n\t\t\tWHEN NULLIF(mode() within group (order by charger_phases), 0) IS NOT NULL THEN 'AC'\n\t\t\tWHEN bool_or(fast_charger_present) = true THEN 'DC'\n\t\t\tWHEN MAX(g.charge_type::text) IS NOT NULL THEN MAX(g.charge_type::text)\n\t\t\tELSE 'DC'\n\t\tEND AS current\n\tFROM charging_processes cp\n RIGHT JOIN charges ON cp.id = charges.charging_process_id\n LEFT JOIN geofences g ON g.id = cp.geofence_id\n WHERE\n\t cp.car_id = $car_id\n AND duration_min >= $min_duration\n\t AND $__timeFilter(end_date)\n GROUP BY 1\n)\n\nSELECT \n sum(cost) / sum(greatest(charge_energy_added, charge_energy_used))\nFROM data\n WHERE current = 'AC'",
"refId": "A",
"sql": {
"columns": [
Expand Down Expand Up @@ -1146,7 +1146,7 @@
"editorMode": "code",
"format": "time_series",
"rawQuery": true,
"rawSql": "WITH data AS (\n SELECT\n\t\tcp.id,\n\t\tcp.charge_energy_added,\n\t\tCASE WHEN NULLIF(mode() within group (order by charger_phases),0) is null THEN 'DC'\n\t\t\t\t ELSE 'AC'\n\t\tEND AS current,\n\t\tcp.charge_energy_used\n\tFROM charging_processes cp\n RIGHT JOIN charges ON cp.id = charges.charging_process_id\n WHERE\n\t cp.car_id = $car_id\n\t AND duration_min >= $min_duration\n\t AND $__timeFilter(end_date)\n GROUP BY 1,2\n)\nSELECT\n\tnow() AS time,\n\tSUM(GREATEST(charge_energy_added, charge_energy_used)) AS value,\n\tcurrent AS metric\nFROM data\nGROUP BY 3\nORDER BY metric DESC;",
"rawSql": "WITH data AS (\n SELECT\n\t\tcp.id,\n\t\tcp.charge_energy_added,\n\t\tCASE\n\t\t\tWHEN NULLIF(mode() within group (order by charger_phases), 0) IS NOT NULL THEN 'AC'\n\t\t\tWHEN bool_or(fast_charger_present) = true THEN 'DC'\n\t\t\tWHEN MAX(g.charge_type::text) IS NOT NULL THEN MAX(g.charge_type::text)\n\t\t\tELSE 'DC'\n\t\tEND AS current,\n\t\tcp.charge_energy_used\n\tFROM charging_processes cp\n RIGHT JOIN charges ON cp.id = charges.charging_process_id\n LEFT JOIN geofences g ON g.id = cp.geofence_id\n WHERE\n\t cp.car_id = $car_id\n\t AND duration_min >= $min_duration\n\t AND $__timeFilter(end_date)\n GROUP BY 1,2\n)\nSELECT\n\tnow() AS time,\n\tSUM(GREATEST(charge_energy_added, charge_energy_used)) AS value,\n\tcurrent AS metric\nFROM data\nGROUP BY 3\nORDER BY metric DESC;",
"refId": "A",
"sql": {
"columns": [
Expand Down Expand Up @@ -1449,7 +1449,7 @@
"editorMode": "code",
"format": "time_series",
"rawQuery": true,
"rawSql": "WITH data AS (\n SELECT\n\t\tcp.id,\n\t\tcp.duration_min,\n\t\tCASE WHEN NULLIF(mode() within group (order by charger_phases),0) is null THEN 'DC'\n\t\t\t\t ELSE 'AC'\n\t\tEND AS current\n\tFROM charging_processes cp\n RIGHT JOIN charges ON cp.id = charges.charging_process_id\n WHERE\n\t cp.car_id = $car_id\n\t AND cp.duration_min >= $min_duration\n\t AND $__timeFilter(end_date)\n GROUP BY 1,2\n)\nSELECT\n\tnow() AS time,\n\tsum(duration_min) * 60 AS value,\n\tcurrent AS metric\nFROM data\nGROUP BY 3\nORDER BY metric DESC;",
"rawSql": "WITH data AS (\n SELECT\n\t\tcp.id,\n\t\tcp.duration_min,\n\t\tCASE\n\t\t\tWHEN NULLIF(mode() within group (order by charger_phases), 0) IS NOT NULL THEN 'AC'\n\t\t\tWHEN bool_or(fast_charger_present) = true THEN 'DC'\n\t\t\tWHEN MAX(g.charge_type::text) IS NOT NULL THEN MAX(g.charge_type::text)\n\t\t\tELSE 'DC'\n\t\tEND AS current\n\tFROM charging_processes cp\n RIGHT JOIN charges ON cp.id = charges.charging_process_id\n LEFT JOIN geofences g ON g.id = cp.geofence_id\n WHERE\n\t cp.car_id = $car_id\n\t AND cp.duration_min >= $min_duration\n\t AND $__timeFilter(end_date)\n GROUP BY 1,2\n)\nSELECT\n\tnow() AS time,\n\tsum(duration_min) * 60 AS value,\n\tcurrent AS metric\nFROM data\nGROUP BY 3\nORDER BY metric DESC;",
"refId": "A",
"sql": {
"columns": [
Expand Down
Loading