5static const char *
const TAG =
"fujitsu_general.climate";
84 ESP_LOGV(TAG,
"Transmit state");
102 uint8_t temperature_clamped =
113 switch (this->
mode) {
180 ESP_LOGV(TAG,
"Transmit off");
198 ESP_LOGV(TAG,
"Transmit message length %d",
length);
201 auto *data = transmit.get_data();
210 for (uint8_t i = 0; i <
length; ++i) {
211 const uint8_t
byte =
message[i];
212 for (uint8_t mask = 0b00000001; mask > 0; mask <<= 1) {
214 bool bit =
byte & mask;
251 ESP_LOGW(TAG,
"Received unassigned mode %X, keeping the current mode",
mode);
255optional<climate::ClimateFanMode>
decode_fan_mode(uint8_t fan_field, optional<climate::ClimateFanMode> current_mode) {
267 ESP_LOGW(TAG,
"Received unassigned fan speed %X, keeping the current fan mode", fan);
283 ESP_LOGV(TAG,
"Received IR message");
287 ESP_LOGV(TAG,
"Header fail");
296 for (uint8_t bit = 0; bit < 8; ++bit) {
298 recv_message[byte] |= 1 << bit;
300 ESP_LOGV(TAG,
"Byte %d bit %d fail",
byte, bit);
307 uint8_t recv_message_length;
309 switch (recv_message_type) {
311 ESP_LOGV(TAG,
"Received state message");
317 ESP_LOGV(TAG,
"Received util message");
321 ESP_LOGV(TAG,
"Unknown message type %X", recv_message_type);
327 for (uint8_t bit = 0; bit < 8; ++bit) {
329 recv_message[byte] |= 1 << bit;
331 ESP_LOGV(TAG,
"Byte %d bit %d fail",
byte, bit);
337 for (uint8_t
byte = 0;
byte < recv_message_length; ++byte) {
338 ESP_LOGVV(TAG,
"%02X", recv_message[
byte]);
341 const uint8_t recv_checksum = recv_message[recv_message_length - 1];
342 uint8_t calculated_checksum;
349 if (recv_checksum != calculated_checksum) {
350 ESP_LOGV(TAG,
"Checksum fail - expected %X - got %X", calculated_checksum, recv_checksum);
358 ESP_LOGV(TAG,
"Received temperature %d", offset_temperature);
361 ESP_LOGV(TAG,
"Received mode %X", recv_mode);
363 ESP_LOGW(TAG,
"Received a frame with the clean / 10 degree heat bit set, which is not supported");
368 ESP_LOGV(TAG,
"Received fan mode %X", recv_fan_mode);
372 ESP_LOGV(TAG,
"Received swing mode %X", recv_swing_mode);
379 ESP_LOGV(TAG,
"Received off message");
385 ESP_LOGV(TAG,
"Received unsupprted message type %X", recv_message_type);
BedjetMode mode
BedJet operating mode.
ClimateMode mode
The active mode of the climate device.
optional< ClimateFanMode > fan_mode
The active fan mode of the climate device.
float target_temperature
The target temperature of the climate device.
ClimateSwingMode swing_mode
The active swing mode of the climate device.
void publish_state()
Publish the state of the climate device, to be called from integrations.
uint8_t checksum_state_(uint8_t const *message)
Calculate checksum for a state message.
void transmit_state() override
Transmit via IR the state of this climate controller.
uint8_t checksum_util_(uint8_t const *message)
Calculate cecksum for a util message.
bool on_receive(remote_base::RemoteReceiveData data) override
Parse incoming message.
void transmit_off_()
Transmit via IR power off command.
void transmit_(uint8_t const *message, uint8_t length)
Transmit message as IR pulses.
RemoteTransmitterBase * transmitter_
const LogString * message
ClimateSwingMode
Enum for all modes a climate swing can be in NOTE: If adding values, update ClimateSwingModeMask in c...
@ CLIMATE_SWING_OFF
The swing mode is set to Off.
@ CLIMATE_SWING_HORIZONTAL
The fan mode is set to Horizontal.
@ CLIMATE_SWING_VERTICAL
The fan mode is set to Vertical.
@ CLIMATE_SWING_BOTH
The fan mode is set to Both.
ClimateMode
Enum for all modes a climate device can be in.
@ CLIMATE_MODE_DRY
The climate device is set to dry/humidity mode.
@ CLIMATE_MODE_FAN_ONLY
The climate device only has the fan enabled, no heating or cooling is taking place.
@ CLIMATE_MODE_HEAT
The climate device is set to heat to reach the target temperature.
@ CLIMATE_MODE_COOL
The climate device is set to cool to reach the target temperature.
@ CLIMATE_MODE_HEAT_COOL
The climate device is set to heat/cool to reach the target temperature.
@ CLIMATE_MODE_OFF
The climate device is off.
@ CLIMATE_FAN_MEDIUM
The fan mode is set to Medium.
@ CLIMATE_FAN_ON
The fan mode is set to On.
@ CLIMATE_FAN_AUTO
The fan mode is set to Auto.
@ CLIMATE_FAN_LOW
The fan mode is set to Low.
@ CLIMATE_FAN_QUIET
The fan mode is set to Quiet.
@ CLIMATE_FAN_HIGH
The fan mode is set to High.
optional< climate::ClimateFanMode > decode_fan_mode(uint8_t fan_field, optional< climate::ClimateFanMode > current_mode)
Unassigned values keep the current fan mode.
constexpr uint16_t FUJITSU_GENERAL_TRL_MARK
constexpr uint8_t FUJITSU_GENERAL_MESSAGE_TYPE_ECONOMY
constexpr uint8_t FUJITSU_GENERAL_FAN_LOW
constexpr uint8_t FUJITSU_GENERAL_POWER_ON_NIBBLE
constexpr uint8_t FUJITSU_GENERAL_FAN_MASK
constexpr uint8_t FUJITSU_GENERAL_COMMON_BYTE1
constexpr uint16_t FUJITSU_GENERAL_HEADER_SPACE
constexpr uint8_t FUJITSU_GENERAL_FAN_SILENT
constexpr uint8_t FUJITSU_GENERAL_FAN_AUTO
constexpr uint8_t get_nibble(const uint8_t *message, uint8_t nibble)
constexpr uint8_t FUJITSU_GENERAL_CLEAN_BIT
constexpr uint8_t FUJITSU_GENERAL_STATE_MESSAGE_LENGTH
constexpr uint8_t FUJITSU_GENERAL_COMMON_BYTE4
constexpr uint16_t FUJITSU_GENERAL_HEADER_MARK
constexpr uint8_t FUJITSU_GENERAL_STATE_FOOTER_BYTE0
constexpr uint8_t FUJITSU_GENERAL_TEMPERATURE_NIBBLE
constexpr uint8_t FUJITSU_GENERAL_MODE_DRY
constexpr uint8_t FUJITSU_GENERAL_MESSAGE_TYPE_NUDGE
constexpr uint8_t FUJITSU_GENERAL_COMMON_BYTE0
constexpr uint8_t FUJITSU_GENERAL_STATE_HEADER_BYTE1
climate::ClimateSwingMode decode_swing_mode(uint8_t swing_field)
constexpr uint8_t FUJITSU_GENERAL_TEMP_MIN
constexpr uint8_t FUJITSU_GENERAL_SWING_NIBBLE
constexpr uint8_t FUJITSU_GENERAL_UTIL_MESSAGE_LENGTH
constexpr uint8_t FUJITSU_GENERAL_FAN_HIGH
constexpr uint8_t FUJITSU_GENERAL_MODE_FAN
constexpr uint8_t FUJITSU_GENERAL_MESSAGE_TYPE_BYTE
constexpr uint8_t FUJITSU_GENERAL_MODE_NIBBLE
constexpr uint8_t FUJITSU_GENERAL_FAN_MEDIUM
constexpr uint8_t FUJITSU_GENERAL_SWING_BOTH
constexpr uint8_t FUJITSU_GENERAL_COMMON_BYTE2
climate::ClimateMode decode_mode(uint8_t mode_field, climate::ClimateMode current_mode)
Unassigned values keep the current mode, except that OFF becomes HEAT_COOL.
constexpr uint8_t FUJITSU_GENERAL_MODE_MASK
constexpr uint8_t FUJITSU_GENERAL_POWER_OFF
constexpr uint8_t FUJITSU_GENERAL_SWING_HORIZONTAL
constexpr uint8_t FUJITSU_GENERAL_POWER_ON
constexpr uint16_t FUJITSU_GENERAL_TRL_SPACE
constexpr uint8_t FUJITSU_GENERAL_SWING_MASK
constexpr uint16_t FUJITSU_GENERAL_ZERO_SPACE
constexpr uint8_t FUJITSU_GENERAL_MODE_HEAT
constexpr uint8_t FUJITSU_GENERAL_MESSAGE_TYPE_STATE
constexpr uint8_t FUJITSU_GENERAL_STATE_HEADER_BYTE0
constexpr uint8_t FUJITSU_GENERAL_MESSAGE_TYPE_OFF
constexpr uint32_t FUJITSU_GENERAL_CARRIER_FREQUENCY
constexpr uint8_t FUJITSU_GENERAL_FAN_NIBBLE
constexpr void set_nibble(uint8_t *message, uint8_t nibble, uint8_t value)
Write a nibble into a zero-initialised frame.
constexpr uint8_t FUJITSU_GENERAL_SWING_VERTICAL
constexpr uint16_t FUJITSU_GENERAL_ONE_SPACE
constexpr uint8_t FUJITSU_GENERAL_TEMP_MAX
constexpr uint8_t FUJITSU_GENERAL_MODE_AUTO
constexpr uint16_t FUJITSU_GENERAL_BIT_MARK
constexpr uint8_t FUJITSU_GENERAL_SWING_NONE
constexpr uint8_t FUJITSU_GENERAL_COMMON_BYTE3
constexpr uint8_t FUJITSU_GENERAL_MODE_COOL
constexpr uint8_t FUJITSU_GENERAL_COMMON_LENGTH