Skip to content

Audio amplifiers appear as "on" in Home Assistant when the video intercom stream starts or stops. #669

Closed

Description

@nicolacavallo84

Hi,

Since version MyHome 2.0.0b15, whenever I start or stop the video stream from my video intercom, all the audio amplifiers (6 in my case) show up as "on" in Home Assistant, even though they are actually off.

I did not experience this behavior in previous versions.

Attached below is the debug trace captured while starting the video intercom stream, showing the amplifiers immediately being reported as "on" in Home Assistant.

MyHOME Diagnostic Bundle

Environment:

  • Home Assistant Version: 2026.10.0
  • Integration Version: 2.0.0b15
  • OWNd Protocol Engine: 2.0.0b10
  • Timestamp: 2026-10-09T15:30:00.022Z

Active Gateway Configuration:

  • Model: MH202 (BTicino S.p.A.)
  • Firmware: 1.0
  • Connection: Ethernet TCP
  • MAC Prefix: 00:03:50
  • Queue Pacing: 0.1s
  • Worker Count: 1
  • Connection Status: Connected

Buffer Telemetry:

  • Total RX Frames: 32
  • Total TX Frames: 0
  • Total Captured: 32
  • Buffer Depth: 30 / 500
  • Capture Kind: Passive trace
  • Gateway Queue Depth: 0
  • Active Card Filter: None (All frames)
OpenWebNet Bus Trace
[17:29:26.082] [RX] *#18*76#0*113*0##
[17:29:30.184] [RX] *#22*3#4#1*1*1##
[17:29:30.207] [RX] *#13**22*17*29*32*000*05*09*10*2026##
[17:29:30.214] [RX] *#16*41*1*1##
[17:29:30.344] [RX] *#22*3#3#1*1*1##
[17:29:30.355] [RX] *#16*31*1*1##
[17:29:30.417] [RX] *#16*61*1*1##
[17:29:30.420] [RX] *#22*3#6#1*1*1##
[17:29:30.454] [RX] *#22*3#5#1*1*1##
[17:29:30.465] [RX] *#16*51*1*1##
[17:29:30.500] [RX] *#16*71*1*1##
[17:29:30.502] [RX] *#22*3#7#1*1*1##
[17:29:30.537] [RX] *#22*3#8#1*1*1##
[17:29:30.544] [RX] *#16*81*1*1##
[17:29:35.714] [RX] *#18*77#0*113*161##
[17:29:40.884] [RX] *#18*73#0*113*0##
[17:29:41.482] [RX] *#18*78#0*113*0##
[17:29:41.546] [RX] *6*9**##
[17:29:42.404] [RX] *#18*51*113*431##
[17:29:43.429] [RX] *#22*3#5#1*1*0##
[17:29:43.437] [RX] *#16*51*1*0##
[17:29:43.651] [RX] *#16*31*1*1##
[17:29:43.657] [RX] *#22*3#3#1*1*1##
[17:29:43.858] [RX] *#16*41*1*6##
[17:29:43.861] [RX] *#22*3#4#1*1*6##
[17:29:44.128] [RX] *#22*3#6#1*1*7##
[17:29:44.136] [RX] *#16*61*1*7##
[17:29:44.788] [RX] *#18*79#0*113*0##
[17:29:48.464] [RX] *#18*75#0*113*0##
[17:29:50.895] [RX] *#18*71#0*113*0##

Activity

  1. GreenGrassBlueOcean commented on Oct 9, 2026

    @GreenGrassBlueOcean
    Contributor

    Thank you for the detailed report and trace, @nicolacavallo84!

    What is happening on the bus

    In BTicino MyHOME installations where video door entry / intercom (WHO 6/8) and sound diffusion (WHO 16/22) coexist with an audio matrix (such as F441 / F441M) or MH200/MH202 gateway:

    1. Stream Start (Intercom Audio Ducking):
      When the video stream / intercom preview opens, the audio matrix attenuates background sound across all rooms to prevent interference with the intercom conversation. The gateway broadcasts Dimension 1 (Volume) status frames setting/reporting volume level 1 for each amplifier:
      *#22*3#4#1*1*1##  (WHO 22 speaker area 4 point 1: volume 1)
      *#16*41*1*1##      (WHO 16 amplifier 41: volume 1)
      *#16*31*1*1##      (WHO 16 amplifier 31: volume 1)
      *#16*61*1*1##      ...
      
    2. Stream Stop (Volume Restoration):
      When the video stream closes (*6*9**## Camera OFF), the matrix restores the saved volume levels for the amplifiers:
      *#16*41*1*6##      (WHO 16 amplifier 41: restored to volume 6)
      *#22*3#6#1*1*7##   (WHO 22 amplifier 61: restored to volume 7)
      

    Root Cause of the Regression in 2.0.0b15

    In 2.0.0b15, PR #581 introduced physical wall button synchronization so that pressing the volume-up rocker on a physical BTicino wall control while the room is off powers on the amplifier and auto-joins the active streaming group.

    However, in MyHOMEMediaPlayer.handle_event(), the wake-up check evaluated:

    if not message.is_off and (is_volume_up or (message.volume is not None and message.volume > 0)):
        self._attr_state = MediaPlayerState.ON

    In OpenWebNet:

    • *16*1001*WHERE## (is_volume_up): An action command sent when pressing the physical volume rocker on the wall (which turns on and increments volume on an off amplifier).
    • *#16*WHERE*1*<volume>## (message.volume): A Dimension 1 status report (Volume Level). In OpenWebNet, amplifiers retain their configured volume level even when powered off.

    Because message.volume > 0 was treated as an ON condition, the moment the intercom stream started and ducked the amplifiers to volume 1 (*#16*41*1*1##), MyHOME interpreted the volume report as an instruction that the amplifiers had turned ON.

    The Fix

    We are implementing a fix that:

    1. Restricts the wake trigger strictly to explicit power-on frames (message.is_on, matrix routing) and physical volume-up rocker commands (*16*1001*WHERE##..*16*1015*WHERE##).
    2. Ensures Dimension 1 volume status reports (*#16*WHERE*1*<volume>##) only update the entity's volume level and unmute status without changing the power state of an amplifier that is currently OFF.
    3. Adds regression tests covering the authentic intercom trace frames to ensure amplifiers remain OFF throughout video intercom streaming and volume restoration.
  2. GreenGrassBlueOcean commented on Oct 9, 2026

    @GreenGrassBlueOcean
    Contributor

    Hi @nicolacavallo84,

    We have prepared a fix for the amplifier power-on issue in PR #670, ensuring volume ducking and restoration frames from video intercom streams no longer turn on idle amplifiers.

    Your trace was exceptionally helpful — it also provided valuable protocol insights into how the MH202 gateway handles video door entry and sound diffusion.

    If you are open to helping us test further when you have a spare moment, capturing a quick 1–2 minute bus trace during any of the following actions would be immensely valuable for the OpenWebNet project:

    1. Visitor Doorbell Call:

      • Start the trace in Home Assistant (Settings -> Devices & Services -> MyHOME -> Diagnostic Trace).
      • Ring the external door entry panel from outside.
      • Answer the call from an indoor unit.
      • Unlock the door / gate.
      • End the call.
    2. Audio Zone Wall Controls:

      • Turn an amplifier ON from a physical wall switch.
      • Adjust the volume up and down once or twice.
      • Turn it OFF.

    No worries at all if you don't have the time — your initial trace was already instrumental in fixing the bug!

  3. nicolacavallo84 commented on Oct 18, 2026

    @nicolacavallo84
    Author

    Hi @nicolacavallo84,

    We have prepared a fix for the amplifier power-on issue in PR #670, ensuring volume ducking and restoration frames from video intercom streams no longer turn on idle amplifiers.

    Your trace was exceptionally helpful — it also provided valuable protocol insights into how the MH202 gateway handles video door entry and sound diffusion.

    If you are open to helping us test further when you have a spare moment, capturing a quick 1–2 minute bus trace during any of the following actions would be immensely valuable for the OpenWebNet project:

    1. Visitor Doorbell Call:

      • Start the trace in Home Assistant (Settings -> Devices & Services -> MyHOME -> Diagnostic Trace).
      • Ring the external door entry panel from outside.
      • Answer the call from an indoor unit.
      • Unlock the door / gate.
      • End the call.
    2. Audio Zone Wall Controls:

      • Turn an amplifier ON from a physical wall switch.
      • Adjust the volume up and down once or twice.
      • Turn it OFF.

    No worries at all if you don't have the time — your initial trace was already instrumental in fixing the bug!

    Hi @GreenGrassBlueOcean
    I am attaching the two requested BUS tracks. I hope they are useful.

  4. GreenGrassBlueOcean commented on Oct 18, 2026

    @GreenGrassBlueOcean
    Contributor

    Hi @nicolacavallo84,

    Thank you so much for capturing and sharing both traces! Having one capture isolating a full visitor doorbell call + lock release and another isolating the physical wall controls in Zone 41 is gold-standard hardware evidence.

    We ran both captures through our OpenWebNet protocol analyzer and added them to our automated trace replay test suite in #751 (and integrated the doorbell/lock trace into #667). Here is what your MH202 + F441M bus is doing under the hood in each capture:


    1. Visitor Doorbell Call & Lock Release (myhome_trace_MH202_all_2026-10-18T10-27-48.json, 61 frames)

    1. Automatic Audio Ducking (10:27:00.492Z – 10:27:01.368Z):
      • As soon as the visitor presses the outdoor call button, your F441M matrix ducks all 6 amplifiers (31, 61, 51, 41, 71, 81) to volume 1 using paired WHO=16 (*#16*<EA>*1*1##) and WHO=22 (*#22*3#<E>#<A>*1*1##) Dimension 1 frames.
    2. Visitor Doorbell Call (10:27:01.281Z – 10:27:01.285Z):
      • *8*1#1#4#20*11##: 4-component WHO=8 video call initiation (WHAT=1#1#4#20 — Kind=1 Entrance Panel PE1, MMType=4 Audio+Video, Caller=20, ringing indoor station WHERE=11).
      • *8*9#1#4*20## (+4 ms): WHO=8 Caller Address Notification (WHAT=9#1#4, WHERE=20).
    3. Door Lock Release During Conversation (10:27:25.455Z – 10:27:26.201Z):
      • *6*22*1## (WHAT=22, "Open lock with external unit in conversation" at unit 1) followed +26 ms later by *6*10*4000## (WHAT=10, "Open lock" at entrance panel 4000).
      • ~717 ms later, the lock relay pulse-release frames follow: *6*24*1## (WHAT=24 at 1) and *6*23*4000## (WHAT=23 at 4000).
    4. Call End & Volume Restoration (10:27:30.852Z – 10:27:33.268Z):
      • *6*9**##: Camera OFF (WHO=6, WHAT=9, WHERE=*) tears down the video stream.
      • *25*32#1*31##: Dry-contact sensor 31 (WHO=25) reports contact OFF (WHAT=32#1).
      • The matrix restores the pre-call volume levels across the amplifiers (31 -> 0, 41 -> 6, 61 -> 7, 51 -> 6; 71 and 81 remain at 1), while all 6 unpowered zones stay strictly OFF.

    2. Audio Zone Wall Controls (myhome_trace_MH202_all_2026-10-18T10-34-13.json, 146 frames)

    1. Dual-Dialect Power-On & Matrix Routing (10:33:32.011Z – 10:33:35.201Z):
      • Pressing the physical wall switch in Zone 41 (Area 4, Point 1) emits WHO=22 commands (*22*0#4#4*6## All Sources OFF in Area 4, *22*1#4#4*2#3## Source 2#3 ON in Stereo Area 4, *22*21#4#4*5#2#3## / *22*2#4#4*5#2#3## General Source 5#2#3 activation, *22*1#4#4*3#4#1## Speaker 3#4#1 ON) alongside WHO=16 matrix routing *16*3*143## (Environment 4 -> Source 3), amplifier ON *16*3*41##, and source ON *16*3*103##.
      • The amplifier then reports its full DSP state on 3#4#1: Volume 6/31 (Dim 1), Highs 30 (Dim 2), Lows 30 (Dim 4), Balance 10 (Dim 17), Loudness ON (Dim 20), 3D OFF (Dim 18), and Equalizer Preset 3 (Dim 19).
    2. Physical Wall Rocker Volume Up & Down (10:33:34.822Z – 10:33:50.997Z):
      • Each press on the wall rocker sends WHO=22 step commands *22*3#1*3#4#1## (Volume +1) and *22*4#1*3#4#1## (Volume -1), and the gateway broadcasts paired *#16*41*1*<vol>## and *#22*3#4#1*1*<vol>## updates tracking your exact ramp:
        6 -> 15 -> 5 -> 12 -> 7 (on the 0..31 scale).
    3. Physical Wall Power-Off (10:33:51.905Z – 10:33:52.610Z):
      • *22*0#4#4*3#4#1## (WHO=22 Speaker 3#4#1 OFF), *16*13*41## (WHO=16 Amplifier 41 OFF), and *#22*3#4#1*12*0*10## (WHO=22 Dimension 12 standby status) cleanly power Zone 41 back OFF while preserving its last volume (7/31).

    How this validates the integration

    • Zero False Wake-Ups (media_player): During the visitor doorbell call, all 6 idle amplifiers remain strictly OFF through both ducking and restoration, while during the wall-switch trace Zone 41 routes to Source 3 (*16*3*143##), wakes on *16*3*41##, tracks the 6 -> 15 -> 5 -> 12 -> 7 volume trajectory, and turns OFF on *16*13*41## without creating any phantom entities for pseudo-zone 143, source 103, or WHO=22 addresses.
    • Doorbell & Lock Events (feat(cover,lock): impulse garage/gate control, multi-factor safety approval, and intercom events #667): The 4-component *8*1#1#4#20*11## frame fires a single myhome_doorbell_event for indoor unit 11 (suppressing the +4 ms *8*9#1#4*20## caller-ID frame), and both *6*22*1## and *6*10*4000## cleanly trigger the WHO=6 lock release flow.

    Both traces are now permanently part of our regression suite. Thank you again for taking the time to record them on your hardware!

  5. added 2 commits that reference this issue on Oct 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions