csuermann / node-red-contrib-presence-faker

Node-RED node that fakes presence in a smart home by switching devices (e.g. lights) on and off at random times.
MIT License
24 stars 2 forks source link

Feature request: Allow the use of SunCalc properties for window begin and end times. #30

Open g-marsden opened 2 years ago

g-marsden commented 2 years ago

In addition to allowing the Window Begin and End to be set as a time, would it also be possible to allow them to be set as a SunCalc property (e.g. sunrise, sunset, etc.)?

csuermann commented 2 years ago

Hi @g-marsden,

As a workaround you might want to combine presence-faker with the soncron node like this:

[{"id":"8db08b64.688498","type":"presence-faker","z":"b8996d00.12606","name":"","onPayload":"ON","onPayloadType":"str","onTopic":"","offPayload":"OFF","offPayloadType":"str","offTopic":"","windowBegin":"06:00","windowEnd":"06:01","minDurationHours":0,"minDurationMinutes":"2","minDurationSeconds":0,"minDuration":"120","maxDurationHours":0,"maxDurationMinutes":"5","maxDurationSeconds":0,"maxDuration":"300","minCount":"2","maxCount":"5","startupBehavior":"onStartup","actionOnDisable":"none","firstBlockType":"off","lastBlockType":"off","isLoggingEnabled":false,"x":1000,"y":280,"wires":[[]]},{"id":"5f8d5646.1c9208","type":"suncron","z":"b8996d00.12606","name":"","lat":"52.579659699999996","lon":"13.435244399999999","replay":false,"ejectScheduleOnUpdate":true,"sunrisePayload":"sunrise","sunrisePayloadType":"str","sunriseTopic":"","sunriseOffsetType":1,"sunriseOffsetHours":0,"sunriseOffsetMinutes":0,"sunriseOffset":0,"sunriseEndPayload":"","sunriseEndPayloadType":"str","sunriseEndTopic":"","sunriseEndOffsetType":1,"sunriseEndOffsetHours":0,"sunriseEndOffsetMinutes":0,"sunriseEndOffset":0,"goldenHourEndPayload":"","goldenHourEndPayloadType":"str","goldenHourEndTopic":"","goldenHourEndOffsetType":1,"goldenHourEndOffsetHours":0,"goldenHourEndOffsetMinutes":0,"goldenHourEndOffset":0,"solarNoonPayload":"","solarNoonPayloadType":"str","solarNoonTopic":"","solarNoonOffsetType":1,"solarNoonOffsetHours":0,"solarNoonOffsetMinutes":0,"solarNoonOffset":0,"goldenHourPayload":"","goldenHourPayloadType":"str","goldenHourTopic":"","goldenHourOffsetType":1,"goldenHourOffsetHours":0,"goldenHourOffsetMinutes":0,"goldenHourOffset":0,"sunsetStartPayload":"","sunsetStartPayloadType":"str","sunsetStartTopic":"","sunsetStartOffsetType":1,"sunsetStartOffsetHours":0,"sunsetStartOffsetMinutes":0,"sunsetStartOffset":0,"sunsetPayload":"sunset","sunsetPayloadType":"str","sunsetTopic":"","sunsetOffsetType":1,"sunsetOffsetHours":0,"sunsetOffsetMinutes":0,"sunsetOffset":0,"duskPayload":"","duskPayloadType":"str","duskTopic":"","duskOffsetType":1,"duskOffsetHours":0,"duskOffsetMinutes":0,"duskOffset":0,"nauticalDuskPayload":"","nauticalDuskPayloadType":"str","nauticalDuskTopic":"","nauticalDuskOffsetType":1,"nauticalDuskOffsetHours":0,"nauticalDuskOffsetMinutes":0,"nauticalDuskOffset":0,"nightPayload":"","nightPayloadType":"str","nightTopic":"","nightOffsetType":1,"nightOffsetHours":0,"nightOffsetMinutes":0,"nightOffset":0,"nadirPayload":"","nadirPayloadType":"str","nadirTopic":"","nadirOffsetType":1,"nadirOffsetHours":0,"nadirOffsetMinutes":0,"nadirOffset":0,"nightEndPayload":"","nightEndPayloadType":"str","nightEndTopic":"","nightEndOffsetType":1,"nightEndOffsetHours":0,"nightEndOffsetMinutes":0,"nightEndOffset":0,"nauticalDawnPayload":"","nauticalDawnPayloadType":"str","nauticalDawnTopic":"","nauticalDawnOffsetType":1,"nauticalDawnOffsetHours":0,"nauticalDawnOffsetMinutes":0,"nauticalDawnOffset":0,"dawnPayload":"","dawnPayloadType":"str","dawnTopic":"","dawnOffsetType":1,"dawnOffsetHours":0,"dawnOffsetMinutes":0,"dawnOffset":0,"x":600,"y":280,"wires":[["d2acfb9f.e06f98"]]},{"id":"d2acfb9f.e06f98","type":"function","z":"b8996d00.12606","name":"PF config","func":"if (msg.topic != 'suncron:schedule') {\n    return\n}\n\nconst windowBeginEvent = 'sunrise'\nconst windowEndEvent = 'sunset'\n\nconst windowBegin = msg.payload[windowBeginEvent].cronTime.substring(11)\nconst windowEnd = msg.payload[windowEndEvent].cronTime.substring(11)\n\nreturn {\n    payload: {\n      windowBegin,\n      windowEnd\n    }\n}\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":280,"wires":[["e810fc0f.7778d","8db08b64.688498"]]},{"id":"e810fc0f.7778d","type":"debug","z":"b8996d00.12606","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":990,"y":380,"wires":[]}]

To adjust this example to your own needs, you'd have to define a payload for the two relevant sun events in the suncron node as well as changing the windowBeginEvent and windowEndEvent constants in the PF config function-node respectively.

Hope that helps.

theautomation commented 2 years ago

In addition to allowing the Window Begin and End to be set as a time, would it also be possible to allow them to be set as a SunCalc property (e.g. sunrise, sunset, etc.)?

+1