Fibaro Smart Implant FGBS-222

Agreed - it’s not a great word. Sometimes a “hack” can be fine - othertimes not. The bottom line is beautiful code, or horrible hacky code - it doesn’t really matter. All PRs need to be reviewed, and need to be well enough written and meet the standards - if they do, they can be merged :wink:

So this is the PR he raised

He did post he was adding unit tests etc so I get the feeling it will be OK. I took the code and it works for me but you may want a few tweaks as you may spot a tidier way as you know the binding better than we do.

I did not realise that it had not gone forward until all the noise started on this thread.

Now having opened that it looks like you committed so has it not merged properly due to another commit?

No it is there so what is going on?

Chris I think I can risk taking the latest snapshot onto my instance. I don’t want to take the code as i am messing with some lovely HACKS on my dev.

I may be able to see what is going on.

That’s not a PR - that’s an issue :wink:

The PR is here -:

What do you mean - what “has not gone forward”

Yes I got there in the end. So that should be in the snapshot so it should all be working.

stranger and stranger

I can confirm it works (worked?)
I haven’t upgraded my openhab installation for a while, so can’t really say what’s the current status and if nothing has been broken in the meantime. It worked at the time I fixed the issue you mentioned.

As I’ve written earlier:
“I have “Protection Local Output” set to “No operation possible” and “Input 1 - operation mode” set to “Normally open alarm input”. With this configuration I’m able to use “Input 1 Alarm” channel to check whether the IN1 circuit is closed or not.”

So you are saying that this configuration no longer works?

EDIT: I took a look at the current master branch and it looks my code is still there, nothing really changed in this area since my fix.

Never worked for me, also with the latest version from the master branch, because setting the protection mode still fails:

22:45:05.419 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 33: Command received zwave:device:trm01:node33:protection_local5 --> 2 [DecimalType] 
22:45:05.423 [DEBUG] [nding.zwave.handler.ZWaveThingHandler] - NODE 33: No messages returned from converter

Has someone made more edits to the device?

Several users made several edits.

I’ve made a change to the code to improve logging and also a fix to ensure that the type check is not case sensitive (I’ve not checked what is in the database, so this may or may not make any difference).

At least the logging might help work out what’s happening as the log from @oeiber doesn’t provide any real information on what’s wrong.

Any ideas what?

These are the diff parts (I am not sure if I catched them all):

"0502:2000"
---
                    "label": "Analog input without internal pull-up"
                },
                {
                    "value": 5,
                    "label": "Analog input with internal pull-up"
                }
            ]
        },
        {
            "id": 21,
            "label": "Input 2 - operating mode",
            "description": "mode of 2nd input",
            "overview": "<p>This parameter allows to choose mode of 2nd input (IN2). Change it depending on connected device.<\/p>",
            "size": 1,
            "bitmask": "00000000",
            "default": 2,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 5,
            "options": [
                {
                    "value": 0,
                    "label": "Normally closed alarm input"
                },
                {
                    "value": 1,
                    "label": "Normally open alarm input"
                },
                {
                    "value": 2,
                    "label": "Monostable button"
                },
                {
                    "value": 3,
                    "label": "Bistable button"
                },
                {
                    "value": 4,
                    "label": "Analog input without internal pull-up"
                },
                {
                    "value": 5,
                    "label": "Analog input with internal pull-up"
                }
            ]
        },
        {
            "id": 24,
            "label": "Inputs orientation",
            "description": " reversing operation of IN1 and IN2 inputs",
            "overview": "<p>This parameter allows reversing operation of IN1 and IN2 inputs without changing the wiring. Use in case of incorrect wiring.<\/p>",
            "size": 1,
            "bitmask": "00000000",
            "default": 0,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 1,
            "options": [
                {
                    "value": 0,
                    "label": "default"
                },
                {
                    "value": 1,
                    "label": "reversed"
                }
            ]
        },
        {
            "id": 25,
            "label": "Outputs orientation",
            "description": "reversing operation of OUT1 and OUT2 outputs",
            "overview": "<p>This parameter allows reversing operation of OUT1 and OUT2 inputs without changing the wiring. Use in case of incorrect wiring.<\/p>",
            "size": 1,
            "bitmask": "00000000",
            "default": 0,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 1,
            "options": [
                {
                    "value": 0,
                    "label": "default"
                },
                {
                    "value": 1,
                    "label": "reversed"
                }
            ]
        },
        {
            "id": 40,
            "label": "Input 1 - sent scenes",
            "description": "sending scene ID",
            "overview": "<p>This parameter defines which actions result in sending scene ID and attribute assigned to them. Parameter is relevant only if parameter 20 is set to 2 or 3.<\/p> <p>This is a BIT flag allowing all options to be set. Sum the values of the options required to activate those actions that should be enabled.<\/p> <p>For example:<\/p> <p>to enable single and double click set the value to 3<\/p> <p>to enable single and triple set the value to 5<\/p> <p>All combinations are valid.<\/p>",
            "size": 1,
            "bitmask": "0000000F",
            "default": 0,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 127,
            "options": [
                {
                    "value": 1,
                    "label": "Key pressed 1 time"
                },
                {
                    "value": 2,
                    "label": "Key pressed 2 times"
                },
                {
                    "value": 4,
                    "label": "Key pressed 3 times"
                },
                {
                    "value": 8,
                    "label": "Key hold down and key released"
                }
            ]
        },
        {
            "id": 41,
            "label": "Input 2 - sent scenes",
            "description": "sending scene ID",
            "overview": "<p>This parameter defines which actions result in sending scene ID and attribute assigned to them. Parameter is relevant only if parameter 20 is set to 2 or 3.<\/p> <p>This is a BIT flag allowing all options to be set. Sum the values of the options required to activate those actions that should be enabled.<\/p> <p>For example:<\/p> <p>to enable single and double click set the value to 3<\/p> <p>to enable single and triple set the value to 5<\/p> <p>All combinations are valid.<\/p>",
            "size": 1,
            "bitmask": "0000000F",
            "default": 0,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 127,
            "options": [
                {
                    "value": 1,
                    "label": "Key pressed 1 time"
                },
                {
                    "value": 2,
                    "label": "Key pressed 2 times"
                },
                {
                    "value": 4,
                    "label": "Key pressed 3 times"
                },
                {
                    "value": 8,
                    "label": "Key hold down and key released"
                }
            ]
        },
        {
            "id": 47,
            "label": "Input 1 - 2nd group, activated",
            "description": "value sent to 2nd association group when activated",
            "overview": "<p>This parameter defines value sent to devices in 2nd association group when IN1 input is triggered (using Basic Command Class).<\/p>",
            "size": 2,
            "bitmask": "00000000",
            "default": 255,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 255,
            "options": []
        },
        {
            "id": 49,
            "label": "Input 1 - 2nd group, deactivated",
            "description": "value sent to 2nd association group when deactivated",
            "overview": "<p>This parameter defines value sent to devices in 2nd association group when IN1 input is deactivated (using Basic Command Class).<\/p>",
            "size": 2,
            "bitmask": "00000000",
            "default": 0,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 255,
            "options": []
        },
        {
            "id": 52,
            "label": "Input 2 - 3rd group, activated",
            "description": "value sent to 3rd association group when activated",
            "overview": "<p>This parameter defines value sent to devices in 3rd association group when IN2 input is triggered (using Basic Command Class).<\/p>",
            "size": 2,
            "bitmask": "00000000",
            "default": 255,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 255,
            "options": []
        },
        {
            "id": 54,
            "label": "Input 2 - 3rd group, deactivated",
            "description": "value sent to 3rd association group when deactivated",
            "overview": "<p>This parameter defines value sent to devices in 2nd association group when IN2 input is deactivated (using Basic Command Class).<\/p>",
            "size": 2,
            "bitmask": "00000000",
            "default": 0,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 255,
            "options": []
        },
        {
            "id": 63,
            "label": "Analog inputs - minimal change to report",
            "description": "minimal change",
            "overview": "<p>This parameter defines minimal change (from the last reported) of analog input value that results in sending new report. Parameter is relevant only for analog inputs (parameter 20 or 21 set to 4 or 5).<\/p> <p>Values: 0 - reporting on change disabled, 1-100 (0.1-10V, 0.1V step)<\/p> <p>Default: 5 (0.5V)<\/p>",
            "size": 1,
            "bitmask": "00000000",
            "default": 5,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 100,
            "options": []
        },
        {
            "id": 64,
            "label": "Analog inputs - periodical reports",
            "description": "reporting period of analog inputs value",
            "overview": "<p>This parameter defines reporting period of analog inputs value. Periodical reports are independent from changes in value (parameter 63). Parameter is relevant only for analog inputs (parameter 20 or 21 set to 4 or 5).<\/p> <p>Values: 60-32400 (60s-9h)<\/p> <p>Default: 0 (periodical reports disabled)<\/p>",
            "size": 2,
            "bitmask": "00000000",
            "default": 0,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 32400,
            "options": []
        },
        {
            "id": 65,
            "label": "Temperature sensor threshold",
            "description": "Internal temperature sensor - minimal change to report",
            "overview": "<p>This parameter defines minimal change (from the last reported) of internal temperature sensor value that results in sending new report.<\/p> <p>Values: 0 - reporting on change disabled, 1-255 (0.1-25.5\u00b0C)<\/p> <p>Default: 5 (0.5\u00b0C)<\/p>",
            "size": 2,
            "bitmask": "00000000",
            "default": 5,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 255,
            "options": []
        },
        {
            "id": 66,
            "label": "Temperatur sensor period",
            "description": "Internal temperature sensor - periodical reports",
            "overview": "<p>This parameter defines reporting period of internal temperature sensor value. Periodical reports are independent from changes in value (parameter 65).<\/p> <p>Values: 0 - 60-32400 (60s-9h)<\/p> <p>Default: 0 (periodical reports disabled)<\/p>",
            "size": 2,
            "bitmask": "00000000",
            "default": 0,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 32400,
            "options": []
        },
        {
            "id": 67,
            "label": "External sensors threshold",
            "description": "External sensors - minimal change to report",
            "overview": "<p>This parameter defines minimal change (from the last reported) of external sensors values (DS18B20 or DHT22) that results in sending new report. Parameter is relevant only for connected DS18B20 or DHT22 sensors.<\/p> <p>Values: 0 - reporting on change disabled, 1-255 (0.1-25.5 units, 0.1)<\/p> <p>Default: 5 (0.5 units)<\/p>",
            "size": 2,
            "bitmask": "00000000",
            "default": 5,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 255,
            "options": []
        },
        {
            "id": 68,
            "label": "External sensors - periodical reports",
            "description": "reporting period of analog inputs value",
            "overview": "<p>This parameter defines reporting period of analog inputs value. Periodical reports are independent from changes in value (parameter 67). Parameter is relevant only for connected DS18B20 or DHT22 sensors.<\/p> <p>Values: 60-32400 (60s-9h)<\/p> <p>Default: 0 (periodical reports disabled)<\/p>",
            "size": 2,
            "bitmask": "00000000",
            "default": 0,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 32400,
            "options": []
        },
        {
            "id": 150,
            "label": "Input 1 - sensitivity",
            "description": "inertia time of IN1 input in alarm modes",
            "overview": "<p>This parameter defines the inertia time of IN1 input in alarm modes. Adjust this parameter to prevent bouncing or signal disruptions. Parameter is relevant only if parameter 20 is set to 0 or 1 (alarm mode).<\/p> <p>Values: 1-100 (10ms-1000ms, 10ms step)<\/p> <p>Default: 10 (100ms)<\/p>",
            "size": 1,
            "bitmask": "00000000",
            "default": 10,
            "read_only": false,
            "write_only": false,
            "value_min": 1,
            "value_max": 100,
            "options": []
        },
        {
            "id": 151,
            "label": "Input 2 - sensitivity",
            "description": "inertia time of IN2 input in alarm modes",
            "overview": "<p>This parameter defines the inertia time of IN2 input in alarm modes. Adjust this parameter to prevent bouncing or signal disruptions. Parameter is relevant only if parameter 21 is set to 0 or 1 (alarm mode).<\/p> <p>Values: 1-100 (10ms-1000ms, 10ms step)<\/p> <p>Default: 10 (100ms)<\/p>",
            "size": 1,
            "bitmask": "00000000",
            "default": 10,
            "read_only": false,
            "write_only": false,
            "value_min": 1,
            "value_max": 100,
            "options": []
        },
        {
            "id": 152,
            "label": "Input 1 - delay of alarm cancellation",
            "description": "additional delay of cancelling the alarm on IN1 input",
            "overview": "<p>This parameter defines additional delay of cancelling the alarm on IN1 input. Parameter is relevant only if parameter 20 is set to 0 or 1 (alarm mode).<\/p> <p>Values: 1-3600s<\/p> <p>Default: 0 (no delay)<\/p>",
            "size": 2,
            "bitmask": "00000000",
            "default": 0,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 3600,
            "options": []
        },
        {
            "id": 153,
            "label": "Input 2 - delay of alarm cancellation",
            "description": "additional delay of cancelling the alarm on IN2 input",
            "overview": "<p>This parameter defines additional delay of cancelling the alarm on IN2 input. Parameter is relevant only if parameter 21 is set to 0 or 1 (alarm mode).<\/p> <p>Values: 1-3600s<\/p> <p>Default: 0 (no delay)<\/p>",
            "size": 2,
            "bitmask": "00000000",
            "default": 0,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 3600,
            "options": []
        },
        {
            "id": 154,
            "label": "Output 1 - logic of operation",
            "description": "logic of OUT1 output operation",
            "overview": "<p>This parameter defines logic of OUT1 output operation.<\/p>",
            "size": 1,
            "bitmask": "00000000",
            "default": 0,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 1,
            "options": [
                {
                    "value": 0,
                    "label": "normally open"
                },
                {
                    "value": 1,
                    "label": "normally closed"
                }
            ]
        },
        {
            "id": 155,
            "label": "Output 2 - logic of operation",
            "description": "OUT2 output operation",
            "overview": "<p>This parameter defines logic of OUT2 output operation.<\/p>",
            "size": 1,
            "bitmask": "00000000",
            "default": 0,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 1,
            "options": [
                {
                    "value": 0,
                    "label": "normally open"
                },
                {
                    "value": 1,
                    "label": "normally closed"
                }
            ]
        },
        {
            "id": 156,
            "label": "Output 1 - auto off",
            "description": "OUT1 automatically deactivated",
            "overview": "<p>This parameter defines time after which OUT1 will be automatically deactivated.<\/p> <p>Values: 1-27000 (0.1s-45min, 0.1s step)<\/p> <p>Default: 0 (auto off disabled)<\/p>",
            "size": 2,
            "bitmask": "00000000",
            "default": 0,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 27000,
            "options": []
        },
        {
            "id": 157,
            "label": "Output 2 - auto off",
            "description": "OUT2 automatically deactivated",
            "overview": "<p>This parameter defines time after which OUT2 will be automatically deactivated.<\/p> <p>Values: 1-27000 (0.1s-45min, 0.1s step)<\/p> <p>Default: 0 (auto off disabled)<\/p>",
            "size": 2,
            "bitmask": "00000000",
            "default": 0,
            "read_only": false,
            "write_only": false,
            "value_min": 0,
            "value_max": 27000,
            "options": []
        }
    ],
    "associations": [
        {
            "id": 1,
            "label": "Lifeline",
            "max_nodes": 1,
            "controller": true,
            "description": "reports the device status and allows for assigning single device only (main controller by default).",
            "overview": ""
        },
        {
            "id": 2,
            "label": "On\/Off (IN1)",
            "max_nodes": 5,
            "controller": false,
            "description": "is assigned to IN1 input terminal (uses Basic command class).",
            "overview": ""
        },
        {
            "id": 3,
            "label": "On\/Off (IN2)",
            "max_nodes": 5,
            "controller": false,
            "description": "is assigned to IN2 input terminal (uses Basic command class).",
            "overview": ""
        }
    ]
}
---
"type=RELATIVE_HUMIDITY"
---

If you need further information please search the db history:
https://www.cd-jackson.com/index.php/zwave/zwave-device-database/database-history

From a quick look, the database looks like it is defined correctly for endpoint 5 that @oeiber provided the log for.

Thanks Chris, So I guess I need to take the nightly to get that extra help. What fun.

A nice backup in progress.

I set it then unset it. Weather is a bit wet here so not making a dash to test if the sensor triggers without opening my garage door.

I am not sure i understand the log. I did not set RF?

2019-10-12 00:55:29.031 [DEBUG] [nal.protocol.ZWaveTransactionManager] - NODE 66: Application Command Request (ALIVE:DONE)
    2019-10-12 00:55:29.032 [DEBUG] [ng.zwave.internal.protocol.ZWaveNode] - NODE 66: resetResendCount initComplete=true isDead=false
    2019-10-12 00:55:29.032 [DEBUG] [ng.zwave.internal.protocol.ZWaveNode] - NODE 66: Decapsulating COMMAND_CLASS_MULTI_CHANNEL
    2019-10-12 00:55:29.033 [DEBUG] [ng.zwave.internal.protocol.ZWaveNode] - NODE 66: Incoming command class COMMAND_CLASS_PROTECTION, endpoint 5
    2019-10-12 00:55:29.033 [DEBUG] [ng.zwave.internal.protocol.ZWaveNode] - NODE 66: SECURITY NOT required on COMMAND_CLASS_PROTECTION
    2019-10-12 00:55:29.033 [DEBUG] [tocol.commandclass.ZWaveCommandClass] - NODE 66: Received COMMAND_CLASS_PROTECTION V2 PROTECTION_REPORT
    2019-10-12 00:55:29.034 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 66: Got an event from Z-Wave network: ZWaveCommandClassValueEvent
    2019-10-12 00:55:29.034 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 66: Got a value event from Z-Wave network, endpoint=5, command class=COMMAND_CLASS_PROTECTION, value=PROTECTED
    2019-10-12 00:55:29.035 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 66: Updating channel state zwave:device:fac755a5:node66:protection_local5 to 2 [DecimalType]
    2019-10-12 00:55:29.035 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 66: Updating channel state zwave:device:fac755a5:node66:protection_rf5 to 2 [DecimalType]
    2019-10-12 00:55:29.036 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 66: Got an event from Z-Wave network: ZWaveCommandClassValueEvent
    2019-10-12 00:55:29.037 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 66: Got a value event from Z-Wave network, endpoint=5, command class=COMMAND_CLASS_PROTECTION, value=UNPROTECTED
    2019-10-12 00:55:29.037 [DEBUG] [andclass.ZWaveProtectionCommandClass] - NODE 66: Received protection report local:PROTECTED rf:UNPROTECTED
    2019-10-12 00:55:29.037 [DEBUG] [nal.protocol.ZWaveTransactionManager] - NODE 66: Commands processed 1.
    2019-10-12 00:55:29.038 [DEBUG] [nal.protocol.ZWaveTransactionManager] - NODE 66: Checking command org.openhab.binding.zwave.internal.protocol.ZWaveCommandClassPayload@2c611108.
    2019-10-12 00:55:29.038 [DEBUG] [nal.protocol.ZWaveTransactionManager] - NODE 66: Command verified org.openhab.binding.zwave.internal.protocol.ZWaveCommandClassPayload@2c611108.
    2019-10-12 00:55:29.039 [DEBUG] [nal.protocol.ZWaveTransactionManager] - NODE 66: notifyTransactionResponse TID:568 DONE
    2019-10-12 00:55:29.039 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 66: Got an event from Z-Wave network: ZWaveTransactionCompletedEvent

THe RF and Local are bound so they can not be independently set. As the local version of the template I had in production did not have RF in the template I had not noticed this issue.

Z-Wave log viewer.

https://www.cd-jackson.com/index.php/openhab/zwave-log-viewer

Firstly the command is definitely sent and set.

and as I have poll after the report confirms all set

but both Paper UI and HABPanel also changes the RF when local is edited. No RF message is sent. This ties in with the logs so somewhere in the code there is an issue but I don’t think in the part Robert released.

Upgrading left me a few issues I need to fix before I can dig further.

The local and rf on this panel both change even though I only change local.

from this
image
change local to no operation
I get this

this ties in with this

>  2019-10-12 00:55:29.034 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 66: Got a value event from Z-Wave network, endpoint=5, command class=COMMAND_CLASS_PROTECTION, value=PROTECTED
>     2019-10-12 00:55:29.035 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 66: Updating channel state zwave:device:fac755a5:node66:protection_local5 to 2 [DecimalType]
>     2019-10-12 00:55:29.035 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 66: Updating channel state zwave:device:fac755a5:node66:protection_rf5 to 2 [DecimalType]
>     2019-10-12 00:55:29.036 [DEBUG] [ding.zwave.handler.ZWaveThingHandler

but the report comes back

> 2019-10-12 00:55:29.037 [DEBUG] [andclass.ZWaveProtectionCommandClass] - NODE 66: Received protection report local:PROTECTED rf:UNPROTECTED

which ties in with the zniffer and no rf change was sent

I think what I need to check is if equalsIgnoreCase is true for both local and RF when it should only be for local in this case

        if (Type.PROTECTION_LOCAL.name().equalsIgnoreCase(type)) {
            int value = ((DecimalType) command).intValue();
            if (value >= 0 && value < LocalProtectionType.values().length) {
                serialMessage = node.encapsulate(
                        commandClass.setValueMessage(LocalProtectionType.values()[value], null),
                        channel.getEndpoint());
            }

        }
        if (Type.PROTECTION_RF.name().equalsIgnoreCase(type)) {
            int value = ((DecimalType) command).intValue();
            if (value >= 0 && value < RfProtectionType.values().length) {
                serialMessage = node.encapsulate(
                        commandClass.setValueMessage(null, RfProtectionType.values()[value]),
                        channel.getEndpoint());
            }
        }

or indeed any place where the value that was for local could be put in the rf. From the log it is on the outbound but there could be issues with the log.

My dev instance is a very hacked version that I am experimenting in. It took me an age to get the code building last time I took the mainline. I will give it a go but can’t promise to track it down.

As to local protection it does get set so there is no issue. It is just that openhab also also sets RF to the same numeric value. An issue is also impacting the RF value of inbound messages as the RF is not corrected by the inbound report

I think the real problem lies in channel definitions:

      <channel id="protection_local5" typeId="protection_local">
        <label>Protection Local Output 1</label>
        <properties>
          <property name="binding:*:DecimalType">COMMAND_CLASS_PROTECTION:5;type=PROTECTION_LOCAL</property>
        </properties>
      </channel>
      <channel id="protection_rf5" typeId="protection_rf">
        <label>Protection RF Output 1</label>
        <properties>
          <property name="binding:*:DecimalType">COMMAND_CLASS_PROTECTION:5;type=PROTECTION_LOCAL</property>
        </properties>                                                               ^--PROTECTION_RF?
      </channel>

From: https://www.cd-jackson.com/index.php/zwave/zwave-device-database/zwave-device-list/devicesummary/1005?layout=openhab2new

Shouldn’t the second type be set to PROTECTION_RF?

it should