107 lines
3.1 KiB
SQL
107 lines
3.1 KiB
SQL
-- =============================================================
|
||
-- R__058_vw_latest_telemetry.sql
|
||
-- EMS Platform – aktuální stav všech zařízení per lokalita
|
||
-- Repeatable migration
|
||
-- =============================================================
|
||
|
||
-- security_invoker = false: oprávnění na podkladové hypertably nemusí mít ems_anon (PostgREST).
|
||
CREATE OR REPLACE VIEW ems.vw_latest_inverter
|
||
WITH (security_invoker = false)
|
||
AS
|
||
SELECT DISTINCT ON (t.inverter_id)
|
||
t.site_id,
|
||
t.inverter_id,
|
||
inv.code AS inverter_code,
|
||
t.measured_at,
|
||
t.pv_power_w,
|
||
t.battery_soc_percent,
|
||
t.battery_power_w,
|
||
t.grid_power_w,
|
||
t.load_power_w,
|
||
t.inverter_temp_c,
|
||
t.operating_mode,
|
||
t.fault_code,
|
||
now() - t.measured_at AS data_age,
|
||
t.pv1_power_w,
|
||
t.pv2_power_w,
|
||
t.gen_port_power_w,
|
||
t.batt_charge_today_wh,
|
||
t.batt_discharge_today_wh,
|
||
t.run_state,
|
||
t.is_export_limited,
|
||
t.pv_derating_flags
|
||
FROM ems.telemetry_inverter t
|
||
JOIN ems.asset_inverter inv ON inv.id = t.inverter_id
|
||
ORDER BY t.inverter_id, t.measured_at DESC;
|
||
|
||
COMMENT ON VIEW ems.vw_latest_inverter IS
|
||
'Nejnovější telemetrická data pro každý střídač. Slouží pro real-time dashboard a health check.';
|
||
|
||
-- ------------------------------------------------------------
|
||
|
||
CREATE OR REPLACE VIEW ems.vw_latest_ev_charger
|
||
WITH (security_invoker = false)
|
||
AS
|
||
SELECT DISTINCT ON (t.charger_id, t.connector_id)
|
||
t.site_id,
|
||
t.charger_id,
|
||
ch.code AS charger_code,
|
||
t.connector_id,
|
||
t.measured_at,
|
||
t.status,
|
||
t.power_w,
|
||
t.energy_kwh,
|
||
t.current_a,
|
||
t.session_id,
|
||
t.error_code,
|
||
now() - t.measured_at AS data_age
|
||
FROM ems.telemetry_ev_charger t
|
||
JOIN ems.asset_ev_charger ch ON ch.id = t.charger_id
|
||
ORDER BY t.charger_id, t.connector_id, t.measured_at DESC;
|
||
|
||
COMMENT ON VIEW ems.vw_latest_ev_charger IS
|
||
'Nejnovější telemetrická data pro každý konektor EV nabíječky. Slouží pro dashboard a řízení nabíjení.';
|
||
|
||
-- ------------------------------------------------------------
|
||
|
||
CREATE OR REPLACE VIEW ems.vw_latest_heat_pump
|
||
WITH (security_invoker = false)
|
||
AS
|
||
SELECT
|
||
hp.site_id,
|
||
hp.id AS heat_pump_id,
|
||
hp.code AS heat_pump_code,
|
||
t.measured_at,
|
||
t.outdoor_temp_c,
|
||
t.tuv_tank_temp_c,
|
||
t.water_outlet_temp_c,
|
||
t.power_w,
|
||
t.operating_mode,
|
||
t.cop_actual,
|
||
t.defrost_active,
|
||
t.alarm_code,
|
||
-- Odhadovaný COP pro aktuální venkovní teplotu
|
||
ems.fn_cop_estimate(hp.id, t.outdoor_temp_c) AS cop_estimated,
|
||
now() - t.measured_at AS data_age
|
||
FROM ems.asset_heat_pump hp
|
||
LEFT JOIN LATERAL (
|
||
SELECT
|
||
thp.measured_at,
|
||
thp.outdoor_temp_c,
|
||
thp.tuv_tank_temp_c,
|
||
thp.water_outlet_temp_c,
|
||
thp.power_w,
|
||
thp.operating_mode,
|
||
thp.cop_actual,
|
||
thp.defrost_active,
|
||
thp.alarm_code
|
||
FROM ems.telemetry_heat_pump thp
|
||
WHERE thp.heat_pump_id = hp.id
|
||
ORDER BY thp.measured_at DESC
|
||
LIMIT 1
|
||
) t ON true;
|
||
|
||
COMMENT ON VIEW ems.vw_latest_heat_pump IS
|
||
'Nejnovější telemetrická data pro každé tepelné čerpadlo včetně odhadovaného COP.
|
||
Slouží pro real-time dashboard a rozhodovací logiku plánování.';
|