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
Thanks @ffirenmatana !
I added ATO to the flow. Untested. It should populate the sensors at least but please be careful testing manual pump on
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
[{"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