Custom Component: Nikobus

Nikobus 2.0.0 is released, should address your scene / cover issue.

Once setup, find the “Nikobus Bridge” device, click “Discover modules…” wait, integration will reload itself, then “Scan all module…”, have a coffee :slight_smile: this one will take minutes to completes as it queries all modules and their register. Avoid using Nikobus buttons or others while this run, if it happen, no worries, just run again, both can be executed as many time as needed to completion.

@fdebrus first and foremost a BIG THANK YOU. The amount of changes and improvements you made recently is unbelievavble.

I did the upgrade as suggested and ran the scans. But how can I check whether the links between buttons and “impacted” modules has been picked up.

Based on the the GUI not responding anymore when the physical buttons are pressed my guess is the “impacted” module config hasn’t been picked up.

Also where can you manually add or change the “impacted modules” info in the new version ?

Thanks for the nice words :slight_smile:

The files are now in

/config/.storage/nikobus.buttons
/config/.storage/nikobus.modules

Here is an example of my button

      "17C554": {
        "type": "Button with 4 Operation Points",
        "model": "05-346",
        "channels": 4,
        "description": "Button with 4 Operation Points #N17C554",
        "operation_points": {
          "1A": {
            "bus_address": "8AA8FA",
            "description": "Push button 1A #N8AA8FA",
            "linked_modules": [
              {
                "module_address": "0E6C",
                "outputs": [
                  {
                    "channel": 3,
                    "mode": "M01 (Dim on/off (2 buttons))",
                    "t1": null,
                    "t2": null,
                    "payload": "01B400120050155F",
                    "button_address": "17C554"
                  }
                ]
              }
            ]
          },
          "1B": {
            "bus_address": "CAA8FA",
            "description": "Push button 1B #NCAA8FA",
            "linked_modules": [
              {
                "module_address": "0E6C",
                "outputs": [
                  {
                    "channel": 3,
                    "mode": "M01 (Dim on/off (2 buttons))",
                    "t1": null,
                    "t2": null,
                    "payload": "01B400120050155F",
                    "button_address": "17C554"
                  }
                ]
              }
            ]
          },
          "1C": {
            "bus_address": "0AA8FA",
            "description": "Push button 1C #N0AA8FA",
            "linked_modules": [
              {
                "module_address": "0E6C",
                "outputs": [
                  {
                    "channel": 4,
                    "mode": "M01 (Dim on/off (2 buttons))",
                    "t1": null,
                    "t2": null,
                    "payload": "FFB400030050155F",
                    "button_address": "17C554"
                  }
                ]
              }
            ]
          },
          "1D": {
            "bus_address": "4AA8FA",
            "description": "Push button 1D #N4AA8FA",
            "linked_modules": [
              {
                "module_address": "0E6C",
                "outputs": [
                  {
                    "channel": 4,
                    "mode": "M01 (Dim on/off (2 buttons))",
                    "t1": null,
                    "t2": null,
                    "payload": "FFB400030050155F",
                    "button_address": "17C554"
                  }
                ]
              }
            ]
          }
        }
      },

You can no longer change the “impacted mdule” which are now under “linked_modules”. It shall discover it, check which button have no “linked_modules”, to which module they below switch module, cover module, etc… and report it here.

I have all my buttons and modules automatically discovered, let’s figure out what is special in your config and make it work.

The link between a button and an output is defined in the module register, so I guess we are not ready correctly some of your module, if you can check to which module belongs the button that have no “linked_module” defined, we can troubleshoot further.

is this one complete and accurate ?

/config/.storage/nikobus.modules

is your PCLink second hand ? is so was it reset and cleared from previous owner config ?
Is you configuration 100% correct in your Nikobus ?

the integration now reads your Nikobus configuration, if it is not correct, eg previous owner config still present, HA will not be working.

when running the module scan, do you see you module address ? and the numbers of records found growing ?

do you now see your wall button definition in the “Nikobus Bridge” ?

and for each wall button their push button ?

Hi, yes I’m the first owner of my installation but I have a fairly big Nikobus implementation :slight_smile:

My config files were also quite accurate, they had to be for such a big installation.

I tried to analyse and I think there are a few buckets in which errors fall:

  • PClogic missing: none of the PC logic virtual buttons are included. I have a PC link and PC logic in my installation
  • 05-057 physical buttons: none of the physical buttons implemented via 05-057 are included
  • 05-206: the modular interface is correctly detected by your module scan but none of the buttons or commands comming from that one are detected

For “standard” 4 button wall switches some links are completely missing but the button appears in the Nikobus bridge entity, so the link isn’t detected. It looks like especially buttons that are linked to multiple modules are impacted.
Also the 8 button ones seem to be a bit more troublesome.
But not only, also a simple 4 buttons switch linked to one switch module.

How can I help you best because seen the size of my install and the size of the files I think pasting them here won’t be very helpfull.

The scans and update process itself worked I saw the counting of the 12 modules and the integration showing some kind of address scan for each module

PC Logic virtual buttons (05-201) missing
Espected, it’s not decoded yet, only classified as a module. I’ve one, so I can troubleshoot and decode it.

What shall we recreate in HA ? the 6 logic inputs ? something else ?

05-057 physical buttons
I do not know that type of button, so expected I will need to decode those as well

Is it this one ?

05-206 modular interface
Same as PC Logic, not decoded yet

Is it this one ?

Will check on how to decode those 3 and revert

  1. Open a fresh GitHub issue at Issues · fdebrus/Nikobus-HA · GitHub with [discovery] in the title. Attach files to the issue (GitHub accepts file uploads on comments — .json etc. are fine).
  2. Attach the diagnostics dump from the integration: Settings → Devices & Services → Nikobus → ⋮ → Download Diagnostics. That packages the post-discovery storage state in one file — already redacted, no manual scrubbing needed.
  3. Attach the two .migrated sidecars: <config>/nikobus_module_config.json.migrated and <config>/nikobus_button_config.json.migrated. Those carry your pre-2.0 hand-curated truth and let me diff what discovery thinks should be there against what you know is wired up.
  4. One log snippet during a clean discovery run. Enable debug:
logger:  
   default: warning  
   logs:    
      custom_components.nikobus: debug    
      nikobus_connect: debug

Restart HA. Press Discover modules & buttons, let it finish. Press Scan all module links, let it finish. Then save the HA log (just the section spanning the two runs is enough — usually 5-15 minutes worth) and attach.

That gives me four things at once: what the bus reports (log), what discovery actually wrote (diagnostics), what the legacy file knew (migrated), and what bytes the chunk decoder rejected/accepted (debug log). With that I can usually point at a specific decoder line.

If a single GitHub issue would be too noisy, breaking it into one issue per bucket ([discovery] 05-057 not mapped, [discovery] PC Logic virtual buttons not exposed, [discovery] multi-module button links incomplete) would also work — the first three are definitely separate problems with separate fixes.

The 12-module count and per-module register scan completing means the bus side is healthy. The gaps are downstream, in the decode/merge logic — and that’s debuggable from the data above.

Great, will open a github topic and upload all info you mentioned.
For the PC logic, if the virtual buttons and the inputs are modeled think that is ok. You can create rules in pc logic but nothing you can’t re-create in Home assistant. Even the virtual buttons IMO are priority 2.

05-057 and 05-056 are 2 version of the picture you indeed uploaded.
If needed, I have some spare ones and can send you one of each. Think it’s the least I can do to support you. So let me know.

I created separate GITHUB issues and uploaded debug files in the first issue.

The 05-206 is indeed the one you show higher.
By the way if you want to go all the way I also have a 05-205 and 05-300 in my setup which aren’t discovered. But that is like lowest possible priority as far as I’m concerned as I don’t use them actively but if all other bugs are resolved it might e something to think about just for the sake of completeness.

1 Like

Hi, first of all: thanks for your development on Nikobus v1. I used OpenHab in the past and now want to set up Home Assistant. I’m using the latest stable release of HA and HA Core on a VM. I’ve passed through a USB to serial adapter (working fine on /dev/ttyUSB0), but it only seems to discover all of my buttons and the Niko Bridge. My switching modules and dimmer module are not being discovered and I can’t find a way to add them manually either. The discovered buttons work, when I use the “click” command, so I think there’s nothing wrong with the communication. No errors in the logs either. I’ve tried removing the setup and starting fresh and running a new discovery, but to no avail. Please advice. Thx!

Could you try from new release 2.0.7 ? discovery is quite new and I had to iron out some bugs.

Hello and thanks for your great job! I was using Openhab before and when I found your module I directly migrated!
I have an issue :
When I try to discover new modules and buttons,the PC-Link inventory only goes to 96/240 and stop. Then I have the message in the settings saying that no buttons have been discovered yet. I try again and it’s the same, everytime.

I upgraded to 2.0.9 and nothing changed.

Any ideas of what I could do to make it work ?

Thanks !

could you enable debuglog on the Nikobus integration and run the discovery again then post the log ? revert if you need more guidance to get the logs

Sure, how can I post the log ? Can I attach a file of just copy/paste ?

good point, as new comer to the forum, you can’t do much yet. open an issue on the github Issues · fdebrus/Nikobus-HA

Ok, thanks, here it is :

Thanks @fdebrus - smooth upgrade to v2!

1 Like

@PawaLegba

How is your motion detector

"0975F4": {
"description": "Motion Detector",
"discovered_name": "Motion Detector",
"category": "Button",
"device_type": "28",
"model": "05-7X5",
"address": "0975F4",
"channels": 2,
"channels_count": 2,
"module_type": "other_module",
"discovered": true,
"last_discovered": "2026-05-06T15:13:46.356802+00:00",
"channels_data": {
"channel_1": {
"key": "1A",
"address": "8BEBA4"
},
"channel_2": {
"key": "1B",
"address": "CBEBA4"
}
}
},

and 05-056 interface displayed / reported in HA ?

"18AA68": {
"description": "Reserved 0x21",
"discovered_name": "Reserved 0x21",
"category": "Reserved",
"device_type": "21",
"model": "Unknown",
"address": "18AA68",
"channels": 0,
"channels_count": 0,
"module_type": "other_module",
"discovered": true,
"last_discovered": "2026-05-06T15:13:51.362195+00:00"
},

I'm trying to find the logic that define a module to be existing or not on the bus from the Nikobus software, do not upgrade for now unless you are a test user.

Keeping you posted...

Sorry for the late reply, but when I go to *Developer Tools → Events (listen to nikobus_button_timer_2) and press it long, I got no result. I have tried also 'nikobus_button_pressed_2' without any result, only 'nikobus_button_pressed' give something...
I'm still on 0.8.3

Just a quick reference of the event fired by the application.

Will check now they are will fired, but last time I checked everything was fine, could you produce a debuglog while pressing the button.

Event name Fired in When
nikobus_button_pressed handle_button_press Immediately on first frame of a press (state=pressed)
nikobus_button_timer_1 _fire_timer_event Press held ≥ 1 s (state=timer, threshold=1)
nikobus_button_timer_2 _fire_timer_event Press held ≥ 2 s (state=timer, threshold=2)
nikobus_button_timer_3 _fire_timer_event Press held ≥ 3 s (state=timer, threshold=3)
nikobus_button_released _handle_release On release (state=released, with duration + bucket)
nikobus_short_button_pressed _handle_release On release if duration < SHORT_PRESS (1.0 s)
nikobus_long_button_pressed _handle_release On release if duration ≥ SHORT_PRESS (1.0 s)
nikobus_button_pressed_0 _handle_release On release, bucket = 0 (duration < 1 s)
nikobus_button_pressed_1 _handle_release On release, bucket = 1 (1 s ≤ duration < 2 s)
nikobus_button_pressed_2 _handle_release On release, bucket = 2 (2 s ≤ duration < 3 s)
nikobus_button_pressed_3 _handle_release On release, bucket ≥ 3 (duration ≥ 3 s)
nikobus_button_operation process_button_modules Once per impacted module, both at initial press (non-dimmers) and at release

@MarcVZ

On my end everything is fine, so I do need your debuglog to progress on your issue

2026-05-12 13:02:21.595 DEBUG (MainThread) [custom_components.nikobus.nkbactuator] [086C4E-420755.691-a2f57cb5] Firing HA Event: nikobus_button_pressed | Payload: {'address': '086C4E', 'module_address': '0E6C', 'channel': 6, 'ts': '2026-05-12T11:02:21.595455+00:00', 'press_id': '086C4E-420755.691-a2f57cb5', 'state': 'pressed', 'duration_s': None, 'bucket': None, 'threshold_s': None, 'source': 'nikobus'}
2026-05-12 13:02:22.596 DEBUG (MainThread) [custom_components.nikobus.nkbactuator] [086C4E-420755.691-a2f57cb5] Firing HA Event: nikobus_button_timer_1 | Payload: {'address': '086C4E', 'module_address': '0E6C', 'channel': 6, 'ts': '2026-05-12T11:02:22.596114+00:00', 'press_id': '086C4E-420755.691-a2f57cb5', 'state': 'timer', 'duration_s': 1.0010596759966575, 'bucket': None, 'threshold_s': 1, 'source': 'nikobus'}
2026-05-12 13:02:23.597 DEBUG (MainThread) [custom_components.nikobus.nkbactuator] [086C4E-420755.691-a2f57cb5] Firing HA Event: nikobus_button_timer_2 | Payload: {'address': '086C4E', 'module_address': '0E6C', 'channel': 6, 'ts': '2026-05-12T11:02:23.597497+00:00', 'press_id': '086C4E-420755.691-a2f57cb5', 'state': 'timer', 'duration_s': 2.0024419099790975, 'bucket': None, 'threshold_s': 2, 'source': 'nikobus'}
2026-05-12 13:02:24.188 DEBUG (MainThread) [custom_components.nikobus.nkbactuator] [086C4E-420755.691-a2f57cb5] Firing HA Event: nikobus_button_released | Payload: {'address': '086C4E', 'module_address': '0E6C', 'channel': 6, 'ts': '2026-05-12T11:02:24.188937+00:00', 'press_id': '086C4E-420755.691-a2f57cb5', 'state': 'released', 'duration_s': 2.593880536966026, 'bucket': 2, 'threshold_s': None, 'source': 'nikobus'}
2026-05-12 13:02:24.189 DEBUG (MainThread) [custom_components.nikobus.nkbactuator] [086C4E-420755.691-a2f57cb5] Firing HA Event: nikobus_long_button_pressed | Payload: {'address': '086C4E', 'module_address': '0E6C', 'channel': 6, 'ts': '2026-05-12T11:02:24.189120+00:00', 'press_id': '086C4E-420755.691-a2f57cb5', 'state': 'released', 'duration_s': 2.593880536966026, 'bucket': 2, 'threshold_s': None, 'source': 'nikobus'}
2026-05-12 13:02:24.189 DEBUG (MainThread) [custom_components.nikobus.nkbactuator] [086C4E-420755.691-a2f57cb5] Firing HA Event: nikobus_button_pressed_2 | Payload: {'address': '086C4E', 'module_address': '0E6C', 'channel': 6, 'ts': '2026-05-12T11:02:24.189214+00:00', 'press_id': '086C4E-420755.691-a2f57cb5', 'state': 'released', 'duration_s': 2.593880536966026, 'bucket': 2, 'threshold_s': None, 'source': 'nikobus'}
2026-05-12 13:02:24.189 DEBUG (MainThread) [custom_components.nikobus.nkbactuator] [086C4E-420755.691-a2f57cb5] Firing HA Event: nikobus_button_operation | Payload: {'address': '086C4E', 'module_address': '0E6C', 'channel': None, 'ts': '2026-05-12T11:02:24.189391+00:00', 'press_id': '086C4E-420755.691-a2f57cb5', 'state': 'released', 'duration_s': 2.593880536966026, 'bucket': 2, 'threshold_s': None, 'source': 'nikobus', 'impacted_module_address': '0E6C', 'impacted_module_group': '1'}