Skip to content

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:

  1. decodes the envelope,
  2. verifies the signature with the embedded public key,
  3. compares ha_uuid with the Home Assistant instance id,
  4. checks the expiry date and applies the 14-day grace period,
  5. stores the original blob in .storage and 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_diagnostics service 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.