Pool Controller with nodejs-poolController via MQTT

@loopy1 - Thanks for the info. I added the npm start commands to my rc.local file and don’t have issues backgrounding there. Must be a user privilege level issue.

I recently had my mesh WIFI system do an automatic FW upgrade at 3 AM, and my network went down for a few minutes. When the network came back up, the nodeJS-poolController lost communication with EW11 module. After some searching, I’ve found information on a git issue that indicates this could be a problem. So, maybe a nightly reboot as you suggest is called for. I did find that if communication is lost, I can just toggle a button (or change the spa temp) and the connection will be reestablished after 10 seconds.

I’d be very interested in a followup if you’re able to make progress on this? I don’t have Intellibrites yet, but this would be suitable motivation to pick up a set!

You probably tracked it down already, but the relevant topic should be in:
easytouch2-8/state/lightgroups/192/intellibrite

Starting from the nodejs-poolController set up, it’s not too difficult to reverse engineer that code for changing colors into Home Assistant MQTT payloads (or at least this was my route in setting up pool and spa automations in my LoveLace UI). The syntax is what always gets me, but there are lots of people on the forums here that can read MQTT in their sleep :).

Are you able automate to set the pump speed of a VS pump with this setup?

Yes! See switch section of Home Assistant Setup Instructions · tagyoureit/nodejs-poolController Wiki · GitHub

i.e.

  - platform: mqtt
    name: Pool Pump Speed 1
    icon: mdi:pump
    state_topic: "pool/state/circuits/2/pumpsp1"
    command_topic: "pool/state/circuits/setState"
    payload_on: '{"id":2,"isOn":"on"}'
    payload_off: '{"id":2,"isOn":"off"}'
    optimistic: false
    retain: false
    qos: 0

  - platform: mqtt
    name: Pool Pump Speed 2
    icon: mdi:pump
    state_topic: "pool/state/circuits/3/pumpsp2"
    command_topic: "pool/state/circuits/setState"
    payload_on: '{"id":3,"isOn":"on"}'
    payload_off: '{"id":3,"isOn":"off"}'
    optimistic: false
    retain: false
    qos: 0

Thanks, didn’t even see that whole section.

Question… I have a heatpump with a cool mode built in and as such I have a heatsetPoint and a coolsetPoint. How can I control both of these with the temperature state topic?

I’m also having issues getting the button to change from ultratemp to off but I’m not sure what the command_template is doing.

off: val 1, name off, desc Off
ultratemp: val 5, name ultratemp, desc, UltraTemp

climate:
  - platform: mqtt
    name: "Pool Heatpump"
    min_temp: 40
    max_temp: 104
    modes:
      - "off"
      - "ultratemp"
    current_temperature_topic: "intellicenter-i8ps/state/temps/bodies/1/pool/temp"
    value_template: "{{ value_json.temp }}"
    mode_state_topic: "intellicenter-i8ps/state/temps/bodies/1/pool/heatMode"
    mode_state_template: >-
      {% if value_json.heatMode.val == 0 %}
        off
      {% elif value_json.heatMode.val == 1 %}
        off
      {% elif value_json.heatMode.val == 5 %}
        ultratemp
      {% endif %}
    mode_command_topic: "intellicenter-i8ps/state/body/heatMode"
    mode_command_template: >-
      {% set values = { 'ultratemp':'{"heatMode":5, "id":1}', 'off':'{"heatMode":1, "id":1}'} %}    
      {{ values[value] if value in values.keys() else '{"heatMode":1, "id":1}' }}
    action_topic: "intellicenter-i8ps/state/temps/bodies/1/pool/heatStatus"
    action_template: >-
      {% if value_json.heatStatus.val == 0 %}
        off
      {% elif value_json.heatStatus.val == 4 %}
        heating
      {% elif value_json.heatStatus.val == 8 %}
        cooling
      {% endif %}
    temperature_command_topic: pool/heatsetpoint #REQUIRES AN AUTOMATION - SEE BELOW
    temperature_state_topic: "intellicenter-i8ps/state/temps/bodies/1/pool/heatsetPoint"
    temperature_state_template: "{{ value_json.heatsetPoint }}"

I also have a Pentair Ultratemp that I’m trying to automate. Do you have any updates? Also for your code above on “modes”, would it not be more like?

    modes:
      - "off"
      - "pool"
      - "spa"

I’m working on custom integration for nodejs-PoolController. Right now it does not support cooling as I don’t have that equipment, but I was able to mock something up and should hopefully have it working tomorrow. You can find the repository here (install via HACS): https://github.com/Crewski/njsPC-HA

The heater will have 2 separate climate entities, one for the pool and one for the spa. The modes I think can only be “off”, “heat”, “cool”, “heat_cool”, etc.

1 Like

Thanks. I’m still planning my project… It’s hard to research as everyone has a different set up based on the layout and age of their pool. Here’s my incomplete plan as it stands.

Yep, everything is different and everyone has a different way of going about it. Whenever you finalize stuff, I have updated my custom component to support cooling. So if you decide to use it everything should be working. https://github.com/Crewski/njsPC-HA

I only have a pool (no spa) so mine in much simpler than yours. One question, what’s the need for the two raspberry pis? I only have one, but needed to get a RS485 hat that had two ports on it. Only reason for the two ports is that my Hayward pump and SWG use different baud rates.

Not two Raspberry pi. Two Node-Red units… it handles the RS485 functions where you used the IntelliComm II Interface Adapter. I’m not sure, but looking at the adapter, it seems to interface with only one device?
I know the Intelliflo needs an RS485 adapter, so I am assuming that the UltraTemp unit needs one as well since it too uses RS485 comms. That’s where I can’t find any reliable information. Comms between Raspberry Pi and the UltraTemp.

The RS485 uses a bus topology, so you should only need one port (assuming they both use the same baud rate, typically 9600 I think). It utilizes an address to talk to certain devices. The raspberry pi will be the server and the pool equipment will be clients. Both of your equipment just run to the same RS485 port.

If you use nodejs-PoolController (which I highly recommend, they’ve done an awesome job with it) then you don’t need to use Node-Red or write any of your own code.

So I would then use the IntelliComm II Interface Adapter connected to both devices or that is no longer needed…? What would the diagram look like?

Here is ONE of the Examples I am using

@Crewski
Wondering if you have a Hayward Aquarite SWG?
And if so, do you get status from it ok?

Reason for asking is I saw someone who said their Aquarite wasn’t providing much status over 485.
I’m reading the LEDs instead because of this.

Thanks
Randy

I don’t know anything about the Interface Adapter, but I’m thinking there is a chance it isn’t needed. I’d ask the question over in the discussion of nodejs-PoolController or Trouble Free Pool. They’d be able to help you a lot more.

@randytsuch I do have a Hayward Aquarite SWG with T-9 cell. I don’t have any issues with getting the status from it (via nodejs-Poolcontroller) over rs485. So far I’ve seen OK, Clean Cell, Low Voltage.

This example uses the IntelliComm II Interface adapter.

so does this example.

They say it’s easy to connect intelliFlo pumps using RS485 protocols…

@spifftek70 I quickly looked at the two examples you gave. It looks like the IntelliComm interface takes inputs from a source, then converts it to a related RS485 signal. The examples use this as a means to communicate with the pump.

With nodejs-PoolController, the RS485 communication goes directly between the raspberry pi (with RS485 adapter) and the pump/SWG/heater. Basically it removes the need for the IntelliComm Interface. This will significantly reduce the cost since an adapter for the pi is only like $20. It’ll also increase functionality because you aren’t limited to only 4 programs. I don’t have any of this equipment and am relatively new to pool automation, so keep that in mind. However the UltraTemp and IntelliFlo are both supported so you should be good.

For your heater and pump you would need:

  • Raspberry Pi
  • RS485 adapter for the Pi
  • 12-15V power for the RS485 (might be able to take this from the pump, that what I do on my Hayward setup)
  • Temperature probe (needed for the heater). I use ds18b20’s but there are also 10K thermistors that are common to pool automation

You wouldn’t need the relay module for the pump and heater (though you would need one for the valves I guess). The setup would have you A/B wires going from the RS485 adapter to the pump, AB wires from the RS485 adapter to the heater, and the RS485 connected to the Pi (USB/Hat).

The UtlraTemp has a thermostat / sensor built into it. It’s constantly reading the temp for whatever mode it’s put in.

I bought a house last year that came with both an in-ground pool and hot tub. It was all built in the late '70s and have NEVER been updated… until now. The Hot tub propane heater went out years ago, so the previous owners boarded over the hot tub. When I moved in, I had a Pentair UltraTemp heat/cooler unit put in for the pool. It has a Pool and Spa mode, so it can take the place a a propane heater (just not as fast). I removed the boarding and repaired the hotter pumps. I have to manually turn in/out valves to change flow to the UltraTemp between the pool and spa pumps. It’s a pain. Here’s the flow:

Based on what you’ve told me, I’ve altered my diagram to this… but still not sure on the wiring: