Red Sea LED Aquarium Lights

If i’m right, the temperature is only a ratio between blue and white: 15K for full white, 20k for full blue and half white… so i think it’s easy to code. For example to generate progs with only color temperature rise and set. If you have other ideas …

I don’t think it’s quite that simple. I gathered the online specs on my brief start at this topic (before I disassembled the tank that had ReefLED lights on it): GitHub - brettonw/RSLED: Home Assistant integration for controlling Red Sea RSLED lights. - the readme has the images and ratios for the different light specs.

Hello, i have G2+ 115 RSLED, what do you need for support it?

For ATO:

  • POST to /manual-pump and /stop to toggle the pump.
  • PUT to /configuration with {“auto_fill”: true} or {“auto_fill”: false} to toggle the auto filling when the sensor is low - That’s a going to be really handy for me.

For the ReefMat:

  • PUT to /configuration with {“auto_advance”: true} or {“auto_advance”: false}
    It would be nice to find the endpoint to kick the mode back to auto for when the felt slips and it enters the torn_mat state but that only occurred to me afterwards… AliExpress felt is cheap and works but you need to pack out the roller to stop it loosing traction.

I have a muti-sump setup and don’t really have a suitably sized small chamber for the ato sensor. Fortunately I have liquid level sensors everywhere so I’ve made a function node to actually calculate the volume of water loss through evaporation. It’s accurate within about 4L which is close enough for my tank. If I’m feeling brave, I might try automating manual top-ups with the /manual-pump endpoint. Never could get conductivity probes to remain accurate enough to rely on…

Have fun guys :+1:

1 Like

Annoyingly the ‘today_volume_usage’ at /dashboard doesn’t update whilst the ATO pump is set to on. So I can’t poll the device to see how much it has dosed until after I’ve sent the stop command. I can estimate volume by measuring the flow rate and the pump on time as there is no lag when controlling locally but that’s getting increasingly sketchy. Don’t like the idea of automatically dumping in an estimated volume of RODI based on my estimated volume of evaporation :grimacing:

Off topic:
I’m going to have to find a way to get accurate salinity readings first I think. I’m thinking a probe sat inside a 20ml syringe thats had it’s plunger removed. I can fill it from the bottom using a solenoid connected to the return manifold. The syringe can just overflow into the sump but all flow can also be stopped for measurement - those probes are great at measuring calibration fluid in a confined sachet! Having it just above the sump water line would minimise salt creep and temperature changes. hmm… not very elegant but I think it would work.

1 Like

I’ve updated the node-red integration to include:

ReefDose:

  • manual dosing is now supported. An example use case is to dose coral food (e.g. AB+) manually when you like or to automate it with a feed mode in HA. Select the head, enter volume, press dose.

ReefLed:

  • Tested with G2 60
  • Expose sensors
  • Manual control. When in manual mode you can adjust kelvin, intensity, moon, duration. Blue and white seem to be calculated from kelvin and intensity so not updating them.
  • Mode: auto, manual, off. Auto turns on the default preset program
  • Haven’t tested with multiple lights. Not sure if the RedSea ones act as a group like Radions or if each need to be controlled separately.
  • Found cloud endpoints for setting the Preset programs. Haven’t found the equivalent local endpoints but will persevere.

Added a place holder for ATO to get sensor values but need one to test.

Additional endpoints discovered are in the node-red flow comment nodes.

Some example mushroom cards:





Node-red flow:

I can grab the data for the ATO easily enough

What do you need?

Ignore the mess - I’m experimenting with automated top-up without the level sensor! My flows

Contents of ATO_IP/dashboard

Thanks! @ffirenmatana

I don’t have a pressing need for the ATO as I use an esp32 ultrasonic sensor for my sump level together with a couple of solenoids and switches to control RODI source water and pressure pump. That said, it would be nice to add ATO for completeness.

I can’t access your GitHub repository link. Three are publicly available.

I think I just need to know the json output from GET http://ATO-IP/dashboard to create the sensors and what we’d like to control from HA. I’m assuming from your earlier post it would be:

  • POST to /manual-pump and /stop to toggle the pump.
  • PUT to /configuration with {“auto_fill”: true} or {“auto_fill”: false} to toggle the auto filling when the sensor is low - That’s a going to be really handy for me.

Assuming these are local not cloud endpoints you’ve found.

is the the following URL sending back some data?:

http://<YOUR_LED_IP>/dashboard

I hope it helps :slight_smile:

{
“mode”: “auto”,
“battery_level”: “high”,
“time_error”: false,
“tilt_switch”: false,
“acclimation”: {
“enabled”: false,
“started_on”: “never”,
“duration”: 50,
“remaining_days”: 0,
“start_intensity_factor”: 50,
“current_intensity_factor”: 100
},
“moon_phase”: {
“enabled”: true,
“name”: “Waning Crescent”,
“intensity”: 0,
“todays_moon_day”: 28,
“next_full_moon”: 14,
“next_new_moon”: 1,
“started_on”: 1749752227
},
“manual”: {
“kelvin”: 15000,
“intensity”: 26,
“white”: 16,
“white_full”: 16.46,
“white_pwm”: 1359,
“blue”: 22,
“blue_full”: 22.25,
“blue_pwm”: 1736,
“moon”: 0,
“moon_full”: 0,
“moon_pwm”: 0,
“fan”: 0,
“fan_full”: 0,
“temperature”: 40.7996520996094,
“frequency_khz”: 25,
“resolution_bits”: 12
},
“current_program”: {
“active_preset”: 5,
“name”: “test”
}
}

Perfect, I propose to continu this technical discussion here:

And can you put the result of:
http://<YOUR_LED_IP>/device-info
there.

I m working on a new integration to support reefled, reefmat and reefdose it will be the perfect place.
If someone have reefwave, reef dc skimmer, reefato+ and/or reefrun i ll try to integrate them too.

Sorry - I didn’t get a notification of your reply. Yup local endpoints.

Sorry about the private link - I clearly need to learn to use github :laughing:

I’ll post the /dashboard for the ATO:

{
   "mode":"auto",
   "is_internet_connected":true,
   "check_sensor":false,
   "s1_average":867,
   "s2_average":855,
   "water_level":"desired_level_2",
   "pump_state":"off",
   "prev_pump_state":"pump_on",
   "is_pump_on":false,
   "last_pump_on_cause":"manual",
   "pump_consumption":0,
   "pump_speed":54,
   "flow_rate":1200,
   "pump_soft_blockage_threshold":0,
   "pump_blockage_threshold":1011.6000366210938,
   "pump_empty_threshold":632.25,
   "last_fill_date":1751379084,
   "today_fills":8,
   "today_volume_usage":20374,
   "total_volume_usage":222155,
   "total_fills":126,
   "daily_fills_average":null,
   "daily_volume_average":null,
   "volume_left":null,
   "days_till_empty":null,
   "leak_sensor":{
       "connected":false,
       "enabled":true,
       "buzzer_enabled":true,
       "buzzer_on":false,
       "current_read":0,
       "status":"dry"
   },
   "ato_sensor":{
       "is_sensor_error":false,
       "is_temp_enabled":true,
       "temperature_log_enabled":true,
       "connected":true,
       "last_installation_date":1745531745,
       "current_level":"desired",
       "code":"511",
       "is_calibrated":true,
       "last_adjustment_date":null,
       "current_read":24.297499656677246,
       "temperature_probe_status":"connected"
   }
}

and the ReefMat:

{
   "mode":"high_water", 
   "is_internet_connected":true,
   "is_ec_sensor_connected":true,
   "unclean_sensor":false,
   "auto_advance":true,
   "is_advancing":false,
   "last_advance_cause":"manual_advance",
   "roll_level":"full",
   "days_till_end_of_roll":16,
   "internal_ec_average":202,
   "external_ec_average":419,
   "setup_date":"2025-07-01T17:32:45Z",
   "cumulative_steps":397,
   "device_setup_date":1748330284,
   "lifetime_steps":331977,
   "today_usage":111.9,
   "daily_average_usage":203.9,
   "total_usage":152.3,
   "remaining_length":3346.9,
   "material":{
       "name":"35 Meter",
       "external_diameter":11.1,
       "thickness":0.0237,
       "is_partial":false
   }
}

Here’s my flow from node-red.

FYI: The function nodes shows the other valid states for the entities I want to track as well as some quality-of-life stuff, such as rounding to sensible precision and converting to human readable text.

ATO:

[{"id":"b77b0a35880f0b1c","type":"http request","z":"8f06660af350a487","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"http://10.10.10.23/dashboard","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":370,"y":3120,"wires":[["5e3a153ab8650466","18149ce8f61a52c5","7f369684f39354a1","879fca8f03c5f3b9","b85f5af129d9d65b"]]},{"id":"19cc21ed9c6452f8","type":"ha-sensor","z":"8f06660af350a487","name":"ato_water_level","entityConfig":"e0cc14607f8ffb8b","version":0,"state":"payload.water_level","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":740,"y":3120,"wires":[[]]},{"id":"76b5ef641d7a427b","type":"ha-sensor","z":"8f06660af350a487","name":"ato_today_used","entityConfig":"ea7abf85b7b0c995","version":0,"state":"payload.corrected_volume_usage","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":580,"y":3180,"wires":[[]]},{"id":"5e3a153ab8650466","type":"ha-sensor","z":"8f06660af350a487","name":"ato_pump","entityConfig":"163b7e49680eacc0","version":0,"state":"payload.pump_state","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":560,"y":3080,"wires":[[]]},{"id":"16c7a93013ac46eb","type":"ha-sensor","z":"8f06660af350a487","name":"ato_temperature","entityConfig":"b3aea473176252db","version":0,"state":"payload.ato_sensor.current_read","stateType":"msg","attributes":[{"property":"ato_tmp","value":"","valueType":"num"}],"inputOverride":"allow","outputProperties":[],"x":580,"y":3220,"wires":[[]]},{"id":"18149ce8f61a52c5","type":"function","z":"8f06660af350a487","name":"format","func":"msg.payload.ato_sensor.current_read = Number(msg.payload.ato_sensor.current_read).toFixed(1);\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":370,"y":3220,"wires":[["16c7a93013ac46eb"]]},{"id":"2a09679cacedaf1d","type":"inject","z":"8f06660af350a487","name":"Every 5 Minutes","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"300","crontab":"","once":true,"onceDelay":"45","topic":"","payload":"","payloadType":"date","x":150,"y":3140,"wires":[["b77b0a35880f0b1c"]]},{"id":"d8f4f28fa558ae51","type":"ha-sensor","z":"8f06660af350a487","name":"rs_ato_mode","entityConfig":"d37f7405beee8e84","version":0,"state":"payload.mode","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":730,"y":3040,"wires":[[]]},{"id":"b82c3efe799ae64e","type":"comment","z":"8f06660af350a487","name":"ATO","info":"","x":130,"y":3020,"wires":[]},{"id":"95a1b5f07c998f6f","type":"link in","z":"8f06660af350a487","name":"Inject ATO","links":["9921dd9ef6116be6","15f1744f0e1b44ab","813d889eec545492"],"x":225,"y":3100,"wires":[["b77b0a35880f0b1c"]]},{"id":"8ab91246d2a93f7a","type":"ha-switch","z":"8f06660af350a487","name":"ATO Pump","version":0,"debugenabled":false,"inputs":0,"outputs":2,"entityConfig":"617002a45758e6c2","enableInput":false,"outputOnStateChange":true,"outputProperties":[{"property":"outputType","propertyType":"msg","value":"state change","valueType":"str"},{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"}],"x":140,"y":3460,"wires":[["8ab6f618a76993cb"],["8ab6f618a76993cb"]]},{"id":"52afb7365a0ac61d","type":"http request","z":"8f06660af350a487","name":"","method":"POST","ret":"obj","paytoqs":"ignore","url":"http://10.10.10.23/manual-pump","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":410,"y":3440,"wires":[["440d6d83614441a4","84b4cdcb5b49ca74","680ff1dca067249e","a7bd45dda994682b"]]},{"id":"644e914d1643e784","type":"http request","z":"8f06660af350a487","name":"","method":"POST","ret":"obj","paytoqs":"ignore","url":"http://10.10.10.23/stop","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":410,"y":3540,"wires":[["1a666ad5d772d8f2","8ec88edd3e5d0110"]]},{"id":"dd6dc6e17a9d893b","type":"ha-switch","z":"8f06660af350a487","name":"ATO AutoFill","version":0,"debugenabled":false,"inputs":0,"outputs":2,"entityConfig":"e5f789072f393123","enableInput":false,"outputOnStateChange":true,"outputProperties":[{"property":"outputType","propertyType":"msg","value":"state change","valueType":"str"},{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"}],"x":150,"y":3320,"wires":[["cf7f2fde58c681ef"],["059bbf7e84ccec28"]]},{"id":"cf7f2fde58c681ef","type":"change","z":"8f06660af350a487","name":"AutoFill On","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"auto_fill\":  true}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":3300,"wires":[["6f3e02495ba14348"]]},{"id":"059bbf7e84ccec28","type":"change","z":"8f06660af350a487","name":"AutoFill Off","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"auto_fill\":  false}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":3340,"wires":[["6f3e02495ba14348"]]},{"id":"6f3e02495ba14348","type":"http request","z":"8f06660af350a487","name":"","method":"PUT","ret":"obj","paytoqs":"ignore","url":"http://10.10.10.23/configuration","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":530,"y":3320,"wires":[[]]},{"id":"15f1744f0e1b44ab","type":"link out","z":"8f06660af350a487","name":"Inject ATO","mode":"link","links":["95a1b5f07c998f6f"],"x":695,"y":3580,"wires":[]},{"id":"1a666ad5d772d8f2","type":"delay","z":"8f06660af350a487","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":580,"y":3580,"wires":[["15f1744f0e1b44ab"]]},{"id":"7f369684f39354a1","type":"function","z":"8f06660af350a487","name":"format","func":"msg.payload.corrected_volume_usage = msg.payload.today_volume_usage / 1000;\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":370,"y":3180,"wires":[["76b5ef641d7a427b"]]},{"id":"440d6d83614441a4","type":"api-call-service","z":"8f06660af350a487","name":"Notify","server":"666aa37e1d30361f","version":7,"debugenabled":false,"action":"notify.mobile_app_iphone","floorId":[],"areaId":[],"deviceId":[],"entityId":[],"labelId":[],"data":"{\"message\":\"ATO ON.\",\"title\":\"TANK ALERT\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":true,"domain":"notify","service":"mobile_app_iphone","x":570,"y":3400,"wires":[[]]},{"id":"84b4cdcb5b49ca74","type":"alexa-remote-routine","z":"8f06660af350a487","name":"ALERT","account":"5c36519b4998d824","routineNode":{"type":"speakAtVolume","payload":{"type":"announcement","text":{"type":"str","value":"WARNING: A T O  PUMP ACTIVATED "},"volume":{"type":"num","value":"20"},"mode":"set","devices":["1467efeaa741422bbee0d6f0d4b0515d"]}},"x":690,"y":3400,"wires":[[]]},{"id":"8ab6f618a76993cb","type":"switch","z":"8f06660af350a487","name":"","property":"payload","propertyType":"msg","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":270,"y":3460,"wires":[["52afb7365a0ac61d"],["644e914d1643e784"]]},{"id":"1eb58491bdc3eb9e","type":"delay","z":"8f06660af350a487","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":760,"y":3440,"wires":[["813d889eec545492"]]},{"id":"813d889eec545492","type":"link out","z":"8f06660af350a487","name":"Inject ATO","mode":"link","links":["95a1b5f07c998f6f"],"x":865,"y":3440,"wires":[]},{"id":"a7bd45dda994682b","type":"delay","z":"8f06660af350a487","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":580,"y":3480,"wires":[["29666577316e52e1"]]},{"id":"29666577316e52e1","type":"api-call-service","z":"8f06660af350a487","name":"","server":"666aa37e1d30361f","version":7,"debugenabled":false,"action":"switch.turn_off","floorId":[],"areaId":[],"deviceId":[],"entityId":["switch.ato_pump"],"labelId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":true,"domain":"switch","service":"turn_off","x":760,"y":3480,"wires":[[]]},{"id":"8ec88edd3e5d0110","type":"delay","z":"8f06660af350a487","name":"","pauseType":"delay","timeout":"15","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":580,"y":3540,"wires":[["b243e78b1b0dbcfa"]]},{"id":"087c4751f47f7cc0","type":"alexa-remote-routine","z":"8f06660af350a487","name":"ALERT","account":"5c36519b4998d824","routineNode":{"type":"speakAtVolume","payload":{"type":"announcement","text":{"type":"msg","value":"payload.message"},"volume":{"type":"num","value":"50"},"mode":"set","devices":["1467efeaa741422bbee0d6f0d4b0515d"]}},"x":1150,"y":3540,"wires":[[]]},{"id":"879fca8f03c5f3b9","type":"function","z":"8f06660af350a487","name":"format","func":"let message;\n\nif (msg.payload.water_level === 'desired_level_1') {\n    message = 'Sump at desired level(low)';\n} else if (msg.payload.water_level === 'desired_level_2') {\n    message = 'Sump at desired level(high)';\n} else if (msg.payload.water_level === 'below') {\n    message = 'Caution: Sump BELOW desired level';\n} else if (msg.payload.water_level === 'high') {\n    message = 'Caution: Sump ABOVE desired level';\n} else {\n    message = 'Caution: Sump level unknown';\n}\n\n// Set the payload message\nmsg.payload.water_level = message;\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":3120,"wires":[["19cc21ed9c6452f8"]]},{"id":"b85f5af129d9d65b","type":"function","z":"8f06660af350a487","name":"format","func":"let message;\n\nif (msg.payload.mode === 'auto') {\n    message = 'ATO Working normally';\n} else if (msg.payload.water_level === 'empty') {\n    message = 'ATO Resevoir Empty';\n\n} else {\n    message = 'Caution: ATO Status Unknown';\n}\n\n// Set the payload message\nmsg.payload.mode = message;\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":3040,"wires":[["d8f4f28fa558ae51"]]},{"id":"680ff1dca067249e","type":"api-current-state","z":"8f06660af350a487","name":"Get Initial Usage","server":"666aa37e1d30361f","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.ato_today_s_usage","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"ato_initial_usage","propertyType":"flow","value":"","valueType":"entityState"}],"for":0,"forType":"num","forUnits":"minutes","x":600,"y":3440,"wires":[["1eb58491bdc3eb9e"]]},{"id":"b243e78b1b0dbcfa","type":"api-current-state","z":"8f06660af350a487","name":"Get Final Usage","server":"666aa37e1d30361f","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.ato_today_s_usage","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"ato_final_usage","propertyType":"flow","value":"","valueType":"entityState"}],"for":0,"forType":"num","forUnits":"minutes","x":760,"y":3540,"wires":[["c3b1b09e9441f8e3"]]},{"id":"c3b1b09e9441f8e3","type":"function","z":"8f06660af350a487","name":"Calculate Volume","func":"// Get stored usage values\nconst initialUsage = parseFloat(flow.get('ato_initial_usage') || 0);\nconst finalUsage = parseFloat(flow.get('ato_final_usage') || 0);\n\nconst volumeUsed = finalUsage - initialUsage;\n\n// Format message based on volume\nlet message;\nif (volumeUsed >= 1) {\n    message = `ATO used ${volumeUsed.toFixed(2)} liters`;\n} else if (volumeUsed > 0) {\n    const volumeInMl = volumeUsed * 1000;\n    message = `ATO used ${volumeInMl.toFixed(0)} ml`;\n} else {\n    message = `ATO used 0 ml (no water detected)`;\n}\n\n// Create notification payload\nmsg.payload = {\n    message: message,\n    title: \"ATO Volume Report\"\n};\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":960,"y":3540,"wires":[["087c4751f47f7cc0"]]},{"id":"e0cc14607f8ffb8b","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"527396ce84a3e9d3","name":"rs_ato_water_level","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Sump Water Level"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"ea7abf85b7b0c995","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"527396ce84a3e9d3","name":"rs_ato_today","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"ATO Today's Usage"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":"water"},{"property":"unit_of_measurement","value":"L"},{"property":"state_class","value":""}],"resend":true,"debugEnabled":false},{"id":"163b7e49680eacc0","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"527396ce84a3e9d3","name":"rs_ato_pump","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"ATO Pump"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"b3aea473176252db","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"527396ce84a3e9d3","name":"Internal Sump Temp","version":6,"entityType":"sensor","haConfig":[{"property":"name","value":"AtoTemp"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":"temperature"},{"property":"unit_of_measurement","value":"°C"},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"d37f7405beee8e84","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"527396ce84a3e9d3","name":"rs_ato_mode","version":6,"entityType":"sensor","haConfig":[{"property":"name","value":"ATO Mode"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":true,"debugEnabled":false},{"id":"617002a45758e6c2","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"527396ce84a3e9d3","name":"ato_pump","version":6,"entityType":"switch","haConfig":[{"property":"name","value":"ATO Pump"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""}],"resend":false,"debugEnabled":false},{"id":"e5f789072f393123","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"527396ce84a3e9d3","name":"ato_autofill","version":6,"entityType":"switch","haConfig":[{"property":"name","value":"ATO AutoFill"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""}],"resend":false,"debugEnabled":false},{"id":"666aa37e1d30361f","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":true,"heartbeatInterval":"30","areaSelector":"id","deviceSelector":"id","entitySelector":"id","statusSeparator":": ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"default","statusTimeFormat":"h:m","enableGlobalContextStore":true},{"id":"5c36519b4998d824","type":"alexa-remote-account","name":"Alexa","authMethod":"proxy","proxyOwnIp":"10.10.10.50","proxyPort":"3456","cookieFile":"alexa","refreshInterval":"3","alexaServiceHost":"alexa.amazon.com.au","pushDispatchHost":"","amazonPage":"amazon.com.au","acceptLanguage":"en-US","onKeywordInLanguage":"on","userAgent":"","usePushConnection":"on","autoInit":"on"},{"id":"527396ce84a3e9d3","type":"ha-device-config","name":"ReefATO","hwVersion":"","manufacturer":"Node-RED","model":"","swVersion":""}]

ReefMat:

[{"id":"d8720d6930f04d6c","type":"ha-sensor","z":"8f06660af350a487","name":"MatMode","entityConfig":"42a0b5a87ee4a6ed","version":0,"state":"payload.mode","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":740,"y":3840,"wires":[[]]},{"id":"83dc10564bc2ed70","type":"http request","z":"8f06660af350a487","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"http://10.10.10.24/mode","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":470,"y":3840,"wires":[["fc000ae46ce15464"]]},{"id":"eea4ebc301780fc6","type":"inject","z":"8f06660af350a487","name":"Every 20 Minutes","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"1200","crontab":"","once":true,"onceDelay":"60","topic":"","payload":"","payloadType":"date","x":170,"y":3840,"wires":[["83dc10564bc2ed70"]]},{"id":"b2dc686df030d733","type":"inject","z":"8f06660af350a487","name":"Every 15 Minutes","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"900","crontab":"","once":true,"onceDelay":"15","topic":"","payload":"","payloadType":"date","x":990,"y":3780,"wires":[["bae22fd0888fe0b8"]]},{"id":"bae22fd0888fe0b8","type":"http request","z":"8f06660af350a487","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"http://10.10.10.24/dashboard","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":970,"y":3980,"wires":[["0764208c1407d058","3bb298f8f8a72216","e1c6cdaab3928f55","64565185627af22c","02d924a3e6a5a080","2470af229c63788a","9601a59e79c02431","ce8620d40cd29105"]]},{"id":"0764208c1407d058","type":"ha-sensor","z":"8f06660af350a487","name":"MatSensor","entityConfig":"fda19838d43d97fc","version":0,"state":"payload.unclean_sensor","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":1250,"y":4040,"wires":[[]]},{"id":"3bb298f8f8a72216","type":"ha-sensor","z":"8f06660af350a487","name":"MatAutoAdvance","entityConfig":"0bee1cb3914e5e15","version":0,"state":"payload.auto_advance","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":1270,"y":4000,"wires":[[]]},{"id":"ce8620d40cd29105","type":"ha-sensor","z":"8f06660af350a487","name":"MatLastAdvanceCause","entityConfig":"e247756b63567ed8","version":0,"state":"payload.last_advance_cause","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":1290,"y":3960,"wires":[[]]},{"id":"e1c6cdaab3928f55","type":"ha-sensor","z":"8f06660af350a487","name":"MatRollLevel","entityConfig":"377b9e06d9d40850","version":0,"state":"payload.roll_level","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":1250,"y":3920,"wires":[[]]},{"id":"64565185627af22c","type":"ha-sensor","z":"8f06660af350a487","name":"MatRollDaysLeft","entityConfig":"1117c9c480f41ea3","version":0,"state":"payload.days_till_end_of_roll","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":1260,"y":3880,"wires":[[]]},{"id":"02d924a3e6a5a080","type":"ha-sensor","z":"8f06660af350a487","name":"MatTodaysUsage","entityConfig":"ed5d511dfb4a43ef","version":0,"state":"payload.today_usage","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":1270,"y":3840,"wires":[[]]},{"id":"2470af229c63788a","type":"ha-sensor","z":"8f06660af350a487","name":"MatDailyUsage","entityConfig":"3a8459e4657ff702","version":0,"state":"payload.daily_average_usage","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":1260,"y":3800,"wires":[[]]},{"id":"9601a59e79c02431","type":"ha-sensor","z":"8f06660af350a487","name":"MatTotalUsage","entityConfig":"1eab63fe7c5278b9","version":0,"state":"payload.total_usage","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":1260,"y":3760,"wires":[[]]},{"id":"501d5d8fa02b7f1a","type":"comment","z":"8f06660af350a487","name":"Roller Mat","info":"http://DeviceIP/reef-matt/settings\nhttp://DeviceIP/dashboard\nhttp://DeviceIP/mode\n\nPOST https://cloud.reef-beat.com/reef-mat/94b5557ea464/advance\nPOST http://DeviceIP/advance\nGET http://DeviceIP/configuration\nauto_advance: true\nend_of_roll_monitor: 3\ncustom_advance_value: 2.25\nschedule_enable: false\nschedule_time: 0\nschedule_length: 20\nfresh_water_aquarium: false\nposition: \"right\"\nmodel: \"RSMAT500\"\nauto_delay: 30\nblockage_recover_retries: 3\nmat_end_length: 100\nec_water_threshold: 300\nmotor_blockage_threshold: 2000\nblockage_recover_interval: 3\nrelief_motor_reverse_time: 200\ndispatch_timeout_sec: 10\nmotor_speed: 3000\nenable_ec_sensor_detection: true\nec_fresh_water_threshold: 30","x":120,"y":3660,"wires":[]},{"id":"8521e2a0c2d0befa","type":"inject","z":"8f06660af350a487","name":"Every 4 Hours","props":[{"p":"payload"}],"repeat":"14400","crontab":"","once":true,"onceDelay":"30","topic":"","payload":"ReefMatt 1200","payloadType":"str","x":160,"y":3780,"wires":[["8df769ab34e52076"]]},{"id":"8df769ab34e52076","type":"ha-sensor","z":"8f06660af350a487","name":"MatModel","entityConfig":"f77f5ec5d961c4f6","version":0,"state":"payload","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":740,"y":3780,"wires":[[]]},{"id":"9c43f7b147331ad7","type":"http request","z":"8f06660af350a487","name":"","method":"POST","ret":"obj","paytoqs":"ignore","url":"http://10.10.10.24/advance","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":330,"y":3980,"wires":[["ed567421eddccedf"]]},{"id":"6ece4387938b76ed","type":"ha-button","z":"8f06660af350a487","name":"MatAdvance","version":0,"debugenabled":false,"outputs":1,"entityConfig":"00519b0a4cd0ae64","outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":150,"y":3980,"wires":[["9c43f7b147331ad7"]]},{"id":"c41b3fb49efad272","type":"delay","z":"8f06660af350a487","name":"","pauseType":"delay","timeout":"3","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":740,"y":3900,"wires":[["83dc10564bc2ed70"]]},{"id":"377176c34dada85b","type":"ha-switch","z":"8f06660af350a487","name":"ReefMat AutoAdvance","version":0,"debugenabled":false,"inputs":0,"outputs":2,"entityConfig":"cc215d7216d7769b","enableInput":false,"outputOnStateChange":true,"outputProperties":[{"property":"outputType","propertyType":"msg","value":"state change","valueType":"str"},{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"}],"x":180,"y":4060,"wires":[["21dd61e8be999470"],["b17f6e292f723362"]]},{"id":"21dd61e8be999470","type":"change","z":"8f06660af350a487","name":"AutoAdvance On","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"auto_advance\":  true}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":410,"y":4040,"wires":[["3f019cddf6bf11ae"]]},{"id":"3f019cddf6bf11ae","type":"http request","z":"8f06660af350a487","name":"","method":"PUT","ret":"obj","paytoqs":"ignore","url":"http://10.10.10.24/configuration","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":610,"y":4060,"wires":[[]]},{"id":"b17f6e292f723362","type":"change","z":"8f06660af350a487","name":"AutoAdvance Off","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"auto_advance\":  false}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":410,"y":4080,"wires":[["3f019cddf6bf11ae"]]},{"id":"fc000ae46ce15464","type":"function","z":"8f06660af350a487","name":"format","func":"let message;\n\nif (msg.payload.mode === 'high_water') {\n    message = 'Caution: ReefMat HIGH Water';\n} else if (msg.payload.mode === 'auto') {\n    message = 'ReefMat working normally';\n} else if (msg.payload.mode === 'torn_mat') {\n    message = 'Caution: ReefMat slipping/jammed';\n} else {\n    message = 'Caution: ReefMat Status UNKNOWN';\n}\n\n// Set the payload message\nmsg.payload.mode = message;\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":610,"y":3840,"wires":[["d8720d6930f04d6c"]]},{"id":"a4959067acb0e136","type":"server-state-changed","z":"8f06660af350a487","name":"High Water","server":"666aa37e1d30361f","version":6,"outputs":2,"exposeAsEntityConfig":"","entities":{"entity":["sensor.matmode"],"substring":[],"regex":[]},"outputInitially":false,"stateType":"str","ifState":"Caution: ReefMat HIGH Water","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":140,"y":3920,"wires":[["5f95934f4ba1fee0"],[]]},{"id":"5f95934f4ba1fee0","type":"http request","z":"8f06660af350a487","name":"","method":"POST","ret":"obj","paytoqs":"ignore","url":"http://10.10.10.24/advance","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":290,"y":3920,"wires":[["1aca93dbf3e1e273"]]},{"id":"00e6ecbb737b28ac","type":"ha-sensor","z":"8f06660af350a487","name":"MatMode","entityConfig":"42a0b5a87ee4a6ed","version":0,"state":"payload.mode","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":580,"y":3920,"wires":[["c41b3fb49efad272","c204f92f69d14276"]]},{"id":"1aca93dbf3e1e273","type":"change","z":"8f06660af350a487","name":"change","rules":[{"t":"set","p":"payload.mode","pt":"msg","to":"Advancing due to HIGH water","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":440,"y":3920,"wires":[["00e6ecbb737b28ac"]]},{"id":"ed567421eddccedf","type":"delay","z":"8f06660af350a487","name":"","pauseType":"delay","timeout":"30","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":500,"y":3980,"wires":[["bae22fd0888fe0b8"]]},{"id":"c204f92f69d14276","type":"delay","z":"8f06660af350a487","name":"","pauseType":"delay","timeout":"30","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":740,"y":3940,"wires":[["bae22fd0888fe0b8"]]},{"id":"42a0b5a87ee4a6ed","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"70bff6cea0a47242","name":"MatMode","version":6,"entityType":"sensor","haConfig":[{"property":"name","value":"MatMode"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"fda19838d43d97fc","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"70bff6cea0a47242","name":"MatSensor","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"MatSensor"},{"property":"icon","value":"mdi:leak"},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":true},{"id":"0bee1cb3914e5e15","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"70bff6cea0a47242","name":"MatAutoAdvance","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"MatAutoAdvance"},{"property":"icon","value":"mdi:order-bool-ascending-variant"},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":true},{"id":"e247756b63567ed8","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"70bff6cea0a47242","name":"MatLastAdvanceCause","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"MatLastAdvanceCause"},{"property":"icon","value":"mdi:paper-roll"},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":true},{"id":"377b9e06d9d40850","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"70bff6cea0a47242","name":"MatRollLevel","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"MatRollLevel"},{"property":"icon","value":"mdi:paper-roll"},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":true},{"id":"1117c9c480f41ea3","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"70bff6cea0a47242","name":"MatRollDaysLeft","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"MatRollDaysLeft"},{"property":"icon","value":"mdi:calendar-today"},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"ed5d511dfb4a43ef","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"70bff6cea0a47242","name":"MatTodaysUsage","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"MatTodaysUsage"},{"property":"icon","value":"mdi:paper-roll"},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":"distance"},{"property":"unit_of_measurement","value":"cm"},{"property":"state_class","value":""}],"resend":false,"debugEnabled":true},{"id":"3a8459e4657ff702","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"70bff6cea0a47242","name":"MatDailyUsage","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"MatDailyUsage"},{"property":"icon","value":"mdi:paper-roll"},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":"distance"},{"property":"unit_of_measurement","value":"cm"},{"property":"state_class","value":"total"}],"resend":false,"debugEnabled":true},{"id":"1eab63fe7c5278b9","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"70bff6cea0a47242","name":"MatTotalUsage","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"MatTotalUsage"},{"property":"icon","value":"mdi:paper-roll"},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":"distance"},{"property":"unit_of_measurement","value":"cm"},{"property":"state_class","value":"total"}],"resend":false,"debugEnabled":true},{"id":"f77f5ec5d961c4f6","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"70bff6cea0a47242","name":"MatModel","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"MatModel"},{"property":"icon","value":"mdi:paper-roll"},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":true},{"id":"00519b0a4cd0ae64","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"70bff6cea0a47242","name":"MatAdvance","version":"6","entityType":"button","haConfig":[{"property":"name","value":"MatAdvance"},{"property":"icon","value":"mdi:paper-roll-outline"},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""}],"resend":false,"debugEnabled":true},{"id":"cc215d7216d7769b","type":"ha-entity-config","server":"666aa37e1d30361f","deviceConfig":"70bff6cea0a47242","name":"reefmat_autoadvance","version":6,"entityType":"switch","haConfig":[{"property":"name","value":"ReefMat AutoAdvance"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""}],"resend":false,"debugEnabled":false},{"id":"666aa37e1d30361f","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":true,"heartbeatInterval":"30","areaSelector":"id","deviceSelector":"id","entitySelector":"id","statusSeparator":": ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"default","statusTimeFormat":"h:m","enableGlobalContextStore":true},{"id":"70bff6cea0a47242","type":"ha-device-config","name":"RollerMat","hwVersion":"","manufacturer":"RedSea","model":"ReefMat","swVersion":""}]

I just published v0.4.0 that natively support (no need for rednode):

  • ReefLed
  • ReefMat
  • ReefDose (Partialy work in progress)
  • and ReefATO+

Because I have no ReefATO+ I can not validate the implementation. @rkarolek is helping but other volunteer will help validating.

If someone have reefwave, reef dc skimmer and/or reefrun I ll try to integrate them too.
If you need other sensors or actuators in ReefLed, ReefMat, ReefDose or ReefATO+ let me know.

I tried your integration and am unable to validate the ATO side. Reports as disconnected though it does discover the correct IP.

I understand you’re making a local integration, though if you import my flow, you should get confirmation of the correct syntax as well as tips on decluttering/making human readable without resorting to external cards.:+1:

I use node-red to get all the different brands communicating for automation and then output to HA

I’m happy with how mine is setup but it’s certainly not ‘simple’. Happy to try and contribute to your integration if it helps …

Can you send me the error messages on the logs ?
When you say disconnected you mean senors are availables but no data are set?

Sorry mate - cache issue and conflicting entities - my bad.

Yeah, your integration works but the manual pump doesn’t - assuming thats the button.

Yes the log will be usefull thx

Sorry need to go get the kids from school. I’ll post my log in an hour if you are having issues. :+1:

Maybe rename some sensors?