Automate Alorair Sentinel HD55 dehumidifier

Just cracked my Sentinel HD55 open, the RJ45 connector has 4 wires internally. These 4 wires terminate at the main PCB and are labelled CAN-L; CAN-H; 0V; and VCC. I’ll go out on a limb here and say it’s CANBus. Lot’s to think about now.

Mark

I’m interested in deciphering the can-bus packets. Have you already done that? I’d like to control the on/off at least.

It looks like someone might have gone through the canbus packets: AlorAir Sentinel HD55 Dehumidifier - Wiki (tinymicros.com)

1 Like

That looks like an excellent start, thanks for finding that!
I’ll eventually get an ESP32 setup with the CAN level shifter I have and see how that goes.

I also just got an HD55 and am new to home assistant but love it already.

I got the external remote, and regret it. It costs $100 and it’s overpriced, especially for us. I bought the remote a while ago before I got into home assistant.

Anyways, I was thrilled to see others were looking into hacking the remote signals, but now i’m thinking why bother?

The built in humidity sensor is probably not great claiming +/- 5%, and home assisant has a generic dehumidifer module that basically needs a sensor and a relay on esp32 to function. I havent tried it, but it looks perfect.

I love the mechanical and electrical I/O aspects of the product itself, but I would just assume use the built in sensor only as a fallback, and control/monitor the unit using home assistant via the screw terminals.

The idea of the unit being able to use an external fan to draw outside dry air inside is interesting, but what about the temperature of the outside air??? That’s also important, so I would not want the humidifier to have that ability.

Does the can bus route have any advantage, besides not needing to add a relay and humidity sensor??

Edit, so it appears controlling the unit externally with the 24v input requires you to disable the built in logic. Still seems worth it for me, but worth noting.

I have built a plenum and hooked up a 4" and 6" inlet. The 4" has a powered damper so I can control the outside air during the summer (cooling) season and the 6" draws air from the main floor.

During the heating season the HRV is running to bring fresh air in. Both systems are triggered based on indoor humidity and indoor CO2.

Regarding the CANBus, I think it is cleaner than a box of relays wired to the front of the machine. Yes there is an investment of time to get it figured out and eventually running, but after that it is easy to share.

I have 7 BLE temperature and humidty sensors distributed around the house and use “Thermal Comfort” to get dew-point and absolute humidity for inside and outside so I know what to turn on.

Mark

Olimex makes an esp32 with 2 small relays and ethernet (and canbus) it could easily be hidden inside the machine using the internal pins as cleanly as you could using the can+esp32. However, providing 24v just to trigger the machine is less than ideal, even hidden.

I would probably go the can route if the integration existed in home assistant but I need something soon.

What about an esp32 running a can to mqtt bridge?

If the ESP32 CAN stuff in ESPHome isn’t sufficient I will have a look at that. ESPHome is limited to a single packet, but that doesn’t look like an issue give the work done by “tinymicros”.
I’ll check out the Olimex part as well because that would work well for several things on my list.

I have the olimex board already, I didnt realize esphome had a can integration. If I have time tonight i’ll absolutely plug it in and mess around. That’s great intel.

What are our thoughts (gueses) on how much the 5v rail at the RJ45 can supply from the HD55? I dont have any way to measure the current the remote control is using, but obviously powering the esp would be ideal.

I have since realized that for my wood working and laser cutting purposes in my shop, relative humidity is not ideal for humidity control because the temperature can fluctuate from 60-95F indoors in summer. Targeting a specific relative humidty would only work for me if I had a roughly consistent indoor temp.

I need absolute humidty, so the internal controller the HD55 comes with is out for me, thus the canbus to esp32 option is dead too. I’ll be going the external control route…

Since I will not be using the oem canbus remote I purchased, I am willing to donate it to anyone who thinks it would assist them creating some typeof esphome or similar integration for home assistant.

Let me know if you’re that person, or you know who that person is.

Before giving up completely, have a look at Thermal Comfort, it will take temperature and RH and calculate the absolute humidity

This will output absolute humidity like this
image

I hate humidity year round. If you are packing it in I will eventually get to the CAN interface and would be interested in the remote. ESP32 and CAN interface are sitting in my desk. I live in a tight newer home and also monitor CO2 to open and close a motorized fresh air damper for the dehumidifier.

For my workshop I have the IKEA PM2.5 sensor with the D1mini in it to log air quality while I am cutting and sanding

Thanks

Mark

I have the same humidifier and solved the automation issue by setting the humidity level on the unit to it’s lowest setting (36%), and just turn it on and off with a Shelly Plus wall plug. It uses about 440 watts when running. Nice thing about these Sentinel dehumidifiers is that they always turn on with the same setting even after the power is cut.

I use an Ambient weather station to get the outdoor temperature and indoor humidity. Since ideal indoor humidity is based on the outdoor temp, I only turn the switch on when the indoor humidity is above the target value based on the outdoor temp. I use Node Red to control the on/off cycles, making sure to only allow it to cycle once per hour. This beats having to manually adjust the units humidity setting manually as the outside temp changes.

My understanding is that there’s no issue with cutting the power off this way - the reason for the cool-down period is to evaporate the moisture from the coils so it doesn’t freeze up. By making sure it’s always off for at least one hour I’m sure it’s never going to freeze. When the humidity and temps are high it typically runs 50% of the time. It’s been going strong this way for over a year now with no issues. Coupled with a condensate pump there’s zero maintenance!

1 Like

I have connected up an ESPHome with CANBUS to my dehumidifier, but I am not getting any information from the dehumidifier. Anyone poked around with this since the thread was started?

Here is my code:

light:
  - platform: neopixelbus
    pin: GPIO0 
    variant: WS2812
    id: statusled
    num_leds: 1
    type: rgb

spi:
  id: McpSpi
  clk_pin: GPIO5
  mosi_pin: GPIO19
  miso_pin: GPIO21

sensor:
  - platform: template
    name: Temperature
    id: temp
  - platform: template
    name: Humidity
    id: humid
  - platform: template
    name: Pump
    id: pump

canbus:
  - platform: mcp2515
    id: my_mcp2515
    clock: 20MHZ
    spi_id: McpSpi
    cs_pin: GPIO32
    can_id: 5
    #mode: LOOPBACK
    bit_rate: 50kbps
    use_extended_id: false
    on_frame:
    - can_id: 0x3b0 #0x3b0 to remote
      then:
      - if:
          condition:
            lambda: 'return x[5] == 0x10 ? true : false;'
          then:
            - sensor.template.publish:
                id: pump
                state: true
      - logger.log: x
      - sensor.template.publish:
          id: temp
          state: !lambda 'return x[3];'
      - sensor.template.publish:
          id: humid
          state: !lambda 'return x[0];'
      - light.addressable_set:
            id: statusled 
            red: 100%
            green: 100%
            blue: 0%

I assume you need to send a frame to get something back. Since the remote is an option the HD55 is likely just listening. I haven’t connected up yet but my approach would be cyclic sending of the remote telegram to see if each generates a response with the info you need.

My AlorAir HD55’s canbus is set to 125kbps. The unit was manufactured April 2023 and with serial starting with S38.

After sending any canbus message, the unit responds with the following

123 RHactual RHset Temp D3 Status D5 D6 D7

Temp is in celsius

Statusbit0 = 1 → Unit is on
Statusbit0 = 0 → Unit is off
(bit0 is Least Significant Bit)

To set humidity and turn on send message:

123 Humidity D1 Control D4 D5 D6 D7

To set Humidity, add 128 to desired humidity set point
Controlbit0 = 1 toggles machine on or off depending on current state
Set all other bytes to 0 (e.g. D1, D4, etc)

I have not completely decoded Status nor Control nor the other data bytes. Sending Controlbit4 to 1 (0x8) seems to turn on Cont Defrost and if Cont Defrost is on 0x3 in Control seems to turn it off.

These results seem much different than what tinymicros.com found and I have no explanation.

However, I can now control my HD55 from a Raspberry Pi 3B+ running python-can and a Waveshare CAN HAT. :+1:

Hope this helps someone avoid the many futile hours I spent sending canbus messages at 50kbps :smiley:

Harry

1 Like

Any chance you could share the code you are using for this? I am undertaking the exact same thing with an HDi65S.

Billy

Hi Billy,

Do you still need code or have you figure it out? My code is ugly but if you still need help, let me know and I will cleanup and post some snippets.

Harry

I have a HDi65S and got it hooked up via
T-CAN485 – LILYGO®.
Mine is also operating at 50kbps and following the tinymicros docs. :man_shrugging:

I haven’t experimented with the controls yet – just monitoring. The unit is in my crawlspace, so it’s a little hard to experiment.

thanks @disruptivepatternmat and @dw4417 !

esphome:
  name: hd55
  platformio_options:
    build_unflags: -Werror=all
    board_build.flash_mode: dio

esp32:
  board: esp32dev

preferences:
  flash_write_interval: 10min

logger:
  level: DEBUG

api:
  password: ""
ota:
  password: ""
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Dashboard Fallback Hotspot"
    password: ""
web_server:
  port: 80

captive_portal:

light:
  - platform: neopixelbus
    type: GRB
    variant: WS2812
    pin: GPIO04
    num_leds: 1
    name: "Status LED"
    effects:
      - pulse:

# https://tinymicros.com/wiki/AlorAir_Sentinel_HD55_Dehumidifier
# https://community.home-assistant.io/t/automate-alorair-sentinel-hd55-dehumidifier/306084/23
canbus:
  - platform: esp32_can
    tx_pin: GPIO27
    rx_pin: GPIO26
    can_id: 0x05
    bit_rate: 50kbps
      #bit_rate: 125kbps
    use_extended_id: false
    on_frame:
    - can_id: 0x123
      then:
      - logger.log:
          format: "%02x %02x %02x %02x %02x %02x %02x %02x"
          args: [ 'x[0]', 'x[1]', 'x[2]', 'x[3]', 'x[4]', 'x[5]', 'x[6]', 'x[7]' ]
      - sensor.template.publish:
          id: humidity_actual
          state: !lambda 'return x[0];'
      - sensor.template.publish:
          id: humidity_setpoint
          state: !lambda 'return x[1];'
      - sensor.template.publish:
          id: byte_2
          state: !lambda 'return x[2];'
      - sensor.template.publish:
          id: temperature
          state: !lambda 'return x[3];'
      - sensor.template.publish:
          id: byte_4
          state: !lambda 'return x[4];'
      - sensor.template.publish:
          id: byte_5
          state: !lambda 'return x[5];'
      - binary_sensor.template.publish:
          id: draining
          state: !lambda 'return (x[5] & 0x10) == 0x10;'
      - sensor.template.publish:
          id: byte_6
          state: !lambda 'return x[6];'
      - sensor.template.publish:
          id: byte_7
          state: !lambda 'return x[7];'

interval:
  - interval: 5s
    then:
      - canbus.send:
          data: [ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
          can_id: 0x123

sensor:
  # Uptime sensor.
  - platform: uptime
    name: Uptime
    disabled_by_default: true

  # WiFi Signal sensor.
  - platform: wifi_signal
    name: WiFi Signal
    update_interval: 60s
    disabled_by_default: true

  - platform: template
    name: Humidity
    id: humidity_actual
    accuracy_decimals: 0
    unit_of_measurement: "%"
    device_class: "humidity"
    state_class: "measurement"
  - platform: template
    name: Humidity Setpoint
    id: humidity_setpoint
    accuracy_decimals: 0
    unit_of_measurement: "%"
    device_class: "humidity"
    state_class: "measurement"
  - platform: template
    name: Temperature
    id: temperature
    accuracy_decimals: 0
    unit_of_measurement: "°C"
    device_class: "temperature"
    state_class: "measurement"

  - platform: template
    name: Byte 2
    id: byte_2
    accuracy_decimals: 0
  - platform: template
    name: Byte 4
    id: byte_4
    accuracy_decimals: 0
  - platform: template
    name: Byte 5
    id: byte_5
    accuracy_decimals: 0
  - platform: template
    name: Byte 6
    id: byte_6
    accuracy_decimals: 0
  - platform: template
    name: Byte 7
    id: byte_7
    accuracy_decimals: 0

binary_sensor:
  - platform: template
    name: Draining
    id: draining

      #switch:
      #  - platform: gpio
      #    pin: GPIO23
      #    name: "CAN SE"

Thank you, I got it set up in a few minutes with this.

I think Byte 6, tells when the Fan is running with a value of 0x04.

Now I just need to send commands to it. I’m going to reread the Guy who sniffed off the remote control.

I emailed the company and they said they could not provide the CAN information. Send pdfs that were on their web site. I wish they could see if they were more open on their specs, it would encourage more product sales with DIYers.

URL Tag for bots - [https://www.alorair.com] (https://www.alorair.com)

1 Like