Setting Z-Wave JS Config to value not listed after interviewing device

Hi. I’m trying to add configuration for a device that is not listed in the list of known devices. Essentially non of the devices that are produced by the manufacturer connecthome are on the list. I’m browsing their documentation and I see that there should be parameter 1 that I need set in order to configure the device.
Unfortunately when I try to call zwave_js.set_config_parameter with parameter 1 I’m getting this error:
zwave_js_server.exceptions.NotFoundError: Configuration parameter with value ID 6-112-0-1 could not be found
I don’t think that those devices will be added to the list soon so my main question - is there any way to bypass the check for parameter existence? The entire section of configuration is missing on the device. I just know that parameter is there and I have documentation that specifies what parameters I need to set it

Welcome.

Did you open a GitHub issue to get it added?

HA documentation says otherwise.

MY DEVICE IS RECOGNIZED AS UNKNOWN MANUFACTURER AND/OR SOME OF ITS FUNCTIONALITIES DO NOT WORK IN Z-WAVE JS

When your device is not yet fully interviewed, this info will not yet be present. So make sure your device is interviewed at least once. Is the state of your device reported as ready and you still see Unknown Manufacturer, read on.

Z-Wave JS keeps a database of all devices it supports, including any special treatments they need. These are called the device configuration files and they are contributed mainly by the community. Is your device not fully supported, consider contributing the device configuration file.

From Z-Wave - Home Assistant

You can only do this with zwavejs2mqtt. It allows setting of config parameters that are not defined by the device config file. But the first step would be submitting an issue as suggested, so it eventually gets added. That helps the entire community. The project is constantly adding new devices.

1 Like

I’m planning to add configuration to repository. But I would like to test it out first. I am using zwavejs2mqtt, is there any documentation on how to do that? I tried to place this into config folder but I don’t see any changes

Here is where I was directed but did not get it working. In my case I was redefining a device though.

https://zwave-js.github.io/zwavejs2mqtt/#/development/intro?id=testing-custom-devices-config

Yeah, tried that too and it also not working for me. Created custom config for a device, added it to the config folder but it’s not detecting the file

Are you running the latest version of zwavejs2mqtt? I think that is only expected to work for recent versions.

I’m running master now with the same result

It works fine for me.

Make sure you’re putting the file in the store/config directory, not just the store directory. The config directory doesn’t exist by default, so you need to create it first. I think you need to restart as well.

1 Like

Interesting. I’m running it in docker. I tried to create a folder and put my files there via their provided UI and then via OS explorer. Then I restarted the docker container and the device is interviewed as an Unkown manufacturer and unknown device. I’m running the command provided on the official site

docker run --rm -it -p 8091:8091 -p 3000:3000 --device=/dev/ttyACM0 --mount source=zwavejs2mqtt,target=/usr/src/app/store zwavejs/zwavejs2mqtt:latest

essentially in my system the folder _data is created and is mapped to store folder on the container. Am I missing some docker dance?

The --mount option is missing the parameter for type of mount. Most people use the less verbose -v option.

It appears you are attempting to mount the container to zwavejs2mqtt in the current folder where you run the script but say you are mapping to folder _data You are running the container interactively instead of in a daemon process. As an example, here is mu current command that creates & starts the container. Docker then restarts as necessary, even after a reboot. My container is mounted tp /opt/zwavejs2mqtt.

docker run -d --restart=unless-stopped --name zwavejs2mqtt --privileged --network=host -v /opt/zwavejs2mqtt:/usr/src/app/store zwavejs/zwavejs2mqtt:latest

If the named volume is mounted into _data on the host, then _data/config would be the correct place to put it. You would see all of the zwave-js files (cache, settings) stored in _data. So if your file is _data/config/my_device.json than that seems OK to me.

When you check the logs it says it’s loading the embedded file instead of the user one?

Did you run the linters to make sure there are no errors with the file?

1 Like

This is really frustrating. I’ve written config for a new device but even running a simple commands like npm run lint:config is giving me various errors. I have no knowledge about yet another JS project management tool called lerna that is used in the repo so I’m currently stuck with a file that is not read from the correct folder and with lint command that tells me that zwave-js is not installed after I did npm i


Here’s my folder structure BTW. And the file itself

{
	"manufacturer": "ConnectHome",
	"manufacturerId": "0x0179",
	"label": "CH-103",
	"description": "CH-103 Roller Shuter",
	"devices": [
		{
			"productType": "0x0041",
			"productId": "0x0014"
		}
	],
	"firmwareVersion": {
		"min": "0.0",
		"max": "255.255"
	},
	"associations": {
		"1": {
			"label": "Switch click",
			"maxNodes": 16
		},
        "2": {
			"label": "Switch hold",
			"maxNodes": 10
		},
        "3": {
			"label": "Lifeline",
			"maxNodes": 1,
			"isLifeline": true
		}
	},
	"paramInformation": {
		"1": {
			"label": "Calibrate mode",
			"valueSize": 1,
			"minValue": 0,
			"maxValue": 1,
			"defaultValue": 0,
			"allowManualEntry": true,
			"options": [
				{
					"label": "Normal",
					"value": 0
				},
				{
					"label": "Calibrate",
					"value": 1
				}
			]
		},
		"2": {
			"label": "Work mode",
			"valueSize": 1,
			"minValue": 0,
			"maxValue": 2,
			"defaultValue": 0,
            "options": [
				{
					"label": "Switch with position setting",
					"value": 0
				},
				{
					"label": "Switch without position setting",
					"value": 1
				},
                {
					"label": "Switch to control blinds",
					"value": 2
				}
			]
		},
		"3": {
			"label": "Time to shift 180 degrees",
			"valueSize": 2,
			"minValue": 1,
			"maxValue": 1000,
            "unit": "ms",
			"defaultValue": 0
		},
		"4": {
			"label": "Time to fully open blinds",
			"valueSize": 2,
			"minValue": 1,
			"maxValue": 1000,
            "unit": "ms",
			"defaultValue": 0
		},
		"5": {
			"label": "Time to fully close blinds",
			"valueSize": 2,
			"minValue": 1,
			"maxValue": 1000,
            "unit": "ms",
			"defaultValue": 0
		},
		"6": {
			"label": "Delay to send open command",
			"valueSize": 2,
			"minValue": 1,
			"maxValue": 1000,
            "unit": "ms",
			"defaultValue": 0
		},
		"7": {
			"label": "Delay to send close command",
			"valueSize": 2,
			"minValue": 1,
			"maxValue": 1000,
            "unit": "ms",
			"defaultValue": 0
		},
		"8": {
			"label": "Time turbo mode",
			"unit": "sec",
			"valueSize": 2,
			"minValue": 100,
			"maxValue": 1200,
			"defaultValue": 120
		},
		"15": {
			"label": "Button work mode",
			"valueSize": 1,
			"minValue": 0,
			"maxValue": 2,
			"defaultValue": 1,
            "options": [
                {
                    "label": "Reverse direction switch",
                    "description": "One button upon press will move blinds in opposite direction and stop blinds if pressed in the middle of open/close",
                    "value": 0
                },
                {
                    "label": "Two buttons with hold functionality",
                    "description": "Two buttons. When the button is pressed and held the blind will continue to open in the direction of the button. When clicked on button once the blind will perform full motion in the direction of the button.",
                    "value": 1
                },
                {
                    "label": "Two buttons",
                    "description": "Two buttons. When clicked on button once the blind will perform full motion in the direction of the button.",
                    "value": 2
                }
            ]
		}
	}
}

The only error I see is that allowManualEntry must be set to false when you provide options that cover the entire range of allowed values. No idea if that is preventing it from loading, but you could try fixing that.

I would also try enabling z-wave debug logging and make sure nothing is being logged about the file. You should see something about the file being mentioned. Have you tried a re-interview also? Not sure if that’s required or not.

Thank you! That actually solved the problem. Seams I will have to invest time to be able to use yarn commands from the repository to validate my configs