[inverter] ; IP address of your GivEnergy inverter on your local network ip = 192.168.1.100 ; Modbus TCP port — default 8899, do not change unless advised port = 8899 ; Number of battery units connected to the inverter num_batteries = 1 ; Connection mode: auto | poll | listen ; listen = send a read request and decode the reply directly — works for ; both Gen2 and Gen3 / HV hybrid inverters, and needs no extra library ; poll = library-based active read (legacy fallback) ; auto = pick automatically (recommended) — prefers listen, falls back to poll mode = auto ; Control-page power display: show charge/discharge limits in watts instead of %. ; Set the max values to match the figures shown in the official GivEnergy app. ; Options: percent | watts power_units = percent max_charge_w = 2600 max_discharge_w = 2600 ; Keep the inverter's internal clock in step with this machine. ; This matters more than it looks. The scheduler writes charge/discharge SLOTS ; as wall-clock HH:MM windows, and the INVERTER decides whether "now" is inside ; one using its own clock. If that clock drifts, a perfectly good 14:30-15:00 ; slot simply does not start when it should - the rule appears to do nothing. ; Checked every 6 hours and corrected when more than 30 seconds out. ; Only turn this off if something else already sets the inverter's clock. auto_clock_sync = yes [server] ; How often to poll the inverter in seconds (minimum 5) poll_interval = 10 ; TCP port the dashboard web server listens on web_port = 7890 ; How many days of history to retain in the database data_retention_days = 730 [weather] ; Met Office DataHub API key (Observation Land product — free tier) ; Register at: https://datahub.metoffice.gov.uk ; Leave blank to disable the weather widget met_api_key = ; Geohash for your location — call the nearest endpoint with your lat/lon ; to find it: GET /observation-land/1/nearest?lat=XX&lon=YY geohash = ; How often to fetch a new observation from Met Office (minutes, minimum 5) poll_interval_mins = 30 [backup] ; Automatic daily database backup (gzipped, kept for keep_days then pruned). ; Stored in the "backups" folder next to this file. enabled = yes keep_days = 7 [colours] ; Chart bar and line colours (hex, e.g. #f59e0b). Defaults shown. ; Change via the Settings screen in the dashboard — no need to edit this file. solar = #f59e0b home = #38bdf8 grid_in = #f87171 grid_out = #4ade80 bat_chg = #818cf8 bat_dis = #c084fc soc = #fbbf24 [tariff] ; Energy tariff rates for cost estimation on the home screen. ; Configure via the dashboard: App Settings → Tariff Settings. ; Leave all values at 0 to disable cost display. currency_symbol = £ import_rate_p = 0 export_rate_p = 0 standing_charge_p = 0 ; Time-of-use windows (optional — up to 3, numbered 1–3). ; The flat import_rate_p above applies outside any defined window. ; Supports overnight windows that cross midnight (e.g. 23:00–07:00). ; tou_1_name = Off-peak ; tou_1_start = 23:00 ; tou_1_end = 07:00 ; tou_1_rate_p = 7.50 ; import rate during this window ; tou_1_export_rate_p = 15.00 ; export rate during this window (0 = use flat export_rate_p) [predictive_charge] ; Predictive overnight charge target. When a charge schedule has "predictive" ; enabled, the app sets the charge target SOC from tomorrow's solar forecast ; minus your typical morning demand, so you don't import a fuller charge than ; the day needs. Requires the solar forecast (see the dashboard's Solar Forecast ; setup) and your usable battery capacity below. ; battery_kwh is an OVERRIDE. Leave it at 0 and the capacity is read from the ; inverter (HR 55, battery_capacity_ah) and converted at 51.2 V nominal, so it ; follows the hardware -- add a battery and it updates itself. Only set a value ; if you want a different figure, e.g. a conservative usable capacity. ; If your inverter does not report a capacity (AIO and three-phase units store ; it differently), set it here or predictive charge stays disabled. battery_kwh = 0 ; Fraction of the forecast to trust (0-1). Lower = more cautious, charges more. pessimism_factor = 0.85 ; kWh to keep in reserve for the coming evening if there is no demand history yet. evening_reserve_kwh = 3.0 ; Floor for the computed target -- it will never set a charge target below this %. minimum_soc = 20 [year_projection] ; Optional overrides for the Year in Review "Estimated Annual Electricity ; Cost" and "Solar & battery savings" tiles. Left blank/0, the app ; auto-estimates your full-year totals from real data so far this year plus ; a generic seasonal curve. If you know your real annual figures (e.g. from ; a bill or EPC -- useful if you've only just installed the app), set them ; here to override the auto-estimate for both the kWh totals and the cost ; projection. consumption_kwh_override = 0 solar_kwh_override = 0 [plugin_solar] ; Plug-in ("balcony") solar. UK-legal since 27 Aug 2026: an inverter of up to ; 800VA plugged straight into a socket circuit, with no CT clamp and no meter. ; It sits beyond this inverter's sensor, so its generation cannot be measured -- ; it simply makes the house appear to draw less. Import, export and all cost ; figures stay correct; house consumption and solar totals read low. ; The dashboard watches for the signature and shows a one-time hint. ; notified = the hint has been shown and dismissed (set automatically) ; declared = you have confirmed you really do have plug-in solar; suppresses ; the hint for good. Safe to set by hand if you already know. notified = no declared = no [ecoflow] ; EcoFlow STREAM integration -- MEASURES plug-in solar instead of guessing. ; When enabled, the AC watts your STREAM feeds into the house are read from ; EcoFlow's cloud and added back on to Home and Solar on the dashboard. The ; inverter's own readings are never altered: the plug-in figure is stored in ; its own database column and the correction is applied at display time. ; ; This is CLOUD-BACKED. It needs an outbound internet connection to EcoFlow, ; in the same way the Octopus, Met Office and Forecast.Solar features do. It has ; nothing to do with the GivEnergy cloud -- your inverter is still read locally. ; ; Get an Access Key and Secret Key from developer-eu.ecoflow.com, signing in ; with the same EcoFlow account your STREAM is registered to. Approval can take ; a few days. ; ; NOTE: these keys are stored in this file in plain text, and this file can be ; included in a backup (Settings only / Database + Settings). Treat a backup ; containing settings as sensitive, exactly as you would for the admin password ; hash and your weather API key. ; ; serial: leave blank to use the first device on the account. Set it explicitly ; if you have more than one EcoFlow device. enabled = no access_key = secret_key = serial = [logging] ; Log level: warning (default) | info | debug ; Debug captures detailed inverter communication -- use only for fault diagnosis. log_level = warning ; How many days of log files to keep (daily rotation, 1-30) log_retention_days = 7 ; Forward log lines to a syslog server on your network. ; Two separate streams are available, sent under different idents so you can ; filter them apart at the collector: ; app -> "givenergy:" everything that goes to dashboard.log. Chatty. ; events -> "givenergy-events:" the short Activity list - connection lost and ; restored, status changes, scheduler actions. Faults are sent at ; ERROR severity, everything else at INFO. ; streams: app | events | both ; protocol: udp (standard, fire-and-forget) | tcp (reliable, needs the collector ; to be listening on TCP - the dashboard will report an error if not) syslog_enabled = no syslog_host = syslog_port = 514 syslog_protocol = udp syslog_streams = both [admin] ; SHA-256 hash of the settings-page password. ; Default password is: password ; Change it via the Settings screen in the dashboard after first run. password_hash = 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8