Licensing¶
The integration is distributed commercially by SpeicherGuru GmbH. The source is proprietary; release archives are provided to customers under their commercial licence.
Tiers¶
| Tier | Features | Validity |
|---|---|---|
| Trial | basic sensors, Modbus reads, support session | 30 days from first setup |
| Commercial Pro | all sensors, write access, auto-discovery, profile updates | signed expiry date, 14-day grace |
| Free | basic sensors | after trial or licence expiry |
The trial starts automatically when the integration is first set up. It is
stored in Home Assistant's .storage directory and survives restarts.
How verification works¶
A licence is a JSON document signed with Ed25519:
{
"payload": {
"license_id": "lic-123",
"tier": "pro",
"customer": "Example GmbH",
"ha_uuid": "…",
"issued_at": "2026-11-11T00:00:00+00:00",
"expires_at": "2027-11-11T00:00:00+00:00"
},
"signature": "base64…"
}
The integration:
- decodes the envelope,
- verifies the signature with the embedded public key,
- compares
ha_uuidwith the Home Assistant instance id, - checks the expiry date and applies the 14-day grace period,
- stores the original blob in
.storageand re-verifies it on every start.
A copied .storage directory does not move the licence to another instance,
because the instance id differs.
Activate a licence¶
Use the service:
service: sg_energy_hub.activate_license
data:
license_blob: |
{"payload": { ... }, "signature": "..."}
The status sensor changes to active. Entries reload automatically so
Pro-only sensors appear.
Read the instance id¶
The instance id is shown in:
- the attributes of the Licence status sensor,
- the diagnostics download,
- the
export_diagnosticsservice response.
Send this id to the vendor when ordering a licence.
Vendor tooling¶
python scripts/generate_license_key.py --output-dir /secure
python scripts/sign_license.py \
--private-key /secure/sg-energy-hub-license-private.pem \
--ha-uuid <instance-id> \
--customer "Example GmbH" \
--days 365
The private key belongs in the secret store (Infisical/Vault). Only the public
key is embedded in const.py.
Grace and expiry¶
- Active: expiry is in the future; all Pro features are available.
- Grace: up to 14 days after expiry; Pro features stay available and the
status sensor reports
grace. - Expired: Pro features are removed, basic sensors remain.
- Free: no valid licence and the trial has ended.
Write access additionally requires the enable_write option. Both conditions
must be true.