Koenkk / zigbee2mqtt

Zigbee 🐝 to MQTT bridge 🌉, get rid of your proprietary Zigbee bridges 🔨
https://www.zigbee2mqtt.io
GNU General Public License v3.0
11.77k stars 1.64k forks source link

devices disappear even though they are still listed in raw section #8635

Closed petertmooney closed 2 years ago

petertmooney commented 3 years ago

Bug report?

{ "commit": "e050a76\n", "config": { "advanced": { "adapter_concurrent": null, "adapter_delay": null, "availability_blacklist": [], "availability_blocklist": [], "availability_passlist": [], "availability_timeout": 0, "availability_whitelist": [], "cache_state": true, "cache_state_persistent": true, "cache_state_send_on_startup": true, "channel": 11, "elapsed": true, "ext_pan_id": [ 221, 221, 221, 221, 221, 221, 221, 221 ], "homeassistant_discovery_topic": "homeassistant", "homeassistant_legacy_entity_attributes": true, "homeassistant_legacy_triggers": true, "homeassistant_status_topic": "homeassistant/status", "ikea_ota_use_test_url": true, "last_seen": "disable", "legacy_api": true, "log_directory": "/app/data/log/%TIMESTAMP%", "log_file": "log.txt", "log_level": "debug", "log_output": [ "console", "file" ], "log_rotation": true, "log_symlink_current": true, "log_syslog": { "app_name": "Zigbee2MQTT", "eol": "/n", "host": "localhost", "localhost": "localhost", "path": "/dev/log", "pid": "process.pid", "port": 123, "protocol": "tcp4", "type": "5424" }, "pan_id": 6754, "report": true, "rtscts": false, "soft_reset_timeout": 0, "timestamp_format": "YYYY-MM-DD HH:mm:ss" }, "ban": [], "blocklist": [], "device_options": {}, "devices": { "0x00124b0022676c64": { "friendly_name": "Cooker Hood" }, "0x00158d00029c01bc": { "friendly_name": "Bedroom Motion" }, "0x00158d0003469a68": { "friendly_name": "Livingroom wall", "legacy": false }, "0x00158d000355963b": { "friendly_name": "Bedroom Wall Switch" }, "0x00158d0003cb122c": { "friendly_name": "Bedroom Drawer" }, "0x00158d0003e78928": { "friendly_name": "Back Door" }, "0x00158d0003e7aa55": { "friendly_name": "Hall switch2" }, "0x00158d0003e810d9": { "friendly_name": "Living Room Window" }, "0x00158d0003eefd4a": { "friendly_name": "Front Door" }, "0x00158d0004447329": { "friendly_name": "Kitchen Window" }, "0x00158d00045d89c9": { "friendly_name": "Study Motion Sensor" }, "0x00158d00045f3cab": { "friendly_name": "Kitchen Motion" }, "0x00178801023df1c7": { "friendly_name": "Landing Light" }, "0x00178801024bd1f6": { "friendly_name": "Hall Light 1" }, "0x00178801024bd2a8": { "friendly_name": "Dresser" }, "0x0017880102c60358": { "friendly_name": "0x0017880102c60358" }, "0x001788010434e6ff": { "friendly_name": "Bedside 1" }, "0x0017880104368db2": { "friendly_name": "Wills Bedside Lamp" }, "0x00178801045756eb": { "friendly_name": "hall light 2" }, "0x00178801045763f0": { "friendly_name": "Bedroom Light" }, "0x0017880106053221": { "friendly_name": "Petes Lamp Button" }, "0x0017880106062d36": { "friendly_name": "Wills Lamp Button" }, "0x00178801081285c2": { "friendly_name": "Hall Lantern" }, "0x001788010908f2c6": { "friendly_name": "Bear Lamp" }, "0x001e5e090218facb": { "friendly_name": "Upstairs" }, "0x001e5e09023fac5c": { "friendly_name": "upstairs" }, "0x001e5e09024c2954": { "friendly_name": "Downstairs" }, "0x001e5e09024c6737": { "friendly_name": "Heating and water" }, "0x04cf8cdf3c75c245": { "friendly_name": "Kitchen Wall Switch" }, "0x5c0272fffe8c6fd7": { "friendly_name": "Blinds", "optimistic": true, "retain": true }, "0xec1bbdfffe3db8e4": { "friendly_name": "Table Light 1" }, "0xec1bbdfffe880f05": { "friendly_name": "Table light2" }, "0xec1bbdfffea6e5d6": { "friendly_name": "Table light 3" } }, "experimental": { "output": "json", "transmit_power": 5 }, "external_converters": [], "frontend": { "port": 9442 }, "groups": { "1": { "devices": [ "0x00178801024bd1f6/11", "0x00178801045756eb/11", "0x00178801023df1c7/11" ], "friendly_name": "Hall lights" }, "2": { "devices": [ "0xec1bbdfffe880f05/1", "0xec1bbdfffea6e5d6/1", "0xec1bbdfffe3db8e4/1" ], "friendly_name": "table lights" }, "3": { "devices": [], "friendly_name": "living Room lamps" }, "4": { "devices": [ "0x00178801081285c2/11" ], "friendly_name": "Hall Lamps" } }, "homeassistant": true, "map_options": { "graphviz": { "colors": { "fill": { "coordinator": "#e04e5d", "enddevice": "#fff8ce", "router": "#4ea3e0" }, "font": { "coordinator": "#ffffff", "enddevice": "#000000", "router": "#ffffff" }, "line": { "active": "#009900", "inactive": "#994444" } } } }, "mqtt": { "MqttPort": 1883, "base_topic": "zigbee2mqtt", "force_disable_retain": false, "include_device_information": false, "server": "http://192.168.1.1:1883" }, "ota": { "disable_automatic_update_check": false, "update_check_interval": 1440 }, "passlist": [], "permit_join": true, "serial": { "adapter": "zstack", "disable_led": false, "port": "/dev/serial/by-id/usb-Silicon_Labs_slae.sh_cc2652rbstick-_slaesh_s_iot_stuff_00_12_4B_00_23_93_2B_60-if00-port0" }, "whitelist": [] }, "config_schema": { "definitions": { "device": { "properties": { "debounce": { "description": "Debounces messages of this device", "title": "Debounce", "type": "number" }, "debounce_ignore": { "description": "Protects unique payload values of specified payload properties from overriding within debounce time", "examples": [ "action" ], "items": { "type": "string" }, "title": "Ignore debounce", "type": "array" }, "filtered_attributes": { "description": "Filter attributes from publish payload.", "examples": [ "temperature", "battery", "action" ], "items": { "type": "string" }, "title": "Filtered publish attributes", "type": "array" }, "filtered_optimistic": { "description": "Filter attributes from optimistic publish payload when calling /set. (This has no effect if optimistic is set to false).", "examples": [ "color_mode", "color_temp", "color" ], "items": { "type": "string" }, "title": "Filtered optimistic attributes", "type": "array" }, "friendly_name": { "description": "Used in the MQTT topic of a device. By default this is the device ID", "readOnly": true, "title": "Friendly name", "type": "string" }, "icon": { "description": "The user-defined device icon for the frontend. It can be a link to an image (not a path to a file) or base64 encoded data URL like: image/svg+xml;base64,PHN2ZyB3aW....R0aD", "title": "Icon", "type": "string" }, "optimistic": { "default": true, "description": "Publish optimistic state after set", "title": "Optimistic", "type": "boolean" }, "qos": { "description": "QoS level for MQTT messages of this device", "title": "QoS", "type": "number" }, "retain": { "description": "Retain MQTT messages of this device", "title": "Retain", "type": "boolean" }, "retention": { "description": "Sets the MQTT Message Expiry in seconds, Make sure to set mqtt.version to 5", "title": "Retention", "type": "number" } }, "required": [ "friendly_name" ], "type": "object" }, "group": { "properties": { "devices": { "items": { "type": "string" }, "type": "array" }, "filtered_attributes": { "items": { "type": "string" }, "type": "array" }, "friendly_name": { "type": "string" }, "optimistic": { "type": "boolean" }, "qos": { "type": "number" }, "retain": { "type": "boolean" } }, "required": [ "friendly_name" ], "type": "object" } }, "properties": { "advanced": { "properties": { "adapter_concurrent": { "description": "Adapter concurrency (e.g. 2 for CC2531 or 16 for CC26X2R1) (default: null, uses recommended value)", "requiresRestart": true, "title": "Adapter concurrency", "type": [ "number", "null" ] }, "adapter_delay": { "description": "Adapter delay", "requiresRestart": true, "title": "Adapter delay", "type": [ "number", "null" ] }, "availability_blacklist": { "items": { "type": "string" }, "readOnly": true, "requiresRestart": true, "title": "Availability blacklist (deprecated, use availability_blocklist)", "type": "array" }, "availability_blocklist": { "description": "Prevent devices from being checked for availability", "items": { "type": "string" }, "requiresRestart": true, "title": "Availability Blocklist", "type": "array" }, "availability_passlist": { "description": "Only enable availability check for certain devices", "items": { "type": "string" }, "requiresRestart": true, "title": "Availability passlist", "type": "array" }, "availability_timeout": { "default": 0, "description": "Availability timeout in seconds when enabled, devices will be checked if they are still online. Only AC powered routers are checked for availability", "minimum": 0, "requiresRestart": true, "title": "Availability Timeout", "type": "number" }, "availability_whitelist": { "items": { "type": "string" }, "readOnly": true, "requiresRestart": true, "title": "Availability whitelist (deprecated, use passlist)", "type": "array" }, "baudrate": { "description": "Baud rate speed for serial port, this can be anything firmware support but default is 115200 for Z-Stack and EZSP, 38400 for Deconz, however note that some EZSP firmware need 57600", "examples": [ 38400, 57600, 115200 ], "requiresRestart": true, "title": "Baudrate", "type": "number" }, "cache_state": { "default": true, "description": "MQTT message payload will contain all attributes, not only changed ones. Has to be true when integrating via Home Assistant", "title": "Cache state", "type": "boolean" }, "cache_state_persistent": { "default": true, "description": "Persist cached state, only used when cache_state: true", "title": "Persist cache state", "type": "boolean" }, "cache_state_send_on_startup": { "default": true, "description": "Send cached state on startup, only used when cache_state: true", "title": "Send cached state on startup", "type": "boolean" }, "channel": { "default": 11, "description": "Zigbee channel, changing requires repairing all devices! (Note: use a ZLL channel: 11, 15, 20, or 25 to avoid Problems)", "examples": [ 15, 20, 25 ], "maximum": 26, "minimum": 11, "requiresRestart": true, "title": "ZigBee channel", "type": "number" }, "elapsed": { "default": false, "description": "Add an elapsed attribute to MQTT messages, contains milliseconds since the previous msg", "title": "Elapsed", "type": "boolean" }, "ext_pan_id": { "description": "Zigbee extended pan ID, changing requires repairing all devices!", "items": { "type": "number" }, "requiresRestart": true, "title": "Ext Pan ID", "type": "array" }, "homeassistant_discovery_topic": { "description": "Home Assistant discovery topic", "examples": [ "homeassistant" ], "requiresRestart": true, "title": "Homeassistant discovery topic", "type": "string" }, "homeassistant_legacy_entity_attributes": { "default": true, "description": "Home Assistant legacy entity attributes, when enabled Zigbee2MQTT will add state attributes to each entity, additional to the separate entities and devices it already creates", "title": "Home Assistant legacy entity attributes", "type": "boolean" }, "homeassistant_legacy_triggers": { "default": true, "description": "Home Assistant legacy triggers, when enabled Zigbee2mqt will send an empty 'action' or 'click' after one has been send. A 'sensor_action' and 'sensor_click' will be discoverd", "title": "Home Assistant legacy triggers", "type": "boolean" }, "homeassistant_status_topic": { "description": "Home Assistant status topic", "examples": [ "homeassistant/status" ], "requiresRestart": true, "title": "Home Assistant status topic", "type": "string" }, "ikea_ota_use_test_url": { "default": false, "description": "Use IKEA TRADFRI OTA test server, see OTA updates documentation", "requiresRestart": true, "title": "IKEA TRADFRI OTA use test url", "type": "boolean" }, "last_seen": { "default": "disable", "description": "Add a last_seen attribute to MQTT messages, contains date/time of last Zigbee message", "enum": [ "disable", "ISO_8601", "ISO_8601_local", "epoch" ], "title": "Last seen", "type": "string" }, "legacy_api": { "default": true, "description": "Disables the legacy api (false = disable)", "requiresRestart": true, "title": "Legacy API", "type": "boolean" }, "log_directory": { "description": "Location of log directory", "examples": [ "data/log/%TIMESTAMP%" ], "requiresRestart": true, "title": "Log directory", "type": "string" }, "logfile": { "default": "log.txt", "description": "Log file name, can also contain timestamp", "examples": [ "zigbee2mqtt%TIMESTAMP%.log" ], "requiresRestart": true, "title": "Log file", "type": "string" }, "log_level": { "default": "info", "description": "Logging level", "enum": [ "info", "warn", "error", "debug" ], "title": "Log level", "type": "string" }, "log_output": { "description": "Output location of the log, leave empty to supress logging", "items": { "enum": [ "console", "file", "syslog" ], "type": "string" }, "requiresRestart": true, "title": "Log output", "type": "array" }, "log_rotation": { "default": true, "description": "Log rotation", "requiresRestart": true, "title": "Log rotation", "type": "boolean" }, "log_symlink_current": { "default": false, "description": "Create symlink to current logs in the log directory", "requiresRestart": true, "title": "Log symlink current", "type": "boolean" }, "log_syslog": { "properties": { "app_name": { "default": "Zigbee2MQTT", "description": "The name of the application (Default: Zigbee2MQTT).", "title": "Localhost", "type": "string" }, "eol": { "default": "/n", "description": "The end of line character to be added to the end of the message (Default: Message without modifications).", "title": "eol", "type": "string" }, "host": { "default": "localhost", "description": "The host running syslogd, defaults to localhost.", "title": "Host", "type": "string" }, "localhost": { "default": "localhost", "description": "Host to indicate that log messages are coming from (Default: localhost).", "title": "Localhost", "type": "string" }, "path": { "default": "/dev/log", "description": "The path to the syslog dgram socket (i.e. /dev/log or /var/run/syslog for OS X).", "examples": [ "/var/run/syslog" ], "title": "Path", "type": "string" }, "pid": { "default": "process.pid", "description": "PID of the process that log messages are coming from (Default process.pid).", "title": "PID", "type": "string" }, "port": { "default": 123, "description": "The port on the host that syslog is running on, defaults to syslogd's default port.", "title": "Port", "type": "number" }, "protocol": { "default": "tcp4", "description": "The network protocol to log over (e.g. tcp4, udp4, tls4, unix, unix-connect, etc).", "examples": [ "udp4", "tls4", "unix", "unix-connect" ], "title": "Protocol", "type": "string" }, "type": { "default": "5424", "description": "The type of the syslog protocol to use (Default: BSD, also valid: 5424).", "title": "Type", "type": "string" } }, "title": "syslog", "type": "object" }, "network_key": { "description": "Network encryption key, changing requires repairing all devices!", "oneOf": [ { "title": "Network key(string)", "type": "string" }, { "items": { "type": "number" }, "title": "Network key(array)", "type": "array" } ], "requiresRestart": true, "title": "Network key" }, "pan_id": { "description": "ZigBee pan ID, changing requires repairing all devices!", "oneOf": [ { "title": "Pan ID (string)", "type": "string" }, { "title": "Pan ID (number)", "type": "number" } ], "requiresRestart": true, "title": "Pan ID" }, "report": { "description": "Enables report feature (deprecated)", "readOnly": true, "requiresRestart": true, "title": "Reporting", "type": "boolean" }, "rtscts": { "description": "RTS / CTS Hardware Flow Control for serial port", "requiresRestart": true, "title": "RTS / CTS", "type": "boolean" }, "soft_reset_timeout": { "description": "Soft reset ZNP after timeout", "minimum": 0, "readOnly": true, "requiresRestart": true, "title": "Soft reset timeout (deprecated)", "type": "number" }, "timestamp_format": { "description": "Log timestamp format", "examples": [ "YYYY-MM-DD HH:mm:ss" ], "requiresRestart": true, "title": "Timestamp format", "type": "string" } }, "title": "Advanced", "type": "object" }, "ban": { "items": { "type": "string" }, "readOnly": true, "requiresRestart": true, "title": "Ban (deprecated, use blocklist)", "type": "array" }, "blocklist": { "description": "Block devices from the network (by ieeeAddr)", "items": { "type": "string" }, "requiresRestart": true, "title": "Blocklist", "type": "array" }, "device_options": { "type": "object" }, "devices": { "patternProperties": { "^.$": { "$ref": "#/definitions/device" } }, "propertyNames": { "pattern": "^0x[\d\w]{16}$" }, "type": "object" }, "experimental": { "properties": { "output": { "description": "Examples when 'state' of a device is published json: topic: 'zigbee2mqtt/my_bulb' payload '{\"state\": \"ON\"}' attribute: topic 'zigbee2mqtt/my_bulb/state' payload 'ON' attribute_and_json: both json and attribute (see above)", "enum": [ "attribute_and_json", "attribute", "json" ], "title": "MQTT output type", "type": "string" }, "transmit_power": { "description": "Transmit power of adapter, only available for Z-Stack (CC253/CC2652/CC1352) adapters, CC2652 = 5dbm, CC1352 max is = 20dbm (5dbm default)", "requiresRestart": true, "title": "Transmit power", "type": [ "number", "null" ] } }, "title": "Experimental", "type": "object" }, "external_converters": { "description": "You can define external converters to e.g. add support for a DiY device", "examples": [ "DIYRuZ_FreePad.js" ], "items": { "type": "string" }, "requiresRestart": true, "title": "External converters", "type": "array" }, "frontend": { "properties": { "auth_token": { "description": "Enables authentication, disabled by default", "requiresRestart": true, "title": "Auth token", "type": [ "string", "null" ] }, "host": { "default": " 0.0.0.0", "description": "Frontend binding host", "requiresRestart": true, "title": "Bind host", "type": "string" }, "port": { "default": 8080, "description": "Frontend binding port", "requiresRestart": true, "title": "Port", "type": "number" } }, "title": "Frontend", "type": "object" }, "groups": { "patternProperties": { "^.$": { "$ref": "#/definitions/group" } }, "propertyNames": { "pattern": "^[\w].$" }, "type": "object" }, "homeassistant": { "default": false, "description": "Home Assistant integration (MQTT discovery)", "title": "Home Assistant integration", "type": "boolean" }, "map_options": { "properties": { "graphviz": { "properties": { "colors": { "properties": { "fill": { "properties": { "coordinator": { "type": "string" }, "enddevice": { "type": "string" }, "router": { "type": "string" } }, "type": "object" }, "font": { "properties": { "coordinator": { "type": "string" }, "enddevice": { "type": "string" }, "router": { "type": "string" } }, "type": "object" }, "line": { "properties": { "active": { "type": "string" }, "inactive": { "type": "string" } }, "type": "object" } }, "type": "object" } }, "type": "object" } }, "title": "Networkmap", "type": "object" }, "mqtt": { "properties": { "base_topic": { "description": "MQTT base topic for Zigbee2MQTT MQTT messages", "examples": [ "zigbee2mqtt" ], "requiresRestart": true, "title": "Base topic", "type": "string" }, "ca": { "description": "Absolute path to SSL/TLS certificate of CA used to sign server and client certificates", "examples": [ "/etc/ssl/mqtt-ca.crt" ], "requiresRestart": true, "title": "Certificate authority", "type": "string" }, "cert": { "description": "Absolute path to SSL/TLS certificate for client-authentication", "examples": [ "/etc/ssl/mqtt-client.crt" ], "requiresRestart": true, "title": "SSL/TLS certificate", "type": "string" }, "client_id": { "description": "MQTT client ID", "examples": [ "MY_CLIENT_ID" ], "requiresRestart": true, "title": "Client ID", "type": "string" }, "force_disable_retain": { "default": false, "description": "Disable retain for all send messages. ONLY enable if you MQTT broker doesn't support retained message (e.g. AWS IoT core, Azure IoT Hub, Google Cloud IoT core, IBM Watson IoT Platform). Enabling will break the Home Assistant integration", "requiresRestart": true, "title": "Force disable retain", "type": "boolean" }, "include_device_information": { "default": false, "description": "Include device information to mqtt messages", "title": "Include device information", "type": "boolean" }, "keepalive": { "default": 60, "description": "MQTT keepalive in second", "requiresRestart": true, "title": "Keepalive", "type": "number" }, "key": { "description": "Absolute path to SSL/TLS key for client-authentication", "examples": [ "/etc/ssl/mqtt-client.key" ], "requiresRestart": true, "title": "SSL/TLS key", "type": "string" }, "password": { "description": "MQTT server authentication password", "examples": [ "ILOVEPELMENI" ], "requiresRestart": true, "title": "Password", "type": "string" }, "reject_unauthorized": { "default": true, "description": "Disable self-signed SSL certificate", "requiresRestart": true, "title": "Reject unauthorized", "type": "boolean" }, "server": { "description": "MQTT server URL (use mqtts:// for SSL/TLS connection)", "examples": [ "mqtt://localhost:1883" ], "requiresRestart": true, "title": "MQTT server", "type": "string" }, "user": { "description": "MQTT server authentication user", "examples": [ "johnnysilverhand" ], "requiresRestart": true, "title": "User", "type": "string" }, "version": { "default": 4, "description": "MQTT protocol version", "examples": [ 5 ], "requiresRestart": true, "title": "Version", "type": [ "number", "null" ] } }, "required": [ "base_topic", "server" ], "title": "MQTT", "type": "object" }, "ota": { "properties": { "disable_automatic_update_check": { "default": false, "description": "Zigbee devices may request a firmware update, and do so frequently, causing Zigbee2MQTT to reach out to third party servers. If you disable these device initiated checks, you can still initiate a firmware update check manually.", "title": "Disable automatic update check", "type": "boolean" }, "update_check_interval": { "default": 1440, "description": "Your device may request a check for a new firmware update. This value determines how frequently third party servers may actually be contacted to look for firmware updates. The value is set in minutes, and the default is 1 day.", "title": "Update check interval", "type": "number" } }, "title": "OTA updates", "type": "object" }, "passlist": { "description": "Allow only certain devices to join the network (by ieeeAddr). Note that all devices not on the passlist will be removed from the network!", "items": { "type": "string" }, "requiresRestart": true, "title": "Passlist", "type": "array" }, "permit_join": { "default": false, "description": "Allow new devices to join (re-applied at restart)", "title": "Permit join", "type": "boolean" }, "serial": { "properties": { "adapter": { "default": "auto", "description": "Adapter type, not needed unless you are experiencing problems", "enum": [ "deconz", "zstack", "zigate", "ezsp", "auto" ], "requiresRestart": true, "title": "Adapter", "type": [ "string" ] }, "disable_led": { "default": false, "description": "Disable LED of the adapter if supported", "requiresRestart": true, "title": "Disable led", "type": "boolean" }, "port": { "description": "Location of the adapter. To autodetect the port, set null", "examples": [ "/dev/ttyACM0" ], "requiresRestart": true, "title": "Port", "type": [ "string", "null" ] } }, "title": "Serial", "type": "object" }, "whitelist": { "items": { "type": "string" }, "readOnly": true, "requiresRestart": true, "title": "Whitelist (deprecated, use passlist)", "type": "array" } }, "required": [ "mqtt" ], "type": "object" }, "coordinator": { "meta": { "maintrel": 1, "majorrel": 2, "minorrel": 7, "product": 1, "revision": 20210120, "transportrev": 2 }, "type": "zStack3x0" }, "log_level": "debug", "network": { "channel": 11, "extended_pan_id": "0x00124b0023932b60", "pan_id": 6754 }, "permit_join": true, "restart_required": false, "version": "1.21.1-dev" }

-->

Bug Report

devices disappear after repowering or removing device

What did you expect to happen

all my paired devices to remain

How to reproduce it (minimal and precise)

turn off server or restart docker after unplugging the coordinator or changing it to a new USB port.

Debug Info

Zigbee2MQTT version 1.21.1-dev commit: e050a76 Coordinator type zStack3x0 Coordinator revision 20210120 Frontend version 0.6.0 Zigbee2MQTT version: Adapter hardware: /dev/serial/by-id/usb-Silicon_Labs_slae.sh_cc2652rbstick-_slaesh_s_iot_stuff_00_12_4B_00_23_93_2B_60-if00-port0 Adapter firmware version:

petertmooney commented 3 years ago

so in the raw log all devices are still there, but they are all unpaired. I have to repair them each time. then they assume their previous names and identities. its so frustrating. and I cannot find why it happens.

github-actions[bot] commented 2 years ago

This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 7 days

svenf01 commented 1 month ago

I have the same topic with current updated version of zigbee2mqtt. Device in raw list but not in device list or dashboard.