Skip to content

(SMOS40) add new Registries and Mappings for SG-Ready states - #325

Open
VallahDieWaldfee wants to merge 10 commits into
yozik04:masterfrom
VallahDieWaldfee:mappings
Open

VallahDieWaldfee wants to merge 10 commits into
yozik04:masterfrom
VallahDieWaldfee:mappings

Conversation

@VallahDieWaldfee

Copy link
Copy Markdown
Contributor

Pull Request Type

Please select the type of your PR:

  • Add/Update Registries
  • Feature
  • Bug Fix

Description

Heatpump model: SMOS40

Firmware version: 4.13.12

Added mappings for SG-Ready States and updated registers for FW 4.13.12

  • I have followed the instructions
  • I ensured that my changes are well tested

modbus_addresses_all_20260929-06765424015108-1.csv

@VallahDieWaldfee VallahDieWaldfee changed the title Mappings (SMOS40) add new Registries and Mappings for SG-Ready states Sep 29, 2026
Removed configurations for electrical heater operation times.
Updated the description for the operating mode of PV panels in the extensions.json file.
Removed mappings for extension 42742.
febus982 added a commit to febus982/nibe that referenced this pull request Oct 15, 2026
Map holding 6008 (46009, "Requested operating mode (SG Ready)", 0-3,
default 1) to Block/Normal/Low price/Boost via extensions.json, and
regenerate smos40.json.

Labels taken from yozik04#325. The 10/20/30/40 mappings that PR
proposes for 30580 and 31912 are not included: they could not be
confirmed on the tested unit, where 30580 reads 0 (no label).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MbrHvCPEoqvq14uuvV6BPV
@febus982

Copy link
Copy Markdown

Thanks for putting this together! I own an SMO S40 too and pulled a fresh register export from my unit, on the same firmware 4.13.12 (2026-10-15). It independently confirms most of this PR: all 99 registers I found missing from smos40.json are also added here, with the same type, size, scale and limits. That includes "Desired room temperature for zone 1–40" (holding 2505+, s32), which on my unit holds the room setpoint shown on the panel.

The CI build is failing, though, and I think I can see why, along with a few other things:

  1. smos40.json is edited by hand, but smos40.csv isn't updated. convert_csv --verify regenerates the JSON from the CSV plus extensions.json, so it fails on every changed register. For the same reason, the new SG Ready mappings in extensions.json never make it into the JSON.
  2. The energy price registers (holding 6014–6060) have German titles ("Energiepreis 00:00 - 01:00"). The README asks for exports made with the pump language set to English.
  3. 12 existing registers are renamed to the new, shorter firmware titles (e.g. 30280 "Total op. time compr. cooling", 40019 "Limit DM", 46009 "Req. op. mode (SG Ready)"). This changes entity names, and their slugs, for existing Home Assistant users. It might be safer to keep the current titles.
  4. 40760 "Hot water additional heat in tank" is removed, but it's still in my export and reads fine on my unit (holding 759), on the same 4.13.12 firmware. Exports seem to list only the registers relevant to the installed configuration; mine leaves out 400+ registers that exist in the library. So I'd keep registers unless they're confirmed removed.
  5. 40062 min changes from 55.0 °C to 5.5 °C. My export has the same value (min 55 with default 550, factor 10), but it looks like an error in the export itself, so I left the existing min alone.
  6. nature: total is dropped from 40012 (degree minutes), which comes from the "Common Parameters" extension.

A couple of other observations from read-only checks on my unit:

  • The holding variants of "External reading of BTx activated" (5208–5213, 5986) are rejected with illegal function, while the input variants answer. So I added the input registers and kept the holding ones for firmware that still exposes them.
  • "Pulse energy meter (BE8)" (input 3803) appears in my export, but reads are rejected, so I left it out. You didn't add it either.
  • For the SG Ready mappings, I included 46009 (0 = Block, 1 = Normal, 2 = Low price, 3 = Boost). I didn't include the 10/20/30/40 mappings for 30580/31912, because 30580 reads 0 on my unit, which has no label. Do you have a source for those values, or a reading with SG Ready active?

I've put the same register set on a branch that goes through the CSV (convert_csv regenerated, verify passes) and adds tests using values captured read-only from my unit: febus982#1 (branch smos40-firmware-registers). Feel free to cherry-pick from it, or I'm happy to open it here instead if that's easier. I didn't want to step on your PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants