Hub Message: Zigbee network is not online

I'm getting the "Zigbee network is not online" message in the upper right corner of the hub web pages. I've looked at both the Zigbee log and the regular log and I see activity from my Zigbee devices and things seem to be working.

I'm worried that if I reboot the Zigbee network really will stop working.

1 Like

I would contact support for advice before doing anything.

I got this message this morning as well. A reboot cleared the message. I did get in touch with support awhile back with this same issue before but since a reboot cleared it. There was no further investigation.

I get this from time to time. Like everyone mentioned, a reboot always resolves it for me.

Thanks everyone, my reboot cleared the message and everything seems to be working.

I just got this message. Reboot cleared it.
I'm out of the country and wondering if there's a way to protect against this if it happens without me noticing. How could we automate a reboot if the zigbee network goes offline? (And if everything still works, does it matter?)

I have been seeing this more often, I can clear it with a reboot but concerned about the frequency of it happening. Today I actually had to power off the hub and back on because after a reboot the message came back.

+1 I'm seeing this often now also. Reboot clears it and sometimes it clears itself after a while. Also noticed hub seems to be going a little slower than normal too. Noticing this the last few weeks. Web UI just isn't quite as fast as it used to be.

Subscribing

If the hub runs low on memory the zigbee radio is the first thing to crash. Are you running the latest version of HE firmware? Do you have a lot of "user" apps and drivers?

Yes latest version. And no actually. Here is my list and I think they are almost all native

Chromecast Integration (Beta)
Garadget (not native)
Google Home
Groups and scenes
Hub Link
Hubitat Dashboard
HSM
Hubitat simple lighting
Hue Bridge Integration
Life 360
Lock Code Manager
Lutron Integrator
Maker API
Mode Manager
Motion Lighting
Other Hub Event Pusher (not native)
Rule Machine
WATO (not native)

So mostly native...is there any way to tell what's eating up the memory?

I believe support may be able to assist you with that. Trying emailing them to open a ticket. The other then you can do is disable any non native apps too see if things improve and then re-enable apps one at a time.

No they will not be able to help with that. Your best bet is to try disabling your custom apps one at a time and see if it helps.

1 Like

And I would also recommend disabling any devices using custom drivers and see if the problem goes away. Isolate the potential problem drivers and see what stabilizes.

1 Like

I don't like Garadget and Other Hub. WATO I don't know.

What I did, I replaced Other Hub and Hub Link with HubConnect, Garadget was uninstalled from HE and installed in ST and shared it to HE using HubConnect.

Working very stable, my hub with more than 100 devices is fast as the one with 15 devices.

Thanks, some stuff to try.

I only had a few things left with ST...darn it....I will try garadget back there. Looks like it's never going away...lol

1 Like

I am still experiencing this error, I thought it was the Aeotec HEM I was using but after un-paring the device I still receive the message. Today when the message appeared the hub was still responsive I did not see any slow down and only my Zigbee devices stopped responding.

I was able to navigate through HE's settings and pages loaded almost instantly, so I really do not think this is custom app/driver that is causing the problem, I suspect something else is going on.

In fact I have been using Node-Red to monitor the hub's performance and right before/during the Zigbee radio went offline my response time with the hub was still under 1.5 seconds. I have very few custom apps/drivers and nothing that would create a lot of events/traffic.

What I have noticed is with every update this issue becomes more frequent. In fact last year I do not remember even receiving the message once.

Of course as usual a reboot fixes the problem.

Edit: So the radio just went offline again and I was monitoring the Zigbee logs and I saw this unknown device with "0000." Right after this appeared the radio came back online on its own without a reboot. Also all Zigbee devices stopped reporting in the logs until after that unknown device appeared and the radio came back online.

Why?, it's z wave and probably it will freeze the z wave mesh, not zigbee. I have 2 HEMs.

I seen that device too, but I had no issues with zigbee, so I'm interested in what HE team answers.

I'm tagging @chuck.schwer

Because I thought it may have been creating too much traffic with the energy reporting. In fact after I removed the device in my Node-Red's performance monitor I noticed the hub's response time improved.

Interesting, what driver are you using? Thanks

/**
 *  Aeon HEM1
 *
 *  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 *  in compliance with the License. You may obtain a copy of the License at:
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
 *  on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
 *  for the specific language governing permissions and limitations under the License.
 *
 *  Aeon Home Energy Meter v1 (US)
 *
 */
metadata {
    definition (name: "My Aeon Home Energy Monitor v3", namespace: "jscgs350", author: "SmartThings") 
	{
    	capability "Energy Meter"
    	capability "Power Meter"
    	capability "Configuration"
    	capability "Sensor"
    	capability "Refresh"
    	capability "Polling"
    	capability "Battery"
    
    	attribute "energy", "string"
    	attribute "energyDisp", "string"
    	attribute "energyOne", "string"
    	attribute "energyTwo", "string"
    
    	attribute "power", "string"
    	attribute "powerDisp", "string"
    	attribute "powerOne", "string"
    	attribute "powerTwo", "string"
    
    	command "reset"
    	command "configure"
    	command "resetmaxmin"
    
    fingerprint deviceId: "0x2101", inClusters: " 0x70,0x31,0x72,0x86,0x32,0x80,0x85,0x60"

}

	preferences {
		input "kWhCost", "string", title: "\$/kWh (0.16)", defaultValue: "0.16" as String, displayDuringSetup: true
	}
}


def parse(String description) {
    //log.debug "Parse received ${description}"
	def result = []
	//log.debug "desc: ${description}"
    def cmd = zwave.parse(description, [0x31: 1, 0x32: 1, 0x60: 3])
    if (cmd) {
        result << createEvent(zwaveEvent(cmd))
    }
    //if (result) log.debug "Parse returned ${result}"
    def statusTextmsg = ""
    statusTextmsg = "Min was ${device.currentState('powerOne')?.value}\nMax was ${device.currentState('powerTwo')?.value}"
    sendEvent("name":"statusText", "value":statusTextmsg)
    //log.debug statusTextmsg
    return result
}

def zwaveEvent(hubitat.zwave.commands.meterv1.MeterReport cmd) {
    //log.debug "zwaveEvent received ${cmd} ${cmd.payload} ${cmd.format()}"
    def dispValue
    def newValue
    def timeString = new Date().format("yyyy-MM-dd h:mm a", location.timeZone)
    if (cmd.meterType == 33) {
        if (cmd.scale == 0) {
            newValue = cmd.scaledMeterValue
            //log.debug state
            if (newValue != state.energyValue) {
                dispValue = String.format("%5.2f",newValue)+"\nkWh"
                sendEvent(name: "energyDisp", value: dispValue as String, unit: "")
                state.energyValue = newValue
//                BigDecimal costDecimal = newValue * ( kWhCost as BigDecimal)
                def costDisplay = String.format("%3.2f",costDecimal)
                sendEvent(name: "energyTwo", value: "Cost\n\$${costDisplay}", unit: "")
                [name: "energy", value: newValue, unit: "kWh"]
            }
        } else if (cmd.scale == 1) {
            newValue = cmd.scaledMeterValue
            if (newValue != state.energyValue) {
                dispValue = String.format("%5.2f",newValue)+"\nkVAh"
                sendEvent(name: "energyDisp", value: dispValue as String, unit: "")
                state.energyValue = newValue
                [name: "energy", value: newValue, unit: "kVAh"]
            }
        }
        else if (cmd.scale==2) {                
            newValue = Math.round( cmd.scaledMeterValue )       // really not worth the hassle to show decimals for Watts
            if (newValue != state.powerValue) {
                dispValue = newValue+"w"
                sendEvent(name: "powerDisp", value: dispValue as String, unit: "")
                if (newValue < state.powerLow) {
                    dispValue = newValue+"w"+" on "+timeString
                    sendEvent(name: "powerOne", value: dispValue as String, unit: "")
                    state.powerLow = newValue
                }
                if (newValue > state.powerHigh) {
                    dispValue = newValue+"w"+" on "+timeString
                    sendEvent(name: "powerTwo", value: dispValue as String, unit: "")
                    state.powerHigh = newValue
                }
                state.powerValue = newValue
                [name: "power", value: newValue, unit: "W"]
            }
        }
    }
}

def zwaveEvent(hubitat.zwave.commands.batteryv1.BatteryReport cmd) {
    def map = [:]
    map.name = "battery"
    map.unit = "%"
    if (cmd.batteryLevel == 0xFF) {
        map.value = 1
        map.descriptionText = "${device.displayName} has a low battery"
        map.isStateChange = true
    } else {
        map.value = cmd.batteryLevel
    }
    //log.debug map
    return map
}

def zwaveEvent(hubitat.zwave.Command cmd) {
    // Handles all Z-Wave commands we aren't interested in
    log.debug "Unhandled event ${cmd}"
    [:]
}

def refresh() {
    log.debug "Refreshed ${device.name}"
    def cmds = delayBetween([
    zwave.meterV2.meterGet(scale: 0).format(),
    zwave.meterV2.meterGet(scale: 2).format()
	])
log.debug "refresh cmds ${cmds}"
cmds
}

def poll() {
    refresh()
}

def reset() {
    log.debug "${device.name} reset kWh/Cost values"
    state.powerHigh = 0
	state.powerLow = 99999

	def timeString = new Date().format("yyyy-MM-dd h:mm a", location.timeZone)
    sendEvent(name: "energyOne", value: "Energy Data (kWh/Cost) Reset On:\n"+timeString, unit: "")       
    sendEvent(name: "energyDisp", value: "", unit: "")
    sendEvent(name: "energyTwo", value: "Cost\n--", unit: "")

    def cmd = delayBetween( [
        zwave.meterV2.meterReset().format(),
        zwave.meterV2.meterGet(scale: 0).format(),
    	zwave.meterV2.meterGet(scale: 2).format()
    ])
    
    cmd
}

def resetmaxmin() {
    log.debug "${device.name} reset max/min values"
    state.powerHigh = 0
    state.powerLow = 99999
    
	def timeString = new Date().format("yyyy-MM-dd h:mm a", location.timeZone)
    sendEvent(name: "energyOne", value: "Watts Data (min/max) Reset On:\n"+timeString, unit: "")
    sendEvent(name: "powerOne", value: "", unit: "")    
    sendEvent(name: "powerTwo", value: "", unit: "")    

    def cmd = delayBetween( [
        zwave.meterV2.meterGet(scale: 0).format(),
    	zwave.meterV2.meterGet(scale: 2).format()
    ])
    
    cmd
}

def configure() {
    log.debug "${device.name} configuring device"
    def cmd = delayBetween([
//    	zwave.configurationV1.configurationSet(parameterNumber: 255, size: 4, scaledConfigurationValue: 0).format() 	// Performs a complete factory reset.  Use this all by itself and comment out all others below.  Once reset, comment this line out and uncomment the others to go back to normal
    
          zwave.configurationV1.configurationSet(parameterNumber: 1, size: 2, scaledConfigurationValue: 120).format(),		// assumed voltage		
//        zwave.configurationV1.configurationSet(parameterNumber: 3, size: 1, scaledConfigurationValue: 1).format(),      // Disable selective reporting, so always update based on schedule below <set to 1 to reduce network traffic>
//        zwave.configurationV1.configurationSet(parameterNumber: 4, size: 2, scaledConfigurationValue: 50).format(),     // (DISABLED by first option) Don't send unless watts have changed by 25 <default is 50>
//        zwave.configurationV1.configurationSet(parameterNumber: 8, size: 1, scaledConfigurationValue: 10).format(),     // (DISABLED by first option) Or by 5% <default is 10>

          zwave.configurationV1.configurationSet(parameterNumber: 101, size: 4, scaledConfigurationValue: 4).format(),    // Combined energy in Watts
          zwave.configurationV1.configurationSet(parameterNumber: 111, size: 4, scaledConfigurationValue: 15).format(),   // Every 60 Seconds (for Watts)

//        zwave.configurationV1.configurationSet(parameterNumber: 102, size: 4, scaledConfigurationValue: 8).format(),    // Combined energy in kWh
//        zwave.configurationV1.configurationSet(parameterNumber: 112, size: 4, scaledConfigurationValue: 300).format(),   // every 5 minutes (for kWh)

//        zwave.configurationV1.configurationSet(parameterNumber: 103, size: 4, scaledConfigurationValue: 0).format(),    // Disable report 3
//        zwave.configurationV1.configurationSet(parameterNumber: 113, size: 4, scaledConfigurationValue: 0).format()     // Disable report 3
      
    ])

    cmd
}