Hi Everybody,
I am developing an edge driver for my Secure SIR321 Z-Wave switch.
I initially added the fingerprint to my clone of zwave-switch, which somewhat worked.
The SIR321 supports a temperature measurement feature which I intend to control my hot water system.
So I have written a custom edge driver which is working as well as the zwave-switch I based it on. The first problem is the temperature.
Here is my profile:
Blockquote
name: secure_sir
components:
- id: main
capabilities:- id: switch
version: 1 - id: refresh
version: 1
categories: - name: Switch
- id: switch
- id: WaterTemperature
capabilities:- id: temperatureMeasurement
version: 1
categories:- name: GenericSensor
- id: temperatureMeasurement
Here is the display:
Here is the handler:
Blockquote
local function temperature_report_handler(self, device, cmd)
log.info(“temperature_report_handler”)
if (cmd.args.sensor_type == SensorMultilevel.sensor_type.TEMPERATURE)
then
local scale = ‘C’
local sensor_value = cmd.args.sensor_value
if (cmd.args.scale == SensorMultilevel.scale.temperature.FAHRENHEIT) then scale = ‘F’ end
log.info("temperature_report_handler emit_event_for_endpoint cmd.src_channel: ", cmd.src_channel, " sensor_value: ", sensor_value)
device.profile.components[“Temperature”]:emit_event({value = sensor_value, unit = scale})
– log.info(“temperature_report_handler emit_component_event”)
– device:emit_component_event(device.profile.components.WaterTemperature({value = sensor_value, unit = scale}))
– log.info(“temperature_report_handler set_field Temperature, sensor_value: >”, sensor_value, “<”)
– device:set_field(TEMPERATURE, sensor_value, {persist = true})
end
log.info(“temperature_report_handler done”)
end
Here is the logcat output:
2023-05-02T12:42:56.131932789+00:00 TRACE Secure SIR Received event with handler unnamed
2023-05-02T12:42:56.132598247+00:00 INFO Secure SIR <ZwaveDevice: ac678855-741d-4cd6-8ffd-02eba4974a67 [34] (Secure SIR321 Switch)> received Z-Wave command: {args={precision=1, scale=“CELSIUS”, sensor_type=“TEMPERATURE”, sensor_value=18.8, size=2}, cmd_class=“SENSOR_MULTILEVEL”, cmd_id=“REPORT”, dst_channels={}, encap=“NONE”, payload=“\x01\x22\x00\xBC”, src_channel=0, version=1}
2023-05-02T12:42:56.136993247+00:00 TRACE Secure SIR Found ZwaveDispatcher handler in secure_sir321
2023-05-02T12:42:56.138601747+00:00 INFO Secure SIR temperature_report_handler
2023-05-02T12:42:56.148302122+00:00 INFO Secure SIR temperature_report_handler emit_event_for_endpoint cmd.src_channel: 0 sensor_value: 18.8
2023-05-02T12:42:56.148754872+00:00 ERROR Secure SIR Secure SIR321 Switch thread encountered error: [string “st/dispatcher.lua”]:233: Error encountered while processing event for <ZwaveDevice: ac678855-741d-4cd6-8ffd-02eba4974a67 [34] (Secure SIR321 Switch)>:
arg1: {args={precision=1, scale=“CELSIUS”, sensor_type=“TEMPERATURE”, sensor_value=18.8, size=2}, cmd_class=“SENSOR_MULTILEVEL”, cmd_id=“REPORT”, dst_channels={}, encap=“NONE”, payload=“\x01\x22\x00\xBC”, src_channel=0, version=1}
[string “init.lua”]:94: attempt to index a nil value (field ‘Temperature’)