OpenTherm protocol room setpoint, temperature

Hi, I have a small problem with my gas boiler over OpenTherm.

I’m using an Arduino Mega with an OpenTherm shield and a library from Jiri Praus (documentation for OpenTherm protocol could be found here) as an example I am using his template for “master” thermostat. Everything works fine, I can get outside temperature, boiler temperature, get/set DHW temperature, CH water setpoint…. The only problem is, when I want to set a room setpoint or a room temperature.

When I’m setting DHW temperature to the boiler log shows this:
ot3

Temperature then changes and everything works as expected. But when i want to set room temperature log shows this:
ot2

I’ve read an article on Firmware for the OpenTherm Gateway (under Obtaining additional information), where they said that sending room temperature and room setpoint works better when you send it via unknown id command

The following information is displayed in the log:
ot1

But it still does not work…
The catch is that setting other values than room setpoint or room temperature works as expected (DHW setpoint etc.)…
Is there anything else I have to do/set before I can set these values?

Is there anything I am missing?

My gas boiler is Broetje WHBS 22D.
The following code I am using:

#include <opentherm.h>

// Arduino UNO
#define BOILER_IN 3
#define BOILER_OUT 5

OpenthermData message;

void setup() {
  pinMode(BOILER_IN, INPUT);
  digitalWrite(BOILER_IN, HIGH); // pull up
  digitalWrite(BOILER_OUT, HIGH);
  pinMode(BOILER_OUT, OUTPUT); // low output = high voltage, high output = low voltage

  Serial.begin(9600);
}

/**
 * Loop will act as thermostat (master) connected to Opentherm boiler.
 * It will request slave configration from boiler every 100ms or so and waits for response from boiler.
 */
void loop() {
  if (OPENTHERM::isIdle()) {
    message.type = OT_MSGTYPE_READ_DATA;
    message.id = 16; //room setpoint id
    message.valueHB = 0;
    message.valueLB = 0;
    message.f88(23); //room setpoint temperature
    Serial.print(F("-> "));
    OPENTHERM::printToSerial(message);
    Serial.println();
    OPENTHERM::send(BOILER_OUT, message); // send message to boiler
  }
  else if (OPENTHERM::isSent()) {
    OPENTHERM::listen(BOILER_IN, 800); // wait for boiler to respond
  }
  else if (OPENTHERM::getMessage(message)) { // boiler responded
    OPENTHERM::stop();
    Serial.print(F("<- "));
    OPENTHERM::printToSerial(message);
    Serial.println();
    Serial.println(message.f88()); //outputs formatted value
    Serial.println();
    delay(1000); // minimal delay before next communication
  }
  else if (OPENTHERM::isError()) {
    OPENTHERM::stop();
    Serial.println(F("<- Timeout"));
    Serial.println();
  }
}

Thanks a lot for any help!