text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Add
Add category
Add energy type
Add meter
Close
Color hex (optional, e.g. #ff9800)
Delete '{0}' and its {1} membership(s)? Manual costs in this category are kept but unlinked.
Delete category
Edit {0}
Meter: {0}
{0} meter(s), {1} type(s)
Type: {0}
Members
New category
No members yet — add a meter or an energy type.
Save the category first to add members.
Saved. Add members below.
Sort
Sort order
Cost
Actions
Amount
Cancel
Cost (range)
Currency
Date
Delete
Deleted.
Enabled
Energy type
Events:
Last seen
Manual costs:
Meter
Meters
Mode
Name
Name is required.
No data in this range.
Now
Preview
Range
All time
Last 12 months
Last 24 months
Last 5 years
Readings:
Save
Saved.
Scope
Skipped rows:
Status
Target
This year
Type
Unit
Value
Add connector
Back to '{0}'
Base URL (e.g. http://homeassistant.local:8123)
Delete '{0}'?
{0} source(s) use it and will stop ingesting until reassigned to another connector.
Delete connector
Disabled — these sources are not ingesting
Edit {0}
No connectors yet. Add an MQTT broker or a Home Assistant connection.
Encrypted before it is stored; database dumps and JSON exports carry nothing usable.
Enter credentials here
Enter the token here
Extra topics (comma-separated, optional)
Setting up a connector for a source of '{0}'. Saving it takes you back.
Host
Last status
New connector
no
Password env-var name (optional)
Password (optional)
Password (stored — type to replace)
Port
name of an environment variable
Secrets are never stored here. Credentials/tokens are referenced by the
(or Docker secret) resolved at runtime.
Base URL differs from the saved one. Re-enter the token to test against a different host — a stored token is only sent to the host it was saved for.
Base URL is required.
Connected — Home Assistant API reachable and token accepted.
Connected — {0} = {1}.
Test connection
Test entity id (optional, e.g. sensor.house_power)
Environment variable '{0}' is not set on the server. Set it and restart the app, or switch on "Enter the token here" to store the token directly.
Connection failed: {0}
Home Assistant answered {0}.
Connected, but "{0}" has no numeric state (unavailable, unknown or not a number).
Enter a token first.
Name the environment variable holding the token, or switch on "Enter the token here".
No token available to test.
TLS
Long-lived access token
Token env-var name (e.g. HA_TOKEN)
name
The variable's
, not the token. Set it on the server and restart the app.
Enter the token, or switch off "Enter the token here" and name an env var.
Long-lived access token (stored — type to replace)
Not used
Used by
+{0} more
Username env-var name (optional)
Username (optional)
On: subscribe to state changes and ingest in real time. Off: REST poll on each source's interval.
Real-time WebSocket push
yes
as of {0}
Burner runtime
Consumption by month
Deliveries ({0})
Effective rate
{0}% of {1} {2}
Forecast to empty
No deliveries recorded.
No consumable meters found. Add a meter with mode
, or load the reference data from
and set up its tank in
Consumables
({0} {1}/day)
Record delivery
Tank level
{0} has no tank set up yet — its level, fill and forecast need the tank's capacity and dipstick calibration.
{0} used
Used (range)
Category
Now
Prev
Latest month with data
Costs are reported per cost category, and there is none yet:
No costs this year yet. They appear once a meter in a cost category records consumption with a tariff in effect.
No meter counts toward a cost category yet. Pick categories when editing a meter, or assign them per category:
No meters yet. Costs start with a meter — add one, or import existing data:
No tariffs yet — consumption needs a price before it has a cost:
This month
What cost more / less (year vs last year)
What costs most (this year)
Add energy type
Base unit
Base unit (kWh, m3, L, h)
Color hex (optional, e.g. #4caf50)
Default mode
Cannot delete '{0}': {1} meter(s) still use it.
Delete '{0}'? This cannot be undone.
Delete energy type
Display name
Edit {0}
Icon (optional)
Key
Key '{0}' is already in use.
Key (stable machine key, e.g. electricity)
New energy type
Key, display name and base unit are required.
Consumption
Upstream of
Energy
Flow
Where the top-level flow goes. Arrow thickness ∝ amount; "Other" is the unmetered remainder.
{0} flow
No meter chain configured yet. In
→ edit a sub-meter and set its
to show where the main meter's flow divides (e.g. main → car, pool, other).
upstream meter(s)
No consumption recorded for these meters in the selected range yet.
No meters for this energy type yet. Add meters in
, or load the reference data from
Top-level throughput
Consumption
Generation
Home Assistant
MQTT broker
Delivery
Ignore
Manual cost
Reading
Tank level
Correction
Counter reset
Delivery
Meter swap
Note
Tank level
Consumable balance
Cumulative counter
Direct delta
Generation counter
Instant rate
Runtime counter
Virtual
Anomaly
Counter reset
Meter swap
Month-end value
Estimated
Imported
Interpolated
Manual
Measured
Home Assistant
Import
Manual
MQTT
Tasmota
Virtual
Delta
Level
Rate
Register
Runtime
Empirical
Fixed
Base price
Bonus
Discount
Feed-in
Tax
Unit price
Energy type
Global
Meter
Allowed
not enabled (MeterVault__AllowInAppUpdate)
not supported on this install
For local debugging, enable the {0} environment by setting the {1} environment variable to {0} and restarting the app.
Development Mode
Swapping to {0} environment will display more detailed information about the error that occurred.
The Development environment shouldn't be enabled for deployed applications.
It can result in displaying sensitive information from exceptions to end users.
Error.
An error occurred while processing your request.
Error
Request ID:
Other ({0})
Row {0}: register for meter {1} fell {2}→{3}; a swap event was created (please check).
Row {0}: register for meter {1} fell {2}→{3}; consumption across the swap set to {4}.
Row {0}: skipped ({1}).
Row {0}: expected unit "{1}" but found "{2}".
Row {0}: unparseable date, skipped.
Back to Import
Choose CSV
Col {0}
Col {0}: {1}
Commit import
Commit failed: {0}
Imported batch #{0}: {1} rows staged. Consumption recomputed.
Auto-detect
Date column
Day (31.12.2024)
Date format
Month name (Januar 2024)
Detect swaps
Dry-run preview
{0} rows, {1} columns
First data row
Column
Role
Header row
Sample
Upload any CSV, map its columns to your meters and categories, preview what would be staged, then commit it as a revertible import. Values may use the German dialect (decimal comma, unit suffixes,
or
dates) — the same parser the reference sheets use.
The mapping changed after the preview. Run the dry run again, then commit.
meter {0}
Nothing staged. Check the first-data-row, date column and column mappings above.
Faded rows are before the first data row. The 📅 column supplies the date.
Select category
Select meter
Skip zero rows
1. Parsing options
2. Column preview
3. Map columns
4. Preview & commit
Import wizard
e.g. kWh
{0} all read into '{1}'. Each Reading column needs its own meter.
Col {0} (ManualCost) needs a target category.
Col {0} ({1}) needs a target meter.
Map at least one column to a role other than Ignore.
Import #{0} reverted.
Imported
Rows
Source
Wrote to
Dry-run a reference sheet
Import failed: {0}
Load reference data
Mapping wizard
No imports yet.
Costs (Kosten)
Electricity (Strom)
Heating oil (Heizöl)
Water (Wasser)
Recent imports
Reference data loaded.
Reference dataset
Load the bundled Energiebilanz sheets (electricity, water, heating oil, costs) as a starter dataset with meters, tariffs and categories.
Loaded
Reference profile
Revert
Delete all {0} rows from import #{1} ({2}) and recompute the affected meters?
Revert import?
Revert failed: {0}
active
reverted
unnamed
{0} warnings
Your own CSV
Map an arbitrary sheet's columns to your meters/categories, preview and commit it as a revertible import. Or dry-run against one of the built-in reference profiles below.
Dark mode
Find a meter
Language
Light mode
Reload
Toggle navigation
An unhandled error has occurred.
about the same
Add first reading
Add reading
Add reading — {0}
Add source
Set up another connector
Attribute (optional; blank = state)
Back to meters
Backdated before the latest reading — consumption from there on is recomputed.
(baseline {0})
{0} {1} since last reading
Component
Connect a live source
Connector
'{0}' is disabled, so this source would never ingest. Enable it first.
'{0}' is disabled, so it cannot serve this source —
'{0}' is a {1} connector; a {2} source needs {3}.
Cost this year
(set it up once; every source then just picks it).
create one
Below the last reading ({0} {1}) on a register that only counts up, so it would be rejected. If the meter was swapped or its counter reset, record that first — the value you typed is kept.
Delete the {0} of {1}? The new register's start reading recorded with it is removed too, and consumption is recomputed.
Delete event
Delete the {0} of {1}? Consumption is recomputed.
Delete this hand-entered reading
Delete the reading {0} {1} of {2}? Consumption is recomputed without it.
Delete reading
Delete this {0} source?
Delete source
Edit meter
Edit source
enable it
Open the {0} flow
Enter a value
Entity id (e.g. sensor.house_power)
Event deleted — consumption recomputed.
Notes annotate this meter's history; they change no figures.
Record a meter swap or a counter reset here — the history stays continuous on this meter.
Tank levels and deliveries drive this tank's consumption.
Flags
From
That time is in the future.
Nothing recorded for this meter yet — start with a first value.
Go to events
Imported
Came from an import — revert that import to remove it.
Kind
{0} this month
last month {0} {1}
Last reading {0} {1} on {2}.
Last value
· {0} last year
Lifetime total
Local time in {0}.
Manage tariffs
This meter no longer exists.
New source
no
no basis yet
no change since last reading
No {0} connector yet —
No normalized consumption yet.
No events recorded yet.
No raw readings.
No readings yet — prefilled with this meter's baseline ({0} {1}).
No ingest sources bound to this meter. Add one to pull from MQTT/Tasmota or Home Assistant.
No tank set up for this meter yet — its level, fill and forecast need the tank's capacity and dipstick calibration.
No applicable tariffs.
Meter #{0} not found.
Notes
Offset
Pick a {0} connector for this {1} source.
Hourly is plenty for a meter — monthly totals and cost come out identical, with far less raw data.
Poll interval (minutes)
Prev→New
Priority
'{0}' is disabled
no connector — never ingests
'{0}' is {1}, needs {2}
≈ {0} {1} by month end
≈ {0} {1} full year
Quality
Reading deleted — consumption recomputed.
Reading ({0})
Rejected — below the previous reading on a register that only counts up. If the meter was swapped or reset, record that first.
Replaced the reading at that time with {0} {1}.
Reading saved: {0} {1}.
Readings
Most recent {0} normalized deltas.
Most recent {0} (raw, immutable audit truth). Times in {1}.
Record event
Record counter reset
Record meter swap
Record tank level
Meter register details
Register span
This meter already has a reading at that time — saving replaces its value.
Replaces the new meter's start value recorded with the swap — consumption across the swap stays correct.
retired
Save reading
Saving…
Scale
This meter
S/N {0}
Set up tank
That clock time never happened in {0} — the clocks moved forward. Pick another time.
Source deleted.
Source saved.
Source type
Below last reading — swapped or reset?
Consumption ({0})
Events ({0})
Readings ({0})
Sources ({0})
Tariffs ({0})
A tank's consumption comes from tank levels and deliveries, which are recorded as events — a reading entered here would change nothing.
open
Time
Time
Time path (optional, e.g. Time)
To
MQTT topic (e.g. tele/plug1/SENSOR)
Value kind
Value path (e.g. ENERGY.Total; blank = bare scalar)
A virtual meter has no readings of its own — enter readings on the meters it adds up.
Virtual meter — it has no readings of its own; its value is the sum of the upstream meters linked to it.
See it in the flow view.
vs last month
{0} vs {1} last year
yes
That did not go through, and nothing was changed. Try again; the details are in the log.
Register after the reset ({0})
Its last value before it started over. Leave empty if unknown — the stretch since the last reading is then not counted.
Register before the reset ({0})
Later readings count on from {0} {1}.
Delivered ({0})
Delivered since then: {0} {1}
First level for this tank — consumption is counted from the next one.
A refill of the tank. It raises the level; the next tank level turns the difference into consumption.
A remark on this meter's history, e.g. a repair or a moved sensor. It changes no figures.
The register started over — a reset or a rollover — but it is still the same meter. Later readings count on from the value after the reset.
The physical meter was replaced. Enter the old meter's final reading and the new meter's start reading — the history continues on this meter without a gap or a spike.
A dipstick or gauge reading of what is in the tank. Consumption is the difference to the previous level, plus the deliveries in between.
Last level: {0} ({1} {2}) on {3}
Last reading before: {0} {1} on {2}
Tank level
The level rose {0} {1} more than the recorded deliveries — is a delivery missing? It is booked as no consumption.
= {0} {1} in the tank
{0} live source(s) feed this meter. If they still read the old register, update or disable them on the Sources tab — otherwise their next value counts against the new one.
Usually 0, or the value on the installation record.
New meter — start reading ({0})
Centimetres need the tank's dipstick calibration — set it up under Edit meter.
No earlier reading — the old register counts from the meter's initial baseline, {0} {1}.
Not a number
Note
Note (optional)
From the swap record or a photo of the old meter. Prefilled with the last reading — the difference is booked as consumption at the swap.
Old meter — final reading ({0})
A swap or reset is already recorded between the same two readings — delete it first, or pick a time after the next reading.
That value is not possible here — a delivery must be above zero, and a level cannot be negative.
Enter an amount.
The old register's final reading is below where it last stood (its last reading, or the meter's initial baseline) — check both numbers.
This came from an import — revert that import to remove it.
A later meter swap or counter reset was recorded against this — delete that one first.
A tank level is already recorded at exactly this time — delete that one first, or pick another minute.
A level in centimetres needs the tank's calibration — set it up under Edit meter, or enter the volume.
This event does not apply to a meter in this measurement mode.
It no longer exists — the page was out of date.
Only hand-entered readings can be deleted here — measured readings are the audit record, and imported ones go with their import.
Enter the note.
There is already a reading at exactly this time — pick a minute before or after it, depending on which meter it belongs to.
The new register's start reading could not be stored because a reading arrived meanwhile. Nothing was saved — try again.
{0} reading(s) are already recorded after this time — the next is {1} {2} on {3}. They will count as the new register; if they still belong to the old meter, pick a later time.
Delivery recorded — consumption recomputed.
Note saved.
Counter reset recorded — consumption recomputed.
Meter swap recorded — consumption recomputed.
Tank level recorded — consumption recomputed.
{0} {1} since that reading, booked at this time.
{0} — {1}
Used since the last level: {0} {1}
Showing {0} of {1} — keep typing to narrow down.
No meters yet.
Name, serial number or location
Active
Add meter
Something changed while this dialog was open (a meter or category was deleted). Nothing was saved — check and save again.
Cost categories
The dashboard reports cost per category; a meter in none has no cost there.
Already counted through its energy type in: {0}
Delete '{0}'? This cannot be undone.
Delete '{0}'? This will also delete {1} reading(s) and {2} consumption row(s). This cannot be undone.
Delete meter
Edit {0}
to load the reference data.
No meters yet. Add one, or go to
Initial register baseline
rate in this meter's unit (e.g. kW for kWh, L/h for L): a source reporting W or L/min should carry a scale factor to convert it first.
Power/flow sensor — readings are an instantaneous rate, integrated over time into consumption. Store the value as a
per-hour
Location (optional)
Manufacturer (optional)
Measurement mode
Model (optional)
New meter
no
No cost categories yet, so this meter's cost will not show on the dashboard. Create one in
No meter matches “{0}”.
PV role (optional)
Tag the house meter total_load and the grid meter grid_import to unlock self-consumption, autarky and savings on the Solar page.
Settings that affect consumption changed — it will be recomputed on save.
Record meter swap instead
Name, energy type and unit are required.
Was the physical meter replaced? Record a meter swap instead: history, sources, flow links and cost categories stay on this meter, without a gap. Retire a meter only when it is gone for good.
— none —
Search by name, serial number, location or type
Serial number (optional)
Sources
Capacity
Enter the tank's capacity to set up its tank.
Fixed rate ({0}/h)
Capacity sets the fill level; the calibration turns dipstick centimetres into volume. Levels and deliveries are then recorded on the meter's Events tab.
Offset ({0})
Burner rate
Tank
{0} per cm
e.g. 7000 L ÷ 150 cm = 46.67. Leave empty if levels are entered as volume.
This meter measures a subsection of the selected meter(s)' flow.
Sub-meter of (upstream meters)
Virtual "sum" meter — it has no readings of its own. In the flow view it equals the sum of the upstream meters you select below (e.g. Sum Solar = Solar 1 + Solar 2).
yes
Admin
Connectors
Oil / consumables
Cost categories
Energy types
Import
Meters
Overview
Meters & data
Energy
Settings
Solar / PV
Tariffs
Trends
Sorry, the content you are looking for does not exist.
Not Found
The session has been paused by the server.
Failed to rejoin.
Rejoining the server...
Resume
Failed to resume the session.
Retry
Rejoin failed... trying again in
seconds.
Please retry or reload the page.
Flow diagram
No flow to show for this period.
Access & ingestion
closed (401)
API docs at
{0} key(s) configured
Keys themselves are never shown here.
Set API keys with
open (anonymous)
effective
These are the
settings the running instance is using. They are configured via environment variables
or Docker/compose, not stored in the database — so config stays reproducible and secrets never land in the DB. Change them in your compose/env and restart.
Env keys:
Live ingestion workers
Locale
Locale & time
off
on
Raw-reading retention
{0} days
Reverse-proxy trust
Seed reference data on start
Timezone
Autarky
Generation
Generation & self-consumption
Generation by meter
Grid draw {0} kWh
No generation meters found. Add a meter with mode
, or load the reference data from
in
Savings (Ersparnis)
Self-consumption
{0}% of generation
Set the PV role of your house meter to
and of your grid meter to
to unlock self-consumption, autarky and savings — in the meter editor under
Add tariff
Component
Delete this {0} tariff ({1} {2})?
Delete tariff
Edit tariff
No tariffs yet. Add one, or load the reference data from
New tariff
Notes (optional)
open
Global
Meter: {0}
Select the energy type or meter this tariff applies to.
Type: {0}
Unit and valid-from are required.
Unit (e.g. EUR/kWh, EUR/m3, EUR/month)
Valid from
Valid to
Valid to (empty = open-ended)
Monthly cost
Apply
Last 48 months
Cost trend
Total over range: {0}
This pulls the latest source, rebuilds it, and restarts the service. It takes a few minutes, during which MeterVault is unavailable. Readings are not affected — ingestion resumes on restart.
Update MeterVault
pull the new image and recreate the container
run: update
MeterVault {0} is available — this instance runs {1}.
Starting…
Update now
Could not start the update.
Could not start the update: {0}
Could not start systemd-run.
Update cannot be started: {0}.
Update started. The service restarts when the rebuild finishes — this usually takes a few minutes.