Hayward OmniLogic Binding

I’m finishing up the development of this binding. Anyone interested in beta testing? I don’t have an ORP, accessory pump or spillover requirements on my setup and haven’t been able to finish developing these areas.


Would love to give it a try. I just got my onmilogic installed.

Let me know.

Sounds good. I’ll pull a jar together. What devices do you have? I don’t have any auxiliary pumps or ORP systems so those are untested. What’s ur email address?

If you don’t have the ORP system, the biggest benefit is automatically adjusting the SWG based on Water Temp and The cover being open. I can share a rule I wrote to handle this.



My setup is pretty simple. I have the some lighting, a VS pump, heater and salt chlorination.

Are you talking directly to the Omnilogic, or the cloud? Do you have the API? I heard it’s available if you write to Hayward, was going to reach out to them when I saw your post.


Great. Those devices are all currently functional. The binding communicates with the cloud server which sends the commands to the OmniLogic. I’m not sure if the OmniLogic would handle an additional direct connection. I reverse engineered the API. PM me with an email address.


Here’s the SWG setpoint rule/algorithm…

rule "Pool: Calculate Chlorine Demand"
    Item ChlorCalculateEnable received update  //switch to enable the algorithm
    Item ChlorBaseSetpoint received update  //base SWG setpoint
    Item ChlorCoverOpenOffset received update  //offset to add when cover is open
    Item ChlorTempGain received update  //Temperature gain
    Item PoolLastBOWWaterTemp received update //Pool temp (filtered to maintain temp when pump is off and Hayward doesn't report a temp)
    Item AlarmPoolCover received update //Pool cover open/closed status

    var Number rawTempOffset
    var Number tempOffset
    var Number newTimedPercent

    //Don't calculate if in superchlor mode
    if (PoolChlorScMode.state==0){
        if (ChlorCalculateEnable.state.toString == "ON"){
            //Calculate tempOffset
            rawTempOffset = ((PoolLastBOWWaterTemp.state as Number - 80) * ChlorTempGain.state as Number)

            if (rawTempOffset > 15){
                tempOffset = 15
            } else if (rawTempOffset < -15){
                tempOffset = -15
            } else {
                tempOffset = rawTempOffset


            if (AlarmPoolCover.state == "Normal") {
                newTimedPercent = ChlorBaseSetpoint.state as Number + tempOffset
            } else {
                newTimedPercent= ChlorBaseSetpoint.state as Number + tempOffset + ChlorCoverOpenOffset.state as Number
            newTimedPercent = Math::round((newTimedPercent * 10).floatValue) / 10

            if (PoolChlorTimedPercent.state as Number != newTimedPercent){

I would also like to test it. I have a simple salt water pool setup with two zones (spa and pool) including a VS pump, a heater, blower, lighting and the salt cell.

Let me know how I can gain access to the binding and the instructions to set it up.

Thank you. Mauro

This topic was automatically closed 41 days after the last reply. New replies are no longer allowed.