This is a gold mine of information. Thank you all for the posts and sharing knowledge.
I'll add my integration for loadsh*tting and managing my devices during these times.
First a grid check sensor in Home Assistant. Add to sensor.yaml or similar under sensors.
#====================
# -- Eskom Status --
#====================
- platform: template
sensors:
gridstatus:
friendly_name: "EskomStatus"
value_template: >
{% if states('sensor.sunsynk_grid_ct') == "0" %}
DOWN/LOADSHEDDING
{% else %}
UP
{% endif %}
Then in Node-Red the automation.
[{"id":"8e57e33b932a226e","type":"function","z":"c7b4c3f030b80b8d","name":"Compile","func":"var state = msg.payload;\nvar _RptData = {}\nif (state === \"on\"){\n _RptData\t= {\n \"content\":\"ESKOM - Power ONLINE\",\n \"chatId\":980022075,\n \"type\":\"message\",\n \"caption\":\"Eskom online\"\n };\n}\nelse\n{\n _RptData\t= {\n \"content\":\"ESKOM - Power OFFLINE\",\n \"chatId\":980022075,\n \"type\":\"message\",\n \"caption\":\"Eskom Offline\"\n };\n}\nOutput = {\n \"payload\": _RptData,\n \"topic\": \"ESKOM - Power\"\n }\nnode.status({fill:\"green\",shape:\"ring\",text:state});\nreturn Output;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":320,"wires":[["bcabaee8281f0fac"]]},{"id":"bcabaee8281f0fac","type":"telegram sender","z":"c7b4c3f030b80b8d","name":"","bot":"9d61a0a3801cd7b5","haserroroutput":false,"outputs":1,"x":970,"y":320,"wires":[[]]},{"id":"b3db5bc617bc9d44","type":"api-call-service","z":"c7b4c3f030b80b8d","name":"PoolPump","server":"9161ae20.ff364","version":3,"debugenabled":false,"service_domain":"homeassistant","service":"turn_{{payload}}","entityId":"switch.pool_pump","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"data"}],"queue":"none","x":950,"y":120,"wires":[[]]},{"id":"f59c6247f8810dc7","type":"api-call-service","z":"c7b4c3f030b80b8d","name":"Kitchen Geyser","server":"9161ae20.ff364","version":3,"debugenabled":false,"service_domain":"homeassistant","service":"turn_{{payload}}","entityId":"switch.kitchen_geyser","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"data"}],"queue":"none","x":960,"y":160,"wires":[[]]},{"id":"1f88266a271ef945","type":"api-call-service","z":"c7b4c3f030b80b8d","name":"HeatPump","server":"9161ae20.ff364","version":3,"debugenabled":false,"service_domain":"homeassistant","service":"turn_{{payload}}","entityId":"switch.heatpump","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"data"}],"queue":"none","x":950,"y":80,"wires":[[]]},{"id":"17238079d500fc07","type":"poll-state","z":"c7b4c3f030b80b8d","name":"gridstatus","server":"9161ae20.ff364","version":2,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"updateinterval":"15","updateIntervalType":"num","updateIntervalUnits":"seconds","outputinitially":true,"outputonchanged":true,"entity_id":"sensor.gridstatus","state_type":"str","halt_if":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"x":100,"y":100,"wires":[["07f5d2d279c264d4"]]},{"id":"f6322352dd6a69be","type":"switch","z":"c7b4c3f030b80b8d","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"DOWN/LOADSHEDDING","vt":"str"},{"t":"eq","v":"UP","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":350,"y":100,"wires":[["04985572560e6290"],["bd125a560ef49f64"]]},{"id":"04985572560e6290","type":"change","z":"c7b4c3f030b80b8d","name":"Off","rules":[{"t":"set","p":"payload","pt":"msg","to":"off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":80,"wires":[["4f7aaa375be1f2e7","0fc936b714cbaa25","1f88266a271ef945","b3db5bc617bc9d44","f59c6247f8810dc7","25f52b55917be548"]]},{"id":"bd125a560ef49f64","type":"change","z":"c7b4c3f030b80b8d","name":"On","rules":[{"t":"set","p":"payload","pt":"msg","to":"on","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":260,"wires":[["4f7aaa375be1f2e7"]]},{"id":"37d759091daec1ed","type":"comment","z":"c7b4c3f030b80b8d","name":"Check if ESKOM Power OFF","info":"","x":160,"y":60,"wires":[]},{"id":"4f7aaa375be1f2e7","type":"rbe","z":"c7b4c3f030b80b8d","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":true,"property":"payload","topi":"topic","x":630,"y":260,"wires":[["8e57e33b932a226e","1f88266a271ef945","25f52b55917be548","99e0e5f5f65f11ae"]]},{"id":"90424dc37d4c62fc","type":"debug","z":"c7b4c3f030b80b8d","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":930,"y":360,"wires":[]},{"id":"07f5d2d279c264d4","type":"delay","z":"c7b4c3f030b80b8d","name":"Limit","pauseType":"rate","timeout":"1","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"minute","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"allowrate":false,"outputs":1,"x":230,"y":100,"wires":[["f6322352dd6a69be"]]},{"id":"0fc936b714cbaa25","type":"api-current-state","z":"c7b4c3f030b80b8d","name":"Load","server":"9161ae20.ff364","version":2,"outputs":2,"halt_if":"1000","halt_if_type":"num","halt_if_compare":"gt","entity_id":"sensor.sunsynk_load_grid_inverter","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":630,"y":360,"wires":[["d89f5bae6d0108c5"],[]]},{"id":"d89f5bae6d0108c5","type":"function","z":"c7b4c3f030b80b8d","name":"Compile","func":"var state = parseInt(msg.payload);\nvar _RptData = {}\nif (state > 1000){\n _RptData\t= {\n \"content\":\"Eskom Offline: Power High Usage: \" + state + \"W\",\n \"chatId\":980022075,\n \"type\":\"message\",\n \"caption\":\"Eskom offline\"\n };\n}\nOutput = {\n \"payload\": _RptData,\n \"topic\": \"ESKOM - Power\"\n }\nnode.status({fill:\"green\",shape:\"ring\",text:state});\nreturn Output;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":360,"wires":[["90424dc37d4c62fc","bcabaee8281f0fac"]]},{"id":"44b7efe418ecfabe","type":"comment","z":"c7b4c3f030b80b8d","name":"Alert if High Power while Eskom Down","info":"","x":390,"y":360,"wires":[]},{"id":"44d0b6a6efa17dbb","type":"comment","z":"c7b4c3f030b80b8d","name":"Stop high Power devices while Eskom Offline","info":"","x":1050,"y":40,"wires":[]},{"id":"25f52b55917be548","type":"api-call-service","z":"c7b4c3f030b80b8d","name":"Washing Machine","server":"9161ae20.ff364","version":3,"debugenabled":false,"service_domain":"homeassistant","service":"turn_{{payload}}","entityId":"switch.shelly_shsw_pm_washing","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"data"}],"queue":"none","x":970,"y":200,"wires":[[]]},{"id":"35aa676f28988b4a","type":"api-call-service","z":"c7b4c3f030b80b8d","name":"Notify Kemp","server":"9161ae20.ff364","version":3,"debugenabled":false,"service_domain":"notify","service":"mobile_app_lm_g900","entityId":"","data":"{\t \"message\":payload,\t \"title\":\"Eskom Power\"\t}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":950,"y":400,"wires":[[]]},{"id":"99e0e5f5f65f11ae","type":"function","z":"c7b4c3f030b80b8d","name":"Compile","func":"var state = msg.payload;\nvar _RptData = {}\nif (state === \"on\"){\n msg.payload = \"ESKOM - Power ONLINE\";\n}\nelse\n{\n msg.payload = \"ESKOM - Power OFFLINE\";\n}\nnode.status({fill:\"green\",shape:\"ring\",text:state});\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":400,"wires":[["35aa676f28988b4a","b83120e61b9c2d7b","b054b7f73a57f7e2","73e13f64cd5ef2cb"]]},{"id":"9d61a0a3801cd7b5","type":"telegram bot","botname":"Snipe30Bot","usernames":"@KempMQTT","chatids":"980022075","baseapiurl":"","updatemode":"polling","pollinterval":"300","usesocks":false,"sockshost":"","socksport":"6667","socksusername":"anonymous","sockspassword":"","bothost":"","botpath":"","localbotport":"8443","publicbotport":"8443","privatekey":"","certificate":"","useselfsignedcertificate":false,"sslterminated":false,"verboselogging":false},{"id":"9161ae20.ff364","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30}]
The nodered flows check if gridstatus sensor is UP or DOWN, and then disables high power devices while load shedding is active.
It will also send a notification to the household phones via Telegram and Home assistant app when load shedding starts and ends.
It also checks the inverter load during load shedding for high usage if another device is using too much power and notify me.
Lastly, the kitchen LED lights is changed to RED even during the day, to remind said household that load shedding is active. ๐ Done via 2 automations in Home Assistant.
alias: Eskom Power DOWN
description: Turn LED Strip red when Eskom Power Down
trigger:
- platform: state
entity_id: sensor.gridstatus
from: UP
to: DOWN/LOADSHEDDING
condition: []
action:
- service: light.turn_on
target:
device_id: 9b743a2e692959b003677103dcad0e71
data:
brightness_pct: 100
rgb_color:
- 255
- 0
- 0
mode: single
alias: Eskom Power UP
description: Turn LED Strip blue when Eskom Power Up
trigger:
- platform: state
entity_id: sensor.gridstatus
from: DOWN/LOADSHEDDING
to: UP
condition: []
action:
- service: light.turn_on
target:
device_id: 9b743a2e692959b003677103dcad0e71
data:
brightness_pct: 100
rgb_color:
- 0
- 135
- 255
mode: single