From c44816efee7f351906c1561f7cc8b6f296acb9ec Mon Sep 17 00:00:00 2001 From: Fredrik Lindqvist Date: Mon, 21 Jan 2019 17:51:21 +0100 Subject: [PATCH 1/5] Add simple step for securing Zigbee network (#899) * Add simple step for securing zigbee network * Update configuration.md * Update how_to_secure_network.md * Update index.md --- docs/configuration/configuration.md | 5 +++-- docs/getting_started/pairing_devices.md | 3 ++- docs/how_tos/how_to_secure_network.md | 16 ++++++++++++++++ docs/index.md | 1 + 4 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 docs/how_tos/how_to_secure_network.md diff --git a/docs/configuration/configuration.md b/docs/configuration/configuration.md index 27cdedd39..8995b7e95 100644 --- a/docs/configuration/configuration.md +++ b/docs/configuration/configuration.md @@ -7,7 +7,8 @@ The values shown are the default ones. # Required: Home Assistant integration (MQTT discovery) homeassistant: false -# Required: allow new devices to join +# Required: allow new devices to join. +# WARNING: Disable this after all devices have been paired! permit_join: true # Required: MQTT settings @@ -53,4 +54,4 @@ advanced: rtscts: true # Optional: soft reset ZNP after timeout (in seconds); 0 is disabled soft_reset_timeout: 0 -``` \ No newline at end of file +``` diff --git a/docs/getting_started/pairing_devices.md b/docs/getting_started/pairing_devices.md index 0e1e5f047..7320f2a6b 100644 --- a/docs/getting_started/pairing_devices.md +++ b/docs/getting_started/pairing_devices.md @@ -1,4 +1,5 @@ **IMPORTANT:** Before you start, make sure that `permit_join: true` is set in your `configuration.yaml`. Otherwise new devices cannot join the network! +It's equally important that `permit_join: false` is set in your `configuration.yaml` after initial setup is done to keep your Zigbee network safe and to avoid accidental joining of other Zigbee devices. Start by checking if your Zigbee device is supported, see [Supported devices](../information/supported_devices.md). @@ -65,4 +66,4 @@ Factory reset by: (at the 3rd, the 10th, and the 15th second). - After releasing the Binding Key, press the Switch Key within 2 seconds. The network indicator will rapidly flash green. -- After fast flashes, Z809A will reboot, and the restore is completed. The socket will automatically connect now. \ No newline at end of file +- After fast flashes, Z809A will reboot, and the restore is completed. The socket will automatically connect now. diff --git a/docs/how_tos/how_to_secure_network.md b/docs/how_tos/how_to_secure_network.md new file mode 100644 index 000000000..f9c342655 --- /dev/null +++ b/docs/how_tos/how_to_secure_network.md @@ -0,0 +1,16 @@ +# How to secure your Zigbee network +By default your Zigbee network isn't as secured as possible. The following settings are recommeded to apply to your configuration. + +## Disabled joining +To disable joining it's important that `permit_join: false` is set in your `configuration.yaml`. + +## Change Zigbee network encryption key +**Changing the key requires repairing of all devices!** + +Zigbee2mqtt uses a default encryption key. Therefore it is recommended to use a different one. To use a different encryption key add the following to you `configuration.yaml`: + +**Do not use the following key.** +``` +advanced: + network_key: [7, 3, 5, 7, 9, 11, 13, 15, 0, 2, 4, 6, 8, 11, 12, 13], +``` diff --git a/docs/index.md b/docs/index.md index 0faa808a0..c22e98064 100644 --- a/docs/index.md +++ b/docs/index.md @@ -25,6 +25,7 @@ Welcome to the Zigbee2mqtt documentation! * [How to support new devices](how_tos/how_to_support_new_devices.md) * [How to debug](how_tos/how_to_debug.md) * [How to support new devices on Hass.io](how_tos/how_to_support_new_devices_on_hassio.md) +* [How to secure your Zigbee network](how_tos/how_to_secure_network.md) ### Information * [Supported devices](information/supported_devices.md) From 43fc66c43623101f42f85b8b73327b9d75fdeab6 Mon Sep 17 00:00:00 2001 From: Boris Hajduk Date: Fri, 25 Jan 2019 00:46:30 +0800 Subject: [PATCH 2/5] Update flashing_the_cc2531.md (#926) --- docs/getting_started/flashing_the_cc2531.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/getting_started/flashing_the_cc2531.md b/docs/getting_started/flashing_the_cc2531.md index e7c9eb7b7..76f1316df 100644 --- a/docs/getting_started/flashing_the_cc2531.md +++ b/docs/getting_started/flashing_the_cc2531.md @@ -19,10 +19,10 @@ The CC2531 USB stick needs to be flashed with a custom firmware. Credits to [@Frans-Willem](https://github.com/frans-Willem) for majority of instructions. 1. Install prerequisites for [CC-Tool](https://github.com/dashesy/cc-tool) using a package manager (e.g. [Homebrew](https://brew.sh/) for macOS) -> Ubuntu: dh-autoreconf, libusb-1.0, libboost-all-dev -> Fedora: dh-autoreconf, boost-devel, libusb1-devel -> Archlinux: dh-autoreconf, libusb, boost -> macOS: autoconf, automake, libusb, boost, pkgconfig, libtool +* Ubuntu: dh-autoreconf, libusb-1.0, libboost-all-dev +* Fedora: dh-autoreconf, boost-devel, libusb1-devel +* Archlinux: dh-autoreconf, libusb, boost +* macOS: brew install autoconf automake libusb boost pkgconfig libtool 2. Build cc-tool ```bash From 85375ffbae306301b74155a6c3a5b25b3251505e Mon Sep 17 00:00:00 2001 From: krikk Date: Sat, 26 Jan 2019 21:11:42 +0100 Subject: [PATCH 3/5] How to connect a CC2530 coordinator using a USB to serial adapter (#940) * mini howto connect cc2530 an needing configuration hope this helps * missing link * Update how_to_connect_cc2530_via_usb_to_serial_adapter.md * update * Update cc_sniffer_devices.md --- ...ordinator_using_a_usb_to_serial_adapter.md | 39 ++++++++++++++++++ docs/images/CP2102.png | Bin 0 -> 22712 bytes docs/index.md | 1 + 3 files changed, 40 insertions(+) create mode 100644 docs/how_tos/how_to_connect_a_cc2530_coordinator_using_a_usb_to_serial_adapter.md create mode 100644 docs/images/CP2102.png diff --git a/docs/how_tos/how_to_connect_a_cc2530_coordinator_using_a_usb_to_serial_adapter.md b/docs/how_tos/how_to_connect_a_cc2530_coordinator_using_a_usb_to_serial_adapter.md new file mode 100644 index 000000000..41ff860eb --- /dev/null +++ b/docs/how_tos/how_to_connect_a_cc2530_coordinator_using_a_usb_to_serial_adapter.md @@ -0,0 +1,39 @@ +# How to connect a CC2530 coordinator using a USB to serial adapter + +## Confirmed working +This how-to has been confirmed working with the following CC2530 based devices: + +| Device| Image | +| --- | --- | +| **CC2530** | ![CC2530](../images/cc2530.jpg) | + +and the following USB to serial adapters: + +| Device| Image | +| --- | --- | +| **CP2102** | ![CP2102](../images/CP2102.png) | + +## Flashing the firmware +The required coordinator fimrware can be found here: [CC sniffer devices](../information/cc_sniffer_devices.md). + +## Connecting +Connect to CC2530 to the USB to serial adapter using the following mapping: + +| USB-Serial Adaper | CC2530 | +| :------------: |:---------------:| +| 3V3 | VCC | +| GND | GND | +| TXD | P02 | +| RXD | P03 | + +Now plug in the USB-to-serial adapter in your USB port. + +## Configuration +Add the following to your Zigbee2mqtt `configuration.yaml`: + +```yaml +advanced: + rtscts: false +``` + +and start Zigbee2mqtt, enjoy! \ No newline at end of file diff --git a/docs/images/CP2102.png b/docs/images/CP2102.png new file mode 100644 index 0000000000000000000000000000000000000000..3748634aa64c3eb27d7f7522e9c7cdb365eacb44 GIT binary patch literal 22712 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md index c22e98064..642e8f134 100644 --- a/docs/index.md +++ b/docs/index.md @@ -26,6 +26,7 @@ Welcome to the Zigbee2mqtt documentation! * [How to debug](how_tos/how_to_debug.md) * [How to support new devices on Hass.io](how_tos/how_to_support_new_devices_on_hassio.md) * [How to secure your Zigbee network](how_tos/how_to_secure_network.md) +* [How to connect a CC2530 coordinator using a USB to serial adapter](how_tos/how_to_connect_a_cc2530_coordinator_using_a_usb_to_serial_adapter.md) ### Information * [Supported devices](information/supported_devices.md) From 73f0f8fe43f60cdd74b005dafecb85db4fb2d71c Mon Sep 17 00:00:00 2001 From: Mikkel Kroman Date: Sun, 27 Jan 2019 20:32:52 +0100 Subject: [PATCH 4/5] Fix Docker images having the wrong platform (#952) * travis: Update Docker and add experimental support * travis: Build images with experimental --platform * Update docker.sh --- .travis.yml | 6 ++++++ .travis/docker.sh | 14 +++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index ae9fe3945..f64a9c8d6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,12 @@ services: node_js: - "10" ++before_install: + - "echo '{\"experimental\": true}' | sudo tee /etc/docker/daemon.json" + - sudo apt update -y + - sudo apt install --only-upgrade docker-ce -y + - sudo service docker restart + install: - npm install diff --git a/.travis/docker.sh b/.travis/docker.sh index 15b046a9b..be93486a4 100755 --- a/.travis/docker.sh +++ b/.travis/docker.sh @@ -10,7 +10,7 @@ tag_push() { } build_and_push() { - docker build --build-arg COMMIT=$(git rev-parse --short HEAD) -t $DOCKER_USERNAME/zigbee2mqtt:$1 -f $2 . + docker build --platform=$3 --build-arg COMMIT=$(git rev-parse --short HEAD) -t $DOCKER_USERNAME/zigbee2mqtt:$1 -f $2 . docker push $DOCKER_USERNAME/zigbee2mqtt:$1 } @@ -23,9 +23,9 @@ then login # Push versioned images - build_and_push "$TRAVIS_TAG" docker/Dockerfile.amd64 - build_and_push "$TRAVIS_TAG-arm32v6" docker/Dockerfile.arm32v6 - build_and_push "$TRAVIS_TAG-arm64v8" docker/Dockerfile.arm64v8 + build_and_push "$TRAVIS_TAG" docker/Dockerfile.amd64 amd64 + build_and_push "$TRAVIS_TAG-arm32v6" docker/Dockerfile.arm32v6 arm + build_and_push "$TRAVIS_TAG-arm64v8" docker/Dockerfile.arm64v8 arm64 # Push latest images. tag_push "$TRAVIS_TAG-arm32v6" "arm32v6" @@ -35,9 +35,9 @@ elif [ "$TRAVIS_BRANCH" = "dev" -a "$TRAVIS_PULL_REQUEST" = "false" ] then echo "Updating docker images for dev branch!" login - build_and_push latest-dev docker/Dockerfile.amd64 - build_and_push arm32v6-dev docker/Dockerfile.arm32v6 - build_and_push arm64v8-dev docker/Dockerfile.arm64v8 + build_and_push latest-dev docker/Dockerfile.amd64 amd64 + build_and_push arm32v6-dev docker/Dockerfile.arm32v6 arm + build_and_push arm64v8-dev docker/Dockerfile.arm64v8 arm64 else echo "Not updating docker images, triggered by pull request or not on master/dev branch" fi From b95dcd0f9b218543e1c71a000ed924fe88561b85 Mon Sep 17 00:00:00 2001 From: Robin Meis Date: Mon, 28 Jan 2019 21:19:38 +0100 Subject: [PATCH 5/5] Adding missing T for MQTT (#957) --- docs/information/mqtt_topics_and_message_structure.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/information/mqtt_topics_and_message_structure.md b/docs/information/mqtt_topics_and_message_structure.md index 18153a48b..6106438c0 100644 --- a/docs/information/mqtt_topics_and_message_structure.md +++ b/docs/information/mqtt_topics_and_message_structure.md @@ -1,4 +1,4 @@ -# MQT topics and message structure +# MQTT topics and message structure This page describes which MQTT topics are used by Zigbee2mqtt. Note that the base topic (by default `zigbee2mqtt`) is configurable in the [Zigbee2mqtt `configuration.yaml`](../configuration/configuration.md). @@ -137,4 +137,4 @@ Let the device beep. { "beep": 5 } -``` \ No newline at end of file +```