VIS-2 widgets that display and operate a WOLF heating system in ioBroker.
The widget set does not read any data from the heating system itself. Every value is bound
individually to an existing ioBroker object — for example from the wolf-smartset adapter,
the wolf adapter (ISM8i), Modbus or your own scripts. No assumptions are made about object
names or structure.
Status: early development. All eight widgets are available: system diagram, boiler status, heating circuit, heating curve, hot water, trends, messages and gas meter.
| Widget | Purpose |
|---|---|
| System diagram | Hydraulic diagram with burner flame, tank, up to four heating circuits and animated flow where water actually flows |
| Boiler status | Operating phase, burner, modulation and water pressure gauges (only when linked), operating hours, burner starts, flow and return |
| Heating circuit | Operating mode, day and economy temperature, setpoint correction, time program — writing |
| Heating curve | Approximated curve with the controller's operating point; setpoint correction writing |
| Hot water | Tank with set mark, set temperature, time program, optional circulation and one-time charge — writing |
| Trends | Up to four curves and a background area from history, SQL or InfluxDB; 6 h to 7 days |
| Messages | Fault LED and status list: configurable checks, collective fault, fault code, message list |
| Gas meter | Meter reading in seven counter styles, flow, consumption from day to previous month, costs, sensor warnings |
- Colour scheme: every widget has Colour scheme — automatic (follows the VIS-2 theme, default), light or dark.
- Objects: each value is linked to an object with the object picker. Limits, step size and
state texts are taken from the object (
common.min,max,step,states); fields in the widget only override them. - Narrow tiles: all widgets work down to about 260 px width. The system diagram switches to an upright layout below 480 px so that its labels stay readable.
- Keyboard: all controls can be reached with Tab; in the trends chart the arrow keys move the crosshair.
Heating circuit, hot water and heating curve write values with ack: false and show them as
applying … until the source confirms exactly this value with ack: true. An older confirmation
with a different value does not end the wait. Without confirmation the widget reports
no confirmation after the waiting time and shows the last confirmed value again. Objects with
common.write: false lock their controls (read-only).
| Field | Default | Meaning |
|---|---|---|
| Delay before writing | 800 ms | Steppers wait until you stop clicking, then write once |
| Wait for confirmation | 10 s | Time until no confirmation is shown |
| Confirm before writing | off | Changes are only written after Apply |
wolf-smartset confirms a written value as soon as the Wolf cloud has accepted it — in a test with
an ISM7 about 1.5 s after the click, including the 800 ms delay — so the default of 10 s is ample.
On slow connections raise Wait for confirmation (up to 300 s); a late confirmation is still
accepted.
The object IDs of wolf-smartset are numbers; the readable name is in the Name column of the
object browser — search for it. The folder names contain numbers that can differ between
installations, so the IDs below are examples from one installation (Wolf gas appliance with
operating module BM, ISM7). Values under Fachmann only exist if the expert level is enabled in
the wolf-smartset instance. All IDs start with wolf-smartset.0..
System diagram
| Field | Object name | Example ID |
|---|---|---|
| Flow | VF Vorlauffühler | Benutzer.Übersicht.8000500001 |
| Return | RLF Rücklauffühler | Benutzer.Übersicht.8000700001 |
| Burner | Flamme | Benutzer.Heizung.210_Wärmeerzeuger_1.8000900001 |
| Boiler pump | KKP Kesselkreispumpe (on/off) — or PWM Pumpe (%) | Benutzer.Übersicht.8001700001 — or Benutzer.Heizung.210_Wärmeerzeuger_1.8000400001 |
| Outside temperature | Außentemperatur | Benutzer.Heizung.058_Direkter_Heizkreis.3000100000 |
| Tank temperature | SF Speicherfühler | Benutzer.Übersicht.8000100001 |
| Charging active | Ausgang A1 (if A1 is the tank charging pump, parameter HG14 = 6) | Fachmann.Heizgerät.Heizgerät.422_Einstellungen_und Anzeigen.8001900001 |
| 3-way diverter valve | 3WUV 3-Wege-Umschaltventil | Benutzer.Übersicht.8001800001 |
| Heating circuit 1, flow | VF Vorlauffühler (direct circuit without mixer) | Benutzer.Übersicht.8000500001 |
Modulation is not provided by the ISM7 — leave it empty; the flame is then shown fully when the burner is on. Leave the circuit pump empty: the circuit then follows the boiler pump.
Do link the 3-way diverter valve if the appliance has one: it tells the diagram where the boiler
water currently goes. On this system it reports 1 for hot water — that value goes into Value for
hot water and can be changed there if your appliance handles it differently (compare in the object
tree or in the Wolf interface).
Boiler status
| Field | Object name | Example ID |
|---|---|---|
| Operating phase | HG Status | Fachmann.Heizgerät.Heizgerät.422_Einstellungen_und Anzeigen.8002000001 |
| Burner | Flamme | Benutzer.Heizung.210_Wärmeerzeuger_1.8000900001 |
| Operating hours | Brennerbetriebsstunden | Benutzer.Heizung.210_Wärmeerzeuger_1.8008400001 |
| Burner starts | Brennerstarts | Benutzer.Heizung.210_Wärmeerzeuger_1.8008500001 |
| Flow / return | VF Vorlauffühler / RLF Rücklauffühler | Benutzer.Übersicht.8000500001 / …8000700001 |
Modulation and water pressure are not available via the ISM7; without an object the gauges are hidden.
Heating circuit
| Field | Object name | Example ID |
|---|---|---|
| Operating mode | Betriebsart | Benutzer.Heizung.058_Direkter_Heizkreis.3001800000 |
| Day / economy temperature | Tagtemperatur / Spartemperatur | …058_Direkter_Heizkreis.1000000000 / …1000100000 |
| Setpoint correction | Sollwertkorrektur | …058_Direkter_Heizkreis.3001900000 |
| Time program | Zeitprogramm direkter Heizkreis | …058_Direkter_Heizkreis.1000200000 |
| Room temperature / effective setpoint | Raumtemperatur / Raumsolltemperatur | …058_Direkter_Heizkreis.1001200000 / …1001300000 |
| Flow setpoint | Vorlaufsolltemperatur | Benutzer.Heizung.210_Wärmeerzeuger_1.8000600001 |
Heating curve
| Field | Object name | Example ID |
|---|---|---|
| Setpoint correction | Sollwertkorrektur | Benutzer.Heizung.058_Direkter_Heizkreis.3001900000 |
| Slope | Heizkurve (read-only via wolf-smartset) |
Fachmann.Heizgerät.Heizgerät.058_Direkter_Heizkreis.1000300000 |
| Outside temperature | Außentemperatur | Benutzer.Heizung.058_Direkter_Heizkreis.3000100000 |
| Outside temperature, averaged | Außentemperatur gemittelt | Fachmann.Bedienmodul_BM0.…422_Einstellungen_und Anzeigen.3000200000 |
| Flow setpoint | Vorlaufsolltemperatur | Benutzer.Heizung.210_Wärmeerzeuger_1.8000600001 |
| Room setpoint | Tagtemperatur | Benutzer.Heizung.058_Direkter_Heizkreis.1000000000 |
| Charging active | Ausgang A1 | Fachmann.Heizgerät.Heizgerät.422_Einstellungen_und Anzeigen.8001900001 |
Hot water
| Field | Object name | Example ID |
|---|---|---|
| Tank temperature | SF Speicherfühler | Benutzer.Übersicht.8000100001 |
| Set temperature | Eingestellte Warmwassersolltemperatur | Benutzer.Warmwasser.250_Warmwasser.3006600000 |
| Effective setpoint | Speichersolltemperatur | Benutzer.Warmwasser.250_Warmwasser.8000200001 |
| Time program | Zeitprogramm Warmwasser | Benutzer.Warmwasser.250_Warmwasser.3006700000 |
| Charging active | Ausgang A1 | Fachmann.Heizgerät.Heizgerät.422_Einstellungen_und Anzeigen.8001900001 |
Circulation and one-time charge are not available via the ISM7 in this installation; without an object they are hidden.
Messages — three checks: TW-Vorlauf (Fachmann.Heizgerät.Heizgerät.422_Einstellungen_und Anzeigen.8001100001)
and TW-Abgas (…8001200001), both with severity fault (1 = OK, 0 = tripped), and the
connection wolf-smartset.0.info.connection with severity warning and the text disconnected.
Trends — for example flow, return and outside temperature as curves and PWM Pumpe (%) as the background area. Enable recording for these objects in your history adapter first.
Every widget except the gas meter has System (adapter instance) as the first field of the
Objects group. Pick an instance of wolf-smartset (ISM7) or wolf (ISM8i) there and the widget
fills in the matching objects itself. Without a choice everything stays manual as before, and
filled objects can be changed or cleared individually afterwards.
How the mapping works:
- wolf-smartset puts the system structure into the object IDs, and that structure is named
differently on every system. What is stable is the Wolf parameter number in
native.ParameterId— the widget recognises the objects by it, whatever the channels are called. - wolf (ISM8i) has a fixed structure
<instance>.<device>.<number>, for examplehg1_t.4for the boiler temperature orbm1_t.57for the heating circuit program. Those numbers come from the adapter itself (js/datapoints.json).
| Widget | filled in |
|---|---|
| System diagram | flow, return, burner, boiler pump, outside temperature, tank, charging, diverter valve, circuit 1 |
| Boiler status | operating phase, burner, operating hours, burner starts, flow, return (ISM8i also modulation and pressure) |
| Heating circuit | operating mode, day and economy temperature, setpoint correction, time program, room temperature, room setpoint, flow setpoint |
| Heating curve | setpoint correction, slope, outside temperature (also averaged), flow setpoint, room setpoint, charging |
| Hot water | tank temperature, set temperature, time program, effective setpoint, charging (ISM8i also one-time charge) |
| Messages | the two temperature limiters (ISM8i: the fault states of appliance and control module) |
| Trends | flow, return, outside temperature and hot water as curves |
Whatever an adapter does not provide stays empty: wolf-smartset offers neither modulation nor
system pressure, the ISM8i offers neither day/economy temperature nor operating hours, program
selection or heating curve. For the system diagram the value for hot water of the diverter valve
is set along with it — 1 for wolf-smartset, Open for the ISM8i (or true there if the adapter
stores switch states as booleans).
Arrows only move where water flows: flow and return while the boiler pump runs (without a pump object: while the burner is on), the tank branch while charging, each heating circuit while its pump runs (without a pump object: like the boiler). Tank, outside temperature and zero to four heating circuits can be shown or hidden; the diagram arranges itself accordingly.
When the 3-way diverter valve is linked, it decides the branching: while it points to hot water only the tank is charged and the heating circuits stand still — even with the boiler pump running and the burner on, and even when a circuit has a pump of its own. That is exactly what happens in summer mode while the tank is charging. Without a valve nothing changes. For the tank branch an explicit charging active object wins; without one, the valve position decides.
The group Visible blocks switches each block off individually: operating mode, day temperature, economy temperature, setpoint correction, time program and the three readings (room actual, room setpoint, flow setpoint). The linked objects stay in place, so the tile also fits a small area. A switch only appears once its object is linked; without an object the block stays hidden anyway.
Wolf does not publish the formula of its heating curve. The widget therefore draws the usual
approximation flow = TR + N + K + S · max(0, TR − TA)^n (room setpoint TR, level N, setpoint
correction K, slope S, averaged outside temperature TA, curvature n, default 1) and labels
it as such. The operating point, on the other hand, comes from the controller itself (its flow
setpoint), so any difference between the two is visible. With wolf-smartset only the setpoint
correction is writable; the slope is shown but not changed, and there is no level. While the tank
is charging the operating point is marked as distorted.
Choose the history instance (empty: the system's default history), the period (6 h to 7 days) and the aggregation (average, minimum/maximum, raw values). The widget queries the history on start and then every few minutes (Refresh every); in between it adds the current value at the right edge. Point at the chart — or focus it and use the arrow keys — to see the values at that time in the legend.
Each check compares an object with the value meaning OK (empty: true or non-zero is OK). If it
deviates, the row gets the chosen severity and the text from the widget or the object's state
text. Rows are sorted fault → warning → notice → OK; the time shown is the last change of the
state. The LED turns red as soon as one row is a fault. For systems with a fault code there are
also collective fault, fault code with texts (code=text;…) and a message list (JSON array
with text, ts, severity).
The tile calculates m³ × calorific value × state number = kWh, then
kWh × energy price + base price and finally the VAT. Calorific value and state number are on
your gas bill (defaults: 11.482 kWh/m³ and 0.9612).
Gross or net? VAT stays at 0 unless you enter something else, so the result matches the prices
you entered: a gross energy price, the way most suppliers state it for private customers, gives a
gross amount. If you work with net prices the way the bundled script does, enter the rate here (19
in Germany) and you get the same gross amount as the script. When the cost comes from the object
<folder>.Kosten.KostenMonat it is gross anyway and the widget does not calculate at all.
Most bills state the energy price in cents per kilowatt hour — that is what the field Unit of
the energy price is for: pick ct/kWh and enter 8.14, or enter 0.0814 with €/kWh. Entering
cents into a euro field is off by a factor of 100, so the tile points out an energy price outside
0.01 to 1.00 €/kWh.
The adapter ships the ioBroker script gasverbrauch_statistik_v3.0.0.js. From the meter reading it
derives today, yesterday, last 7 days, last 30 days, this and last month and stores
them as objects — see Bundled script for the setup.
In the widget it is then enough to pick the folder under Statistics script: the states that
exist are filled into the objects above — including meter reading and flow, because with the script
those are the better sources. Zaehlerstand is the corrected reading (ZaehlerstandRoh is the
raw value from the CCU), and the flow drops to 0 reliably after a pause, unlike the sluggish value
of some sensors. If you prefer the sensor, enter it again afterwards.
Important: set the meter reading correction to 0 once the reading comes from the script, otherwise it is corrected twice. The tile points this out.
From version 3.0 the script calculates the costs itself — with base price, VAT and instalment.
Link <folder>.Kosten.KostenMonat as cost of the month and the tile shows that value instead of
its own calculation from the tariff; picking the folder fills it in right away.
Which values the tile shows is up to the group Visible values: one switch each for today, yesterday, 7 days, 30 days, month, last month and the costs. Today, month and costs are always available, the other switches appear as soon as their object is linked. The footer wraps from four values on; for all seven the tile should be about 460 px high.
Without the script nothing changes: link your own objects for today and month — or leave both empty and let the widget calculate them from the history.
If no objects are linked for today's and this month's consumption, the gas meter calculates both
from the history of the meter reading (sql, history or influxdb, by default the system's
history instance): the reading now minus the reading at the start of the day or month. Sensors
such as the HomematicIP HmIP-ESI count from their installation, not from the meter's reading —
enter the difference as the meter reading correction. With an HmIP-ESI in gas mode, for example:
| Field | Object |
|---|---|
| Meter reading | hm-rpc.<n>.<serial>.2.GAS_VOLUME |
| Instantaneous flow | hm-rpc.<n>.<serial>.1.GAS_FLOW |
| Counter status / not reachable / low battery | ….2.GAS_VOLUME_STATUS / ….0.UNREACH / ….0.LOW_BAT |
An HmIP-ESI shows today, yesterday, last 7 days and last 30 days in the CCU web UI. Those
values are not device data points — the CCU derives them internally from stored meter readings, so
they never arrive in ioBroker through hm-rpc. The bundled script gasverbrauch_statistik_v3.0.0.js
derives them from the meter reading itself and adds the current and the previous month. It works
with any monotonically rising meter reading, not just the HmIP-ESI.
Beyond that it can:
- derive the flow rate from the meter changes — it drops to 0 reliably after
NULL_NACH_MINminutes without a pulse, while the appliance's ownGAS_FLOWtakes up to two hours - align with the real meter: readings you enter act as anchors, giving a correction factor against lost pulses and a meter reading fit for billing
- calculate costs: m³ → kWh → euros, with base price, VAT and monthly instalment
- send reports: a daily summary via Telegram, a monthly bill via Telegram and e-mail,
optionally with a PDF attached (add the npm module
pdfkitto the javascript instance for that; without it Telegram and e-mail still work, just without the attachment)
During normal operation it needs no history adapter: the daily values live in a state as a JSON ring buffer and survive a restart. A history adapter is only useful for the initial backfill.
Where to get it
| Source | Path |
|---|---|
| Repository | addOn/ |
| Installed adapter | node_modules/iobroker.vis-2-widgets-wolf/widgets/vis-2-widgets-wolf/addon/ |
| In the browser | http://<iobroker>:8082/vis-2/widgets/vis-2-widgets-wolf/addon/gasverbrauch_statistik_v3.0.0.js |
Next to it are gasverbrauch_statistik_v3.0.0.md and the same manual as PDF (in German).
Setting it up
- In the
javascriptadapter create a new script of type Javascript/ECMAScript. - Paste the content of
gasverbrauch_statistik_v3.0.0.js. - At the top set at least
SRCto the meter reading — e.g.hm-rpc.0.<serial>.2.GAS_VOLUMEor the Rega variablesvEnergyCounter…(for that, enable syncing of invisible variables inhm-rega). - Start the script and check the log: it creates the states itself.
- In the gas meter widget pick the folder under Statistics script.
Settings at the top of the script
| Constant | Default | Meaning |
|---|---|---|
SRC |
'hm-rega.0.12345' |
Required: state holding the meter reading in m³ |
PFAD |
'0_userdata.0.Gas' |
Folder for the states it creates |
INKL_HEUTE |
false |
false counts only finished days in 7/30 days (like the CCU), true includes the running one |
TAGE_HISTORIE |
70 |
daily values kept; at least 62 for last month |
NK |
3 |
decimals of the consumption values |
HISTORY_INSTANCE |
'influxdb.0' |
instance used for the backfill, also history.0 or sql.0; empty disables it |
BACKFILL_BEIM_START |
true |
backfill automatically on the very first start |
DURCHFLUSS_AKTIV |
true |
derive the flow rate from the meter changes (from version 2.1) |
FENSTER_MIN |
10 |
smoothing window in minutes; larger is calmer but slower to react |
NULL_NACH_MIN |
10 |
without a meter change the flow drops to 0 after this many minutes |
LUECKE_MIN |
7 |
a longer gap between two changes counts as standstill in between |
ANLAUF_MIN |
3 |
assumed duration of the first change after a pause |
MAX_DURCHFLUSS |
10 |
plausibility limit in m³/h (a G4 meter handles 6) |
KORREKTUR_AKTIV |
true |
align with entered meter readings (from version 3.0) |
FAKTOR_AUTO · FAKTOR_MANUELL |
true · 1 |
correction factor from the readings or fixed |
FAKTOR_MIN · FAKTOR_MAX |
0.8 · 1.25 |
range in which a factor is accepted |
BRENNWERT · ZUSTANDSZAHL |
11.2 · 0.95 |
tariff values for the conversion to kWh |
ARBEITSPREIS_CT_KWH · GRUNDPREIS_EUR_MONAT |
8.90 · 12.50 |
energy price in cents, base price per month |
MWST_PROZENT · ABSCHLAG_EUR |
19 · 120.00 |
VAT and the monthly instalment |
TELEGRAM_INSTANZ · EMAIL_INSTANZ |
telegram.0 · email.0 |
channels for the reports |
TAGESBERICHT_CRON · MONATSBERICHT_CRON |
1 0 * * * · 10 0 1 * * |
when the reports are sent |
PDF_AKTIV · PDF_PFAD |
true · …/gasabrechnung |
PDF of the monthly bill and where it is stored |
DEBUG |
false |
additional log output |
States it creates (below PFAD)
| State | Content | In the widget |
|---|---|---|
Zaehlerstand |
mirrored meter reading in m³ | meter reading (only if that field is still empty) |
Heute |
consumption since midnight | today |
Gestern |
consumption of the previous day | yesterday |
Letzte7Tage |
sum of the last 7 days | 7 days |
Letzte30Tage |
sum of the last 30 days | 30 days |
DieserMonat |
sum since the start of the month, today included | month |
LetzterMonat |
sum of the previous month | last month |
Durchfluss |
derived flow rate in m³/h (from version 2.1) | flow |
VerbrauchAktiv |
true while gas is flowing | — |
Ablesung |
input: enter the value you read off the meter here (from version 3.0) | — |
ZaehlerstandRoh, LetzteAblesung, Korrekturfaktor, AbweichungProzent |
uncorrected reading, last entry, active factor, pulse loss in % | — |
Kosten.KostenMonat |
cost of the current month, gross | cost of the month |
Kosten.EnergieHeute, Kosten.EnergieMonat, Kosten.KostenHeute, Kosten.PrognoseMonat, Kosten.SaldoJahr |
kWh and euros for day, month, forecast and yearly balance | — |
Bericht.* |
monthly archive, buttons to send, path of the last PDF | — |
Basis, BasisDatum, Historie, ZaehlerLetzteAenderung |
meter reading at midnight, its date, daily values as JSON, time of the last meter change | internal |
Backfill |
button: rebuild the history from the history adapter | — |
Backfill
With HISTORY_INSTANCE set, the script fetches the meter reading for every start of day on its
first run and derives the daily values from it — the 7 and 30 day sums are then correct right away.
It can be repeated at any time through the state Backfill. Without a history, the daily values
simply start building up from now on.
Operation
The script recalculates on every change of the meter reading, at 00:00 and hourly as a safety net; the daily report goes out a minute later. All runs share a serial queue: whatever comes up while another task is running is appended instead of dropped — otherwise a running daily closing would swallow a report due at the same moment. A missed midnight run is caught up on the next run, days without data are filled with 0. If the meter reading drops (meter exchange or reset), it sets a new baseline and counts that day as 0.
- js-controller >= 7.2.2
- vis-2 >= 2.20.0 (the first vis-2 version with React 19)
- Node.js >= 22
npm install
npm --prefix src-widgets install
npm run build # builds the widgets into widgets/vis-2-widgets-wolf/
npm run lint
npm test
cd src-widgets && npm start # sandbox: widgets with simulated values, no ioBroker needed
npm run dev-server setup # once: local ioBroker instance for testing
npm run dev-server run # admin on http://localhost:8081, vis-2 on http://localhost:8082/vis-2/vis-2 >= 2.20.0 is not yet published on npm. Until it is, install a build of the
ioBroker.vis-2 master branch into the dev-server
instance (.dev-server/default).
WOLF and the WOLF logo are trademarks of WOLF GmbH. This project is not affiliated with, endorsed by or connected to WOLF GmbH. It only visualises data that other ioBroker adapters provide.
- (ssbingo) Bundled statistics script: the nightly daily report was silently dropped whenever it fell on the same minute as the daily closing — the lock against overlapping runs discarded the second call instead of queueing it. The closing now runs at 00:00, the report stays at 00:01, and a serial queue appends tasks instead of dropping them, which also saves a meter change arriving during a backfill
- (ssbingo) Only the current script version stays in the addOn folder; the shorter manuals pointed at a version that is no longer there
- (ssbingo) Gas meter: new field VAT (%) in the cost calculation. Until now the tile simply added energy and base price, so the result was gross or net depending on what you entered, while the bundled script works with net prices and adds the tax — the two differed by 19 percent. The default 0 keeps existing setups unchanged
- (ssbingo) Gas meter: picking the script folder now also fills in the corrected meter reading and the derived flow — until now those two fields were left alone when they already held the sensor, so the tile kept showing the uncorrected reading
- (ssbingo) Gas meter: the tile points out a meter reading correction that is still set while the reading comes from the script, because it would be corrected twice
- (ssbingo) Gas meter: new object field cost of the month — when linked, the tile shows that value instead of calculating from the tariff, which suits the bundled script because its figure includes base price, VAT and instalment
- (ssbingo) Bundled statistics script in version 3.0.0: it aligns entered meter readings (correction factor against lost pulses), calculates costs and sends daily and monthly reports via Telegram and e-mail, optionally with a PDF
- (ssbingo) Picking the script folder now also fills in the cost object; the manual lists the new settings and states
- (ssbingo) The widget sources moved from src-widgets-ts to src-widgets, the usual name in the ioBroker ecosystem: the repository checker skips that folder, so its remarks about react and the font packages are gone without adding dependencies nobody needs at runtime. Nothing changes in the delivered package
- (ssbingo) Bundled statistics script in version 2.1.0: it also derives the flow rate from the meter changes (states Durchfluss, VerbrauchAktiv, ZaehlerLetzteAenderung) — the file was converted to UTF-8 and its timers now run through globalThis
- (ssbingo) Gas meter: the folder automation knows the derived flow and leaves an already linked flow object alone
- (ssbingo) The script files carry their version in the name; texts and tooltips point at the addOn/ folder, and a test keeps the READMEs from naming files that do not exist
- (ssbingo) Every widget except the gas meter can fill its objects from an adapter instance: pick a wolf-smartset (ISM7) or wolf (ISM8i) system in the first field of the Objects group and the matching objects are filled in — without a choice everything stays manual as before
- (ssbingo) Gas meter: the energy price can be entered in ct/kWh the way most bills print it; the tile points out a price outside 0.01 to 1.00 €/kWh, which is what entering cents into the euro field looks like
- (ssbingo) System diagram: a heating circuit stands still while the 3-way diverter valve points to hot water — until now it followed the boiler and wrongly showed flow during tank charging in summer mode
- (ssbingo) System diagram: new fields for the diverter valve and the value that means hot water; without them nothing changes, and an explicit charging active object still wins for the tank branch
- (ssbingo) Statistics script: the timers run through globalThis, so the ioBroker repository checker no longer reports them — the behaviour is unchanged
- (ssbingo) react and the font packages are marked as optional dependencies for the repository checker: the fonts are bundled at build time, React is provided by vis-2 at runtime
- (ssbingo) Dependabot still checks monthly, but spread across the month
- (ssbingo) Heating circuit: every block can be shown or hidden individually
- (ssbingo) Gas meter: consumption values from the bundled statistics script — yesterday, last 7 and 30 days, previous month
- (ssbingo) Gas meter: every value of the footer can be shown or hidden individually
- (ssbingo) The statistics script
gasverbrauch_statistik.jsships with the adapter and is documented in all READMEs
Older changes: CHANGELOG_OLD.md
MIT License
Copyright (c) 2026 ssbingo ssbingo@online.de
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.








