Thank you, @John.1 , you’re help is much appreciated!
I have 5 Danfoss DRS21 wall thermostats, but until now, the scheduler was disabled.
I applied your detailed explanation for logging the received zwave message and right now I’m toying with one of the thermostats…
Here’s my config (shameful copy-paste from yours
):
<!-- Zwave Thermostat DEBUG custom file appender -->
<RollingRandomAccessFile fileName="${sys:openhab.logdir}/thermostat.log" filePattern="${sys:openhab.logdir}/thermostat.log.%i" name="THERMOSTAT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5.5p] [%-36.36c] - %m%n"/>
<RegexFilter onMatch="ACCEPT" onMismatch="DENY" regex=".*Receive Message = 01 1D 00 04 00 61 15 53 05 01 00 FF .. 00 00 3F 3F.*"/>
<Policies>
<OnStartupTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="2 MB"/>
</Policies>
</RollingRandomAccessFile>
And with this, I manage to catch the messages form node 97:
2021-03-09 09:26:04.946 [DEBUG] [WaveSerialHandler$ZWaveReceiveThread] - Receive Message = 01 1D 00 04 00 61 15 53 05 01 00 FF 30 00 00 3F 3F 00 01 00 01 06 43 01 01 22 00 E1 AA 00 26
2021-03-09 09:34:41.780 [DEBUG] [WaveSerialHandler$ZWaveReceiveThread] - Receive Message = 01 1D 00 04 00 61 15 53 05 01 00 FF 20 00 00 3F 3F 00 00 00 01 06 43 01 01 22 00 E1 A2 00 3F
2021-03-09 09:40:45.359 [DEBUG] [WaveSerialHandler$ZWaveReceiveThread] - Receive Message = 01 1D 00 04 00 61 15 53 05 01 00 FF 30 00 00 3F 3F 00 14 00 01 06 43 01 01 22 00 E6 B1 00 2F
2021-03-09 09:45:12.539 [DEBUG] [WaveSerialHandler$ZWaveReceiveThread] - Receive Message = 01 1D 00 04 00 61 15 53 05 01 00 FF 30 00 00 3F 3F 00 07 00 01 06 43 01 01 22 00 E6 AE 00 23
2021-03-09 09:48:27.725 [DEBUG] [WaveSerialHandler$ZWaveReceiveThread] - Receive Message = 01 1D 00 04 00 61 15 53 05 01 00 FF 30 00 00 3F 3F 00 03 00 01 06 43 01 01 22 00 E1 B0 00 3E
Logreader setup and started testing with some rule:
rule "LogReader_ThermostatLog_LastCustomEvent"
when
Item LogReader_ThermostatLog_LastCustomEvent changed
then
val received_command = LogReader_ThermostatLog_LastCustomEvent.state.toString.split("=").last
val schedule = Integer::parseInt(transform("JS", "hex2dec.js", received_command.substring(55,57)))
val temp = Integer::parseInt(transform("JS", "hex2dec.js", received_command.substring(79, 84).replace(" ",""))) / 10.0
logError("DEBUG", "schedule = [" + schedule.toString + "]")
logError("DEBUG", "temp = [" + temp.toString + "]")
end
and here’s the output:
==> /var/log/openhab/openhab.log <==
2021-03-09 09:48:28.318 [ERROR] [org.openhab.core.model.script.DEBUG ] - schedule = [3]
2021-03-09 09:48:28.319 [ERROR] [org.openhab.core.model.script.DEBUG ] - temp = [22.5]
Next step, of course, implement some timers…
After successful testing node97 I’ll need to modify the regex pattern of the logger to catch all schedule command for the 5 thermostat nodes - need to dig deeper to properly understand the zwave message structure and fields. Right now, it’s some nebula there 
One again, many-many thanks!
Oh, and “many-many thanks” to @codegrau and his post. From his post I got the schedule and setpoint temperature!