Xiaomi Mi Smart Home Binding: Bridge goes offline in OH3

I’m late in upgrading from OH2.5 to OH3 due to complexity of my home automation and lack of available time to learn OH3.

Yesterday I did a clean install of OH3 and immediately encountered this problem with the Xiaomi smart home bridge going offline. I searched and found numerous posts where people were encountering this problem but the solution was to restart the binding, doing this every 5~10 minutes is not a great solution (~30 devices impacted). Anyway, I seem to have stumbled on the solution, nothing fancy, just simple configuration settings, thought I should share them in case they help others.

First thing to note is the Xiaomi Mi smart home solution has a bridge and a gateway, you need both.
Initially OH3 only found my “Xiaomi Mi Smart Home Bridge”, obviously you need to add your developer key (from the Android MiHome app - it’s in the doco) to the bridge before you can progress any futher, but even after doing that OH was not discovering the gateway. The reason is because I have ethernet and bluetooth (if you have Wifi on that’s another network) turned on within the Pi, the Xiaomi binding does not know which network to use, this is resolved by setting the Bridge thing interface to eth0 (I also put the mac address into the serialNumber as posted elsewhere but I am doubtful about that), see the Bridge code below (I’ve erased my developer key for privacy reasons), this enabled the Xiaomi binding to find the gateway (appeared in the in-box immediately).

Xiaomi Bridge Code

Then I discovered that the OH3 network settings didn’t know the broadcast address (click on show advanced to see it), I clicked on the 196.168.128.255 option and saved it. I believe this is important for multicast messaging.

My Xiaomi bridge and gateway and sensors have been stable and reliable for the last 24 hours, happy days.

1 Like

Great!!! Thanks @MartinL for the post! The key findings that were missing on my config were the MAC addr as serial number and the broadcast addr. Now it is working fine!

I’m experiencing the same problem after installing my Xiaomi Gateway. I do have only one device active in OH4.1.1 release running on pi4 openHABian.

What I experience:

  1. there was no Auto-Discovery of the Gateway in openHAB
  2. I added the Gateway v3 manually [1]
  3. Then I got the configured devices within the gateway
  4. I only added one door sensor to openHAB [2]

Then:

  • I only thet information from the gatewey - and the deivce - at the start of the bridge, no further information
  • after about 2,5 minutes I get a Handler WARN
  • after precisely 5 minutes the bridge goes offline

[1]

UID: mihome:bridge:pl12
label: Xiaomi Mi Smart Home Bridge
thingTypeUID: mihome:bridge
configuration:
  ipAddress: 192.168.78.34
  interface: eth0
  port: 9898
  key: xxxx
UID: mihome:sensor_magnet_aq2:pl12:DoorWaMa
label: Xiaomi Türsensor Waschmaschine
thingTypeUID: mihome:sensor_magnet_aq2
configuration:
  itemId: 158d000xxxx
bridgeUID: mihome:bridge:pl12
channels:
  - id: isOpen
    channelTypeUID: mihome:isOpen
    label: Open Status
    description: null
    configuration: {}
  - id: lastOpened
    channelTypeUID: mihome:lastOpened
    label: Last Time Opened (Date/Time)
    description: Date/time when last opened
    configuration: {}
  - id: isOpenAlarmTimer
    channelTypeUID: mihome:isOpenAlarmTimer
    label: Alarm Timer
    description: Time in seconds, after which ALARM event is triggered, when open
      (Default 300 sec, Min 30 sec)
    configuration: {}
  - id: isOpenAlarm
    channelTypeUID: mihome:alarm
    label: Alarm Trigger
    description: Triggers ALARM event
    configuration: {}
  - id: batteryLevel
    channelTypeUID: system:battery-level
    label: Batterieladung
    description: Zeigt die aktuelle Batterieladung in Prozent an (0% - 100%).
    configuration: {}
  - id: lowBattery
    channelTypeUID: system:low-battery
    label: Niedriger Batteriestatus
    description: Zeigt an, ob ein niedriger Batteriestatus erkannt wurde.
    configuration: {}

my network tab looks also loke this:

What did I miss?

and netcat does see the multicast heartbeat every 10sec:

openhabian@openHABMain:~ $ netcat -ukl 9898
{"cmd":"heartbeat","model":"gateway","sid":"7c49eb1cfff7","short_id":"0","token":"oSOED5yWWDf1r7eS","data":"{\"ip\":\"192.168.78.34\"}"}{"cmd":"heartbeat","model":"gateway","sid":"7c49eb1cfff7","short_id":"0","token":"gMZDyfsOP917i4sW","data":"{\"ip\":\"192.168.78.34\"}"}{"cmd":"heartbeat","model":"gateway","sid":"7c49eb1cfff7","short_id":"0","token":"QgnDh7HkY7XXtGXh","data":"{\"ip\":\"192.168.78.34\"}"}

my logs:

2024-02-06 11:43:04.594 [DEBUG] [rnal.handler.XiaomiDeviceBaseHandler] - Handler disposes. Unregistering listener
2024-02-06 11:43:04.618 [DEBUG] [internal.handler.XiaomiBridgeHandler] - dispose
2024-02-06 11:43:04.619 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Removed socket listener org.openhab.binding.mihome.internal.handler.XiaomiBridgeHandler@3f7e36
2024-02-06 11:43:04.621 [DEBUG] [.mihome.internal.socket.XiaomiSocket] - Interrupting receiver thread Thread[XiaomiSocketReceiveThread(9898, pl12),5,]
2024-02-06 11:43:04.622 [DEBUG] [.mihome.internal.socket.XiaomiSocket] - Closing socket java.net.MulticastSocket@f26dd5
2024-02-06 11:43:05.577 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Having 1 Item Discovery listeners
2024-02-06 11:43:05.588 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Init socket on Port: 9898
2024-02-06 11:43:05.589 [DEBUG] [e.internal.socket.XiaomiBridgeSocket] - Setup socket
2024-02-06 11:43:05.591 [DEBUG] [e.internal.socket.XiaomiBridgeSocket] - Initialized socket to null:-1 on /0:0:0:0:0:0:0:0:9898 bound to name:eth0 (eth0) network interface
2024-02-06 11:43:05.592 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Starting receiver thread Thread[XiaomiSocketReceiveThread(9898, pl12),5,main]
2024-02-06 11:43:05.593 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Added socket listener org.openhab.binding.mihome.internal.handler.XiaomiBridgeHandler@9474c8
2024-02-06 11:43:05.593 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Thread XiaomiSocketReceiveThread(9898, pl12) waiting for data on port 9898
2024-02-06 11:43:06.594 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Send to bridge mihome:bridge:pl12: {"cmd": "get_id_list"}
2024-02-06 11:43:06.595 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Sending message: {"cmd": "get_id_list"} to /192.168.78.34:9898
2024-02-06 11:43:06.597 [DEBUG] [.mihome.internal.socket.XiaomiSocket] - Received Datagram from 192.168.78.34:9898 on port 9898
2024-02-06 11:43:06.598 [TRACE] [internal.handler.XiaomiBridgeHandler] - Received message {"cmd":"get_id_list_ack","sid":"7c49eb1cfff7","token":"eZbkbZuVAC80FxgS","data":"[\"158d00022f06b6\",\"158d0002b8d176\",\"158d0002b7ed47\",\"158d0002b568b6\",\"158d000896d08d\"]"}
2024-02-06 11:43:06.599 [TRACE] [internal.handler.XiaomiBridgeHandler] - Updated "last time seen" for device 7c49eb1cfff7
2024-02-06 11:43:06.600 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Send to bridge mihome:bridge:pl12: {"cmd": "read", "sid": "158d00022f06b6"}
2024-02-06 11:43:06.601 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Sending message: {"cmd": "read", "sid": "158d00022f06b6"} to /192.168.78.34:9898
2024-02-06 11:43:06.602 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Send to bridge mihome:bridge:pl12: {"cmd": "read", "sid": "158d0002b8d176"}
2024-02-06 11:43:06.602 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Sending message: {"cmd": "read", "sid": "158d0002b8d176"} to /192.168.78.34:9898
2024-02-06 11:43:06.603 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Send to bridge mihome:bridge:pl12: {"cmd": "read", "sid": "158d0002b7ed47"}
2024-02-06 11:43:06.604 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Sending message: {"cmd": "read", "sid": "158d0002b7ed47"} to /192.168.78.34:9898
2024-02-06 11:43:06.604 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Send to bridge mihome:bridge:pl12: {"cmd": "read", "sid": "158d0002b568b6"}
2024-02-06 11:43:06.605 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Sending message: {"cmd": "read", "sid": "158d0002b568b6"} to /192.168.78.34:9898
2024-02-06 11:43:06.606 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Send to bridge mihome:bridge:pl12: {"cmd": "read", "sid": "158d000896d08d"}
2024-02-06 11:43:06.607 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Sending message: {"cmd": "read", "sid": "158d000896d08d"} to /192.168.78.34:9898
2024-02-06 11:43:06.608 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Send to bridge mihome:bridge:pl12: {"cmd": "read"}
2024-02-06 11:43:06.609 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Sending message: {"cmd": "read"} to /192.168.78.34:9898
2024-02-06 11:43:06.610 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Data received and notified 1 listeners
2024-02-06 11:43:06.610 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Thread XiaomiSocketReceiveThread(9898, pl12) waiting for data on port 9898
2024-02-06 11:43:06.610 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Adding item listener for device 158d000896d08d
2024-02-06 11:43:06.611 [DEBUG] [.mihome.internal.socket.XiaomiSocket] - Received Datagram from 192.168.78.34:9898 on port 9898
2024-02-06 11:43:06.611 [TRACE] [internal.handler.XiaomiBridgeHandler] - Received message {"cmd":"read_ack","model":"sensor_wleak.aq1","sid":"158d00022f06b6","short_id":44542,"data":"{\"voltage\":3015}"}
2024-02-06 11:43:06.612 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Having 1 Item listeners
2024-02-06 11:43:06.612 [TRACE] [internal.handler.XiaomiBridgeHandler] - Updated "last time seen" for device 158d00022f06b6
2024-02-06 11:43:06.613 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Device 158d00022f06b6 honored read request
2024-02-06 11:43:06.614 [DEBUG] [discovery.XiaomiItemDiscoveryService] - Discovered device - sid: 158d00022f06b6 model: sensor_wleak.aq1
2024-02-06 11:43:06.616 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Data received and notified 1 listeners
2024-02-06 11:43:06.617 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Thread XiaomiSocketReceiveThread(9898, pl12) waiting for data on port 9898

2024-02-06 11:43:06.618 [DEBUG] [.mihome.internal.socket.XiaomiSocket] - Received Datagram from 192.168.78.34:9898 on port 9898
2024-02-06 11:43:06.619 [TRACE] [internal.handler.XiaomiBridgeHandler] - Received message {"cmd":"read_ack","model":"sensor_motion.aq2","sid":"158d0002b8d176","short_id":42735,"data":"{\"voltage\":3035}"}
2024-02-06 11:43:06.619 [TRACE] [internal.handler.XiaomiBridgeHandler] - Updated "last time seen" for device 158d0002b8d176
2024-02-06 11:43:06.620 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Device 158d0002b8d176 honored read request
2024-02-06 11:43:06.621 [DEBUG] [discovery.XiaomiItemDiscoveryService] - Discovered device - sid: 158d0002b8d176 model: sensor_motion.aq2
2024-02-06 11:43:06.624 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Data received and notified 1 listeners
2024-02-06 11:43:06.625 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Thread XiaomiSocketReceiveThread(9898, pl12) waiting for data on port 9898
2024-02-06 11:43:06.626 [DEBUG] [.mihome.internal.socket.XiaomiSocket] - Received Datagram from 192.168.78.34:9898 on port 9898
2024-02-06 11:43:06.626 [TRACE] [internal.handler.XiaomiBridgeHandler] - Received message {"cmd":"read_ack","model":"sensor_motion.aq2","sid":"158d0002b7ed47","short_id":58863,"data":"{\"voltage\":3025}"}
2024-02-06 11:43:06.627 [TRACE] [internal.handler.XiaomiBridgeHandler] - Updated "last time seen" for device 158d0002b7ed47
2024-02-06 11:43:06.628 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Device 158d0002b7ed47 honored read request
2024-02-06 11:43:06.628 [DEBUG] [discovery.XiaomiItemDiscoveryService] - Discovered device - sid: 158d0002b7ed47 model: sensor_motion.aq2
2024-02-06 11:43:06.631 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Data received and notified 1 listeners
2024-02-06 11:43:06.631 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Thread XiaomiSocketReceiveThread(9898, pl12) waiting for data on port 9898
2024-02-06 11:43:06.632 [DEBUG] [.mihome.internal.socket.XiaomiSocket] - Received Datagram from 192.168.78.34:9898 on port 9898
2024-02-06 11:43:06.633 [TRACE] [internal.handler.XiaomiBridgeHandler] - Received message {"cmd":"read_ack","model":"sensor_magnet.aq2","sid":"158d0002b568b6","short_id":28968,"data":"{\"voltage\":2695,\"status\":\"unknown\"}"}
2024-02-06 11:43:06.633 [TRACE] [internal.handler.XiaomiBridgeHandler] - Updated "last time seen" for device 158d0002b568b6
2024-02-06 11:43:06.634 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Device 158d0002b568b6 honored read request
2024-02-06 11:43:06.635 [DEBUG] [discovery.XiaomiItemDiscoveryService] - Discovered device - sid: 158d0002b568b6 model: sensor_magnet.aq2
2024-02-06 11:43:06.636 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Data received and notified 1 listeners
2024-02-06 11:43:06.637 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Thread XiaomiSocketReceiveThread(9898, pl12) waiting for data on port 9898
2024-02-06 11:43:06.638 [DEBUG] [.mihome.internal.socket.XiaomiSocket] - Received Datagram from 192.168.78.34:9898 on port 9898
2024-02-06 11:43:06.638 [TRACE] [internal.handler.XiaomiBridgeHandler] - Received message {"cmd":"read_ack","model":"sensor_magnet.aq2","sid":"158d000896d08d","short_id":20156,"data":"{\"voltage\":3015,\"status\":\"open\"}"}

2024-02-06 11:43:06.639 [TRACE] [internal.handler.XiaomiBridgeHandler] - Updated "last time seen" for device 158d000896d08d
2024-02-06 11:43:06.640 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Device 158d000896d08d honored read request
2024-02-06 11:43:06.642 [DEBUG] [rnal.handler.XiaomiDeviceBaseHandler] - Item got update: {"cmd":"read_ack","model":"sensor_magnet.aq2","sid":"158d000896d08d","short_id":20156,"data":"{\"voltage\":3015,\"status\":\"open\"}"}
2024-02-06 11:43:06.644 [TRACE] [rnal.handler.XiaomiSensorBaseHandler] - Got status "open" - Apart from "report" all other status updates for sensors seem not right (Firmware 1.4.1.145)
2024-02-06 11:43:06.644 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Data received and notified 1 listeners
2024-02-06 11:43:06.645 [TRACE] [.mihome.internal.socket.XiaomiSocket] - Thread XiaomiSocketReceiveThread(9898, pl12) waiting for data on port 9898
2024-02-06 11:43:06.646 [DEBUG] [.mihome.internal.socket.XiaomiSocket] - Received Datagram from 192.168.78.34:9898 on port 9898
2024-02-06 11:43:06.647 [TRACE] [internal.handler.XiaomiBridgeHandler] - Received message {"cmd":"read_ack","data":"{\"error\":\"No sid\"}"}
2024-02-06 11:43:06.648 [DEBUG] [internal.handler.XiaomiBridgeHandler] - Device null honored read request
2024-02-06 11:43:06.600 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'mihome:bridge:pl12' changed from INITIALIZING to ONLINE
2024-02-06 11:43:06.605 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'mihome:sensor_magnet_aq2:pl12:DoorWaMa' changed from UNINITIALIZED (BRIDGE_UNINITIALIZED) to INITIALIZING
2024-02-06 11:43:06.613 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'mihome:sensor_magnet_aq2:pl12:DoorWaMa' changed from INITIALIZING to OFFLINE
2024-02-06 11:43:06.644 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'mihome:sensor_magnet_aq2:pl12:DoorWaMa' changed from OFFLINE to ONLINE
2024-02-06 11:43:06.649 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'EMS_WaMa_OpenStatus' changed from CLOSED to OPEN

....
2024-02-06 11:45:47.226 [WARN ] [.core.thing.binding.BaseThingHandler] - Handler XiaomiBridgeHandler tried updating the thing status although the handler was already disposed.

.....
2024-02-06 11:48:06.649 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'mihome:bridge:pl12' changed from ONLINE to OFFLINE
2024-02-06 11:48:06.650 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'mihome:sensor_magnet_aq2:pl12:DoorWaMa' changed from ONLINE to OFFLINE (BRIDGE_OFFLINE)

I’ll answer myself (sometimes there’s too much information/tickets distributed in github/forum/…):

Solution is to manually add the “serialnumber” of the gateway to the bridge. You can find the serial number, if you add the “gateway” as a thing - under “Show advanced” - “MiHome Device ID”