import type { Meta, StoryFn } from "@storybook/vue3"; import Energyflow from "./Energyflow.vue"; import { CURRENCY } from "@/types/evcc"; export default { title: "Energyflow/Energyflow", component: Energyflow, } as Meta; const Template: StoryFn = (args: any) => ({ components: { Energyflow }, setup() { return { args }; }, template: '', }); export const GridAndPV = Template.bind({}); GridAndPV.args = { gridConfigured: true, pvConfigured: true, pvPower: 7300, gridPower: -2300, homePower: 800, loadpoints: [ { icon: "car", charging: true, title: "Garage", chargePower: 1000, connected: true, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, { icon: "bike", charging: true, title: "Garage", chargePower: 1000, connected: true, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, { icon: "car", charging: true, title: "Garage", chargePower: 2200, connected: true, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, ], tariffGrid: 0.25, tariffFeedIn: 0.08, smartCostType: "price", currency: CURRENCY.EUR, pv: [{ power: 5000 }, { power: 2300 }], forecast: { solar: { today: { energy: 1000, complete: true }, tomorrow: { energy: 1000, complete: false }, dayAfterTomorrow: { energy: 1000, complete: false }, }, }, } as any; function hoursFromNow(h: number): string { return new Date(Date.now() + h * 60 * 60 * 1000).toISOString(); } const batteryBase = { gridConfigured: true, pvConfigured: true, batteryConfigured: true, homePower: 800, }; const bat = (power: number, soc: number, forecast: any, devices: any[] = []) => ({ power, soc, capacity: 10, devices, forecast, }); const dev = (title: string, power: number, soc: number) => ({ title, power, soc, capacity: 10, controllable: true, }); export const BatteryForecastDischarging = Template.bind({}); BatteryForecastDischarging.args = { ...batteryBase, gridPower: 500, homePower: 1800, battery: bat(1300, 62, { full: null, empty: hoursFromNow(0.4) }), } as any; export const BatteryForecastCharging = Template.bind({}); BatteryForecastCharging.args = { ...batteryBase, pvPower: 6000, gridPower: -1000, battery: bat(-4200, 45, { full: hoursFromNow(2.5), empty: null }), } as any; export const BatteryForecastBoth = Template.bind({}); BatteryForecastBoth.args = { ...batteryBase, pvPower: 3000, gridPower: -500, battery: bat(-1700, 70, { full: hoursFromNow(2), empty: hoursFromNow(36) }), } as any; export const BatteryForecastMulti = Template.bind({}); BatteryForecastMulti.args = { ...batteryBase, pvPower: 8000, gridPower: -1000, homePower: 1000, battery: bat(-6000, 40, { full: hoursFromNow(26), empty: null }, [ dev("Powerwall", -3500, 35), dev("BYD", -2500, 47), ]), } as any; export const BatteryForecastGridChargeLimit = Template.bind({}); BatteryForecastGridChargeLimit.args = { ...batteryBase, pvPower: 5000, gridPower: -500, batteryGridChargeLimit: 0.15, smartCostType: "price", currency: CURRENCY.EUR, battery: bat(-3700, 50, { full: hoursFromNow(1.5), empty: null }), } as any; export const BatteryAndGrid = Template.bind({}); BatteryAndGrid.args = { gridConfigured: true, pvConfigured: true, batteryConfigured: true, pvPower: 0, gridPower: 1200, homePower: 2000, batteryPower: 800, batterySoc: 77, tariffGrid: 0.25, tariffFeedIn: 0.08, currency: CURRENCY.EUR, battery: [ { soc: 44.999, capacity: 13.3, power: 350, controllable: true }, { soc: 82.3331, capacity: 21, power: 450, controllable: false }, ], } as any; export const BatteryCharging = Template.bind({}); BatteryCharging.args = { gridConfigured: true, pvConfigured: true, batteryConfigured: true, pvPower: 5000, gridPower: -1300, homePower: 800, loadpoints: [ { icon: "car", charging: true, title: "Garage", chargePower: 1400, connected: true, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, ], batteryPower: -1500, batterySoc: 75, } as any; export const GridPVAndBattery = Template.bind({}); GridPVAndBattery.args = { gridConfigured: true, pvConfigured: true, batteryConfigured: true, pvPower: 1000, gridPower: 700, homePower: 3300, batteryPower: 1500, batterySoc: 30, } as any; export const BatteryThresholds = Template.bind({}); BatteryThresholds.args = { gridConfigured: true, pvConfigured: true, batteryConfigured: true, pvPower: 8700, gridPower: -500, loadpoints: [ { icon: "car", charging: true, title: "Garage", chargePower: 5000, connected: true, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, { icon: "bus", charging: true, title: "Garage", chargePower: 2500, connected: true, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, ], batteryPower: -700, batterySoc: 95, } as any; export const PVThresholds = Template.bind({}); PVThresholds.args = { gridConfigured: true, pvConfigured: true, batteryConfigured: true, pvPower: 300, gridPower: 6500, homePower: 1000, loadpoints: [ { icon: "car", charging: true, title: "Garage", chargePower: 5000, connected: true, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, { icon: "car", charging: true, title: "Garage", chargePower: 1600, connected: true, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, ], batteryPower: 800, batterySoc: 76, } as any; export const GridOnly = Template.bind({}); GridOnly.args = { gridConfigured: true, pvConfigured: true, batteryConfigured: true, pvPower: 0, gridPower: 6500, homePower: 1000, loadpoints: [ { icon: "car", charging: true, title: "Garage", chargePower: 5500, connected: true, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, { icon: "car", charging: false, title: "Garage", chargePower: 0, connected: false, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, { icon: "car", charging: false, title: "Garage", chargePower: 0, connected: false, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, { icon: "car", charging: false, title: "Garage", chargePower: 0, connected: false, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, ], batteryPower: 0, batterySoc: 0, } as any; export const LowPower = Template.bind({}); LowPower.args = { gridConfigured: true, pvConfigured: true, batteryConfigured: true, pvPower: 700, gridPower: -300, homePower: 300, batteryPower: -100, batterySoc: 55, tariffGrid: 0.25, tariffFeedIn: 0.08, currency: CURRENCY.EUR, } as any; export const CO2 = Template.bind({}); CO2.args = { gridConfigured: true, pvConfigured: true, pvPower: 7300, gridPower: -2300, homePower: 800, loadpoints: [ { icon: "car", charging: true, title: "Garage", chargePower: 1000, connected: true, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, { icon: "car", charging: true, title: "Garage", chargePower: 1000, connected: true, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, { icon: "car", charging: true, title: "Garage", chargePower: 2200, connected: true, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, ], tariffGrid: 0.25, tariffFeedIn: 0.08, tariffCo2: 723, smartCostType: "co2", currency: CURRENCY.EUR, pv: [{ power: 5000 }, { power: 2300 }], } as any; export const UnknownInput = Template.bind({}); UnknownInput.args = { gridConfigured: true, pvConfigured: true, pvPower: 2000, gridPower: -2000, loadpoints: [ { icon: "car", charging: true, title: "Garage", chargePower: 1000, connected: true, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, ], } as any; export const UnknownInputFill = Template.bind({}); UnknownInputFill.args = { gridConfigured: true, pvConfigured: true, batteryConfigured: true, pvPower: 500, gridPower: 0, batteryPower: -1000, loadpoints: [], } as any; export const UnknownOutput = Template.bind({}); UnknownOutput.args = { gridConfigured: true, pvConfigured: true, pvPower: 3000, gridPower: -1000, loadpoints: [ { chargePower: 1700, icon: "car", charging: true, title: "Garage", connected: true, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, ], } as any; export const UnknownOutputLessThan10Percent = Template.bind({}); UnknownOutputLessThan10Percent.args = { gridConfigured: true, pvConfigured: true, pvPower: 3000, gridPower: -1000, loadpoints: [ { chargePower: 1800, icon: "car", charging: true, title: "Garage", connected: true, vehicleName: "", vehicleSoc: 50, chargerFeatureHeating: false, }, ], } as any;