Skip to content

Latest commit

 

History

History
194 lines (154 loc) · 8.54 KB

TODO.md

File metadata and controls

194 lines (154 loc) · 8.54 KB

Before Launch:

  • Fix import of appliance template

  • Renaming tabs:

    • Grid Components -> System Components
    • Battery Energy Content -> Battery Analysis
  • Add blank state message for no ancillary equipment recommendations

  • When no appliances are enabled, still show HOMER data in the summary view

Battery Model:

  • Test with all HOMER files

Battery Notes:

  • Don't depend on the originalModeledBatteryEnergyContent for naiveClampled:

    • Recompute inside calcBatteryDebugData
    • Then models update always, not just when they were imported
  • Move batteryDebugData to grid view as a computed value.

    • It will recalculate when the viewed grid changes
  • Reference line can be calculated inside the chart view, passing the right x and y accessors

  • debugBatteryPrediction() takes gridData & generates plottable data for:

    • naive
    • naiveClamped (current way it's calculated, so pull it from fileData)
    • originalHomer (pull from fileData)
    • mlr
  • naiveClamped should not have a loss applied during clamping

  • The whole reason for getting an accurate battery model is estimating unmet load and excess production (right? Are there other reasons?). If so, then metrics I should use to test the battery model should focus on those. Put those metrics next to the naive, naiveClamped, mlr, ...

  • Make sure I only train MLR once in the production app.

TODO:

  • I want to make the predicted vs actual charts the same for naiveClamped
    • First one uses originalBatteryEnergyContent, originalModeledBatteryEnergyContent
    • What does the second one use?
    • Make sure all of these battery models don't include new appliances

Post launch

  • Remove mimeType from analyzeHomerFile(parsedFile, fileInfo, mimeType)
  • Switch from Luxon to Moment (search for getIsoTimestamp). This may allow more detailed tests
  • Get rid of processApplianceFile (route it through analyzeApplianceFile)
  • Add commas to number outputs in summary view (or localized versions?)
  • Create function that returns units attached to value from fieldDefinitions
  • Figure out why fetchSnapshotGridFile and fetchSnapshotApplianceFile is being called but not used

Future Features

  • Household current limit ...
  • Create FAQ in app and/or repo
  • TOU
  • Line losses
  • Appliance lifetime
  • User-input seasonality
  • Single and 3-phase
  • Show value to customer vs. their existing kit (electricity versus if a customer is using a diesel generator or engine)

Notes from meeting:

  • Amanda will do basic sanity check calculations
  • Amanda review question marks
  • Amanda: tell what min/max state of charge for each type of battery

Misc:

  • Document how onModelInputChange works. Include initialization step where modelInputValues need to be populated
  • For productionUnitType use semantic UI's "Allow Additions" dropdown
  • On next deploy, delete the NODE_PATH config var: https://dashboard.heroku.com/apps/microgrid-appliance-analysis/settings
  • Keep appliance spinner going until it's actually clickable
  • Add commas to results numbers
  • Find logging library that replaces 'throw'
  • Add Appliance upload section
    • Input for cost for appliance
    • Require appliance file to have certain columns
  • Add app icon

Upload HOMER files

  • Clean up HOMER file upload sections by taking out passed props (such as viewedGrid) and injecting it from the store
  • Make sure I can parse every HOMER file without errors
  • Provide Sample for download

Ancillary Appliances

  • Allow assigning ancillary equipment to grid or appliance operator

Battery charging model

Table fixes

  • Show within table that file is loading
  • Color code dropdown column selector menu (and decrease line height)
  • Add Hover on table
  • Delete column by clicking on X in column header
  • Put battery stats in Battery Energy Content tab

MISC TODO:

  • Create universally accessible small grey header. See unmet loads and battery model screens
  • Check that HOMER and Appliance file has required fields (including battery and pvSystem)
  • Indicator that we are currently calculating
  • Deploy Sentry to production
  • Unmet load sums by hour, by day. Try 100% stacked.
  • A new bar chart: (histogram by hour)
    • New appliance load
    • Excess production
  • Render appliance summary stats
  • Add hour offset input(?)
  • Show Load and Unmet Load chart by datetime instead of hour of year (toggle between hour and datetime)
  • Page through datetime chart by day, week, month
  • Show column stats (max, min, avg, std) for HOMER and combined tables
  • Reference Lines: http://recharts.org/en-US/examples/LineChartWithReferenceLines
  • Fonts are loading slowly. How to cache them?

Save/Revert to Snapshots

Battery charge calculation notes

Goal: Calculate Battery SOC for every hour. Use the spreadsheet values without new loads applied to generate the SoC based on loads we know.

The SOC depends on:

  • Charge/Discharge rate. These depend on
    • Excess
    • Demand
  • Previous hour's SOC

The predictive model may just want to calculate Charge Rate and Discharge Rate (or Max Charge Rate and Max Discharge Rate)

  • Removing
    • Available Capacity: Because it depends on Excess Electrical, SoC and Energy Content for the given row.

Map out the paths of file upload or restore

  1. Load sample file: Uses fileInfo to retrieve, analyze and rehydrate the store
  2. Restore from snapshot: No need to analyze file - all state is in snapshot. These can come from either localforage or firebase.
  3. Uploaded file: Need to analyze file. This will eventually be saved as a snapshot

Bootstrapping problem I have to solve for when a user first fires up the app:

  • Switch from processHomerFile run through analyzeHomerFile
  • Put all sample files as CSVs in data and import and parse them sequentially

In localforage:

  • mg.activeGrid
  • mg.stagedGrid
  • mg.availableGrids (saved with battery model artifacts)
  • mg.availableGridNames // I don't think I need this as a model, I just need to save it
    • {fileName: 'xyz', description: 'abc', isSample: false, defaultOnLoad: true}

How does mg.availableGrids in localforage compare with availableGrids in memory?

  • does one have artifacts and the other rehydrated models?
  • are we storing all availableGrids in memory?

How to bootstrap stored vs. sample files?

  • sample files load from data folder vs localforage for user files
  • load defaultOnLoad first and rehydrate
  • do I even keep sampels in availableGridNames? If I don't, how would I know what's defaultOnLoad?