Package: zigpy-cli
zigpy-cliA unified command line interface for zigpy radios. The goal of this project is to allow
low-level network management from an intuitive command line interface and to group useful
Zigbee tools into a single binary.Installation$pipinstallzigpy-cliUsage$zigpy--helpUsage: zigpy [OPTIONS] COMMAND [ARGS]...Options:-v, --verbose--help         Show this message and exit.Commands:otaradiopcapMake sure ZHA, Zigbee2MQTT, deCONZ, etc. are disabled.Any software controlling your
radio requires exclusive access to the hardware: if both are running at once, neither will work.Network commandsNetwork commands require the radio type to be specified. Seezigpy radio --helpfor the list of supported types.
If your radio requires a different baudrate than the radio library default (mainly EZSP), you must specify it as a command line option. For example,zigpy radio --baudrate 115200 ezsp backup -.Network backup$zigpyradiodeconz/dev/ttyUSB0backupdeconz-backup.jsonNetwork restore$zigpyradioznp/dev/ttyUSB1restoredeconz-backup.jsonReading network information$zigpyradioznp/dev/ttyUSB0infoPAN ID:                0x718BExtended PAN ID:       33:29:33:5e:30:42:64:48Channel:               15Channel mask:          [15]NWK update ID:         0Device IEEE:           00:12:4b:00:1c:ce:33:85Device NWK:            0x0000Network key:           cc:44:a6:4e:23:82:30:9e:35:0f:c6:6a:89:c8:dd:7dNetwork key sequence:  0Forming a network$zigpy-vvvvradioznp/dev/cu.usb*form2021-07-12 13:24:54.764 host asyncio DEBUG Using selector: KqueueSelector2021-07-12 13:24:54.933 host zigpy_znp.uart DEBUG Connecting to /dev/ttyUSB0 at 115200 baud2021-07-12 13:24:54.940 host zigpy_znp.uart DEBUG Opened /dev/ttyUSB0 serial port2021-07-12 13:24:54.941 host zigpy_znp.uart DEBUG Toggling RTS/CTS to skip CC2652R bootloader2021-07-12 13:24:55.404 host zigpy_znp.uart DEBUG Connected to /dev/ttyUSB0 at 115200 baud2021-07-12 13:24:55.404 host zigpy_znp.api DEBUG Waiting 1s before sending anything2021-07-12 13:24:56.409 host zigpy_znp.api DEBUG Sending bootloader skip byte...PAN ID:                0xAA8AExtended PAN ID:       35:8f:dc:b6:7a:19:33:c3Channel:               15Channel mask:          [15]NWK update ID:         0Device IEEE:           00:12:4b:00:1c:ce:33:85Device NWK:            0x0000Network key:           8c:2d:2d:a6:ca:95:30:04:11:6b:d5:dd:32:9e:b6:a8Network key sequence:  02021-07-12 13:25:15.316 host zigpy_znp.uart DEBUG Closing serial portPerforming an energy scan$zigpyradioznp/dev/cu.usbserial-1420energy-scanChannel energy (mean of 1 / 5):------------------------------------------------+ Lower energy is better+ Active Zigbee networks on a channel may still cause congestion+ TX on 26 in North America may be with lower power due to regulations+ Zigbee channels 15, 20, 25 fall between WiFi channels 1, 6, 11+ Some Zigbee devices only join networks on channels 15, 20, and 25------------------------------------------------- 11    80.00%  ################################################################################- 12    83.53%  ###################################################################################- 13    83.14%  ###################################################################################- 14    78.82%  ##############################################################################- 15    76.47%  ############################################################################- 16    72.16%  ########################################################################- 17    76.47%  ############################################################################- 18    75.69%  ###########################################################################- 19    72.16%  ########################################################################- 20    65.49%  #################################################################- 21    66.67%  ##################################################################- 22    70.59%  ######################################################################- 23    80.00%  ################################################################################- 24    64.31%  ################################################################- 25    77.25%  #############################################################################- 26*   81.96%  #################################################################################Reset a radio$zigpyradio--baudrate115200ezsp/dev/serial/by-id/some-radioresetPermit joinsMainly useful for testing requests.$zigpyradiodeconz/dev/ttyUSB0permit-t60Changing the network channelSome devices (like older Aqara sensors) may not migrate.$zigpyradioznp/dev/ttyUSB0change-channel--channel25OTADisplay basic information about OTA files$zigpyotainfo10047227-1.2-TRADFRI-cv-cct-unified-2.3.050.ota.ota.signedHeader: OTAImageHeader(upgrade_file_id=200208670, header_version=256, header_length=56, field_control=<FieldControl.0: 0>, manufacturer_id=4476, image_type=16902, file_version=587531825, stack_version=2, header_string='GBL GBL_tradfri_cv_cct_unified', image_size=208766, *device_specific_file=False, *hardware_versions_present=False, *key=ImageKey(manufacturer_id=4476, image_type=16902), *security_credential_version_present=False)Number of subelements: 1Validation result: ValidationResult.VALIDDump embedded firmware for further analysis$zigpyotadump-firmware10047227-1.2-TRADFRI-cv-cct-unified-2.3.050.ota.ota.signed-\|commandereblprint/dev/stdin\|grep'Ember Version'Ember Version:    6.3.1.1Generate OTA index filesCreate a JSON index for a given directory of firmwares:$zigpyotagenerate-index--ota-url-root="https://example.org/fw"path/to/firmwares/**/*.ota2023-02-14 12:02:03.532 ubuntu zigpy_cli.ota INFO Parsing path/to/firmwares/fw/test.ota2023-02-14 12:02:03.533 ubuntu zigpy_cli.ota INFO Writing path/to/firmwares/fw/test.ota[{"binary_url": "https://example.org/fw/test.ota","file_version": 1762356,"image_type": 1234,"manufacturer_id": 5678,"changelog": "","checksum": "sha3-256:1ddaa649eb920dea9e5f002fe0d1443cc903ac0c1b26e7ad2c97b928edec2786"},...Reconstruct an OTA image from a series of packet capturesRequires thetsharkbinary to be available.$zigpyotareconstruct-from-pcaps--add-network-keyaa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99--output-root./extracted/*.pcapConstructing image type=0x298b, version=0x00000005, manuf_code=0x115f: 157424 bytes2023-02-22 03:39:51.406 ubuntu zigpy_cli.ota ERROR Missing 48 bytes starting at offset 0x0000ADA0: filling with 0xAB2023-02-22 03:39:51.406 ubuntu zigpy_cli.ota ERROR Missing 48 bytes starting at offset 0x000106B0: filling with 0xABConstructing image type=0x298b, version=0x00000009, manuf_code=0x115f: 163136 bytesPCAPRe-calculate the FCS on a packet captureFixes a bug in current EmberZNet SDK releases:$# Fix an existing capture$zigpypcapfix-fcsinput.pcapfixed.pcap$# Fix a capture from stdin and send it to stdout$bellows-d/dev/cu.GoControl_zigbeedump-w/dev/stdout|zigpypcapfix-fcs--|wireshark-k-S-i-DatabaseAttempt to recover a corruptedzigbee.dbdatabase:$zigpy-vdbrecoverbroken.dbfixed.db2022-05-07 13:01:22.907 host zigpy_cli.database ERROR Failed to insert INSERT INTO "attributes_cache_v7"("_rowid_", "ieee", "endpoint_id", "cluster", "attrid", "value") VALUES( 14507477, '00:15:8d:00:02:5e:f9:ff', 1, 1027, 0, 1001.78 );: IntegrityError('UNIQUE constraint failed: attributes_cache_v7.ieee, attributes_cache_v7.endpoint_id, attributes_cache_v7.cluster, attributes_cache_v7.attrid')2022-05-07 13:01:22.916 host zigpy_cli.database INFO DoneThe final database will have no invalid constraints but data will likely be lost.