Red Sea LED Aquarium Lights

Ok it seems to work its only a problem of translation!

The last version v0.4.1 with the correction is pulbished. For information the disconnected value was the state of the sensor:

“leak_sensor”:{
“connected”:false,

Thanks for your help, now i just need a volunteer to test pump on and off :slight_smile:

Thanks @ffirenmatana !

I added ATO to the flow. Untested. It should populate the sensors at least but please be careful testing manual pump on :wink:

I didn’t add any mdi icons to the default sensors or add measurement units.

I tried to paste your flow but into a new one but encountered a formatting issue.

Looks like two integrations covering most devices now. Nice work all @Elwinmage

Manual pump works fine for me. Great job cleaning it up! I’ll uninstall it now unless you need anything else!

Yeah, I think there some extra ``` characters at the end. Added a line break and verified it works for me :+1:

[{"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","e13ea45a5c028112"]]},{"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":"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 = `A T O used ${volumeUsed.toFixed(2)} liters`;\n} else if (volumeUsed > 0) {\n    const volumeInMl = volumeUsed * 1000;\n    message = `A T O used ${volumeInMl.toFixed(0)} ml`;\n} else {\n    message = `A T O 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":"e13ea45a5c028112","type":"debug","z":"8f06660af350a487","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":740,"y":3340,"wires":[]},{"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":"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":""}]

Thanks for your help @ffirenmatana

Is now available directly in hacs, no need to add a custom repositary.

Just reload your hacs integration and search for reefbeat or red sea

Can someone publish the values of :
http://[DEVICE_IP]/
http://[DEVICE_IP]/device-info
http://[DEVICE_IP]/dashboard
http://[DEVICE_IP]/firmware

for ReefRun, Reef Wave and/or Reef DC skimmer?

And also

http://[DEVICE_IP]/pump/settings for ReefRun

It will help me to add them to the integration.

Thanks

Hi @Elwinmage

They’re in my node-red version but hope these help:

ReefRun:
GET http://[ReefRunIP]/dashboard

{"mode":"auto","is_internet_connected":true,"battery_level":"high","time_error":false,"restore_settings":true,"linked":false,"synced":true,"ec_sensor_connected":false,"pump_1":{"name":"Chiller","type":"return","model":"return-6","state":"operational","reconnect_pump":false,"sensor_controlled":false,"missing_pump":false,"missing_sensor":false,"schedule_enabled":true,"intensity":71,"pulse":0,"temperature":27.31707191467285},"pump_2":{"name":"","type":"unknown","model":"unknown","state":"operational","reconnect_pump":false,"sensor_controlled":false,"missing_pump":false,"missing_sensor":false,"schedule_enabled":false,"intensity":0,"pulse":0,"temperature":0}}

GET http://[ReefRunIP]/pump/settings

{"linked":false,"synced":true,"overskimming":{"enabled":true,"threshold":55},"fullcup_enabled":true,"pump_1":{"id":1,"name":"Chiller","type":"return","model":"return-6","sensor_controlled":false,"schedule_enabled":true,"schedule":[{"st":0,"ti":71,"pd":0}]},"pump_2":{"id":2,"name":"","type":"unknown","model":"unknown","sensor_controlled":false,"schedule_enabled":false,"schedule":[{"st":0,"ti":71,"pd":0}]}}

GET http://[ReefRunIP]/device-info

{"name":"RSRUN-3026381396","hw_type":"reef-run","hw_model":"RSRUN","hw_revision":"v1_22A","hwid":"349454ea62b4","success":true,"message":"get device info successfully"}

GET http://[ReefRunIP]/firmware

{"last_update":"2025-06-04T14:29:54+10:00","last_update_attempt":"2025-06-04T14:27:25+10:00","version":"1.0.23","update_server":"http://firmware.reef-beat.com/firmware/download/reef-run?framework=i","last_message":"updated_successful","framework_version":"4.3.2","chip_revision":"RSRUN","success":true,"message":"firmware check success"}

ReefWave:
GET http://[ReefWaveIP]/device-info

{"hw_type":"reef-wave","hw_model":"RSWAVE45","name":"RSWAVE45-16422546","status":"unpaired","hwid":"null"}

GET http://[ReefWaveIP]/dashboard

Not found: /dashboard

GET http://[ReefWaveIP]/firmware

{"version":"2.10.4","board":"esp8266","framework":"a","server":"http://firmware.reef-beat.com/firmware/download/reef-wave","last_update":"2023-11-16T18:42:00+10:00","last_update_attempt":"2023-11-16T18:40:20+10:00","last_message":"update successful","framework_version":"SDK:2.2.2-dev(38a443e)/Core:3.1.2=30102000/lwIP:STABLE-2_1_3_RELEASE/glue:1.2-65-g06164fb/BearSSL:b024386","chip_version":"3.3.0","chip_last_update":"never","chip_last_update_attempt":"2023-11-16T18:40:19+10:00","chip_last_message":"no wave-controller updates found"}

DC Skimmer runs from ReefRun controller so same endpoints and payloads just populated values for sensors.

BTW I’ve fixed some of the aquarium level calls in the node-red integration. Previously it only triggered the aquarium level feed mode if you had a reef-wave. It now does it regardless of what devices you have.

Thx a lot @thetastate

Hi all, the v0.7.0 have been published.

  • Auto detect on private network (if on same network)
  • Set scan interval for each device

LED:

  • Get and Set White, Blue and Moon values
  • Get Fan and Temperature
  • Get name and value for progams (with clouds support)
  • Group and manage LED with a virtual device

ReefMat:

  • many sensors values: auto_advance, unclean_sensor, daily_avergage_usage, today_usage, remaining_length, days_till_end_of_roll and total_usage, is_ec_sensor_connected (let me know if you want some more)
  • auto advance switch (enable/disable)
  • custom advance value: let you select the value of roll advance
  • a press button to manualy advance
  • can change the roll. For a new full roll please set “roll diameter” to min (4.0cm). It will adjust the size according to your RSMAT version. For a started roll enter the value in cm.
  • two hidden parameters: model and position if you need to reconfigure your RSMAT

ReefDose:

  • sensors: auto_dose_today, container_volume, daily_dose, daily_doses, manual_dosed_today, doses_today, remaining_days, supplement,calibration, status
  • edit daily dose
  • manual dose
  • change and control container volume
  • enable/disable schedule per pump

ReefATO+:

  • Sensors
  • Auto_fill enable/disable
  • Manual fill

REERUN

@thetastate

1. Figure out what “st” and “pd” is for in setting pump values

I think this is like the led programs.
The pump value is a table so you could add slots to have different value during the day. “st” is probably the start time in minutes from midnight.
It also could be used for a feeding schedule.

A good test will be to send the following code and see whats happen at the given time (760=13:00 in this example)

“schedule”: [
{
“st”: 0,
“ti”: 71,
“pd”: 0
},
{
“st”: 760,
“ti”: 50,
“pd”: 0
}

]

LED Management

G1 Leds use white and blue (W/B) color channels, G2 Leds use Kelvin and intensity?

I’have found a solution to convert W/B to Kelvin for G1 all LEDs (50,90 and 160)

G2 users, do you need the opposite Kelvin to W/B?

So we could choose to set color between two modes: W/B or Kelvin for all RSLED.

If so, I need for RSLED 60,115 and 170 5 points.

Change you light with the following values (8000k 12000k 15000k 20000k and 23000k) and for each value get the response from http://<IP_LED>/dashboard.
Don’t forget to send the model of your light (60,115 or 170)

Hi Wade,
the color temperature is in the v0.8.1pre
If you want to test it.

Thanks @Elwinmage

I’m good with just K and intensity but others may prefer WB.

For G2 60:

8000k

{"mode":"manual","battery_level":"high","time_error":false,"tilt_switch":false,"acclimation":{"enabled":false,"started_on":"never","duration":60,"remaining_days":0,"start_intensity_factor":0,"current_intensity_factor":100},"moon_phase":{"enabled":true,"name":"Waning Gibbous","intensity":57,"todays_moon_day":20,"next_full_moon":22,"next_new_moon":9,"started_on":1749998717},"manual":{"kelvin":8000,"intensity":100,"white":100,"white_full":100,"white_pwm":3889,"blue":0,"blue_full":0,"blue_pwm":0,"moon":0,"moon_full":0,"moon_pwm":0,"fan":0,"fan_full":0,"temperature":42.07781982421875,"frequency_khz":25,"resolution_bits":12},"current_program":{"active_preset":7,"name":"23K"}}

11900k
{"mode":"manual","battery_level":"high","time_error":false,"tilt_switch":false,"acclimation":{"enabled":false,"started_on":"never","duration":60,"remaining_days":0,"start_intensity_factor":0,"current_intensity_factor":100},"moon_phase":{"enabled":true,"name":"Waning Gibbous","intensity":57,"todays_moon_day":20,"next_full_moon":22,"next_new_moon":9,"started_on":1749998717},"manual":{"kelvin":11900,"intensity":100,"white":86,"white_full":85.6,"white_pwm":3780,"blue":79,"blue_full":78.8,"blue_pwm":3780,"moon":0,"moon_full":0,"moon_pwm":0,"fan":95,"fan_full":95.23,"temperature":52.8828125,"frequency_khz":25,"resolution_bits":12},"current_program":{"active_preset":7,"name":"23K"}}

15000k
{"mode":"manual","battery_level":"high","time_error":false,"tilt_switch":false,"acclimation":{"enabled":false,"started_on":"never","duration":60,"remaining_days":0,"start_intensity_factor":0,"current_intensity_factor":100},"moon_phase":{"enabled":true,"name":"Waning Gibbous","intensity":57,"todays_moon_day":20,"next_full_moon":22,"next_new_moon":9,"started_on":1749998717},"manual":{"kelvin":15000,"intensity":100,"white":60,"white_full":60,"white_pwm":3231,"blue":85,"blue_full":85,"blue_pwm":3824,"moon":0,"moon_full":0,"moon_pwm":0,"fan":90,"fan_full":90.35,"temperature":50.4674072265625,"frequency_khz":25,"resolution_bits":12},"current_program":{"active_preset":7,"name":"23K"}}

20100k
{"mode":"manual","battery_level":"high","time_error":false,"tilt_switch":false,"acclimation":{"enabled":false,"started_on":"never","duration":60,"remaining_days":0,"start_intensity_factor":0,"current_intensity_factor":100},"moon_phase":{"enabled":true,"name":"Waning Gibbous","intensity":57,"todays_moon_day":20,"next_full_moon":22,"next_new_moon":9,"started_on":1749998717},"manual":{"kelvin":20100,"intensity":100,"white":24,"white_full":24,"white_pwm":1788,"blue":94,"blue_full":94.2,"blue_pwm":3908,"moon":0,"moon_full":0,"moon_pwm":0,"fan":0,"fan_full":0,"temperature":46.740509033203125,"frequency_khz":25,"resolution_bits":12},"current_program":{"active_preset":7,"name":"23K"}}

23000k
{"mode":"manual","battery_level":"high","time_error":false,"tilt_switch":false,"acclimation":{"enabled":false,"started_on":"never","duration":60,"remaining_days":0,"start_intensity_factor":0,"current_intensity_factor":100},"moon_phase":{"enabled":true,"name":"Waning Gibbous","intensity":57,"todays_moon_day":20,"next_full_moon":22,"next_new_moon":9,"started_on":1749998717},"manual":{"kelvin":23000,"intensity":100,"white":0,"white_full":0,"white_pwm":0,"blue":100,"blue_full":100,"blue_pwm":3967,"moon":0,"moon_full":0,"moon_pwm":0,"fan":90,"fan_full":90.35,"temperature":50.37847900390625,"frequency_khz":25,"resolution_bits":12},"current_program":{"active_preset":7,"name":"23K"}}

Sorry some of them weren’t bang on the numbers you asked as the mushroom sliders can be a bit sticky.

thanks a lot @thetastate. Can you give me 2 or 3 more values between 8000 and 12000K. The linear regression seems not good enough in this range.

Is there a way to turn off/on the RSLED90 via curl?

Since I have made my own integration with RedSea, APEX and custom probes I would like to turn off the LED’s via a POST/PUT call.

Hi @permudious, you can send :

  • a post request http://<your_led_ip>/off to turn it off.
  • a delete request http://<your_led_ip>/off to turn it on.

For other API end points, you can read:
in

the custom_components/redsea/reefbeat.py file

Hi everyone, the version 1.0.0 has been published. It supports all ReefBeat devices (ReefATO+,ReefDose, ReefLED,ReefMat, ReefRun and ReefWave).

Now it’s time to work on a specific card for reeftank management (Reefbeat devices will be managed automatically as well as other connected devices on demand).

If you want to help (test or code), you can contact me.

Enjoy!

Hi Elwin,

I am trying to use your integration, when I try to connect to the cloud I am unable to to this, what do I have to do to make this work?

Hi @Permudious
Did you follow the instructions as explain here

Can you open a issue here:

Hi @Elwinmage
I followed the instructions, seems like something else is going wrong outside the HA Integration. Even with Postman I am not able to connect with the cloud. Seems like a setting to connect with the cloud.

I can open an issue, but I am for sure it has nothing to do with your HA integration.