node-zwave-js/packages/nvmedit/README.md

70 lines
2.9 KiB
Markdown

# Z-Wave JS: NVM editor
CLI utility to convert binary NVM backups from Z-Wave controllers into JSON and back. Can be used to edit a Z-Wave controller's memory or convert it between different firmware revisions.\
**WARNING:** This is highly experimental. Use at your own risk!
(Probably) supports all NVM files in the NVM3 format, which is used starting with Z-Wave SDK 6.61+.
## Usage
You can either execute the current version directly from `npm` using
```
npx @zwave-js/nvmedit ...command...
```
or you can execute the version in the checked out repository by executing
```
yarn ts packages/nvmedit/src/cli.ts ...command...
```
The following documentation will use the first approach.
## Convert one NVM to be compatible with another one
**This is probably the command you're looking for.** It converts the format of an NVM backup between different Z-Wave modules.
```
npx @zwave-js/nvmedit convert --source <source> --target <target> --out <output>
```
`<source>` specifies the source NVM filename. This file will be converted to match the target NVM.\
`<target>` specifies the target NVM filename. This file will used to determine how to convert the source NVM.\
The resulting NVM will be written to `<output>`.
## Convert binary NVM file to JSON
```
npx @zwave-js/nvmedit nvm2json --in /path/to/nvm.bin --out /path/to/nvm.json [--verbose]
```
The `--verbose` flag will print additional output like memory page contents or parsed NVM objects to the console.
The `.bin` file must either contain a 700-series NVM (SDK version 7.x) or a 500-series NVM (SDK version 6.61+). The `.json` output format will depend on the SDK version.
## Convert JSON NVM file to binary
```
npx @zwave-js/nvmedit json2nvm --in /path/to/nvm.json --out /path/to/nvm.bin --protocolVersion <ver.si.on>
```
`<ver.si.on>` determines the output format of the NVM file and must be replaced with the target SDK version which must match your stick's firmware version
Only firmware version `7.x` is supported. Converting a 500-series `.json` to a 700-series `.json` must be done beforehand in a separate step.
**ATTENTION:** The input `.json` file must contain a `"meta"` section which contains some information about the target stick. If it is missing, you can use the `nvm2json` command to convert a backup of the target stick and copy the section from there.
## Convert 500-series JSON to 700-series JSON
```
npx @zwave-js/nvmedit 500to700 --in /path/to/nvm500.json --out /path/to/nvm700.json [--truncate]
```
Some 500-series NVM backups contain more application data than the 700-series NVM has reserved for this field. The conversion routine will try to remove 0-bytes at the start and end, but if this is not enough, it will fail. Set the `--truncate` option to allow truncating potentially valid application data.
## Convert 700-series JSON to 500-series JSON
```
npx @zwave-js/nvmedit 700to500 --in /path/to/nvm700.json --out /path/to/nvm500.json
```