Closed safakaltun closed 1 year ago
Just to confirm, I have recently purchased this siren to try and integrate into Z2M and am experiencing the same as you. It begins to pair, then seems to fail interview.
I have purchased a used Bosch Smart Home Controller to see if I can sniff what is going on with the interview - I am wondering if a key is exchanged given that you have to scan a QR code during adding
So, I received the Smart Home Controller today and bound the siren to it. Points to note:
The app recommends that you switch off the siren and then switch it on before pairing
The light on the bottom of the siren turns Amber during interview, then green on success
The switches on the device have no effect in 'Smart Mode' apart from the actual Smart Mode switch 8
The app requires that you scan a QR code however, the device MAC address (labelled as Zigbee EUI-64) and an install code is also printed on the device - Could this be what is being searched for and exchanged during device pairing? Image below:
https://drive.google.com/file/d/1ax1r_NGis5ZkcVardm4UyZ-yIIDE22Tu/view?usp=sharing
I will sort out my sniffing setup and begin capturing device communication during adding to the controllers network
Ok, this is a weird one.
I have captured the join but cannot find a single communication within it that exchanges any sort of Network Encryption Key (only thing close is the APS: Command) yet the traffic is definitely encrypted between the devices..?
Here is the capture:
@Koenkk - any ideas how I can start picking this one apart?
Pairing behaviour may be related to #13069
@danieledwardgeorgehitchcock the Transport Key
is probably packet 23 in the sniff. It seems their gateway uses a custom link key (different the standard one). Can you provide a sniff when pairing to z2m?
Here is the sniff of the device joining Z2M. Not much to report here really, it joins the network, fails the interview, then drops off of the network and the process repeats again:
@danieledwardgeorgehitchcock I don’t have access to my device at the moment, but have you tried sniffing with PIN8 ON and OFF? I wonder if it changes how the device communicates. I remember that when PIN8 was ON, the device would continuously connect, try interviewing, fail and remove itself from z2m in an infinite loop. When the PIN8 was OFF, the device would connect, start interviewing, fail and stay in z2m database as a device that failed interview.
Interesting concept! I thought pin 8 may have been for switching it between smart I.e. wireless mode, and dumb I.e. wired and controlled with switches mode. I'll also try and do another sniff with the switch flipped this morning
I don’t know if it would help, but below is the content of the QR code of the device
RB01SG0D83101826480040000000000000000000003C84FFFEEDA00BDLKCE5D5C1E3D59D1440ABFE85251205C36ADE4
Interesting concept! I thought pin 8 may have been for switching it between smart I.e. wireless mode, and dumb I.e. wired and controlled with switches mode. I'll also try and do another sniff with the switch flipped this morning
It says so in the manual, but it still attempts connecting when you start the device up or factory reset it.
The first 6 digits are the manufacturer code, the next 16 are the product code, after that you have 20 padding digits, then the 16 digit EUI-64 MAC address and finally, the last 36 digits are the install code. The first 42 digits should be the same for all Bosch Outdoor Sirens.
Here is the sniff of the device joining Z2M in 'Legacy' mode:
@danieledwardgeorgehitchcock seems the device keeps rejoining, is it possible to pair it to the bosch gateway in legacy mode?
No - it will only pair to the bosch controller in 'smart' mode. Having the device in 'legacy' mode while attempting to pair causes discovery to fail
@danieledwardgeorgehitchcock that is a bummer, I'm not sure if Bosch would be open to helping on this but other that that I see no other way to solve this.
@Koenkk - I have just found this snippet of information:
"The ZigBee implementation of Bosch uses an advanced encryption technology with device specific link keys, which are being used for initial connection to the Controller, where individual encryption keys are being shared. Whilst other manufacturers use publicly available keys for the initial setup, the method of using device-specific encryption keys makes ZigBee a very secure wireless transmission protocol. Presumably, similar technologies are also used for the proprietary 868Mhz-protocol – these devices also have the individual device key printed on it."
Found here
Does this help with any guesses on how the device is added to the controller?
I am not sure if it would be helpful in any way, but found some documentation related to the bosch smart controller. Although this requires an existing controller, it might still be helpful.
Here is the Python library for the Rest API.
I have to say though, it is odd that the siren is neither mentioned in the documentation nor the python library they have for the Rest API.
@danieledwardgeorgehitchcock so maybe the devices pairs and expect the transport key
message to be encrypted with this custom key. This is something we do not support yet and will require some changes in the coordinator fw. I'm not sure if you were able to figure out the specific encryption key of your device already? If yes, then you should also be able to decrypt your sniff with the original gateway.
Thanks, I'll look into it. I'm guessing that it may be something to do with the install code. Hopefully, Bosch don't do anything too clever with it. Any ideas how I would go about decrypting the traffic using the 36 digit key as opposed to the standard 16? Is it as easy as plumbing it into Wireshark in the same fashion as the network key?
Any ideas how I would go about decrypting the traffic using the 36 digit key as opposed to the standard 16? Is it as easy as plumbing it into Wireshark in the same fashion as the network key?
I have no experience with that but I would expect that you can just paste it in.
That didn't work unfortunately however, I have found the documentation from the Zigbee chip manufacturer on how they implement install codes in their SDK.
I am going to do some further reading on this:
This looks promising:
To derive a link key from the installation code and store that into the key table on the Z3 Gateway, which acts as the Trust Center for the centralized network, enter:
option install-code <link key table index> {<Joining Node’s EUI64>} {<installation code + 2-byte CRC>}
For example:option install-code 0 {00 0B 57 FF FE 07 A9 E3} {88 77 66 55 44 33 22 11 11 22 33 44 55 66 77 88 D4 90}
I may be able to pick what I have apart using the chip manufacturers SDK
So,
I feel that I am dangerously close to this, but I cannot quite figure out what I am doing wrong.
Based on the documentation, the install code is a device specific little endian code where the first 16 bits (32 digits) are the network key, and the last 2 bits (4 digits) are a CRC value.
The Silicone Labs co-ordinator stores the device MAC address (labelled as EUI-64) in an ascending array from 0-254.
The MAC address is used as a lookup key for the device network key.
So, I have done the following:
Decoded my QR code which contains all of the information required:
RB01SG0D831018264800400000000000000000009035EAFFFE424783DLKAE3B287281CF16F550733A0CEC38AA31E802
Applying the logic above,
The last 4 digits are the CRC:
E802
The next 32 digits are the Network Key:
AE3B287281CF16F550733A0CEC38AA31
Then the next 4 digits are unknown (could this be of significance??):
DLKA
Then the next 16 digits are the device MAC address:
9035EAFFFE424783
After that, the next 34 digits are a 0 padded model identifier:
0D83101826480040000000000000000000
Then the remaining 6 digits are the manufacturer identifier:
RB01SG
So, all that I should need from the above to decrypt the traffic is the 32 digit network key - the MAC address is only required for storage of the network key in the lookup table, and the remaining fields are the fingerprint to tell the controller and application what the device is that you are pairing.
I am guessing the byte order should be flipped too as it is little endian but, nothing I try seems to work!
It seems the TI firmware has support for install codes. I need to check how it works, what coordinator are you using?
I have the Sonoff ZBDongle-P running Z-Stack 3
Thanks, I will check it
I've added the install code command; can you:
extension
and put a file in it named install.js
with the following contents:const constants = require('zigbee-herdsman/dist/adapter/z-stack/unpi/constants');
const {Buffer} = require('buffer');
console.log(Buffer);
const Subsystem = constants.Subsystem;
class MyExampleExtension {
constructor(zigbee, mqtt, state, publishEntityState, eventBus, settings, logger) {
this.zigbee = zigbee;
this.mqtt = mqtt;
this.state = state;
this.publishEntityState = publishEntityState;
this.eventBus = eventBus;
this.settings = settings;
this.logger = logger;
}
/**
* This method is called by the controller once Zigbee2MQTT has been started.
*/
async start() {
console.log('Adding install code!');
const payload = {
installCodeFormat: 1,
ieeeaddr: '0x9035EAFFFE424783',
installCode: Buffer.from([0xAE, 0x3B, 0x28, 0x72, 0x81, 0xCF, 0x16, 0xF5, 0x50, 0x73, 0x3A, 0x0C, 0xEC, 0x38, 0xAA, 0x31, 0xE8, 0x02]),
};
const k = await this.zigbee.herdsman.adapter.znp.request(Subsystem.APP_CNF, 'bdbAddInstallCode', payload);
console.log(k);
console.log('Added install code');
}
}
module.exports = MyExampleExtension;
For reference, this is the docs of the install code command:
I already run the Dev branch (latest-dev) in Docker. Tried updating it just now via docker-compose but it said that it was up-to-date..?
I proceeded to add the extension and I got the following:
Zigbee2MQTT:debug 2022-08-30 04:55:57: Received MQTT message on 'zigbee2mqtt/bridge/extensions' with data '[]'
[Function: Buffer] {
poolSize: 8192,
from: [Function: from],
of: [Function: of],
alloc: [Function: alloc],
allocUnsafe: [Function: allocUnsafe],
isBuffer: [Function: isBuffer],
allocUnsafeSlow: [Function: allocUnsafeSlow],
compare: [Function: compare],
isEncoding: [Function: isEncoding],
concat: [Function: concat],
byteLength: [Function: byteLength],
[Symbol(kIsEncodingSymbol)]: [Function: isEncoding]
}
Adding install code!
Zigbee2MQTT:error 2022-08-30 04:55:57: Failed to call 'MyExampleExtension' 'start' (Error: Command 'bdbAddInstallCode' from subsystem '15' not found
at Function.createRequest (/app/node_modules/zigbee-herdsman/src/adapter/z-stack/znp/zpiObject.ts:45:19)
at Znp.request (/app/node_modules/zigbee-herdsman/src/adapter/z-stack/znp/znp.ts:299:34)
at MyExampleExtension.start (/app/dist/util/externally-loaded.js:27:58)
at Controller.callExtensions (/app/lib/controller.ts:315:40)
at Controller.addExtension (/app/lib/controller.ts:187:20)
at ExternalExtension.loadExtension (/app/lib/extension/externalExtension.ts:91:20)
at processTicksAndRejections (node:internal/process/task_queues:96:5))
Zigbee2MQTT:info 2022-08-30 04:55:57: Started frontend on port 0.0.0.0:8881
I am guessing that if you made changes to the Z2M codebase, they haven't been merged yet, or am I missing something?
I will remove my container and re-add just to make sure it isn't something on my side
So, the above was me being an idiot. I dropped the container and re-created it. The function loaded successfully and....
WE HAVE A SUCCESSFUL JOIN!!!!
[Function: Buffer] {
Zigbee2MQTT:debug 2022-08-30 05:04:02: Received MQTT message on 'zigbee2mqtt/bridge/info' with data '{"commit":"8af3ad5","config":{"advanced":{"adapter_concurrent":null,"adapter_delay":null,"availability_blacklist":[],"availability_blocklist":[],"availability_passlist":[],"availability_whitelist":[],"cache_state":true,"cache_state_persistent":true,"cache_state_send_on_startup":true,"channel":21,"elapsed":false,"ext_pan_id":[221,221,221,221,221,221,221,221],"homeassistant_legacy_entity_attributes":false,"last_seen":"disable","legacy_api":false,"legacy_availability_payload":false,"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"},"output":"json","pan_id":6754,"report":false,"soft_reset_timeout":0,"timestamp_format":"YYYY-MM-DD HH:mm:ss"},"blocklist":[],"device_options":{"legacy":false},"devices":{"0x680ae2fffe6faf49":{"friendly_name":"0x680ae2fffe6faf49"},"0xa4c1381538445fab":{"friendly_name":"0xa4c1381538445fab"}},"external_converters":["./external_converters/vimar_iot_thermostat.js","./external_converters/tuya_4ch_relay.js"],"frontend":{"host":"0.0.0.0","port":8881},"groups":{},"homeassistant":false,"map_options":{"graphviz":{"colors":{"fill":{"coordinator":"#e04e5d","enddevice":"#fff8ce","router":"#4ea3e0"},"font":{"coordinator":"#ffffff","enddevice":"#000000","router":"#ffffff"},"line":{"active":"#009900","inactive":"#994444"}}}},"mqtt":{"base_topic":"zigbee2mqtt","force_disable_retain":false,"include_device_information":false,"server":"mqtt://mosquitto:8883"},"ota":{"disable_automatic_update_check":false,"update_check_interval":1440},"passlist":[],"permit_join":false,"serial":{"disable_led":false,"port":"/dev/ttyUSB0"}},"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 with regex from published payload.","examples":["^temperature$","^battery$","^action$"],"items":{"type":"string"},"title":"Filtered publish attributes","type":"array"},"filtered_cache":{"description":"Filter attributes with regex from being added to the cache, this prevents the attribute from being in the published payload when the value didn't change.","examples":["^input_actions$"],"items":{"type":"string"},"title":"Filtered attributes from cache","type":"array"},"filtered_optimistic":{"description":"Filter attributes with regex from optimistic publish payload when calling /set. (This has no effect if optimistic is set to false).","examples":["^color_(mode|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"},"homeassistant":{"properties":{"name":{"description":"Name of the device in Home Assistant","title":"Home Assistant name","type":"string"}},"title":"Home Assistant","type":["object","null"]},"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"},"off_state":{"default":"auto","description":"Control when to publish state OFF for a group. 'all_members_off': only publish state OFF when all group memebers are in state OFF, 'last_member_state': publish state OFF whenever one of its members changes to OFF","enum":["all_members_off","last_member_state"],"requiresRestart":true,"title":"Group off state","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"]},"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"},"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"},"legacy_availability_payload":{"default":true,"description":"Payload to be used for device availabilty and bridge/state topics. true = text, false = JSON","requiresRestart":true,"title":"Legacy availability payload","type":"boolean"},"log_directory":{"description":"Location of log directory","examples":["data/log/%TIMESTAMP%"],"requiresRestart":true,"title":"Log directory","type":"string"},"log_file":{"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 suppress 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"},"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"},"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"},"timestamp_format":{"description":"Log timestamp format","examples":["YYYY-MM-DD HH:mm:ss"],"requiresRestart":true,"title":"Timestamp format","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":"Advanced","type":"object"},"availability":{"description":"Checks whether devices are online/offline","oneOf":[{"title":"Availability (simple)","type":"boolean"},{"properties":{"active":{"description":"Options for active devices (routers/mains powered)","properties":{"timeout":{"default":10,"description":"Time after which an active device will be marked as offline in minutes","requiresRestart":true,"title":"Timeout","type":"number"}},"requiresRestart":true,"title":"Active","type":"object"},"passive":{"description":"Options for passive devices (mostly battery powered)","properties":{"timeout":{"default":1500,"description":"Time after which an passive device will be marked as offline in minutes","requiresRestart":true,"title":"Timeout","type":"number"}},"requiresRestart":true,"title":"Passive","type":"object"}},"title":"Availability (advanced)","type":"object"}],"requiresRestart":true,"title":"Availability"},"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":{"title":"Options that are applied to all devices","type":"object"},"devices":{"patternProperties":{"^.*$":{"$ref":"#/definitions/device"}},"propertyNames":{"pattern":"^0x[\\d\\w]{16}$"},"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":{"oneOf":[{"title":"Frontend (simple)","type":"boolean"},{"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"},"url":{"description":"URL on which the frontend can be reached, currently only used for the Home Assistant device configuration page","requiresRestart":true,"title":"URL","type":["string","null"]}},"title":"Frontend (advanced)","type":"object"}],"requiresRestart":true,"title":"Frontend"},"groups":{"patternProperties":{"^.*$":{"$ref":"#/definitions/group"}},"propertyNames":{"pattern":"^[\\w].*$"},"type":"object"},"homeassistant":{"default":false,"description":"Home Assistant integration (MQTT discovery)","oneOf":[{"title":"Home Assistant (simple)","type":"boolean"},{"properties":{"discovery_topic":{"description":"Home Assistant discovery topic","examples":["homeassistant"],"requiresRestart":true,"title":"Homeassistant discovery topic","type":"string"},"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"},"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"},"status_topic":{"description":"Home Assistant status topic","examples":["homeassistant/status"],"requiresRestart":true,"title":"Home Assistant status topic","type":"string"}},"title":"Home Assistant (advanced)","type":"object"}],"requiresRestart":true,"title":"Home Assistant integration"},"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":{"default":"zigbee2mqtt","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":["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"},"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"},"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"},"zigbee_ota_override_index_location":{"description":"Location of override OTA index file","examples":["index.json"],"requiresRestart":true,"title":"OTA index override file name","type":"string"}},"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"]},"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"},"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"]},"rtscts":{"description":"RTS / CTS Hardware Flow Control for serial port","requiresRestart":true,"title":"RTS / CTS","type":"boolean"}},"title":"Serial","type":"object"},"whitelist":{"items":{"type":"string"},"readOnly":true,"requiresRestart":true,"title":"Whitelist (deprecated, use passlist)","type":"array"}},"required":["mqtt"],"type":"object"},"coordinator":{"ieee_address":"0x00124b00257cae15","meta":{"maintrel":1,"majorrel":2,"minorrel":7,"product":1,"revision":20210708,"transportrev":2},"type":"zStack3x0"},"log_level":"debug","network":{"channel":21,"extended_pan_id":"0x00124b00257cae15","pan_id":6754},"permit_join":false,"restart_required":false,"version":"1.26.0-dev"}'
Zigbee2MQTT:debug 2022-08-30 05:04:02: Received MQTT message on 'zigbee2mqtt/bridge/devices' with data '[{"definition":null,"endpoints":{"1":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"10":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"11":{"bindings":[],"clusters":{"input":["ssIasAce","genTime"],"output":["ssIasZone","ssIasWd"]},"configured_reportings":[],"scenes":[]},"110":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"12":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"13":{"bindings":[],"clusters":{"input":["genOta"],"output":[]},"configured_reportings":[],"scenes":[]},"2":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"242":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"3":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"4":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"47":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"5":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"6":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"8":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]}},"friendly_name":"Coordinator","ieee_address":"0x00124b00257cae15","interview_completed":true,"interviewing":false,"network_address":0,"supported":false,"type":"Coordinator"},{"date_code":"","definition":{"description":"4Ch Din Zigbee/RF Relay Module","exposes":[{"endpoint":"l1","features":[{"access":7,"description":"On/off state of the switch","endpoint":"l1","name":"state","property":"state_l1","type":"binary","value_off":"OFF","value_on":"ON","value_toggle":"TOGGLE"}],"type":"switch"},{"access":7,"description":"Controls the behavior when the device is powered on","endpoint":"l1","name":"power_on_behavior","property":"power_on_behavior_l1","type":"enum","values":["off","previous","on"]},{"endpoint":"l2","features":[{"access":7,"description":"On/off state of the switch","endpoint":"l2","name":"state","property":"state_l2","type":"binary","value_off":"OFF","value_on":"ON","value_toggle":"TOGGLE"}],"type":"switch"},{"access":7,"description":"Controls the behavior when the device is powered on","endpoint":"l2","name":"power_on_behavior","property":"power_on_behavior_l2","type":"enum","values":["off","previous","on"]},{"endpoint":"l3","features":[{"access":7,"description":"On/off state of the switch","endpoint":"l3","name":"state","property":"state_l3","type":"binary","value_off":"OFF","value_on":"ON","value_toggle":"TOGGLE"}],"type":"switch"},{"access":7,"description":"Controls the behavior when the device is powered on","endpoint":"l3","name":"power_on_behavior","property":"power_on_behavior_l3","type":"enum","values":["off","previous","on"]},{"endpoint":"l4","features":[{"access":7,"description":"On/off state of the switch","endpoint":"l4","name":"state","property":"state_l4","type":"binary","value_off":"OFF","value_on":"ON","value_toggle":"TOGGLE"}],"type":"switch"},{"access":7,"description":"Controls the behavior when the device is powered on","endpoint":"l4","name":"power_on_behavior","property":"power_on_behavior_l4","type":"enum","values":["off","previous","on"]},{"access":1,"description":"Link quality (signal strength)","name":"linkquality","property":"linkquality","type":"numeric","unit":"lqi","value_max":255,"value_min":0}],"model":"ZG-003-RF","options":[],"supports_ota":false,"vendor":"Tuya"},"endpoints":{"1":{"bindings":[{"cluster":"genOnOff","target":{"endpoint":1,"ieee_address":"0x00124b00257cae15","type":"endpoint"}}],"clusters":{"input":["genIdentify","genGroups","genScenes","genOnOff","57344","manuSpecificTuya_3","genBasic"],"output":["genOta","genTime"]},"configured_reportings":[],"scenes":[]},"2":{"bindings":[{"cluster":"genOnOff","target":{"endpoint":1,"ieee_address":"0x00124b00257cae15","type":"endpoint"}}],"clusters":{"input":["genGroups","genScenes","genOnOff","manuSpecificTuya_3"],"output":[]},"configured_reportings":[],"scenes":[]},"242":{"bindings":[],"clusters":{"input":[],"output":["greenPower"]},"configured_reportings":[],"scenes":[]},"3":{"bindings":[{"cluster":"genOnOff","target":{"endpoint":1,"ieee_address":"0x00124b00257cae15","type":"endpoint"}}],"clusters":{"input":["genGroups","genScenes","genOnOff","manuSpecificTuya_3"],"output":[]},"configured_reportings":[],"scenes":[]},"4":{"bindings":[{"cluster":"genOnOff","target":{"endpoint":1,"ieee_address":"0x00124b00257cae15","type":"endpoint"}}],"clusters":{"input":["genGroups","genScenes","genOnOff","manuSpecificTuya_3"],"output":[]},"configured_reportings":[],"scenes":[]}},"friendly_name":"0xa4c1381538445fab","ieee_address":"0xa4c1381538445fab","interview_completed":true,"interviewing":false,"manufacturer":"_TZ3000_u3oupgdy","model_id":"TS0004","network_address":20472,"power_source":"Mains (single phase)","supported":true,"type":"Router"}]'
Zigbee2MQTT:debug 2022-08-30 05:04:02: Received MQTT message on 'zigbee2mqtt/bridge/groups' with data '[]'
Zigbee2MQTT:debug 2022-08-30 05:04:02: Received MQTT message on 'zigbee2mqtt/bridge/extensions' with data '[{"code":"const constants = require('zigbee-herdsman/dist/adapter/z-stack/unpi/constants');\nconst {Buffer} = require('buffer');\nconsole.log(Buffer);\nconst Subsystem = constants.Subsystem;\n\nclass MyExampleExtension {\n constructor(zigbee, mqtt, state, publishEntityState, eventBus, settings, logger) {\n this.zigbee = zigbee;\n this.mqtt = mqtt;\n this.state = state;\n this.publishEntityState = publishEntityState;\n this.eventBus = eventBus;\n this.settings = settings;\n this.logger = logger;\n }\n\n /**\n * This method is called by the controller once Zigbee2MQTT has been started.\n */\n async start() {\n console.log('Adding install code!');\n const payload = {\n installCodeFormat: 1,\n ieeeaddr: '0x9035EAFFFE424783',\n installCode: Buffer.from([0xAE, 0x3B, 0x28, 0x72, 0x81, 0xCF, 0x16, 0xF5, 0x50, 0x73, 0x3A, 0x0C, 0xEC, 0x38, 0xAA, 0x31, 0xE8, 0x02]),\n };\n const k = await this.zigbee.herdsman.adapter.znp.request(Subsystem.APP_CNF, 'bdbAddInstallCode', payload);\n console.log(k);\n console.log('Added install code');\n }\n}\n\nmodule.exports = MyExampleExtension;\n","name":"install_code.js"}]'
poolSize: 8192,
from: [Function: from],
of: [Function: of],
alloc: [Function: alloc],
allocUnsafe: [Function: allocUnsafe],
allocUnsafeSlow: [Function: allocUnsafeSlow],
isBuffer: [Function: isBuffer],
compare: [Function: compare],
isEncoding: [Function: isEncoding],
concat: [Function: concat],
byteLength: [Function: byteLength],
[Symbol(kIsEncodingSymbol)]: [Function: isEncoding]
}
Adding install code!
Zigbee2MQTT:info 2022-08-30 05:04:02: Started frontend on port 0.0.0.0:8881
Zigbee2MQTT:info 2022-08-30 05:04:02: MQTT publish: topic 'zigbee2mqtt/0xa4c1381538445fab', payload '{"linkquality":189,"power_on_behavior_l1":"off","power_on_behavior_l2":"off","power_on_behavior_l3":"off","power_on_behavior_l4":"off","state_l1":"OFF","state_l2":"OFF","state_l3":"OFF","state_l4":"OFF"}'
ZpiObject {
subsystem: 15,
command: 'bdbAddInstallCode',
commandID: 4,
payload: { status: 0 },
type: 3,
parameters: [ { name: 'status', parameterType: 0 } ]
Added install code
Zigbee2MQTT:debug 2022-08-30 05:05:36: Received MQTT message on 'zigbee2mqtt/bridge/request/permit_join' with data '{"device":null,"time":254,"transaction":"j7pex-1","value":true}'
Zigbee2MQTT:info 2022-08-30 05:05:36: Zigbee: allowing new devices to join.
Zigbee2MQTT:info 2022-08-30 05:05:36: MQTT publish: topic 'zigbee2mqtt/bridge/response/permit_join', payload '{"data":{"time":254,"value":true},"status":"ok","transaction":"j7pex-1"}'
Zigbee2MQTT:info 2022-08-30 05:05:39: Device '0x9035eafffe424783' joined
Zigbee2MQTT:info 2022-08-30 05:05:39: MQTT publish: topic 'zigbee2mqtt/bridge/event', payload '{"data":{"friendly_name":"0x9035eafffe424783","ieee_address":"0x9035eafffe424783"},"type":"device_joined"}'
Zigbee2MQTT:info 2022-08-30 05:05:39: Starting interview of '0x9035eafffe424783'
Zigbee2MQTT:info 2022-08-30 05:05:39: MQTT publish: topic 'zigbee2mqtt/bridge/event', payload '{"data":{"friendly_name":"0x9035eafffe424783","ieee_address":"0x9035eafffe424783","status":"started"},"type":"device_interview"}'
Zigbee2MQTT:debug 2022-08-30 05:05:39: Device '0x9035eafffe424783' announced itself
Zigbee2MQTT:info 2022-08-30 05:05:39: MQTT publish: topic 'zigbee2mqtt/bridge/event', payload '{"data":{"friendly_name":"0x9035eafffe424783","ieee_address":"0x9035eafffe424783"},"type":"device_announce"}'
Zigbee2MQTT:debug 2022-08-30 05:05:54: Received Zigbee message from '0x9035eafffe424783', type 'readResponse', cluster 'genBasic', data '{"modelId":"RBSH-OS-ZB-EU"}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:05:54: Skipping message, definition is undefined and still interviewing
Zigbee2MQTT:debug 2022-08-30 05:05:54: Received Zigbee message from '0x9035eafffe424783', type 'readResponse', cluster 'genBasic', data '{"manufacturerName":"Bosch"}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:05:55: Received Zigbee message from '0x9035eafffe424783', type 'readResponse', cluster 'genBasic', data '{"powerSource":132}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:05:55: Skipping message, definition is undefined and still interviewing
Zigbee2MQTT:debug 2022-08-30 05:05:55: Received Zigbee message from '0x9035eafffe424783', type 'readResponse', cluster 'genBasic', data '{"zclVersion":3}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:05:56: Received Zigbee message from '0x9035eafffe424783', type 'readResponse', cluster 'genBasic', data '{"appVersion":2}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:05:56: Skipping message, definition is undefined and still interviewing
Zigbee2MQTT:debug 2022-08-30 05:05:56: Received Zigbee message from '0x9035eafffe424783', type 'readResponse', cluster 'genBasic', data '{"stackVersion":7}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:05:57: Received Zigbee message from '0x9035eafffe424783', type 'readResponse', cluster 'genBasic', data '{"dateCode":"20211012"}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:05:57: Skipping message, definition is undefined and still interviewing
Zigbee2MQTT:debug 2022-08-30 05:05:57: Received Zigbee message from '0x9035eafffe424783', type 'readResponse', cluster 'genBasic', data '{"hwVersion":32}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:05:58: Received Zigbee message from '0x9035eafffe424783', type 'readResponse', cluster 'genBasic', data '{"swBuildId":"V1.19.00"}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:05:58: Received Zigbee message from '0x9035eafffe424783', type 'readResponse', cluster 'ssIasZone', data '{"iasCieAddr":"0x0000000000000000","zoneState":0}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:05:58: Skipping message, definition is undefined and still interviewing
Zigbee2MQTT:debug 2022-08-30 05:06:00: Received Zigbee message from '0x9035eafffe424783', type 'readResponse', cluster 'ssIasZone', data '{"iasCieAddr":"0x00124b00257cae15","zoneState":1}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:06:00: Skipping message, definition is undefined and still interviewing
Zigbee2MQTT:debug 2022-08-30 05:06:01: Received Zigbee message from '0x9035eafffe424783', type 'readResponse', cluster 'genPollCtrl', data '{"checkinInterval":6480}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:06:01: Skipping message, definition is undefined and still interviewing
Zigbee2MQTT:info 2022-08-30 05:06:01: Successfully interviewed '0x9035eafffe424783', device has successfully been paired
Zigbee2MQTT:warn 2022-08-30 05:06:01: Device '0x9035eafffe424783' with Zigbee model 'RBSH-OS-ZB-EU' and manufacturer name 'Bosch' is NOT supported, please follow https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html
Zigbee2MQTT:info 2022-08-30 05:06:01: MQTT publish: topic 'zigbee2mqtt/bridge/event', payload '{"data":{"definition":null,"friendly_name":"0x9035eafffe424783","ieee_address":"0x9035eafffe424783","status":"successful","supported":false},"type":"device_interview"}'
Zigbee2MQTT:debug 2022-08-30 05:06:02: Received Zigbee message from '0x9035eafffe424783', type 'attributeReport', cluster 'genPowerCfg', data '{"batteryPercentageRemaining":200}' from endpoint 1 with groupID 0
Zigbee2MQTT:warn 2022-08-30 05:06:02: Received message from unsupported device with Zigbee model 'RBSH-OS-ZB-EU' and manufacturer name 'Bosch'
Zigbee2MQTT:warn 2022-08-30 05:06:02: Please see: https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html
Zigbee2MQTT:debug 2022-08-30 05:06:02: Received Zigbee message from '0x9035eafffe424783', type 'attributeReport', cluster 'genPowerCfg', data '{"batteryAlarmState":0}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:06:02: Received Zigbee message from '0x9035eafffe424783', type 'attributeReport', cluster 'genPowerCfg', data '{"40960":2}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:06:02: Received Zigbee message from '0x9035eafffe424783', type 'attributeReport', cluster 'genPowerCfg', data '{"40961":1}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:06:05: Received Zigbee message from '0x9035eafffe424783', type 'attributeReport', cluster 'genPowerCfg', data '{"batteryPercentageRemaining":200}' from endpoint 1 with groupID 0
Zigbee2MQTT:warn 2022-08-30 05:06:05: Received message from unsupported device with Zigbee model 'RBSH-OS-ZB-EU' and manufacturer name 'Bosch'
Zigbee2MQTT:warn 2022-08-30 05:06:05: Please see: https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html
Zigbee2MQTT:debug 2022-08-30 05:06:05: Received Zigbee message from '0x9035eafffe424783', type 'attributeReport', cluster 'genPowerCfg', data '{"batteryAlarmState":0}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:06:05: Received Zigbee message from '0x9035eafffe424783', type 'attributeReport', cluster 'genPowerCfg', data '{"40960":2}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:06:05: Received Zigbee message from '0x9035eafffe424783', type 'attributeReport', cluster 'genPowerCfg', data '{"40961":1}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:06:10: Received Zigbee message from '0x9035eafffe424783', type 'commandQueryNextImageRequest', cluster 'genOta', data '{"fieldControl":1,"fileVersion":421095264,"imageType":12293,"manufacturerCode":4617}' from endpoint 1 with groupID 0
Zigbee2MQTT:warn 2022-08-30 05:06:10: Please see: https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html
Zigbee2MQTT:warn 2022-08-30 05:06:10: Received message from unsupported device with Zigbee model 'RBSH-OS-ZB-EU' and manufacturer name 'Bosch'
Zigbee2MQTT:debug 2022-08-30 05:06:13: Received Zigbee message from '0x9035eafffe424783', type 'commandStatusChangeNotification', cluster 'ssIasZone', data '{"extendedstatus":0,"zonestatus":160}' from endpoint 1 with groupID 0
Zigbee2MQTT:warn 2022-08-30 05:06:13: Received message from unsupported device with Zigbee model 'RBSH-OS-ZB-EU' and manufacturer name 'Bosch'
Zigbee2MQTT:warn 2022-08-30 05:06:13: Please see: https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html
Zigbee2MQTT:debug 2022-08-30 05:06:13: Received Zigbee message from '0x9035eafffe424783', type 'commandQueryNextImageRequest', cluster 'genOta', data '{"fieldControl":1,"fileVersion":421095264,"imageType":12293,"manufacturerCode":4617}' from endpoint 1 with groupID 0
Zigbee2MQTT:debug 2022-08-30 05:06:16: Received Zigbee message from '0x9035eafffe424783', type 'commandQueryNextImageRequest', cluster 'genOta', data '{"fieldControl":1,"fileVersion":421095264,"imageType":12293,"manufacturerCode":4617}' from endpoint 1 with groupID 0
Zigbee2MQTT:warn 2022-08-30 05:06:16: Received message from unsupported device with Zigbee model 'RBSH-OS-ZB-EU' and manufacturer name 'Bosch'
Zigbee2MQTT:debug 2022-08-30 05:06:19: Received Zigbee message from '0x9035eafffe424783', type 'commandQueryNextImageRequest', cluster 'genOta', data '{"fieldControl":1,"fileVersion":421095264,"imageType":12293,"manufacturerCode":4617}' from endpoint 1 with groupID 0
Zigbee2MQTT:warn 2022-08-30 05:06:16: Please see: https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html
Zigbee2MQTT:warn 2022-08-30 05:06:19: Received message from unsupported device with Zigbee model 'RBSH-OS-ZB-EU' and manufacturer name 'Bosch'
Zigbee2MQTT:warn 2022-08-30 05:06:19: Please see: https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html
Zigbee2MQTT:debug 2022-08-30 05:06:22: Received Zigbee message from '0x9035eafffe424783', type 'commandQueryNextImageRequest', cluster 'genOta', data '{"fieldControl":1,"fileVersion":421095264,"imageType":12293,"manufacturerCode":4617}' from endpoint 1 with groupID 0
Zigbee2MQTT:warn 2022-08-30 05:06:22: Received message from unsupported device with Zigbee model 'RBSH-OS-ZB-EU' and manufacturer name 'Bosch'
Zigbee2MQTT:warn 2022-08-30 05:06:22: Please see: https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html
Database Entry:
{
"id": 3,
"type": "EndDevice",
"ieeeAddr": "0x9035eafffe424783",
"nwkAddr": 17198,
"manufId": 4617,
"manufName": "Bosch",
"powerSource": "DC Source",
"modelId": "RBSH-OS-ZB-EU",
"epList": [
1
],
"endpoints": {
"1": {
"profId": 260,
"epId": 1,
"devId": 1027,
"inClustterList": [
0,
1,
3,
32,
1280,
1282,
2821
],
"outClusterList": [
25
],
"clusters": {
"genBasic": {
"attributes": {
"modelId": "RBSH-OS-ZB-EU",
"manufacturerName": "Bosch",
"powerSource": 132,
"zclVersion": 3,
"appVersion": 2,
"stackVersion": 7,
"hwVersion": 32,
"dateCode": "20211012",
"swBuildId": "V1.19.00"
}
},
"ssIasZone": {
"attributes": {
"iasCieAddr": "0x00124b00257cae15",
"zoneState": 1
}
},
"genPollCtrl": {
"attributes": {
"checkinInterval": 6480
}
}
},
"binds": [
{
"cluster": 32,
"type": "endpoint",
"deviceIeeeeAddress": "0x00124b00257cae15",
"endpointID": 1
}
],
"configuredReportings": [],
"meta": {}
}
},
"appVersion": 2,
"stackVersion": 7,
"hwVersion": 32,
"dateCode": "20211012",
"swBuildId": "V1.19.00",
"zclVersion": 3,
"interviewCompleted": true,
"meta": {},
"lastSeen": 1661835961869,
"defaultSendRequestWhen": "active"
}
I also can confirm that I managed to successfully pair the device using hass.io. I think it is important to mention for the people who will do this after us that ieeeaddr and installCode are both device specific and case sensitive in the example extension @Koenkk provided. Otherwise the device does not pair.
I am guessing the extension above is just a proof of concept to see if we could successfully join the devices to Z2M.
If I was to see this working in production, I'd probably create a new MQTT topic that accepts the IEEE MAC Adress, Install Code and Install Code Format that in turn adds an entry to the co-ordinator (and one to remove it too)
Awesome! The extension is indeed a prototype, next step is to properly integrate install code support. @kirovilya does EZSP also support adding install code, if yes, what parameters does it need? For ZStack it need to ieeeAddr
+ installCode
(see https://github.com/Koenkk/zigbee2mqtt/issues/13520#issuecomment-1230662569)
@Koenkk I think I can implement for the EZSP adapter. just need to figure out where to put the key and how to use it :) https://www.silabs.com/documents/public/application-notes/an1089-using-installation-codes-with-zigbee-devices.pdf
I have one device with this type of connection - Aqara Knob H1, although you can connect without an install code.
G$M:69775$S:680S00003915$D:0000000017B2335C%Z$A:54EF44100006E7DF$I:3313A005E177A647FC7925620AB207C4BEF5
@safakaltun - do you want to have a go at a herdsman converter? I'm happy to have a go if not, just didn't want to duplicate effort...
@danieledwardgeorgehitchcock Sure thing. I will have a look at it tonight and see how much I can do. Have you seen anything interesting related to the exports when you did the sniff with the Bosch Smart Controller?
Hi again, I am little bit stuck, and can use some help. Below converter works fine to control the siren, set the volume and duration just fine. However, the exposed tamper doesn't work. It seems to be stuck in the "tampered" mode. Any ideas what could be the problem?
const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const extend = require('zigbee-herdsman-converters/lib/extend');
const e = exposes.presets;
const ea = exposes.access;
const definition = {
zigbeeModel: ['RBSH-OS-ZB-EU'], // The model ID from: Device with modelID 'lumi.sens' is not supported.
model: 'BSIR-EZ', // Vendor model number, look on the device for a model number
vendor: 'Bosch', // Vendor of the device (only used for documentation and startup logging)
description: 'Wired/Wireless Smart Outdoor Siren', // Description of the device, copy from vendor site. (only used for documentation and startup logging)
fromZigbee: [fz.battery, fz.ias_siren],
toZigbee: [tz.warning],
exposes: [e.warning(), e.battery(), e.battery_low(), e.tamper()],
configure: async (device, coordinatorEndpoint, logger) => {
device.defaultSendRequestWhen = 'immediate';
device.save();
await device.getEndpoint(1).unbind('genPollCtrl', coordinatorEndpoint);
},
};
module.exports = definition;
I'm looking into the tamper alarm. When looking at the debug log, it looks as though the tamper is reported on the ssIasZone cluster with the following data {"extendedstatus":0, "zonestatus":1188}
- this message is both the same on a trigger and clear. Going to do some further sniffing to see if that yields anything further
Looking at the sniff events, theres nothing to report with the tamper.
It looks to be an 'action' type response from the device rather than a binary i.e. it reports a tamper event each time the value of the tamper button changes.
That being said, I noticed when setting up the device with the native hub that there is a tamper self-test option in the configuration screen so, I am going to look into that to see if I can see anything - difficulty with this though, is I can't decrypt the sniff
Install codes are now supported (frontend Settings -> Tools -> Add install code
)
Changes will be available in the dev branch in a few hours from now. (https://www.zigbee2mqtt.io/advanced/more/switch-to-dev-branch.html)
Thanks @Koenkk!
@danieledwardgeorgehitchcock have you managed to make any progress on the tamper button? I am in the middle of moving my place, so haven’t had a chance to look into this. I am wondering if the tamper integration is done in a similar way to a button or something like that.
@safakaltun - yeah thats basically what I discovered above when looking at the debug logs.
I know that the Bosch app has the ability to test the tamper feature of the device but, without being able to decrypt the device to controller logs when the device is connected to its native hub, I am just going through a very manual process of figuring out which endpoints I can read from and write to, to see if I can fire a request to read the status when the event is fired
Install codes are now supported (frontend
Settings -> Tools -> Add install code
)Changes will be available in the dev branch in a few hours from now. (https://www.zigbee2mqtt.io/advanced/more/switch-to-dev-branch.html)
Hi again @Koenkk,
I have tried this and works perfectly fine for the siren. However, another device (twinguard) from Bosch uses a different length for the install code. It appears that the length of the qr code for this device is 91, therefore “Add Install” function fails due to the length being shorter than 95 characters. Below is the install code from the twinguard:
RB01SG0D836591B3CC0010000000000000000000000D6F00179F2BC9DLKD0F471C9BBA2C0208608E91EED17E2B1
Is it possible to make this implementation more flexible?
@safakaltun can you try with RB01SG0D836591B3CC00100000000000000000000000000D6F00179F2BC9DLKD0F471C9BBA2C0208608E91EED17E2B1
? I just added a few more zeros in the middle.
I don't think that code will work.
Have a look at how I split out the QR code above.
You should just need the last 36 digits (32 network code and 4 CRC)
9DLKD0F471C9BBA2C0208608E91EED17E2B1
I tried adding padding in different places as well, but didn’t work unfortunately. When I try the above suggestion the error I get is:
09Request 'zigbee2mqtt/bridge/request/install_code/add' failed with error: 'SREQ '--> APP_CNF - bdbAddInstallCode - {"installCodeFormat":1,"ieeeaddr":"0x0000000D6F00179F","installCode":{"type":"Buffer","data":[157,0,208,244,113,201,187,162,192,32,134,8,233,30,237,23,226,177]}}' failed with status '(0x02: INVALID_PARAM)' (expected '(0x00: SUCCESS)')'
The additional zeros are interpreted as a part of the ieee address.
I'd suggest you open up a new thread for this as it is a different device and you wouldn't want to muddy up this thread.
That being said, I have found an image of the label on the device and it looks as though it might be a type 2 (16 bytes for key derived from Install Code) - see ZStack Command Reference page above.
The confusing thing is that there is a 'Device Local Key' which appears to be 26 characters long so, I don't know how you would derive a link key from 26 non-hex characters...
@safakaltun I've added support for the 16 byte install code now, please check again in the latest dev (with the original key, not the one I added zeros to).
Changes will be available in the dev branch in a few hours from now. (https://www.zigbee2mqtt.io/advanced/more/switch-to-dev-branch.html)
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
Not stale. Waiting for action from my end to push the converter file. I need to find the time to look into the issue with "tamper" integration.
Would it be worth pushing what you have, then adding to it when you / I have worked out the tamper logic?
I am having a look at it now and I noticed that when I removed the siren to test, its zoneStatus went from 33956 to 32932. This corresponds to bit 10 going to 0 from 1. However, when I put the device back on the wall mount, zoneStatus did not go back to 33956. I am waiting to see if there is an internal timer that needs to be reset for the zoneStatus to go back to its previous value. My other theory is that the device might be waiting to be triggered for bit 10 to go back to its initial value - I will test this tomorrow.
I am not sure what bit 10 corresponds to as it is not explained in the Zigbee Cluster Library Specification. I am also not sure why Bosch did not use Bit 2 for tamper.
@danieledwardgeorgehitchcock it might be very helpful if you could also check the zoneStatus before and after removing the device from the wall mount if you have it already installed. If bit 10 changes for you as well, that can at least tell us.
Link
https://www.bosch-smarthome.com/uk/en/products/devices/outdoor-siren/
Database entry
{"id":66,"type":"Unknown","ieeeAddr":"0x003c84fffeeda00b","nwkAddr":29598,"epList":[],"endpoints":{},"interviewCompleted":false,"meta":{},"lastSeen":1660330204622,"defaultSendRequestWhen":"immediate"}
Comments
I would like to add support for this device, but I got stuck in the pairing phase. Although the device starts pairing, it cannot complete the interview. Pairing with the original hub was done using the QR code on the back of the siren, which contains the IEEE link key. I am not sure if it has anything to do with it or not.
I factory reset the device numerous times with no help. I also tried pairing it in both legacy and "smart home controller" modes which is set by the PIN 8 behind the siren.
Attaching the herdsman logs as well. I am not sure if the length of the log is enough, but the device more or less runs in a loop where z2m tries interviewing, interview fails and starts over again.
herdsman.log
External converter
No response
Supported color modes
No response
Color temperature range
No response