diff --git a/README.md b/README.md index b832c4df..57235293 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Build Status](https://github.com/aneisch/home-assistant-config/actions/workflows/check-ha-release-compatibility.yml/badge.svg)](https://github.com/aneisch/home-assistant-config/actions) [![GitHub last commit](https://img.shields.io/github/last-commit/aneisch/home-assistant-config)](https://github.com/aneisch/home-assistant-config/commits/master) [![GitHub commit activity](https://img.shields.io/github/commit-activity/y/aneisch/home-assistant-config)](https://github.com/aneisch/home-assistant-config/graphs/commit-activity) -[![HA Version](https://img.shields.io/badge/Running%20Home%20Assistant-2023.8.2%20(Latest)-brightgreen)](https://github.com/home-assistant/home-assistant/releases/latest) +[![HA Version](https://img.shields.io/badge/Running%20Home%20Assistant-2023.8.4%20(Latest)-brightgreen)](https://github.com/home-assistant/home-assistant/releases/latest)
Buy Me A Coffee @@ -56,7 +56,7 @@ Also using Grafana/Influx for graphing, both running in Docker containers on NUC Description | value -- | -- Lines of ESPHome YAML | 2353 -Lines of Home Assistant YAML | 7759 +Lines of Home Assistant YAML | 7787 [Integrations](https://www.home-assistant.io/integrations/) in use | 50 Zigbee devices in [`zha`](https://www.home-assistant.io/integrations/zha/) | 26 Z-Wave devices in [`zwave_js`](https://www.home-assistant.io/integrations/zwave_js/) | 37 @@ -65,10 +65,10 @@ Description | value -- | -- Entities in the [`alarm_control_panel`](https://www.home-assistant.io/components/alarm_control_panel) domain | 1 Entities in the [`automation`](https://www.home-assistant.io/components/automation) domain | 98 -Entities in the [`binary_sensor`](https://www.home-assistant.io/components/binary_sensor) domain | 116 -Entities in the [`button`](https://www.home-assistant.io/components/button) domain | 11 +Entities in the [`binary_sensor`](https://www.home-assistant.io/components/binary_sensor) domain | 117 +Entities in the [`button`](https://www.home-assistant.io/components/button) domain | 12 Entities in the [`calendar`](https://www.home-assistant.io/components/calendar) domain | 1 -Entities in the [`camera`](https://www.home-assistant.io/components/camera) domain | 16 +Entities in the [`camera`](https://www.home-assistant.io/components/camera) domain | 17 Entities in the [`climate`](https://www.home-assistant.io/components/climate) domain | 1 Entities in the [`counter`](https://www.home-assistant.io/components/counter) domain | 1 Entities in the [`cover`](https://www.home-assistant.io/components/cover) domain | 8 @@ -81,7 +81,7 @@ Entities in the [`input_number`](https://www.home-assistant.io/components/input_ Entities in the [`input_select`](https://www.home-assistant.io/components/input_select) domain | 19 Entities in the [`input_text`](https://www.home-assistant.io/components/input_text) domain | 5 Entities in the [`light`](https://www.home-assistant.io/components/light) domain | 37 -Entities in the [`lock`](https://www.home-assistant.io/components/lock) domain | 2 +Entities in the [`lock`](https://www.home-assistant.io/components/lock) domain | 3 Entities in the [`media_player`](https://www.home-assistant.io/components/media_player) domain | 12 Entities in the [`number`](https://www.home-assistant.io/components/number) domain | 5 Entities in the [`person`](https://www.home-assistant.io/components/person) domain | 2 @@ -90,17 +90,17 @@ Entities in the [`remote`](https://www.home-assistant.io/components/remote) doma Entities in the [`scene`](https://www.home-assistant.io/components/scene) domain | 2 Entities in the [`script`](https://www.home-assistant.io/components/script) domain | 39 Entities in the [`select`](https://www.home-assistant.io/components/select) domain | 2 -Entities in the [`sensor`](https://www.home-assistant.io/components/sensor) domain | 360 +Entities in the [`sensor`](https://www.home-assistant.io/components/sensor) domain | 362 Entities in the [`siren`](https://www.home-assistant.io/components/siren) domain | 1 Entities in the [`sun`](https://www.home-assistant.io/components/sun) domain | 1 -Entities in the [`switch`](https://www.home-assistant.io/components/switch) domain | 149 +Entities in the [`switch`](https://www.home-assistant.io/components/switch) domain | 147 Entities in the [`timer`](https://www.home-assistant.io/components/timer) domain | 2 Entities in the [`tts`](https://www.home-assistant.io/components/tts) domain | 1 Entities in the [`update`](https://www.home-assistant.io/components/update) domain | 2 Entities in the [`vacuum`](https://www.home-assistant.io/components/vacuum) domain | 1 Entities in the [`weather`](https://www.home-assistant.io/components/weather) domain | 2 Entities in the [`zone`](https://www.home-assistant.io/components/zone) domain | 6 -**Total state objects** | **990** +**Total state objects** | **994** ## The HACS integrations/plugins that I use: **Appdaemon**:
[aneisch/follow_me_appdaemon](https://github.com/aneisch/follow_me_appdaemon)
diff --git a/automations.yaml b/automations.yaml index 2da957f0..d0dbebb7 100644 --- a/automations.yaml +++ b/automations.yaml @@ -492,7 +492,8 @@ - sensor.2_battery_level - sensor.3_battery_level - sensor.back_bedroom_remote_battery_level - - sensor.front_door_battery_level + - sensor.front_door_battery + - sensor.back_door_battery - sensor.garage_exterior_door_battery_level - sensor.back_bathroom_toilet_water_detector_battery_level - sensor.guest_bathroom_toilet_water_detector_battery_level @@ -677,7 +678,7 @@ condition: "{{ states('sensor.fingerprint_last_finger_id') in ['1','2'] }}" action: - service: lock.unlock - entity_id: lock.front_door + entity_id: lock.back_door - service: script.notify_wrapper data: message: "Front door unlocked by {% if states('sensor.fingerprint_last_finger_id') == '1' %}Andrew right index{% elif states('sensor.fingerprint_last_finger_id') == '2' %}Andrew left index{% else %}Unknown{% endif %}!" diff --git a/configuration.yaml b/configuration.yaml index be5453c1..ecf3faf9 100644 --- a/configuration.yaml +++ b/configuration.yaml @@ -524,6 +524,11 @@ timer: tts: - platform: picotts + - platform: microsoft + api_key: !secret AzureSpeechKey + region: centralus + gender: Male + type: GuyNeural wemo: discovery: false @@ -537,7 +542,7 @@ utility_meter: cron: "0 22 L * *" zha: - enable_quirks: true + #enable_quirks: true #custom_quirks_path: /config/custom_zha_quirks/ zigpy_config: network: diff --git a/custom_components/webrtc/__init__.py b/custom_components/webrtc/__init__.py index 7409790a..6f488efc 100644 --- a/custom_components/webrtc/__init__.py +++ b/custom_components/webrtc/__init__.py @@ -3,6 +3,7 @@ import time import uuid from pathlib import Path +from typing import Union from urllib.parse import urlencode, urljoin import homeassistant.helpers.config_validation as cv @@ -43,6 +44,7 @@ vol.Required(ATTR_ENTITY_ID): cv.entity_ids, vol.Exclusive("url", "url"): cv.string, vol.Exclusive("entity", "url"): cv.entity_id, + vol.Optional("force", default=False): bool, vol.Optional("extra"): dict, }, required=True, @@ -105,6 +107,7 @@ async def dash_cast(call: ServiceCallType): hass, call.data[ATTR_ENTITY_ID], f"{get_url(hass)}/webrtc/embed?" + urlencode(query), + call.data.get("force"), ) hass.services.async_register(DOMAIN, "create_link", create_link, CREATE_LINK_SCHEMA) @@ -146,44 +149,29 @@ async def async_unload_entry(hass: HomeAssistantType, entry: ConfigEntry): return True -async def ws_connect(hass: HomeAssistantType, params) -> str: - entry = hass.data[DOMAIN] - if isinstance(entry, Server): - assert entry.available, "WebRTC server not available" - go_url = "http://localhost:1984/" - else: - go_url = entry - - if entity := params.get("entity"): - src = await utils.get_stream_source(hass, entity) - assert src, f"Can't get URL for {entity}" - - # adds stream to go2rtc using entity_id as name (RTSPtoWebRTC API) - session = async_get_clientsession(hass) - r = await session.patch( - urljoin(go_url, "api/streams"), - params={"name": entity, "src": src}, - timeout=3, - ) - assert r.ok, f"Can't update URL for {entity}" - src = entity +async def ws_connect(hass: HomeAssistantType, params: dict) -> str: + # 1. Server URL from card param + server: str = params.get("server") + # 2. Server URL from integration settings + if not server: + server: Union[str, Server] = hass.data[DOMAIN] + # 3. Server is manual binary + if isinstance(server, Server): + assert server.available, "WebRTC server not available" + server = "http://localhost:1984/" + if name := params.get("entity"): + src = await utils.get_stream_source(hass, name) + assert src, f"Can't get URL for {name}" + query = {"src": src, "name": name} elif src := params.get("url"): if "{{" in src or "{%" in src: src = Template(src, hass).async_render() - - session = async_get_clientsession(hass) - r = await session.patch( - urljoin(go_url, "api/streams"), - params={"name": src, "src": src}, - timeout=3, - ) - assert r.ok, f"Can't update URL for {src}" - + query = {"src": src} else: raise Exception("Missing url or entity") - return urljoin("ws" + go_url[4:], "api/ws") + "?" + urlencode({"src": src}) + return urljoin("ws" + server[4:], "api/ws") + "?" + urlencode(query) class WebSocketView(HomeAssistantView): diff --git a/custom_components/webrtc/manifest.json b/custom_components/webrtc/manifest.json index 6418b2d7..202d42af 100644 --- a/custom_components/webrtc/manifest.json +++ b/custom_components/webrtc/manifest.json @@ -12,6 +12,6 @@ "lovelace" ], "requirements": [], - "version": "v3.2.1", + "version": "v3.3.0", "iot_class": "calculated" } \ No newline at end of file diff --git a/custom_components/webrtc/services.yaml b/custom_components/webrtc/services.yaml index a5f36e12..86ac6ddb 100644 --- a/custom_components/webrtc/services.yaml +++ b/custom_components/webrtc/services.yaml @@ -61,6 +61,11 @@ dash_cast: selector: text: + force: + description: Force restart DashCast application + selector: + boolean: + entity: description: Camera entity example: camera.generic_stream diff --git a/custom_components/webrtc/utils.py b/custom_components/webrtc/utils.py index 2f51418d..15140a81 100644 --- a/custom_components/webrtc/utils.py +++ b/custom_components/webrtc/utils.py @@ -24,7 +24,7 @@ DOMAIN = "webrtc" -BINARY_VERSION = "1.6.0" +BINARY_VERSION = "1.6.2" SYSTEM = { "Windows": {"AMD64": "go2rtc_win64.zip", "ARM64": "go2rtc_win_arm64.zip"}, @@ -169,7 +169,7 @@ async def init_resource(hass: HomeAssistant, url: str, ver: str) -> bool: # noinspection PyProtectedMember -def dash_cast(hass: HomeAssistant, cast_entities: list, url: str): +def dash_cast(hass: HomeAssistant, cast_entities: list, url: str, force=False): """Cast webpage to chromecast device via DashCast application.""" try: entities = [ @@ -188,7 +188,7 @@ def dash_cast(hass: HomeAssistant, cast_entities: list, url: str): entity._chromecast.register_handler(entity.dashcast) _LOGGER.debug(f"DashCast to {entity.entity_id}") - entity.dashcast.load_url(url) + entity.dashcast.load_url(url, force) except Exception: _LOGGER.exception(f"Can't DashCast to {cast_entities}") diff --git a/custom_components/webrtc/www/digital-ptz.js b/custom_components/webrtc/www/digital-ptz.js index a47b5eae..684bcce8 100644 --- a/custom_components/webrtc/www/digital-ptz.js +++ b/custom_components/webrtc/www/digital-ptz.js @@ -13,7 +13,7 @@ const DEFAULT_OPTIONS = { persist: true, }; export class DigitalPTZ { - constructor(containerEl, videoEl, options) { + constructor(containerEl, transformEl, videoEl, options) { this.offHandles = []; this.recomputeRects = () => { this.transform.updateRects(this.videoEl, this.containerEl); @@ -23,14 +23,15 @@ export class DigitalPTZ { this.render = (transition = false) => { if (transition) { // transition is used to animate dbl click zoom - this.videoEl.style.transition = "transform 200ms"; + this.transformEl.style.transition = "transform 200ms"; setTimeout(() => { - this.videoEl.style.transition = ""; + this.transformEl.style.transition = ""; }, 200); } - this.videoEl.style.transform = this.transform.render(); + this.transformEl.style.transform = this.transform.render(); }; this.containerEl = containerEl; + this.transformEl = transformEl; this.videoEl = videoEl; this.options = Object.assign({}, DEFAULT_OPTIONS, options); this.transform = new Transform({ @@ -179,11 +180,12 @@ function startGesturePan({ containerEl, transform, render }, type) { type === "mouse" ? ["mousedown", "mousemove", "mouseup"] : ["touchstart", "touchmove", "touchend"]; + const isTouchEvent = ev => 'TouchEvent' in window && ev instanceof TouchEvent; const onDown = (downEvt) => { - let last = downEvt instanceof TouchEvent ? downEvt.touches[0] : downEvt; + let last = isTouchEvent(downEvt) ? downEvt.touches[0] : downEvt; const onMove = (moveEvt) => { - if (moveEvt instanceof TouchEvent && moveEvt.touches.length !== 1) return; - const curr = moveEvt instanceof TouchEvent ? moveEvt.touches[0] : moveEvt; + if (isTouchEvent(moveEvt) && moveEvt.touches.length !== 1) return; + const curr = isTouchEvent(moveEvt) ? moveEvt.touches[0] : moveEvt; transform.move(curr.pageX - last.pageX, curr.pageY - last.pageY); last = curr; render(); @@ -205,6 +207,25 @@ function startMouseDragPan(params) { /** Transform */ const PERSIST_KEY_PREFIX = "webrtc-digital-ptc:"; const clamp = (value, min, max) => Math.min(Math.max(value, min), max); +function getTransformedDimensions(video) { + const { videoWidth, videoHeight } = video; + if (!videoHeight || !videoWidth) return undefined; + var transform = window.getComputedStyle(video).getPropertyValue("transform"); + const match = transform.match(/matrix\((.+)\)/); + if (!match || !match[1]) return { videoWidth, videoHeight }; // the video isn't transformed + const matrix = new DOMMatrix(match[1].split(", ").map(Number)); + const points = [ + new DOMPoint(0, 0), + new DOMPoint(videoWidth, 0), + new DOMPoint(0, videoHeight), + new DOMPoint(videoWidth, videoHeight), + ].map((point) => point.matrixTransform(matrix)); + const minX = Math.min(...points.map((point) => point.x)); + const maxX = Math.max(...points.map((point) => point.x)); + const minY = Math.min(...points.map((point) => point.y)); + const maxY = Math.max(...points.map((point) => point.y)); + return { videoWidth: maxX - minX, videoHeight: maxY - minY }; +} class Transform { constructor(settings) { this.scale = 1; @@ -252,7 +273,8 @@ class Transform { return; } this.containerRect = containerRect; - if (!videoEl.videoWidth) { + const transformed = getTransformedDimensions(videoEl); + if (!transformed) { // The video hasn't loaded yet. // Once it loads, the videometadata listener will call this function again. return; @@ -262,7 +284,7 @@ class Transform { // This needs to be accounted for when panning, the code below keeps track of that. const screenAspectRatio = this.containerRect.width / this.containerRect.height; - const videoAspectRatio = videoEl.videoWidth / videoEl.videoHeight; + const videoAspectRatio = transformed.videoWidth / transformed.videoHeight; if (videoAspectRatio > screenAspectRatio) { // Black bars on the top and bottom const videoHeight = this.containerRect.width / videoAspectRatio; diff --git a/custom_components/webrtc/www/digital-ptz.js.gz b/custom_components/webrtc/www/digital-ptz.js.gz index fcd054ae..128e0d24 100644 Binary files a/custom_components/webrtc/www/digital-ptz.js.gz and b/custom_components/webrtc/www/digital-ptz.js.gz differ diff --git a/custom_components/webrtc/www/video-rtc.js b/custom_components/webrtc/www/video-rtc.js index 5f6b778d..a259962e 100644 --- a/custom_components/webrtc/www/video-rtc.js +++ b/custom_components/webrtc/www/video-rtc.js @@ -27,7 +27,6 @@ export class VideoRTC extends HTMLElement { 'hvc1.1.6.L153.B0', // H.265 main 5.1 (Chromecast Ultra) 'mp4a.40.2', // AAC LC 'mp4a.40.5', // AAC HE - 'null', // for detecting liars (Safari iOS 12) 'flac', // FLAC (PCM compatible) 'opus', // OPUS Chrome, Firefox ]; @@ -241,6 +240,14 @@ export class VideoRTC extends HTMLElement { this.appendChild(this.video); + // all Safari lies about supported audio codecs + const m = window.navigator.userAgent.match(/Version\/(\d+).+Safari/); + if (m) { + // AAC from v13, FLAC from v14, OPUS - unsupported + const skip = m[1] < '13' ? 'mp4a.40.2' : m[1] < '14' ? 'flac' : 'opus'; + this.CODECS.splice(this.CODECS.indexOf(skip)); + } + if (this.background) return; if ('hidden' in document && this.visibilityCheck) { @@ -544,12 +551,16 @@ export class VideoRTC extends HTMLElement { this.pcState = WebSocket.OPEN; this.wsState = WebSocket.CLOSED; - this.ws.close(); - this.ws = null; + if (this.ws) { + this.ws.close(); + this.ws = null; + } } else { this.pcState = WebSocket.CLOSED; - this.pc.close(); - this.pc = null; + if (this.pc) { + this.pc.close(); + this.pc = null; + } } } diff --git a/custom_components/webrtc/www/video-rtc.js.gz b/custom_components/webrtc/www/video-rtc.js.gz index 9cd6bb0f..d0a97da5 100644 Binary files a/custom_components/webrtc/www/video-rtc.js.gz and b/custom_components/webrtc/www/video-rtc.js.gz differ diff --git a/custom_components/webrtc/www/webrtc-camera.js b/custom_components/webrtc/www/webrtc-camera.js index 3f4a6895..36f0fbf1 100644 --- a/custom_components/webrtc/www/webrtc-camera.js +++ b/custom_components/webrtc/www/webrtc-camera.js @@ -1,6 +1,6 @@ /** Chrome 63+, Safari 11.1+ */ -import {VideoRTC} from './video-rtc.js?v=1.6.0'; -import {DigitalPTZ} from './digital-ptz.js?v3.1.1'; +import {VideoRTC} from './video-rtc.js?v=1.6.2'; +import {DigitalPTZ} from './digital-ptz.js?v=3.3.0'; class WebRTCCamera extends VideoRTC { /** @@ -8,41 +8,71 @@ class WebRTCCamera extends VideoRTC { * @param {Object} config */ setConfig(config) { - if (!config.url && !config.entity) throw new Error('Missing `url` or `entity`'); - - if (config.mode) this.mode = config.mode; - // backward compatibility - else if (config.mse === false) this.mode = 'webrtc'; - else if (config.webrtc === false) this.mode = 'mse'; + if (!config.url && !config.entity && !config.streams) throw new Error('Missing `url` or `entity` or `streams`'); if (config.background) this.background = config.background; if (config.intersection === 0) this.visibilityThreshold = 0; else this.visibilityThreshold = config.intersection || 0.75; + /** @type {string} configMode */ + this.configMode = config.mode + ? config.mode + : config.mse === false + ? 'webrtc' + : config.webrtc === false + ? 'mse' + : this.mode; + /** * @type {{ - * url:string, entity:string, muted:boolean, poster:string, title:string, - * intersection:number, ui:boolean, style:string, + * url: string, + * entity: string, + * mode: string, + * server: string, + * + * streams: Array<{ + * name: string, + * url: string, + * entity: string, + * mode: string + * }>, + * + * title: string, + * poster: string, + * muted: boolean, + * intersection: number, + * ui: boolean, + * style: string, + * + * mse: boolean, + * webrtc: boolean, + * * digital_ptz:{ - * mouse_drag_pan:boolean, - * mouse_wheel_zoom:boolean, - * mouse_double_click_zoom:boolean, - * touch_pinch_zoom:boolean, - * touch_drag_pan:boolean, - * touch_tap_drag_zoom:boolean, - * persist:boolean|string, + * mouse_drag_pan: boolean, + * mouse_wheel_zoom: boolean, + * mouse_double_click_zoom: boolean, + * touch_pinch_zoom: boolean, + * touch_drag_pan: boolean, + * touch_tap_drag_zoom: boolean, + * persist: boolean|string, * }, * ptz:{ - * opacity:number|string, service:string, - * data_left, data_up, data_right, data_down, - * data_zoom_in, data_zoom_out, data_home + * opacity: number|string, + * service: string, + * data_left, data_up, data_right, data_down, data_zoom_in, data_zoom_out, data_home * }, - * shortcuts:Array<{name:string,icon:string}>, - * mse:boolean, webrtc:boolean, + * shortcuts:Array<{ name:string, icon:string }>, * }} config */ - this.config = config; + this.config = Object.assign({}, config); + + if (!this.config.streams) { + this.config.streams = [{url: config.url, entity: config.entity}]; + } + + this.streamID = -1; + this.nextStream(false); } set hass(hass) { @@ -60,7 +90,7 @@ class WebRTCCamera extends VideoRTC { /** * Called by the Hass to get defaul card config - * @returns {{url: string}} + * @return {{url: string}} */ static getStubConfig() { return {'url': ''}; @@ -68,12 +98,31 @@ class WebRTCCamera extends VideoRTC { setStatus(mode, status) { const divMode = this.querySelector('.mode').innerText; - if (mode === 'error' && divMode !== 'loading1' && divMode !== 'loading2') return; + if (mode === 'error' && divMode !== 'Loading..' && divMode !== 'Loading...') return; this.querySelector('.mode').innerText = mode; this.querySelector('.status').innerText = status || ''; } + /** @param reload {boolean} */ + nextStream(reload) { + this.streamID = (this.streamID + 1) % this.config.streams.length; + const stream = this.config.streams[this.streamID]; + this.config.url = stream.url; + this.config.entity = stream.entity; + this.mode = stream.mode || this.configMode; + + if (reload) { + this.ondisconnect(); + setTimeout(() => this.onconnect(), 100); // wait ws.close event + } + } + + /** @return {string} */ + get streamName() { + return this.config.streams[this.streamID].name || `S${this.streamID}`; + } + oninit() { super.oninit(); this.renderMain(); @@ -89,9 +138,9 @@ class WebRTCCamera extends VideoRTC { if (!this.isConnected || this.ws || this.pc) return false; const divMode = this.querySelector('.mode').innerText; - if (divMode === 'loading1') return; + if (divMode === 'Loading..') return; - this.setStatus('loading1'); + this.setStatus('Loading..'); this.hass.callWS({ type: 'auth/sign_path', path: '/api/webrtc/ws' @@ -100,11 +149,14 @@ class WebRTCCamera extends VideoRTC { if (this.config.url) { this.wsURL += '&url=' + encodeURIComponent(this.config.url); } + if (this.config.server) { + this.wsURL += '&server=' + encodeURIComponent(this.config.server); + } if (this.config.entity) { this.wsURL += '&entity=' + this.config.entity; } if (super.onconnect()) { - this.setStatus('loading2'); + this.setStatus('Loading...'); } else { this.setStatus('error', 'unable to connect'); } @@ -160,13 +212,12 @@ class WebRTCCamera extends VideoRTC { background-color: black; height: 100%; position: relative; /* important for Safari */ - overflow: hidden; /* important for zoom-controller */ } .player:active { cursor: move; /* important for zoom-controller */ } - video { - transform-origin: 50% 50%; /* important for zoom-controller */ + .player .ptz-transform { + height: 100%; } .header { position: absolute; @@ -179,11 +230,15 @@ class WebRTCCamera extends VideoRTC { pointer-events: none; } .mode { + cursor: pointer; opacity: 0.6; + pointer-events: auto; } -
+
+
+
@@ -192,8 +247,10 @@ class WebRTCCamera extends VideoRTC { `; this.querySelector = selectors => this.shadowRoot.querySelector(selectors); + this.querySelector('.ptz-transform').appendChild(this.video); - this.querySelector('.player').appendChild(this.video); + const mode = this.querySelector('.mode'); + mode.addEventListener('click', () => this.nextStream(true)); if (this.config.muted) this.video.muted = true; if (this.config.poster) this.video.poster = this.config.poster; @@ -203,7 +260,8 @@ class WebRTCCamera extends VideoRTC { if (this.config.digital_ptz === false) return; new DigitalPTZ( this.querySelector('.player'), - this.querySelector('.player video'), + this.querySelector('.player .ptz-transform'), + this.video, Object.assign({}, this.config.digital_ptz, {persist_key: this.config.url}) ); } @@ -355,6 +413,19 @@ class WebRTCCamera extends VideoRTC { } } + saveScreenshot() { + const canvas = document.createElement('canvas'); + canvas.width = this.video.videoWidth; + canvas.height = this.video.videoHeight; + canvas.getContext('2d').drawImage(this.video, 0, 0, canvas.width, canvas.height); + + const ts = new Date().toISOString().substring(0, 19).replaceAll('-', '').replaceAll(':', ''); + const a = document.createElement('a'); + a.href = canvas.toDataURL('image/jpeg'); + a.download = `snapshot_${ts}.jpeg`; + a.click(); + } + renderCustomUI() { if (!this.config.ui) return; @@ -383,6 +454,15 @@ class WebRTCCamera extends VideoRTC { .volume { display: none; } + .stream { + padding-top: 2px; + margin-left: 2px; + font-weight: 400; + font-size: 20px; + color: white; + display: none; + cursor: pointer; + } `); card.insertAdjacentHTML('beforeend', ` @@ -390,6 +470,8 @@ class WebRTCCamera extends VideoRTC {
+ + ${this.streamName} @@ -427,6 +509,11 @@ class WebRTCCamera extends VideoRTC { }); // Chrome 71 } else if (icon === 'mdi:fullscreen-exit') { this.exitFullscreen(); + } else if (icon === 'mdi:floppy') { + this.saveScreenshot(); + } else if (ev.target.className === 'stream') { + this.nextStream(true); + ev.target.innerText = this.streamName; } }); @@ -460,6 +547,8 @@ class WebRTCCamera extends VideoRTC { fullscreen.icon = this.fullscreenElement() ? 'mdi:fullscreen-exit' : 'mdi:fullscreen'; }); + const stream = this.querySelector('.stream'); + stream.style.display = this.config.streams.length > 1 ? 'block' : 'none'; } renderShortcuts() { diff --git a/custom_components/webrtc/www/webrtc-camera.js.gz b/custom_components/webrtc/www/webrtc-camera.js.gz index 1981d5e1..7fa7e264 100644 Binary files a/custom_components/webrtc/www/webrtc-camera.js.gz and b/custom_components/webrtc/www/webrtc-camera.js.gz differ diff --git a/extras/Node-RED/flows.json b/extras/Node-RED/flows.json index ef46234c..454bdd79 100644 --- a/extras/Node-RED/flows.json +++ b/extras/Node-RED/flows.json @@ -1 +1 @@ -[{"id":"9584418c.dafc2","type":"tab","label":"Automations","disabled":false,"info":""},{"id":"f602e6ba.609d28","type":"tab","label":"Irrigation","disabled":false,"info":""},{"id":"e3cd71a658618bda","type":"group","z":"9584418c.dafc2","name":"Front Door Facial Recognition","style":{"label":true},"nodes":["0151c0e6e6069b41","4aa6753cf7f8aab0","9dca394a8020d5e7","3b7342cc0d038b02","f28a763b1531f897","85eabd7943d854db","600c6858cd97bd11","042d631e1f4965c1","feac53432ad8e204","37dde9151438ba72","2a9ba9bc54399191","3048ddac2903b9c6","ad720109e7c5140b","d4d7e72ac2040557","01bd0deabf985fb5","c30bce03a0e91b98","915bbbc78674401b","3f56ae69cfd632f3","b955a2362a347e25","71c092fab87eb15b","64850b3f34c8899b"],"x":54,"y":2779,"w":1532,"h":422},{"id":"9cfe6331fbc680d5","type":"group","z":"9584418c.dafc2","name":"Delivery Logo Object Detection","style":{"label":true},"nodes":["ed80a3f.522526","f3a3e80f.3e8e38","69bc3ab7.bd6104","6469ec7efdb06d81","6f08d11c854dfb00","9b7c5535c74a94a3","d8a16fd91366d112","bcaf3569e7816922","d58f6ef71c326040","7347dd9c5cdf8a37","ae34795ccab80dee","00a968e4ae50d0d3","935c3eb83c353f53","a2635d725d71ca68","42be35f83b764861","df028b4014ad3c15","b2a5543693ac851e","c13f0f20a56d6af5","7151828122e3b80c"],"x":54,"y":2099,"w":1492,"h":282},{"id":"3c4349a7eea9bd3b","type":"group","z":"9584418c.dafc2","name":"Set Cameras Online","style":{"label":true},"nodes":["bd19a17005513c2f","24d1a94e275e5e44","58d0c98797e19829","7a8e43b6f7c84bac","ab66afa5b576de3f","ccf5998fdf8ee50d"],"x":54,"y":1839,"w":492,"h":242},{"id":"35da177d9e2fd258","type":"group","z":"9584418c.dafc2","name":"Virtual Radar Server","style":{"label":true},"nodes":["a9a323de66b6f772","ee139512bcad0966","7da69a7e8ecadc7c","26e32b1d7824356a","3a82b835.c57d48","91afebbf8b9edf05","5684b08aacd6d225","4ca1a5ad47ce7a18","ba68e03143ba4af8","5f1d1b471a1c7cbb","2cd08c8da06afaf6","ea911291f04c7d18","43e5fa289c7550ff","97761f13f8e5c31b","ea239028eda07991"],"x":54,"y":1499,"w":1272,"h":322},{"id":"bd2acc7efb5be5fd","type":"group","z":"9584418c.dafc2","name":"Front Porch Light Occupancy Brightness","style":{"label":true},"nodes":["3f2a2e4d99057b69","67312d79a5108126","3e399d83e4e7f4c3","59f5bc2571b0f12f","c68c969a6b8c2833","b1a99d9698d831b2","17b35d69307a8455","d11c183fff8d848d","fae7fa701710e258"],"x":54,"y":1279,"w":972,"h":202},{"id":"11e25fc28c23144c","type":"group","z":"9584418c.dafc2","name":"Front House Lights","style":{"label":true},"nodes":["86bc310cbc0562af","2fb6a7afb6502a32","8c55985bffebd56a"],"x":54,"y":1119,"w":492,"h":142},{"id":"b808f2d7ae539c87","type":"group","z":"9584418c.dafc2","name":"Indoor Lights Evening","style":{"label":true},"nodes":["fa90c550.d6c948","e93027cb.6a6308","fc81cfda.29ff5","8ee35d65.a7569","41b918d5.7ce018","5420f9c0.5356c8","77184c93.8790d4","39a5ce57.78e3d2","ea19fe14.80749","ea2604f9.4cdf98","8a82f465.846018","d8ad0651.bf7a18","d9cc182cc3eb2a93","cde7b3c9ca39891b","1457bf6605a50448"],"x":54,"y":659,"w":1073,"h":444},{"id":"9df353d4c0fc9a54","type":"group","z":"9584418c.dafc2","name":"Server Rack Temperature","style":{"label":true},"nodes":["73550501.be7fbc","7dff3ae1.e36a04","88822bfe.2cc598","96b5207d.407dd","b259f0eb.3e83","c7ff978f.ff0728","29b17ed7.fab972"],"x":54,"y":459,"w":932,"h":182},{"id":"18fe74aea06a1180","type":"group","z":"9584418c.dafc2","name":"AC Stale Air","style":{"label":true},"nodes":["ebe84a6f70b4bc2f","cf1c689e51b98aec","6af7abba85612dd9","8b6280c5c448720c","9ce46ce21d8cc964","2b6721107586ceae","830c3ddd08ef396c"],"x":54,"y":299,"w":1152,"h":142},{"id":"cf3a0410bcf837ae","type":"group","z":"9584418c.dafc2","name":"Door Alerts","style":{"label":true},"nodes":["2022689a.938918","8ec438b6.4eb2e8","28fa66cd.af058a","9c1d9c7c.ed9c7","896f5b34.7b4328","c5124616.c9bd48","f9d93af6.184028","3314ec9f.ca8994","5c24f744.30fcb8","6aa388d0.707768","cf758271.d4fd6","5a740c2d.009864"],"x":54,"y":19,"w":1012,"h":262},{"id":"3cf0491ac33aecfa","type":"group","z":"f602e6ba.609d28","name":"Max Time and Master Valve Control","style":{"label":true},"nodes":["54bad548.7e9fcc","5a10cd93.8e94b4","a77808ff.3f1288","54ae6ec3.1bc63","bcbf413e.7b188","3b848bce.76aea4","43dedcca.ac7734","c42e6d62.7a24c","cdd3b7ef.04a618","63f07877e73b952a","5e9007a27732bba9","061b74f643477dd9","749afd72791a5127","656ad2cd6fb99f57"],"x":54,"y":19},{"id":"43a30fe5a5052c22","type":"group","z":"f602e6ba.609d28","name":"Custom Water","style":{"label":true},"nodes":["d269f175.c9dc6","3367e45f.cc981c","116d5bb3.ee92a4","80df47d5.602888","fb46876c.845298","98eeafa7.bd2b9","565ee5c1.561bfc","22a20603.86a06a","a8d96e.1f00969","808e6a81.92e2e8","883f2c00.1d94e8","e42ff3d9.593dc","76160bc4.8cd644","e2c37b65c5582c2b","860a4c61d7557dc9"],"x":54,"y":259},{"id":"a9182c2cc04d2d9a","type":"group","z":"f602e6ba.609d28","name":"Irrigation Delays","style":{"label":true},"nodes":["dd9855ca4017c8c0","c3a696a117416327","27f2580e35031830","9cb8187c669c6485","47f1a8018e58e032","427f7fa58d86cc59","1d9a4d0bb4645f32","d9ebbaa37f5911a9","eeecfc1e8864e39f","89487a4efedec1db","1e4b3bc7c25b294f","2c45af5b3ee5cf0a","d7e50e7a2810667d","28936ec687ee4eb0","974833b6a2eca853","478a5a84d38ba181","c01fd0612615e927","93965a61d2c4f5de"],"x":54,"y":539},{"id":"0f07749a4e1672ad","type":"group","z":"f602e6ba.609d28","name":"Supply Voltage Control","style":{"label":true},"nodes":["1ae21386.a831bc","117145a7.67e99a","882aff35f788008b"],"x":54,"y":1059},{"id":"a08dae6118c91c19","type":"group","z":"f602e6ba.609d28","name":"Run Lawn","style":{"label":true},"nodes":["f2c9c3a5b8b11a64","38affe5cc680d076","9896327569c234da","e95ac52f03478921","174186fb5d054240","287dd3b1af5dc2d0","74cd40702021e86d","bf015af2161c5ec2","151eb6ba5b2d39cd","45ee74d06e9cac2c","95a54981805b22f2","a4b3eba196a504dc","02d1e639f7ac6596","8d3c8370996be2da","863b8fa63f210ebe","7d8374976c01e3dc","b0debe46542c4c67","de509d99b9d965b3","b1c9631973c2f4b1","6ea0448df1383ec2","224d30a98f52c287","5a27d31bfb4a6990","197853479ad9eeda","7b985932412db47d","acdcc72fea065aac"],"x":54,"y":2019},{"id":"79694877249c9902","type":"group","z":"f602e6ba.609d28","name":"Attempt Lawn","style":{"label":true},"nodes":["3b656b89.1ac154","493b435f.c9851c","7b12e66f.57d068","8c060f00.cf577","4422f61c.847d88","dcdeabc7.780578","722d03d6.2ff77c","af4788fe.215ba8","c90fd5e6.c5c678","862ad27a.d347d","83edf648.3f9ed8","8d4bfe8e.ee805","815fddc0.6604c","06d6255efdc31c47","5420d0eed32223fb","3ff9ce03ef7b554b","576b66fa1bd202a3","a3d75225807b70eb","219b37105a8304f1","e7430e17f0b24ed8","b6e7d5b8891bba6d","339ee0ada21856e0","d01fbafafbb34692","f5684be88477322f","336585d4eee0ca73","b3c4a3638c17629e","2fc67b25514de5a5","08e3098cf183e086"],"x":54,"y":1219},{"id":"68ec980b932fdba7","type":"group","z":"f602e6ba.609d28","name":"Attempt Front Beds","style":{"label":true},"nodes":["583f46a3.fc4c38","d9147878.b61cf8","c7e5552e.7f8a08","6bcf06fb.9ca748","f587589f.d739e8","d9d17e8f.590e6","d9f893eb.834f3","9d851699.6a8458","4fae5b92.a9cd44","418058c4.af3158","7350c911a0b1a86d","fdcfa1521191fa40","4f2902edc77f2d3b","f6881b4bf93c27c5","ed6e3d4225582e20","593bee0e8c958df8","67916c3a5554a794","f7ac7a90f3da2298","45c5dbbbd8ce50a1","abb8777dd08aa743","d8637d8d96b68fca","b403eec7866aea22"],"x":54,"y":2559},{"id":"55a2162532da4e14","type":"group","z":"f602e6ba.609d28","name":"Run Front Beds","style":{"label":true},"nodes":["a2ab7368.923fb","a31e3daf.17207","21ced698.708b5a","c661d489.9c9bc8","accc6697.196268","487ff788.8c5c98","2238b09b.1b5b5","84258ddd.41da4","9129b06e.d8925","5ce1803b.06628","62b5545bc6d6e627","aa53225140781dd7","8113d83074ff7701","d83b5ff7a2212931","f78cdb84200eb171"],"x":54,"y":3159},{"id":"8ea53bc2c2669aee","type":"group","z":"9584418c.dafc2","name":"Test Delivery Logo Object Detection","style":{"label":true},"nodes":["be0fbabb24b44974","9b277fca69aebd69","75ef5974262fd7bc","17407dceb7726474","1a39ed5aa10b9a2e","d3cc43be63f35e49","2be1e06ef7807b3f","88baf6aea1d78864","e48b5f0d83c7a8c6","faa9044e31394934","5dacb55a06a1cb1f","82fc9c91a2667f9c","9a9e970d6d7a4727","bf9a785d9f0e5359","b3f4911f67703b3b","1cd44a2e0577b03f"],"x":54,"y":2399,"w":1472,"h":362},{"id":"e1dc0b88.463bb8","type":"server","name":"Home Assistant","version":5,"addon":false,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":false,"cacheJson":true,"heartbeat":true,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true},{"id":"546e31ed.0db1c","type":"mqtt-broker","name":"Mosquitto","broker":"10.0.1.22","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"9f81fd881d01a666","type":"position-config","name":"","isValide":"true","longitude":"0","latitude":"0","angleType":"deg","timeZoneOffset":99,"timeZoneDST":0,"stateTimeFormat":"3","stateDateFormat":"12"},{"id":"4f8f8feffed26998","type":"sqlitedb","db":"/data/amazon.db","mode":"RWC"},{"id":"223dadf98673f8b9","type":"deepstack-server","proto":"http","host":"deepstack","port":"5000","version":"v1","rejectUnauthorized":true},{"id":"96b8babe5c0a6107","type":"deepstack-server","proto":"http","host":"codeproject","port":"32168","version":"v1","rejectUnauthorized":true},{"id":"2022689a.938918","type":"api-call-service","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Notify Via Wrapper: Opened 1 Minute","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"script","service":"notify_wrapper","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": \"The \" & $lowercase(msg.data.new_state.attributes.friendly_name) & \" has been opened for 1 minute\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":890,"y":120,"wires":[[]]},{"id":"8ec438b6.4eb2e8","type":"api-current-state","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Door Notify On","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"true","halt_if_type":"bool","halt_if_compare":"is","entity_id":"input_boolean.door_notify","state_type":"habool","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":460,"y":62,"wires":[["c5124616.c9bd48"],[]]},{"id":"28fa66cd.af058a","type":"trigger","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Wait 1m","op1":"","op2":"1","op1type":"nul","op2type":"str","duration":"1","extend":false,"overrideDelay":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":620,"y":120,"wires":[["2022689a.938918"]]},{"id":"9c1d9c7c.ed9c7","type":"change","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Reset If Closed","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":220,"wires":[["28fa66cd.af058a","5c24f744.30fcb8","cf758271.d4fd6","5a740c2d.009864"]]},{"id":"896f5b34.7b4328","type":"api-call-service","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Notify Via Wrapper","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"script","service":"notify_wrapper","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": payload, \"data\": {\"priority\": 1} \t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":950,"y":60,"wires":[[]]},{"id":"c5124616.c9bd48","type":"template","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Opened","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{ data.new_state.attributes.friendly_name }} opened","output":"str","x":720,"y":60,"wires":[["896f5b34.7b4328"]]},{"id":"f9d93af6.184028","type":"server-state-changed","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Door Opened","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"binary_sensor.*_door$","entityidfiltertype":"regex","outputinitially":false,"state_type":"habool","haltifstate":"true","halt_if_type":"bool","halt_if_compare":"is","outputs":2,"output_only_on_state_change":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":150,"y":100,"wires":[["8ec438b6.4eb2e8","28fa66cd.af058a","5c24f744.30fcb8","cf758271.d4fd6","5a740c2d.009864"],["9c1d9c7c.ed9c7"]]},{"id":"73550501.be7fbc","type":"trigger-state","z":"9584418c.dafc2","g":"9df353d4c0fc9a54","name":"Rack Temperature","server":"e1dc0b88.463bb8","version":2,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityid":"sensor.rack_exhaust_temperature","entityidfiltertype":"exact","debugenabled":false,"constraints":[],"inputs":1,"outputs":2,"customoutputs":[],"outputinitially":false,"state_type":"num","enableInput":true,"x":170,"y":560,"wires":[["7dff3ae1.e36a04"],[]]},{"id":"7dff3ae1.e36a04","type":"switch","z":"9584418c.dafc2","g":"9df353d4c0fc9a54","name":"Above 90?","property":"payload","propertyType":"msg","rules":[{"t":"gt","v":"95","vt":"num"},{"t":"lte","v":"90","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":350,"y":560,"wires":[["29b17ed7.fab972"],["96b5207d.407dd"]]},{"id":"88822bfe.2cc598","type":"api-call-service","z":"9584418c.dafc2","g":"9df353d4c0fc9a54","name":"Turn on Fan","server":"e1dc0b88.463bb8","version":5,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["fan.rack_fan"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":true,"outputProperties":[],"queue":"none","x":710,"y":500,"wires":[[]]},{"id":"96b5207d.407dd","type":"api-current-state","z":"9584418c.dafc2","g":"9df353d4c0fc9a54","name":"Rack Fan","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"true","halt_if_type":"bool","halt_if_compare":"is","entity_id":"fan.rack_fan","state_type":"habool","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":540,"y":580,"wires":[["c7ff978f.ff0728"],[]]},{"id":"b259f0eb.3e83","type":"api-call-service","z":"9584418c.dafc2","g":"9df353d4c0fc9a54","name":"Turn off fan","server":"e1dc0b88.463bb8","version":5,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["fan.rack_fan"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":true,"outputProperties":[],"queue":"none","x":890,"y":540,"wires":[[]]},{"id":"fa90c550.d6c948","type":"inject","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"At 8 PM","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 20 * * 1,2,4,5,6,0","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":700,"wires":[["1457bf6605a50448"]]},{"id":"e93027cb.6a6308","type":"api-current-state","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"Master Bedroom Lamps On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.master_bedroom_lamps","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":680,"y":702,"wires":[["fc81cfda.29ff5"],[]]},{"id":"fc81cfda.29ff5","type":"api-call-service","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"Set brightness to 128","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":[],"data":"{\"brightness\":\"128\",\"transition\":5, \"entity_id\": msg.data.entity_id}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1001,"y":700,"wires":[[]]},{"id":"c7ff978f.ff0728","type":"api-current-state","z":"9584418c.dafc2","g":"9df353d4c0fc9a54","name":"Rack fan auto off?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.rack_fan_auto_off","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":730,"y":600,"wires":[["b259f0eb.3e83"],[]]},{"id":"29b17ed7.fab972","type":"api-current-state","z":"9584418c.dafc2","g":"9df353d4c0fc9a54","name":"Rack Fan","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"true","halt_if_type":"bool","halt_if_compare":"is","entity_id":"fan.rack_fan","state_type":"habool","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":540,"y":520,"wires":[[],["88822bfe.2cc598"]]},{"id":"3314ec9f.ca8994","type":"server-state-changed","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Garage Opened","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"cover.garage_door","entityidfiltertype":"regex","outputinitially":false,"state_type":"str","haltifstate":"open","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":160,"y":160,"wires":[["8ec438b6.4eb2e8"],[]]},{"id":"8ee35d65.a7569","type":"api-current-state","z":"9584418c.dafc2","d":true,"g":"b808f2d7ae539c87","name":"Kitchen Cans On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.kitchen_can_lights","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":650,"y":942,"wires":[["5420f9c0.5356c8"],[]]},{"id":"41b918d5.7ce018","type":"api-current-state","z":"9584418c.dafc2","d":true,"g":"b808f2d7ae539c87","name":"Kitchen Table On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.kitchen_table_light","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":650,"y":1062,"wires":[["d8ad0651.bf7a18"],[]]},{"id":"5420f9c0.5356c8","type":"api-call-service","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"Set brightness to 40","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":[],"data":"{\"brightness\":\"40\",\"transition\": \"5\", \"entity_id\": msg.data.entity_id}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1000,"y":842,"wires":[[]]},{"id":"77184c93.8790d4","type":"api-current-state","z":"9584418c.dafc2","d":true,"g":"b808f2d7ae539c87","name":"Kitchen Sink On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.kitchen_sink_light","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":650,"y":882,"wires":[["5420f9c0.5356c8"],[]]},{"id":"39a5ce57.78e3d2","type":"api-current-state","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"Living Room Cans On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.living_room_can_lights","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":670,"y":822,"wires":[["5420f9c0.5356c8"],[]]},{"id":"5c24f744.30fcb8","type":"trigger","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Wait 5m","op1":"","op2":"5","op1type":"nul","op2type":"str","duration":"5","extend":false,"overrideDelay":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":620,"y":160,"wires":[["6aa388d0.707768"]]},{"id":"6aa388d0.707768","type":"api-call-service","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Alexa Announce Opened","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"alexa_media","areaId":[],"deviceId":[],"entityId":[],"data":"{\"message\":\"The\" & $lowercase(msg.data.new_state.attributes.friendly_name) & \"has been opened for\" & msg.payload & \" minutes.\",\"data\":{\"method\":\"all\",\"type\":\"announce\"},\"target\":[\"Office\",\"Kitchen\",\"Master\",\"Living Room\"]}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":850,"y":180,"wires":[[]]},{"id":"cf758271.d4fd6","type":"trigger","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Wait 10m","op1":"","op2":"10","op1type":"nul","op2type":"str","duration":"10","extend":false,"overrideDelay":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":620,"y":200,"wires":[["6aa388d0.707768"]]},{"id":"5a740c2d.009864","type":"trigger","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Wait 15m","op1":"","op2":"15","op1type":"nul","op2type":"str","duration":"15","extend":false,"overrideDelay":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":620,"y":240,"wires":[["6aa388d0.707768"]]},{"id":"ea19fe14.80749","type":"api-current-state","z":"9584418c.dafc2","d":true,"g":"b808f2d7ae539c87","name":"Entryway On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.entryway_light","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":640,"y":1002,"wires":[["5420f9c0.5356c8"],[]]},{"id":"ea2604f9.4cdf98","type":"api-current-state","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"Living Room Sconces On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.living_room_sconces","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":680,"y":762,"wires":[["fc81cfda.29ff5"],[]]},{"id":"8a82f465.846018","type":"comment","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"100% = 255","info":"","x":970,"y":773,"wires":[]},{"id":"d8ad0651.bf7a18","type":"api-call-service","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"Set brightness to 80","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":[],"data":"{\"brightness\":\"80\",\"transition\": \"5\", \"entity_id\": msg.data.entity_id}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1000,"y":922,"wires":[[]]},{"id":"86bc310cbc0562af","type":"inject","z":"9584418c.dafc2","g":"11e25fc28c23144c","name":"At 10PM","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"30 22 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":1200,"wires":[["2fb6a7afb6502a32","8c55985bffebd56a"]]},{"id":"2fb6a7afb6502a32","type":"api-call-service","z":"9584418c.dafc2","g":"11e25fc28c23144c","name":"Front Porch Lights to 40","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.front_porch_lights"],"data":"{\"brightness\":\"40\",\"transition\":5}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":410,"y":1220,"wires":[[]]},{"id":"3f2a2e4d99057b69","type":"server-state-changed","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"Front Door Motion","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"binary_sensor.front_door_all_occupancy","entityidfiltertype":"exact","outputinitially":false,"state_type":"habool","haltifstate":"true","halt_if_type":"bool","halt_if_compare":"is","outputs":2,"output_only_on_state_change":false,"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":170,"y":1380,"wires":[["17b35d69307a8455"],[]]},{"id":"67312d79a5108126","type":"api-current-state","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"Front Porch On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.front_porch_lights","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":630,"y":1340,"wires":[["3e399d83e4e7f4c3"],[]]},{"id":"3e399d83e4e7f4c3","type":"api-call-service","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"Front Porch Lights to 254","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.front_porch_lights"],"data":"{\"brightness\":\"254\",\"transition\":2}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":890,"y":1340,"wires":[["59f5bc2571b0f12f"]]},{"id":"59f5bc2571b0f12f","type":"delay","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"","pauseType":"delay","timeout":"60","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":560,"y":1440,"wires":[["c68c969a6b8c2833"]]},{"id":"c68c969a6b8c2833","type":"api-call-service","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"Front Porch Lights to 40","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.front_porch_lights"],"data":"{\"brightness\":\"40\",\"transition\":5}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":790,"y":1440,"wires":[[]]},{"id":"d9cc182cc3eb2a93","type":"inject","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"At 10 PM","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 22 * * 3","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":742,"wires":[["1457bf6605a50448"]]},{"id":"b1a99d9698d831b2","type":"server-state-changed","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"Front Door Open","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"binary_sensor.front_door","entityidfiltertype":"exact","outputinitially":false,"state_type":"habool","haltifstate":"true","halt_if_type":"bool","halt_if_compare":"is","outputs":2,"output_only_on_state_change":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":160,"y":1440,"wires":[["17b35d69307a8455","d11c183fff8d848d"],[]]},{"id":"17b35d69307a8455","type":"within-time-switch","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"","nameInt":"","positionConfig":"9f81fd881d01a666","startTime":"22:00","startTimeType":"entered","startOffset":0,"startOffsetType":"none","startOffsetMultiplier":60000,"endTime":"sunriseStart","endTimeType":"pdsTime","endOffset":"-30","endOffsetType":"num","endOffsetMultiplier":60000,"timeRestrictions":0,"timeRestrictionsType":"none","timeDays":"*","timeOnlyOddDays":false,"timeOnlyEvenDays":false,"timeOnlyOddWeeks":false,"timeOnlyEvenWeeks":false,"timeMonths":"*","timedatestart":"","timedateend":"","propertyStart":"","propertyStartType":"none","propertyStartCompare":"true","propertyStartThreshold":"","propertyStartThresholdType":"num","startTimeAlt":"","startTimeAltType":"entered","startOffsetAlt":0,"startOffsetAltType":"none","startOffsetAltMultiplier":60000,"propertyEnd":"","propertyEndType":"none","propertyEndCompare":"true","propertyEndThreshold":"","propertyEndThresholdType":"num","endTimeAlt":"","endTimeAltType":"entered","endOffsetAlt":0,"endOffsetAltType":"none","endOffsetAltMultiplier":60000,"withinTimeValue":"","withinTimeValueType":"msgInput","outOfTimeValue":"","outOfTimeValueType":"msgInput","tsCompare":"0","x":400,"y":1380,"wires":[["67312d79a5108126"],[]]},{"id":"d11c183fff8d848d","type":"change","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"Reset","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":1440,"wires":[["59f5bc2571b0f12f"]]},{"id":"a9a323de66b6f772","type":"http request","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Get Aircraft","method":"GET","ret":"obj","paytoqs":"ignore","url":"http://vrs:8080/VirtualRadar/AircraftList.json","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"Content-Type","valueType":"other","valueValue":"application/json"}],"x":610,"y":1660,"wires":[["7da69a7e8ecadc7c","91afebbf8b9edf05","4ca1a5ad47ce7a18","2cd08c8da06afaf6","43e5fa289c7550ff"]]},{"id":"ee139512bcad0966","type":"inject","z":"9584418c.dafc2","d":true,"g":"35da177d9e2fd258","name":"Every 10 Seconds","props":[],"repeat":"20","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":190,"y":1660,"wires":[["ea239028eda07991"]]},{"id":"7da69a7e8ecadc7c","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Amazon","func":"var alert = {}\nvar message = \"Airborne:\\n\"\n\nfor (var i = 0; i < msg.payload.acList.length; i++) {\n if (typeof msg.payload.acList[i].Reg !== \"undefined\" && typeof msg.payload.acList[i].Man !== \"undefined\") {\n if (msg.payload.acList[i].Man.toLowerCase().includes(\"amazon\")) {\n //if (msg.payload.acList[i].Reg.endsWith(\"PA\") && msg.payload.acList[i].Man.toLowerCase().includes(\"amazon\")) {\n alert[msg.payload.acList[i].Reg] = msg.payload.acList[i].Icao\n }\n }\n}\n\nif (Object.keys(alert).length > 0) {\n for (const [key, value] of Object.entries(alert)) {\n message += key + \": https://globe.adsbexchange.com/?icao=\" + value + \"\\n\"\n }\n return { payload: message + \"https://vrs.aneis.ch\" }\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":1660,"wires":[["5684b08aacd6d225"]]},{"id":"26e32b1d7824356a","type":"api-call-service","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_adsb","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": payload \t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1200,"y":1660,"wires":[[]]},{"id":"3a82b835.c57d48","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Rate Limiter","func":"var interval = (1000*60*10); // minimum interval between messages (ms)\ncontext.lastTime = context.lastTime || 0;\n\nvar now = Date.now();\n\nif (now-context.lastTime > interval) {\n context.lastTime = now;\n return msg;\n} else {\n return null;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1010,"y":1600,"wires":[["26e32b1d7824356a"]]},{"id":"91afebbf8b9edf05","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Interesting Tail #","func":"var alert = {}\nvar message = \"Interesting:\\n\"\n// N518GS George Strait\n// N628TS Elon\n// N898TS Taylor Swift\n// N621MM Taylor Swift\n// 82-8000 AF1\n// 92-9000 AF1\n// N5DA Don Adams Prop\n// N4DA Don Adams Lear\n// N68885 Zuckerberg\nvar interesting = [\"N68885\", \"N518GS\", \"N628TS\", \"82-8000\", \"92-9000\", \"N621MM\", \"N898TS\"]\n\nfor (var i = 0; i < msg.payload.acList.length; i++) {\n if (typeof msg.payload.acList[i].Reg !== \"undefined\") {\n if (interesting.includes(msg.payload.acList[i].Reg)) {\n alert[msg.payload.acList[i].Reg] = msg.payload.acList[i].Icao\n }\n }\n}\n\nif (Object.keys(alert).length > 0) {\n for (const [key, value] of Object.entries(alert)) {\n message += key + \": https://globe.adsbexchange.com/?icao=\" + value + \"\\n\"\n }\n return { payload: message + \"https://vrs.aneis.ch\" }\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":800,"y":1600,"wires":[["3a82b835.c57d48"]]},{"id":"5684b08aacd6d225","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Rate Limiter","func":"var interval = (1000*60); // minimum interval between messages (ms)\ncontext.lastTime = context.lastTime || 0;\n\nvar now = Date.now();\n\nif (now-context.lastTime > interval) {\n context.lastTime = now;\n return msg;\n} else {\n return null;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1010,"y":1660,"wires":[["26e32b1d7824356a"]]},{"id":"4ca1a5ad47ce7a18","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Amazon Landing","func":"var alert = {}\nvar message = \"Landing:\\n\"\n\nfor (var i = 0; i < msg.payload.acList.length; i++) {\n if (typeof msg.payload.acList[i].Reg !== \"undefined\" && typeof msg.payload.acList[i].Man !== \"undefined\") {\n //if (msg.payload.acList[i].Reg.endsWith(\"PA\") && msg.payload.acList[i].Man.toLowerCase().includes(\"amazon\")) {\n if (msg.payload.acList[i].Man.toLowerCase().includes(\"amazon\")) {\n if (msg.payload.acList[i].Alt < 50){\n alert[msg.payload.acList[i].Reg] = msg.payload.acList[i].Icao\n }\n }\n }\n}\n\nif (Object.keys(alert).length > 0) {\n for (const [key, value] of Object.entries(alert)) {\n message += key + \": https://globe.adsbexchange.com/?icao=\" + value + \"\\n\"\n }\n return { payload: message + \"https://vrs.aneis.ch\" }\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":810,"y":1720,"wires":[["ba68e03143ba4af8"]]},{"id":"ba68e03143ba4af8","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Rate Limiter","func":"var interval = (1000*60); // minimum interval between messages (ms)\ncontext.lastTime = context.lastTime || 0;\n\nvar now = Date.now();\n\nif (now-context.lastTime > interval) {\n context.lastTime = now;\n return msg;\n} else {\n return null;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1010,"y":1720,"wires":[["26e32b1d7824356a"]]},{"id":"5f1d1b471a1c7cbb","type":"sqlite","z":"9584418c.dafc2","g":"35da177d9e2fd258","mydb":"4f8f8feffed26998","sqlquery":"msg.topic","sql":"","name":"Amazon","x":1000,"y":1780,"wires":[["ea911291f04c7d18"]]},{"id":"2cd08c8da06afaf6","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Write Amazon Landing","func":"var sql = \"\"\n\nfor (var i = 0; i < msg.payload.acList.length; i++) {\n var latlong = \"0,0\"\n if (typeof msg.payload.acList[i].Reg !== \"undefined\" && typeof msg.payload.acList[i].Lat !== \"undefined\" && typeof msg.payload.acList[i].Long !== \"undefined\") {\n //if (msg.payload.acList[i].Reg.endsWith(\"PA\") && msg.payload.acList[i].Man.toLowerCase().includes(\"amazon\")) {\n if (msg.payload.acList[i].Man.toLowerCase().includes(\"amazon\")) {\n if (msg.payload.acList[i].Alt < 50){\n latlong = msg.payload.acList[i].Lat + \",\" + msg.payload.acList[i].Long.toString()\n sql += `INSERT INTO deliveries (timestamp, registration, latlong, altitude) VALUES (\"${Date.now()}\", \"${msg.payload.acList[i].Reg}\", \"${latlong}\", \"${msg.payload.acList[i].Alt}\"); `\n }\n }\n }\n}\n\nif (sql.length > 0){\n msg.topic = sql\n return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":820,"y":1780,"wires":[["5f1d1b471a1c7cbb"]]},{"id":"ea911291f04c7d18","type":"api-call-service","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Generate Heatmap","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"shell_command","service":"generate_heatmap","areaId":[],"deviceId":[],"entityId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1210,"y":1780,"wires":[[]]},{"id":"cde7b3c9ca39891b","type":"link in","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"","links":["1457bf6605a50448"],"x":325,"y":722,"wires":[["e93027cb.6a6308","ea2604f9.4cdf98","39a5ce57.78e3d2","77184c93.8790d4","8ee35d65.a7569","ea19fe14.80749","41b918d5.7ce018"]]},{"id":"1457bf6605a50448","type":"link out","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"","links":["cde7b3c9ca39891b"],"x":295,"y":722,"wires":[]},{"id":"8c55985bffebd56a","type":"api-call-service","z":"9584418c.dafc2","g":"11e25fc28c23144c","name":"Front Sconces Off","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.front_sconces"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":390,"y":1160,"wires":[[]]},{"id":"fae7fa701710e258","type":"server-state-changed","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"Front Door Unlock","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"lock.front_door","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"unlocked","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":false,"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":170,"y":1320,"wires":[["17b35d69307a8455"],[]]},{"id":"ebe84a6f70b4bc2f","type":"inject","z":"9584418c.dafc2","g":"18fe74aea06a1180","name":"Every 30 Minutes","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"1800","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":190,"y":340,"wires":[["830c3ddd08ef396c"]]},{"id":"cf1c689e51b98aec","type":"api-current-state","z":"9584418c.dafc2","g":"18fe74aea06a1180","name":"Thermostat Idle","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"Idle","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.thermostat_state","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":440,"y":340,"wires":[["6af7abba85612dd9"],[]]},{"id":"6af7abba85612dd9","type":"function","z":"9584418c.dafc2","g":"18fe74aea06a1180","name":"Idle > 2 hours","func":"// If last changed > 3 hours\nif (parseInt(msg.payload.timeSinceChangedMs) > 3600000*2) {\n return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":400,"wires":[["8b6280c5c448720c"]]},{"id":"8b6280c5c448720c","type":"api-call-service","z":"9584418c.dafc2","g":"18fe74aea06a1180","name":"Turn AC Fan on Low","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"climate","service":"set_fan_mode","areaId":[],"deviceId":[],"entityId":["climate.thermostat"],"data":"{\"fan_mode\":\"low\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":760,"y":340,"wires":[["9ce46ce21d8cc964"]]},{"id":"9ce46ce21d8cc964","type":"delay","z":"9584418c.dafc2","g":"18fe74aea06a1180","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":900,"y":400,"wires":[["2b6721107586ceae"]]},{"id":"2b6721107586ceae","type":"api-call-service","z":"9584418c.dafc2","g":"18fe74aea06a1180","name":"Turn AC Fan on Auto","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"climate","service":"set_fan_mode","areaId":[],"deviceId":[],"entityId":["climate.thermostat"],"data":"{\"fan_mode\":\"auto\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1080,"y":340,"wires":[[]]},{"id":"830c3ddd08ef396c","type":"api-current-state","z":"9584418c.dafc2","g":"18fe74aea06a1180","name":"Attic > 100","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"100","halt_if_type":"num","halt_if_compare":"gt","entity_id":"sensor.netatmo_home_attic_temperature","state_type":"str","blockInputOverrides":true,"outputProperties":[{"property":"attic","propertyType":"msg","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":290,"y":400,"wires":[["cf1c689e51b98aec"],[]]},{"id":"43e5fa289c7550ff","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Speedy","func":"var alert = {}\nvar message = \"Speedy:\\n\"\n\nfor (var i = 0; i < msg.payload.acList.length; i++) {\n if (typeof msg.payload.acList[i].Reg !== \"undefined\") {\n if (typeof msg.payload.acList[i].Spd == \"number\") {\n if (msg.payload.acList[i].Spd > 600) {\n alert[msg.payload.acList[i].Reg] = msg.payload.acList[i].Icao\n }\n }\n }\n}\n\nif (Object.keys(alert).length > 0) {\n for (const [key, value] of Object.entries(alert)) {\n message += key + \": https://globe.adsbexchange.com/?icao=\" + value + \"\\n\"\n }\n return { payload: message + \"https://vrs.aneis.ch\" }\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":1540,"wires":[["97761f13f8e5c31b"]]},{"id":"97761f13f8e5c31b","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Rate Limiter","func":"var interval = (1000*60*10); // minimum interval between messages (ms)\ncontext.lastTime = context.lastTime || 0;\n\nvar now = Date.now();\n\nif (now-context.lastTime > interval) {\n context.lastTime = now;\n return msg;\n} else {\n return null;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1010,"y":1540,"wires":[["26e32b1d7824356a"]]},{"id":"ed80a3f.522526","type":"server-state-changed","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Vehicle Detected","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.mailbox_car_count","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"0","halt_if_type":"num","halt_if_compare":"gt","outputs":2,"output_only_on_state_change":false,"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":160,"y":2200,"wires":[["bcaf3569e7816922","7347dd9c5cdf8a37"],[]]},{"id":"f3a3e80f.3e8e38","type":"function","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Image to Payload","func":"msg = {\n payload: msg.payload,\n event_id: msg.event_id\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":2200,"wires":[["ae34795ccab80dee","7151828122e3b80c"]]},{"id":"69bc3ab7.bd6104","type":"http request","z":"9584418c.dafc2","d":true,"g":"9cfe6331fbc680d5","name":"Get Snapshot","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://frigate:5000/api/events/{{{event_id}}}/snapshot.jpg?timestamp=0&bbox=0&crop=1","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":720,"y":2200,"wires":[["f3a3e80f.3e8e38"]]},{"id":"6469ec7efdb06d81","type":"api-call-service","z":"9584418c.dafc2","d":true,"g":"9cfe6331fbc680d5","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_self","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": msg.detection_result,\t \"data\": { \"attachments\": [\"/config/images/logo.jpg\"]}\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1440,"y":2320,"wires":[[]]},{"id":"6f08d11c854dfb00","type":"file","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Write File","filename":"/data/logo.jpg","filenameType":"str","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":720,"y":2260,"wires":[["b2a5543693ac851e","df028b4014ad3c15"]]},{"id":"9b7c5535c74a94a3","type":"function","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Output msg","func":"var oldmsg = msg;\n\nmsg = {\n payload: msg.outlinedImage,\n detection_result: msg.payload[0].label,\n event_id: msg.event_id\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":2260,"wires":[["6f08d11c854dfb00"]]},{"id":"d8a16fd91366d112","type":"switch","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Match Found","property":"payload","propertyType":"msg","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":390,"y":2260,"wires":[["9b7c5535c74a94a3"]]},{"id":"bcaf3569e7816922","type":"http request","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Get Events","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://frigate:5000/api/events?cameras=driveway&labels=car&has_snapshot=1&zones=mailbox&in_progress=1&limit=1","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":350,"y":2200,"wires":[["d58f6ef71c326040","7347dd9c5cdf8a37"]]},{"id":"d58f6ef71c326040","type":"function","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Extract Event ID","func":"if (JSON.parse(msg.payload).length > 0) {\n msg = {\n event_id: JSON.parse(msg.payload)[0].id,\n };\n return msg;\n}\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":2200,"wires":[["7347dd9c5cdf8a37","c13f0f20a56d6af5"]]},{"id":"7347dd9c5cdf8a37","type":"debug","z":"9584418c.dafc2","d":true,"g":"9cfe6331fbc680d5","name":"Event Debug","active":true,"tosidebar":true,"console":true,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":580,"y":2140,"wires":[]},{"id":"ae34795ccab80dee","type":"file","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Write File","filename":"/data/input.jpg","filenameType":"str","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":1120,"y":2200,"wires":[["a2635d725d71ca68"]]},{"id":"00a968e4ae50d0d3","type":"api-call-service","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_self","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": \"Input\",\t \"data\": { \"attachments\": [\"/config/images/input.jpg\"]}\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1440,"y":2200,"wires":[[]]},{"id":"bd19a17005513c2f","type":"inject","z":"9584418c.dafc2","g":"3c4349a7eea9bd3b","name":"Every 15 Minutes","props":[],"repeat":"900","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":190,"y":1940,"wires":[["24d1a94e275e5e44","ab66afa5b576de3f","7a8e43b6f7c84bac","58d0c98797e19829","ccf5998fdf8ee50d"]]},{"id":"24d1a94e275e5e44","type":"http request","z":"9584418c.dafc2","g":"3c4349a7eea9bd3b","name":"Set Doorbell Online","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.0.34/cgi-bin/configManager.cgi?action=setConfig&VSP_PaaS.Online=true","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"digest","senderr":false,"headers":[],"x":410,"y":2000,"wires":[[]]},{"id":"935c3eb83c353f53","type":"function","z":"9584418c.dafc2","d":true,"g":"9cfe6331fbc680d5","name":"Rate Limiter","func":"// 1s\nvar interval = (1000*1); // minimum interval between messages (ms)\ncontext.lastTime = context.lastTime || 0;\n\nvar now = Date.now();\n\nif (now-context.lastTime > interval) {\n context.lastTime = now;\n return msg;\n} else {\n return null;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1390,"y":2260,"wires":[["6469ec7efdb06d81"]]},{"id":"a2635d725d71ca68","type":"within-time-switch","z":"9584418c.dafc2","d":true,"g":"9cfe6331fbc680d5","name":"","nameInt":"","positionConfig":"9f81fd881d01a666","startTime":"12:00","startTimeType":"entered","startOffset":0,"startOffsetType":"none","startOffsetMultiplier":60000,"endTime":"20:00","endTimeType":"entered","endOffset":0,"endOffsetType":"none","endOffsetMultiplier":60000,"timeRestrictions":0,"timeRestrictionsType":"none","timeDays":"*","timeOnlyOddDays":false,"timeOnlyEvenDays":false,"timeOnlyOddWeeks":false,"timeOnlyEvenWeeks":false,"timeMonths":"*","timedatestart":"","timedateend":"","propertyStart":"","propertyStartType":"none","propertyStartCompare":"true","propertyStartThreshold":"","propertyStartThresholdType":"num","startTimeAlt":"","startTimeAltType":"entered","startOffsetAlt":0,"startOffsetAltType":"none","startOffsetAltMultiplier":60000,"propertyEnd":"","propertyEndType":"none","propertyEndCompare":"true","propertyEndThreshold":"","propertyEndThresholdType":"num","endTimeAlt":"","endTimeAltType":"entered","endOffsetAlt":0,"endOffsetAltType":"none","endOffsetAltMultiplier":60000,"withinTimeValue":"true","withinTimeValueType":"msgInput","outOfTimeValue":"false","outOfTimeValueType":"msgInput","tsCompare":"0","x":1270,"y":2200,"wires":[["00a968e4ae50d0d3"],[]]},{"id":"42be35f83b764861","type":"http request","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Add SubLabel","method":"POST","ret":"txt","paytoqs":"ignore","url":"http://frigate:5000/api/events/{{{event_id}}}/sub_label","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"Content-type","valueType":"other","valueValue":"application/json"}],"x":1180,"y":2260,"wires":[["df028b4014ad3c15","935c3eb83c353f53","6469ec7efdb06d81"]]},{"id":"df028b4014ad3c15","type":"debug","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"debug 2","active":true,"tosidebar":true,"console":true,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":430,"y":2340,"wires":[]},{"id":"b2a5543693ac851e","type":"function","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Detection to payload","func":"var new_msg = {\n payload: { \"subLabel\": msg.detection_result },\n detection_result: msg.detection_result,\n event_id: msg.event_id\n};\nvar msg = new_msg\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":2260,"wires":[["42be35f83b764861","df028b4014ad3c15"]]},{"id":"c13f0f20a56d6af5","type":"http request","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Get Current Image","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://frigate:5000/api/driveway/latest.jpg?quality=100","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":810,"y":2140,"wires":[["f3a3e80f.3e8e38"]]},{"id":"7151828122e3b80c","type":"deepstack-custom-model","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Post to Deepstack","server":"96b8babe5c0a6107","confidence":"60","customModel":"delivery","drawPredictions":true,"outlineColor":"red","custom":"","outputs":1,"x":190,"y":2260,"wires":[["d8a16fd91366d112","df028b4014ad3c15"]]},{"id":"0151c0e6e6069b41","type":"server-state-changed","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Person Detected","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.front_porch_person_count","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"0","halt_if_type":"num","halt_if_compare":"gt","outputs":2,"output_only_on_state_change":false,"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":160,"y":2960,"wires":[["f28a763b1531f897","37dde9151438ba72"],[]]},{"id":"4aa6753cf7f8aab0","type":"function","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Image to Payload","func":"msg = {\n payload: msg.payload,\n event_id: msg.event_id\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":2960,"wires":[["600c6858cd97bd11","042d631e1f4965c1"]]},{"id":"9dca394a8020d5e7","type":"http request","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Get Snapshot","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.1.22:5000/api/events/{{{event_id}}}/snapshot.jpg?timestamp=0&bbox=0&crop=1","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":720,"y":2960,"wires":[["4aa6753cf7f8aab0"]]},{"id":"3b7342cc0d038b02","type":"api-call-service","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_self","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": msg.message,\t \"data\": { \"attachments\": [\"/config/images/input.jpg\"]}\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1460,"y":3020,"wires":[[]]},{"id":"f28a763b1531f897","type":"http request","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Get Events","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://10.0.1.22:5000/api/events?cameras=front_door&labels=person&has_snapshot=1&zones=front_porch&in_progress=1&limit=1","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":350,"y":2960,"wires":[["85eabd7943d854db","37dde9151438ba72"]]},{"id":"85eabd7943d854db","type":"function","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Extract Event ID","func":"if (JSON.parse(msg.payload).length > 0) {\n msg = {\n event_id: JSON.parse(msg.payload)[0].id,\n };\n return msg;\n}\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":2960,"wires":[["3048ddac2903b9c6","37dde9151438ba72"]]},{"id":"600c6858cd97bd11","type":"image","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"","width":"800","data":"payload","dataType":"msg","thumbnail":false,"active":true,"pass":true,"outputs":1,"x":1060,"y":3160,"wires":[[]]},{"id":"042d631e1f4965c1","type":"file","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Write File","filename":"/data/input.jpg","filenameType":"str","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":1120,"y":2960,"wires":[["ad720109e7c5140b"]]},{"id":"feac53432ad8e204","type":"http request","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Add SubLabel","method":"POST","ret":"txt","paytoqs":"ignore","url":"http://10.0.1.22:5000/api/events/{{{event_id}}}/sub_label","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"Content-type","valueType":"other","valueValue":"application/json"}],"x":1260,"y":3020,"wires":[["3b7342cc0d038b02","37dde9151438ba72"]]},{"id":"37dde9151438ba72","type":"debug","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Face Debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":850,"y":3100,"wires":[]},{"id":"2a9ba9bc54399191","type":"function","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Parse Detection","func":"var oldmsg = msg\nvar parsed = JSON.parse(msg.payload)\n\nvar msg = {\n \"event_id\": msg.event_id,\n \"parsed\": parsed\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":3100,"wires":[["d4d7e72ac2040557"]]},{"id":"3048ddac2903b9c6","type":"http request","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Get Current Image","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.1.22:5000/api/front_door/latest.jpg?quality=100","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":810,"y":2900,"wires":[["4aa6753cf7f8aab0"]]},{"id":"ad720109e7c5140b","type":"file-upload","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"","url":"http://10.0.1.22:32168/v1/vision/face/recognize","file":"/data/input.jpg","x":280,"y":3040,"wires":[["2a9ba9bc54399191","37dde9151438ba72"]]},{"id":"d4d7e72ac2040557","type":"switch","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Success?","property":"parsed.success","propertyType":"msg","rules":[{"t":"true"}],"checkall":"true","repair":false,"outputs":1,"x":720,"y":3020,"wires":[["37dde9151438ba72","01bd0deabf985fb5"]]},{"id":"01bd0deabf985fb5","type":"function","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Compute Detection","func":"var event_id = msg.event_id\nvar msg = msg.parsed\nvar detections = ''\nvar sublabel = ''\nvar highest = 0.00\n\nfor (let i = 0; i < msg.predictions.length; i++) {\n var person = msg.predictions[i]['userid']\n var confidence = msg.predictions[i]['confidence']\n if (confidence > highest) { highest = confidence }\n if (confidence > 0.40) {\n detections += person + ' ' + confidence + \" \"\n sublabel = msg.predictions[i]['userid']\n break\n } \n else if (confidence > 0.20){\n detections += person + ' ' + confidence + \" \"\n }\n}\n\n// Only react to high confidence\nif (highest < 0.40) {\n msg = { \"payload\": \"no\" }\n return msg\n}\n\nmsg = {\n \"message\": detections,\n \"payload\": { \"subLabel\": sublabel },\n \"event_id\": event_id\n}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":910,"y":3020,"wires":[["c30bce03a0e91b98","37dde9151438ba72"]]},{"id":"c30bce03a0e91b98","type":"switch","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Match","property":"payload","propertyType":"msg","rules":[{"t":"neq","v":"no","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":1090,"y":3020,"wires":[["feac53432ad8e204","915bbbc78674401b"]]},{"id":"915bbbc78674401b","type":"switch","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Check Sub Label","property":"payload.subLabel","propertyType":"msg","rules":[{"t":"eq","v":"Bethany","vt":"str"},{"t":"eq","v":"Andrew","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":1270,"y":3100,"wires":[["3f56ae69cfd632f3"],["b955a2362a347e25"]]},{"id":"3f56ae69cfd632f3","type":"api-call-service","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_self","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": \"Bethany\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1480,"y":3100,"wires":[[]]},{"id":"b955a2362a347e25","type":"api-call-service","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_self","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": \"Andrew\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1480,"y":3140,"wires":[[]]},{"id":"71c092fab87eb15b","type":"file in","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"","filename":"/data/image.jpg","filenameType":"str","format":"","chunk":false,"sendError":false,"encoding":"none","allProps":false,"x":960,"y":2820,"wires":[["4aa6753cf7f8aab0"]]},{"id":"64850b3f34c8899b","type":"inject","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":740,"y":2820,"wires":[["71c092fab87eb15b"]]},{"id":"ea239028eda07991","type":"within-time-switch","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"","nameInt":"","positionConfig":"9f81fd881d01a666","startTime":"08:00:00","startTimeType":"entered","startOffset":0,"startOffsetType":"none","startOffsetMultiplier":60000,"endTime":"22:00:00","endTimeType":"entered","endOffset":0,"endOffsetType":"none","endOffsetMultiplier":60000,"timeRestrictions":0,"timeRestrictionsType":"none","timeDays":"*","timeOnlyOddDays":false,"timeOnlyEvenDays":false,"timeOnlyOddWeeks":false,"timeOnlyEvenWeeks":false,"timeMonths":"*","timedatestart":"","timedateend":"","propertyStart":"","propertyStartType":"none","propertyStartCompare":"true","propertyStartThreshold":"","propertyStartThresholdType":"num","startTimeAlt":"","startTimeAltType":"entered","startOffsetAlt":0,"startOffsetAltType":"none","startOffsetAltMultiplier":60000,"propertyEnd":"","propertyEndType":"none","propertyEndCompare":"true","propertyEndThreshold":"","propertyEndThresholdType":"num","endTimeAlt":"","endTimeAltType":"entered","endOffsetAlt":0,"endOffsetAltType":"none","endOffsetAltMultiplier":60000,"withinTimeValue":"true","withinTimeValueType":"msgInput","outOfTimeValue":"false","outOfTimeValueType":"msgInput","tsCompare":"0","x":410,"y":1660,"wires":[["a9a323de66b6f772"],[]]},{"id":"58d0c98797e19829","type":"http request","z":"9584418c.dafc2","g":"3c4349a7eea9bd3b","name":"Set Camera 1 Online","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.0.32/cgi-bin/configManager.cgi?action=setConfig&VSP_PaaS.Online=true","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"digest","senderr":false,"headers":[],"x":420,"y":1880,"wires":[[]]},{"id":"7a8e43b6f7c84bac","type":"http request","z":"9584418c.dafc2","g":"3c4349a7eea9bd3b","name":"Set Camera 2 Online","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.0.33/cgi-bin/configManager.cgi?action=setConfig&VSP_PaaS.Online=true","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"digest","senderr":false,"headers":[],"x":420,"y":1920,"wires":[[]]},{"id":"ab66afa5b576de3f","type":"http request","z":"9584418c.dafc2","g":"3c4349a7eea9bd3b","name":"Set Camera 3 Online","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.0.35/cgi-bin/configManager.cgi?action=setConfig&VSP_PaaS.Online=true","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"digest","senderr":false,"headers":[],"x":420,"y":1960,"wires":[[]]},{"id":"be0fbabb24b44974","type":"deepstack-custom-model","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Post to Deepstack","server":"223dadf98673f8b9","confidence":"60","customModel":"USPS","drawPredictions":true,"outlineColor":"red","custom":"","outputs":1,"x":190,"y":2560,"wires":[["88baf6aea1d78864","2be1e06ef7807b3f","faa9044e31394934"]]},{"id":"9b277fca69aebd69","type":"server-state-changed","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Vehicle Detected","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.mailbox_car_count","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"0","halt_if_type":"num","halt_if_compare":"gt","outputs":2,"output_only_on_state_change":false,"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":160,"y":2500,"wires":[["bf9a785d9f0e5359"],[]]},{"id":"75ef5974262fd7bc","type":"function","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Image to Payload","func":"msg = {\n payload: msg.payload,\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":890,"y":2500,"wires":[["be0fbabb24b44974","e48b5f0d83c7a8c6","5dacb55a06a1cb1f"]]},{"id":"17407dceb7726474","type":"api-call-service","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_self","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": \"USPS!2\",\t \"data\": { \"attachments\": [\"/config/images/logo2.jpg\"]}\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1180,"y":2580,"wires":[[]]},{"id":"1a39ed5aa10b9a2e","type":"file","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Write File","filename":"/data/logo2.jpg","filenameType":"str","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":760,"y":2560,"wires":[["9a9e970d6d7a4727"]]},{"id":"d3cc43be63f35e49","type":"function","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Output Processed Image","func":"msg = {\n payload: msg.outlinedImage,\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":2560,"wires":[["1a39ed5aa10b9a2e"]]},{"id":"2be1e06ef7807b3f","type":"switch","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Match Found","property":"payload","propertyType":"msg","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":370,"y":2560,"wires":[["d3cc43be63f35e49"]]},{"id":"88baf6aea1d78864","type":"debug","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Deepstack Debug","active":true,"tosidebar":true,"console":true,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":580,"y":2660,"wires":[]},{"id":"e48b5f0d83c7a8c6","type":"image","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"","width":"800","data":"payload","dataType":"msg","thumbnail":false,"active":true,"pass":true,"outputs":1,"x":1080,"y":2660,"wires":[[]]},{"id":"faa9044e31394934","type":"image","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"","width":"800","data":"outlinedImage","dataType":"msg","thumbnail":false,"active":true,"pass":true,"outputs":1,"x":380,"y":2720,"wires":[[]]},{"id":"5dacb55a06a1cb1f","type":"file","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Write File","filename":"/data/input2.jpg","filenameType":"str","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":1100,"y":2500,"wires":[["1cd44a2e0577b03f"]]},{"id":"82fc9c91a2667f9c","type":"api-call-service","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_self","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": \"Input2\",\t \"data\": { \"attachments\": [\"/config/images/input2.jpg\"]}\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1420,"y":2500,"wires":[[]]},{"id":"9a9e970d6d7a4727","type":"function","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Rate Limiter","func":"var interval = (1000*60); // minimum interval between messages (ms)\ncontext.lastTime = context.lastTime || 0;\n\nvar now = Date.now();\n\nif (now-context.lastTime > interval) {\n context.lastTime = now;\n return msg;\n} else {\n return null;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":910,"y":2560,"wires":[["17407dceb7726474"]]},{"id":"bf9a785d9f0e5359","type":"http request","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Get Image","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.1.22:5000/api/driveway/latest.jpg","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":510,"y":2500,"wires":[["75ef5974262fd7bc"]]},{"id":"b3f4911f67703b3b","type":"inject","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":320,"y":2440,"wires":[["bf9a785d9f0e5359"]]},{"id":"1cd44a2e0577b03f","type":"within-time-switch","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"","nameInt":"","positionConfig":"9f81fd881d01a666","startTime":"12:00","startTimeType":"entered","startOffset":0,"startOffsetType":"none","startOffsetMultiplier":60000,"endTime":"19:00","endTimeType":"entered","endOffset":0,"endOffsetType":"none","endOffsetMultiplier":60000,"timeRestrictions":0,"timeRestrictionsType":"none","timeDays":"*","timeOnlyOddDays":false,"timeOnlyEvenDays":false,"timeOnlyOddWeeks":false,"timeOnlyEvenWeeks":false,"timeMonths":"*","timedatestart":"","timedateend":"","propertyStart":"","propertyStartType":"none","propertyStartCompare":"true","propertyStartThreshold":"","propertyStartThresholdType":"num","startTimeAlt":"","startTimeAltType":"entered","startOffsetAlt":0,"startOffsetAltType":"none","startOffsetAltMultiplier":60000,"propertyEnd":"","propertyEndType":"none","propertyEndCompare":"true","propertyEndThreshold":"","propertyEndThresholdType":"num","endTimeAlt":"","endTimeAltType":"entered","endOffsetAlt":0,"endOffsetAltType":"none","endOffsetAltMultiplier":60000,"withinTimeValue":"true","withinTimeValueType":"msgInput","outOfTimeValue":"false","outOfTimeValueType":"msgInput","tsCompare":"0","x":1250,"y":2500,"wires":[["82fc9c91a2667f9c"],[]]},{"id":"ccf5998fdf8ee50d","type":"http request","z":"9584418c.dafc2","d":true,"g":"3c4349a7eea9bd3b","name":"Set PTZ Online","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.0.36/cgi-bin/configManager.cgi?action=setConfig&VSP_PaaS.Online=true","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"digest","senderr":false,"headers":[],"x":400,"y":2040,"wires":[[]]},{"id":"d269f175.c9dc6","type":"server-events","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Custom Water Event Fired","server":"e1dc0b88.463bb8","version":2,"eventType":"irrigation_custom_water","exposeToHomeAssistant":false,"eventData":"","haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"},{"property":"event_type","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"}],"x":190,"y":340,"wires":[["883f2c00.1d94e8"]]},{"id":"3367e45f.cc981c","type":"function","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"++","func":"if ( (msg.i += 1) < msg.zones.length ) return msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":670,"y":400,"wires":[["116d5bb3.ee92a4"]]},{"id":"116d5bb3.ee92a4","type":"function","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"For Each","func":"if( msg.i == undefined ) msg.i = 0;\n\nmsg.payload = msg.zones[ msg.i ];\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":840,"y":340,"wires":[["565ee5c1.561bfc","80df47d5.602888","e2c37b65c5582c2b"]]},{"id":"80df47d5.602888","type":"api-call-service","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Turn On Zone","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":[],"data":"{ \"entity_id\": payload.zone}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1060,"y":340,"wires":[[]]},{"id":"fb46876c.845298","type":"api-call-service","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Turn Off Zone","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":[],"data":"{ \"entity_id\": payload.zone}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1320,"y":400,"wires":[["98eeafa7.bd2b9","860a4c61d7557dc9"]]},{"id":"98eeafa7.bd2b9","type":"delay","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Delay 5","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":980,"y":480,"wires":[["3367e45f.cc981c"]]},{"id":"565ee5c1.561bfc","type":"change","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Set Delay Variable","rules":[{"t":"set","p":"delay","pt":"msg","to":"payload.time* 60000","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":890,"y":400,"wires":[["22a20603.86a06a"]]},{"id":"22a20603.86a06a","type":"stoptimer-varidelay","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","duration":"5","durationType":"num","units":"Millisecond","payloadtype":"num","payloadval":"0","name":"Delay","reporting":"every_second","persist":false,"x":1090,"y":400,"wires":[["fb46876c.845298"],[],["a8d96e.1f00969"]]},{"id":"a8d96e.1f00969","type":"mqtt out","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Publish Time Remaining","topic":"sensor/irrigation_time_remaining","qos":"","retain":"","broker":"546e31ed.0db1c","x":1350,"y":340,"wires":[]},{"id":"3b656b89.1ac154","type":"inject","z":"f602e6ba.609d28","g":"79694877249c9902","name":"3:00 Attempt","props":[{"p":"payload"}],"repeat":"","crontab":"00 03 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"[{\"zone\":\"switch.irrigation_front_beds\",\"time\":10,\"name\":\"Front beds\"},{\"zone\":\"switch.irrigation_front_lawn\",\"time\":20,\"name\":\"Front lawn\"},{\"zone\":\"switch.irrigation_left_and_main_rear_lawn\",\"time\":20,\"name\":\"Left and main rear lawn\"},{\"zone\":\"switch.irrigation_front_and_right_rear_lawn\",\"time\":20,\"name\":\"Front and right rear lawn\"},{\"zone\":\"switch.irrigation_side_lawn\",\"time\":20,\"name\":\"Side lawn\"}]","payloadType":"json","x":180,"y":1280,"wires":[["493b435f.c9851c"]]},{"id":"493b435f.c9851c","type":"api-current-state","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Schedule Enabled","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.lawn_irrigation_scheduling","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","x":410,"y":1280,"wires":[["8c060f00.cf577"],["7b12e66f.57d068"]]},{"id":"7b12e66f.57d068","type":"api-call-service","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.lawn_irrigation_reason"],"data":"{\"value\":\"Automation Off\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":1300,"wires":[[]]},{"id":"8c060f00.cf577","type":"link out","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["f1cbfe0.7dfb4","576b66fa1bd202a3"],"x":595,"y":1260,"wires":[]},{"id":"4422f61c.847d88","type":"link in","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["3ff9ce03ef7b554b"],"x":135,"y":1480,"wires":[["219b37105a8304f1"]]},{"id":"dcdeabc7.780578","type":"link out","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["1eaa857e.b6b8db","c90fd5e6.c5c678","b8fe96458628f202"],"x":595,"y":1460,"wires":[]},{"id":"722d03d6.2ff77c","type":"link in","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["8d4bfe8e.ee805","d67106b42368e630"],"x":135,"y":1900,"wires":[["b3c4a3638c17629e"]]},{"id":"af4788fe.215ba8","type":"link out","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["405789f7.0727a8","eb1a5268c1aec843","9896327569c234da"],"x":595,"y":1900,"wires":[]},{"id":"c90fd5e6.c5c678","type":"link in","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["dcdeabc7.780578","89d715ddf12d2195"],"x":135,"y":1600,"wires":[["e7430e17f0b24ed8"]]},{"id":"862ad27a.d347d","type":"link out","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["83edf648.3f9ed8"],"x":595,"y":1580,"wires":[]},{"id":"808e6a81.92e2e8","type":"api-call-service","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Turn On Master Valve","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.irrigation_master_valve"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":460,"y":400,"wires":[["e42ff3d9.593dc"]]},{"id":"883f2c00.1d94e8","type":"api-current-state","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"24v Power","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.irrigation_24v_power","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","x":250,"y":400,"wires":[["808e6a81.92e2e8"],[]]},{"id":"e42ff3d9.593dc","type":"delay","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Delay 5","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":480,"y":340,"wires":[["76160bc4.8cd644"]]},{"id":"76160bc4.8cd644","type":"change","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"","rules":[{"t":"set","p":"zones","pt":"msg","to":"payload.event.zones","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":660,"y":340,"wires":[["116d5bb3.ee92a4"]]},{"id":"83edf648.3f9ed8","type":"link in","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["862ad27a.d347d","1bb3825011174363"],"x":135,"y":1700,"wires":[["b6e7d5b8891bba6d"]]},{"id":"8d4bfe8e.ee805","type":"link out","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["722d03d6.2ff77c"],"x":595,"y":1720,"wires":[]},{"id":"583f46a3.fc4c38","type":"inject","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"5:00 Attempt","props":[{"p":"payload"}],"repeat":"","crontab":"00 05 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"[{\"zone\":\"switch.irrigation_front_beds\",\"time\":10,\"name\":\"Front beds\"},{\"zone\":\"switch.irrigation_front_lawn\",\"time\":20,\"name\":\"Front lawn\"},{\"zone\":\"switch.irrigation_left_and_main_rear_lawn\",\"time\":20,\"name\":\"Left and main rear lawn\"},{\"zone\":\"switch.irrigation_front_and_right_rear_lawn\",\"time\":20,\"name\":\"Front and right rear lawn\"},{\"zone\":\"switch.irrigation_side_lawn\",\"time\":20,\"name\":\"Side lawn\"}]","payloadType":"json","x":180,"y":2620,"wires":[["d9147878.b61cf8"]]},{"id":"d9147878.b61cf8","type":"api-current-state","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Schedule Enabled","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.front_bed_irrigation_scheduling","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","x":410,"y":2620,"wires":[["c7e5552e.7f8a08"],["45c5dbbbd8ce50a1"]]},{"id":"c7e5552e.7f8a08","type":"link out","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["f1cbfe0.7dfb4","f6881b4bf93c27c5"],"x":595,"y":2600,"wires":[]},{"id":"6bcf06fb.9ca748","type":"link in","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["4f2902edc77f2d3b"],"x":135,"y":2820,"wires":[["ed6e3d4225582e20"]]},{"id":"f587589f.d739e8","type":"link out","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["1eaa857e.b6b8db","9d851699.6a8458"],"x":595,"y":2800,"wires":[]},{"id":"d9d17e8f.590e6","type":"link in","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["4fae5b92.a9cd44"],"x":135,"y":3040,"wires":[["d8637d8d96b68fca"]]},{"id":"d9f893eb.834f3","type":"link out","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["5ce1803b.06628"],"x":595,"y":3040,"wires":[]},{"id":"9d851699.6a8458","type":"link in","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["f587589f.d739e8"],"x":135,"y":2940,"wires":[["593bee0e8c958df8"]]},{"id":"4fae5b92.a9cd44","type":"link out","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["d9d17e8f.590e6"],"x":595,"y":2920,"wires":[]},{"id":"a2ab7368.923fb","type":"template","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Zone Settings Front Beds","field":"zones","fieldType":"msg","format":"json","syntax":"mustache","template":"{\n \"zone\": \"switch.irrigation_front_beds\",\n \"time\": 20,\n \"name\": \"Front beds\"\n}","output":"json","x":250,"y":3200,"wires":[["62b5545bc6d6e627"]]},{"id":"a31e3daf.17207","type":"api-call-service","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Turn On Master Valve","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.irrigation_master_valve"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":560,"y":3200,"wires":[["21ced698.708b5a"]]},{"id":"21ced698.708b5a","type":"delay","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"2s","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":730,"y":3200,"wires":[["c661d489.9c9bc8"]]},{"id":"c661d489.9c9bc8","type":"api-call-service","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Turn On Zone","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":[],"data":"{ \"entity_id\": msg.zones.zone}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":880,"y":3200,"wires":[["accc6697.196268"]]},{"id":"accc6697.196268","type":"change","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Set Delay Variable","rules":[{"t":"set","p":"delay","pt":"msg","to":"msg.zones.time* 60000","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1090,"y":3200,"wires":[["487ff788.8c5c98"]]},{"id":"487ff788.8c5c98","type":"stoptimer-varidelay","z":"f602e6ba.609d28","g":"55a2162532da4e14","duration":"5","durationType":"num","units":"Millisecond","payloadtype":"num","payloadval":"0","name":"Delay","reporting":"every_second","persist":false,"ignoretimerpass":false,"x":850,"y":3260,"wires":[["2238b09b.1b5b5","9129b06e.d8925"],[],["84258ddd.41da4"]]},{"id":"2238b09b.1b5b5","type":"api-call-service","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Turn Off Zone","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":[],"data":"{ \"entity_id\": msg.zones.zone}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":900,"y":3340,"wires":[[]]},{"id":"84258ddd.41da4","type":"mqtt out","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Publish Time Remaining","topic":"sensor/irrigation_time_remaining","qos":"","retain":"","broker":"546e31ed.0db1c","x":1130,"y":3320,"wires":[]},{"id":"9129b06e.d8925","type":"function","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Create msg object","func":"var message = \"Sprinkler auto-run: \" + msg.zones.name + \" ran for \" + msg.zones.time + \" minutes\"\n\nreturn { alert: message };","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1050,"y":3260,"wires":[["d83b5ff7a2212931"]]},{"id":"5ce1803b.06628","type":"link in","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"","links":["db46e0c1.f9ab5","d9f893eb.834f3"],"x":95,"y":3200,"wires":[["a2ab7368.923fb"]]},{"id":"815fddc0.6604c","type":"api-call-service","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Turn On 24v","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.irrigation_24v_power"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":470,"y":1900,"wires":[["af4788fe.215ba8"]]},{"id":"418058c4.af3158","type":"api-call-service","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Turn On 24v","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.irrigation_24v_power"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":470,"y":3040,"wires":[["d9f893eb.834f3"]]},{"id":"1ae21386.a831bc","type":"inject","z":"f602e6ba.609d28","g":"0f07749a4e1672ad","name":"06:00 24v Off","props":[],"repeat":"","crontab":"00 06 * * *","once":false,"onceDelay":0.1,"topic":"","x":180,"y":1140,"wires":[["117145a7.67e99a","882aff35f788008b"]]},{"id":"117145a7.67e99a","type":"api-call-service","z":"f602e6ba.609d28","g":"0f07749a4e1672ad","name":"Turn Off 24v","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.irrigation_24v_power"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":390,"y":1100,"wires":[[]]},{"id":"06d6255efdc31c47","type":"api-current-state","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Force Run","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_force_run","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","x":250,"y":1380,"wires":[["2fc67b25514de5a5"],["3ff9ce03ef7b554b"]]},{"id":"5420d0eed32223fb","type":"link out","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["f1cbfe0.7dfb4","08e3098cf183e086"],"x":595,"y":1360,"wires":[]},{"id":"3ff9ce03ef7b554b","type":"link out","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["f1cbfe0.7dfb4","4422f61c.847d88","8524a273a6a8ffd0"],"x":595,"y":1400,"wires":[]},{"id":"576b66fa1bd202a3","type":"link in","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["8c060f00.cf577"],"x":135,"y":1380,"wires":[["06d6255efdc31c47"]]},{"id":"7350c911a0b1a86d","type":"api-current-state","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Force Run","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_force_run","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","x":250,"y":2720,"wires":[["abb8777dd08aa743"],["4f2902edc77f2d3b"]]},{"id":"fdcfa1521191fa40","type":"link out","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["f1cbfe0.7dfb4","b403eec7866aea22"],"x":595,"y":2700,"wires":[]},{"id":"4f2902edc77f2d3b","type":"link out","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["f1cbfe0.7dfb4","6bcf06fb.9ca748"],"x":595,"y":2740,"wires":[]},{"id":"f6881b4bf93c27c5","type":"link in","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["c7e5552e.7f8a08"],"x":135,"y":2720,"wires":[["7350c911a0b1a86d"]]},{"id":"882aff35f788008b","type":"api-call-service","z":"f602e6ba.609d28","g":"0f07749a4e1672ad","name":"Turn Off Force Run","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["input_boolean.irrigation_force_run"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":410,"y":1160,"wires":[[]]},{"id":"a3d75225807b70eb","type":"delay","z":"f602e6ba.609d28","g":"79694877249c9902","name":"30 Minute Delay","pauseType":"delay","timeout":"30","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":280,"y":1760,"wires":[["339ee0ada21856e0"]]},{"id":"e2c37b65c5582c2b","type":"api-call-service","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Turn Off Start/Stop tracking","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["automation.store_sprinkler_start_stop_times"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1060,"y":300,"wires":[[]]},{"id":"860a4c61d7557dc9","type":"api-call-service","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Turn On Start/Stop tracking","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["automation.store_sprinkler_start_stop_times"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1360,"y":460,"wires":[[]]},{"id":"62b5545bc6d6e627","type":"template","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Template: Zone Last Ran >= 23 hours","field":"template","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{%- set entity_name = \"input_datetime{{ zones.zone }}\" | regex_replace(find='switch', replace='', ignorecase=False) -%}\n{%- set time = (as_timestamp(now()) - as_timestamp(states(entity_name+\"_last_start\"))) | int -%}\n{% if time >= 23*3600 %}1{% else %}0{% endif %}","output":"str","x":310,"y":3260,"wires":[["aa53225140781dd7"]]},{"id":"aa53225140781dd7","type":"api-render-template","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Evaluate Template","server":"e1dc0b88.463bb8","version":0,"template":"","resultsLocation":"data.continue","resultsLocationType":"msg","templateLocation":"template","templateLocationType":"msg","x":250,"y":3320,"wires":[["8113d83074ff7701"]]},{"id":"8113d83074ff7701","type":"switch","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Last Ran >= Template Hrs Ago","property":"data.continue","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"},{"t":"eq","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":530,"y":3320,"wires":[["a31e3daf.17207"],["f78cdb84200eb171"]]},{"id":"d83b5ff7a2212931","type":"api-call-service","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Notify via Wrapper","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"script","service":"notify_wrapper","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": alert \t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1270,"y":3260,"wires":[[]]},{"id":"dd9855ca4017c8c0","type":"api-call-service","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Turn on Boolean","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["input_boolean.irrigation_rainfall_delay"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":700,"y":580,"wires":[[]]},{"id":"c3a696a117416327","type":"function","z":"f602e6ba.609d28","d":true,"g":"a9182c2cc04d2d9a","name":"Check Rainfall","func":"var rain_override = false\n\nfor (var i = 0; i < msg.payload.length; i++) {\n if (parseFloat(msg.payload[i].state) > 0.25) {\n rain_override = true\n }\n}\n\n// top = proceed\n// bottom = overridden\nif (rain_override === true) {\n return [ null, {rain_override} ];\n} \nelse {\n return [ {rain_override}, null ];\n}","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":680,"wires":[["47f1a8018e58e032"],["dd9855ca4017c8c0"]]},{"id":"27f2580e35031830","type":"api-get-history","z":"f602e6ba.609d28","d":true,"g":"a9182c2cc04d2d9a","name":"Rainfall 120h","server":"e1dc0b88.463bb8","version":0,"startdate":"","enddate":"","entityid":"sensor.netatmo_home_rain_sum_rain_today_inches","entityidtype":"is","useRelativeTime":true,"relativeTime":"120h","flatten":true,"output_type":"array","output_location_type":"msg","output_location":"payload","x":310,"y":680,"wires":[["c3a696a117416327"]]},{"id":"9cb8187c669c6485","type":"comment","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Rainfall","info":"","x":150,"y":600,"wires":[]},{"id":"47f1a8018e58e032","type":"api-call-service","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Turn off Boolean","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["input_boolean.irrigation_rainfall_delay"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":700,"y":660,"wires":[[]]},{"id":"427f7fa58d86cc59","type":"inject","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"*/30","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"1800","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":640,"wires":[["27f2580e35031830","93965a61d2c4f5de"]]},{"id":"1d9a4d0bb4645f32","type":"api-call-service","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Turn on Boolean","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["input_boolean.irrigation_rain_forecast_delay"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":700,"y":840,"wires":[[]]},{"id":"d9ebbaa37f5911a9","type":"comment","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Rain Forecast","info":"","x":170,"y":760,"wires":[]},{"id":"eeecfc1e8864e39f","type":"api-call-service","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Turn off Boolean","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["input_boolean.irrigation_rain_forecast_delay"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":700,"y":760,"wires":[[]]},{"id":"89487a4efedec1db","type":"inject","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"*/30","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"1800","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":800,"wires":[["2c45af5b3ee5cf0a"]]},{"id":"1e4b3bc7c25b294f","type":"function","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Rain Chance","func":"// Check next 4 precipitation_probability values\n// HA Template: \n// {% for j in state_attr(\"weather.kcll_daynight\",\"forecast\")[:4] %}\n// {{ j.precipitation_probability }}\n// {% endfor %}\n\nvar forecast_override = false\n\n// if (parseFloat(msg.payload) > 40) {\n// forecast_override = true\n// }\n \nfor (var i = 0; i < 4; i++) {\n if (parseFloat(msg.data.attributes.forecast[i].precipitation_probability) >= 60) {\n forecast_override = true\n }\n}\n\n// top = proceed\n// bottom = overridden\nif (forecast_override === true) {\n return [ null, {forecast_override} ];\n} \nelse {\n return [ {forecast_override}, null ];\n}","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":490,"y":800,"wires":[["eeecfc1e8864e39f"],["1d9a4d0bb4645f32"]]},{"id":"2c45af5b3ee5cf0a","type":"api-current-state","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Weather","server":"e1dc0b88.463bb8","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"weather.kcll_daynight","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":300,"y":800,"wires":[["1e4b3bc7c25b294f"]]},{"id":"d7e50e7a2810667d","type":"api-call-service","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Turn on Boolean","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["input_boolean.irrigation_wind_delay"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":700,"y":1000,"wires":[[]]},{"id":"28936ec687ee4eb0","type":"comment","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Wind","info":"","x":150,"y":920,"wires":[]},{"id":"974833b6a2eca853","type":"api-call-service","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Turn off Boolean","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["input_boolean.irrigation_wind_delay"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":700,"y":920,"wires":[[]]},{"id":"478a5a84d38ba181","type":"inject","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"*/5","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"300","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":960,"wires":[["c01fd0612615e927"]]},{"id":"c01fd0612615e927","type":"api-current-state","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Wind <= 10 MPH","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"10","halt_if_type":"num","halt_if_compare":"lte","entity_id":"sensor.neighbor_5in1_wind","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":330,"y":960,"wires":[["974833b6a2eca853"],["d7e50e7a2810667d"]]},{"id":"219b37105a8304f1","type":"api-current-state","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Rainfall Delay","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"off","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_rainfall_delay","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":260,"y":1480,"wires":[["dcdeabc7.780578"],["d01fbafafbb34692"]]},{"id":"e7430e17f0b24ed8","type":"api-current-state","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Rain Forecast Delay","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"off","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_rain_forecast_delay","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":280,"y":1600,"wires":[["862ad27a.d347d"],["f5684be88477322f"]]},{"id":"b6e7d5b8891bba6d","type":"api-current-state","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Wind Delay","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"off","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_wind_delay","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":250,"y":1700,"wires":[["8d4bfe8e.ee805"],["a3d75225807b70eb"]]},{"id":"339ee0ada21856e0","type":"api-current-state","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Wind Delay","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"off","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_wind_delay","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":250,"y":1820,"wires":[["8d4bfe8e.ee805"],["336585d4eee0ca73"]]},{"id":"ed6e3d4225582e20","type":"api-current-state","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Rainfall Delay","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"off","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_rainfall_delay","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":260,"y":2820,"wires":[["f587589f.d739e8"],["f7ac7a90f3da2298"]]},{"id":"593bee0e8c958df8","type":"api-current-state","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Rain Forecast Delay","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"off","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_rain_forecast_delay","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":280,"y":2940,"wires":[["4fae5b92.a9cd44"],["67916c3a5554a794"]]},{"id":"d01fbafafbb34692","type":"api-call-service","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.lawn_irrigation_reason"],"data":"{\"value\":\"Rainfall\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":1500,"wires":[[]]},{"id":"f5684be88477322f","type":"api-call-service","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.lawn_irrigation_reason"],"data":"{\"value\":\"Rain Forecasted\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":1620,"wires":[[]]},{"id":"336585d4eee0ca73","type":"api-call-service","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.lawn_irrigation_reason"],"data":"{\"value\":\"Wind\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":1820,"wires":[[]]},{"id":"b3c4a3638c17629e","type":"api-call-service","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Clear Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.lawn_irrigation_reason"],"data":"{\"value\":\"None\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":260,"y":1900,"wires":[["815fddc0.6604c"]]},{"id":"67916c3a5554a794","type":"api-call-service","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.front_bed_irrigation_reason"],"data":"{\"value\":\"Rain Forecasted\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":2960,"wires":[[]]},{"id":"f7ac7a90f3da2298","type":"api-call-service","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.front_bed_irrigation_reason"],"data":"{\"value\":\"Rainfall\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":2840,"wires":[[]]},{"id":"45c5dbbbd8ce50a1","type":"api-call-service","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.front_bed_irrigation_reason"],"data":"{\"value\":\"Automation Off\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":2640,"wires":[[]]},{"id":"2fc67b25514de5a5","type":"api-call-service","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.lawn_irrigation_reason"],"data":"{\"value\":\"Force Run\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":450,"y":1360,"wires":[["5420d0eed32223fb"]]},{"id":"08e3098cf183e086","type":"link in","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["5420d0eed32223fb"],"x":325,"y":1960,"wires":[["815fddc0.6604c"]]},{"id":"abb8777dd08aa743","type":"api-call-service","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.front_bed_irrigation_reason"],"data":"{\"value\":\"Force Run\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":450,"y":2700,"wires":[["fdcfa1521191fa40"]]},{"id":"d8637d8d96b68fca","type":"api-call-service","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Clear Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.front_bed_irrigation_reason"],"data":"{\"value\":\"None\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":260,"y":3040,"wires":[["418058c4.af3158"]]},{"id":"b403eec7866aea22","type":"link in","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["fdcfa1521191fa40"],"x":325,"y":3100,"wires":[["418058c4.af3158"]]},{"id":"f2c9c3a5b8b11a64","type":"switch","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Continue?","property":"data.continue","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"1","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":1230,"y":2060,"wires":[["287dd3b1af5dc2d0"],["bf015af2161c5ec2"]]},{"id":"38affe5cc680d076","type":"template","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Template: Zone Last Ran >= 71 hours","field":"template","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{%- set entity_name = \"input_datetime{{ payload.zone }}\" | regex_replace(find='switch', replace='', ignorecase=False) -%}\n{%- set time = (as_timestamp(now()) - as_timestamp(states(entity_name+\"_last_start\"))) | int -%}\n{% if time >= 71*3600 %}1{% else %}0{% endif %}","output":"str","x":790,"y":2060,"wires":[["174186fb5d054240"]]},{"id":"9896327569c234da","type":"link in","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"","links":["af4788fe.215ba8"],"x":95,"y":2060,"wires":[["e95ac52f03478921"]]},{"id":"e95ac52f03478921","type":"template","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Lawn Zones","field":"all_zones","fieldType":"msg","format":"json","syntax":"mustache","template":"[\n {\n \"zone\": \"switch.irrigation_front_lawn\",\n \"name\": \"Front lawn\"\n },\n {\n \"zone\": \"switch.irrigation_left_and_main_rear_lawn\",\n \"name\": \"Left and main rear lawn\"\n },\n {\n \"zone\": \"switch.irrigation_front_and_right_rear_lawn\",\n \"name\": \"Front and right rear lawn\"\n },\n {\n \"zone\": \"switch.irrigation_side_lawn\",\n \"name\": \"Side lawn\"\n }\n]","output":"json","x":290,"y":2060,"wires":[["287dd3b1af5dc2d0"]]},{"id":"174186fb5d054240","type":"api-render-template","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Evaluate Template","server":"e1dc0b88.463bb8","version":0,"template":"","resultsLocation":"data.continue","resultsLocationType":"msg","templateLocation":"template","templateLocationType":"msg","x":1050,"y":2060,"wires":[["f2c9c3a5b8b11a64"]]},{"id":"287dd3b1af5dc2d0","type":"array-loop","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Loop Through Zones","key":"al287dd3b1af5dc2d0","keyType":"msg","reset":true,"resetValue":"value-null","array":"all_zones","arrayType":"msg","x":220,"y":2120,"wires":[["74cd40702021e86d","acdcc72fea065aac"],["224d30a98f52c287"]]},{"id":"74cd40702021e86d","type":"template","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Zone Settings Lawn","field":"zones","fieldType":"msg","format":"json","syntax":"mustache","template":"[\n {\n \"zone\": \"switch.irrigation_front_lawn\",\n \"time\": 15,\n \"name\": \"Front lawn\"\n },\n {\n \"zone\": \"switch.irrigation_left_and_main_rear_lawn\",\n \"time\": 15,\n \"name\": \"Left and main rear lawn\"\n },\n {\n \"zone\": \"switch.irrigation_front_and_right_rear_lawn\",\n \"time\": 15,\n \"name\": \"Front and right rear lawn\"\n },\n {\n \"zone\": \"switch.irrigation_side_lawn\",\n \"time\": 10,\n \"name\": \"Side lawn\"\n },\n {\n \"zone\": \"switch.irrigation_front_lawn\",\n \"time\": 15,\n \"name\": \"Front lawn\"\n },\n {\n \"zone\": \"switch.irrigation_left_and_main_rear_lawn\",\n \"time\": 15,\n \"name\": \"Left and main rear lawn\"\n },\n {\n \"zone\": \"switch.irrigation_front_and_right_rear_lawn\",\n \"time\": 15,\n \"name\": \"Front and right rear lawn\"\n },\n {\n \"zone\": \"switch.irrigation_side_lawn\",\n \"time\": 10,\n \"name\": \"Side lawn\"\n }\n]","output":"json","x":460,"y":2180,"wires":[["151eb6ba5b2d39cd"]]},{"id":"bf015af2161c5ec2","type":"function","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Append Run Zones","func":"if (typeof msg.run_zones === 'undefined'){\n msg.run_zones = []\n}\n\n// Add zone to run_zones\nmsg.run_zones.push(msg.payload.zone)\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":210,"y":2180,"wires":[["287dd3b1af5dc2d0"]]},{"id":"151eb6ba5b2d39cd","type":"array-loop","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Loop Through Zones","key":"al287dd3b1af5dc2d0","keyType":"msg","reset":true,"resetValue":"value-null","array":"zones","arrayType":"msg","x":720,"y":2180,"wires":[[],["45ee74d06e9cac2c"]]},{"id":"45ee74d06e9cac2c","type":"switch","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"If Zone in Run Zone","property":"run_zones","propertyType":"msg","rules":[{"t":"cont","v":"payload.zone","vt":"msg"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":710,"y":2240,"wires":[["8d3c8370996be2da"],["151eb6ba5b2d39cd"]]},{"id":"95a54981805b22f2","type":"api-call-service","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Turn On Zone","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":[],"data":"{ \"entity_id\": payload.zone}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":880,"y":2320,"wires":[["02d1e639f7ac6596","7b985932412db47d"]]},{"id":"a4b3eba196a504dc","type":"api-call-service","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Turn Off Zone","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":[],"data":"{ \"entity_id\": payload.zone}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":540,"y":2500,"wires":[["6ea0448df1383ec2"]]},{"id":"02d1e639f7ac6596","type":"change","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Set Delay Variable","rules":[{"t":"set","p":"delay","pt":"msg","to":"payload.time* 60000","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":2380,"wires":[["863b8fa63f210ebe"]]},{"id":"8d3c8370996be2da","type":"api-call-service","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Turn On Master Valve","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.irrigation_master_valve"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":560,"y":2320,"wires":[["b1c9631973c2f4b1"]]},{"id":"863b8fa63f210ebe","type":"stoptimer-varidelay","z":"f602e6ba.609d28","g":"a08dae6118c91c19","duration":"5","durationType":"num","units":"Millisecond","payloadtype":"num","payloadval":"0","name":"Delay","reporting":"every_second","persist":false,"ignoretimerpass":false,"x":510,"y":2440,"wires":[["a4b3eba196a504dc","de509d99b9d965b3"],[],["7d8374976c01e3dc"]]},{"id":"7d8374976c01e3dc","type":"mqtt out","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Publish Time Remaining","topic":"sensor/irrigation_time_remaining","qos":"","retain":"","broker":"546e31ed.0db1c","x":790,"y":2460,"wires":[]},{"id":"b0debe46542c4c67","type":"api-call-service","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Notify via Wrapper","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"script","service":"notify_wrapper","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": alert \t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":990,"y":2420,"wires":[[]]},{"id":"de509d99b9d965b3","type":"function","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Create msg object","func":"var message = \"Sprinkler auto-run: \" + msg.payload.name + \" ran for \" + msg.payload.time + \" minutes\"\n\nreturn { alert: message };","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":2420,"wires":[["b0debe46542c4c67"]]},{"id":"b1c9631973c2f4b1","type":"delay","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"2s","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":730,"y":2320,"wires":[["95a54981805b22f2"]]},{"id":"6ea0448df1383ec2","type":"delay","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Delay 10","pauseType":"delay","timeout":"10","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":320,"y":2440,"wires":[["151eb6ba5b2d39cd"]]},{"id":"224d30a98f52c287","type":"api-current-state","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Force Run","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_force_run","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","x":510,"y":2060,"wires":[["bf015af2161c5ec2"],["38affe5cc680d076"]]},{"id":"5a27d31bfb4a6990","type":"comment","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Actually Handle Watering","info":"","x":1150,"y":2340,"wires":[]},{"id":"197853479ad9eeda","type":"comment","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Decide Which Zones to Run","info":"","x":1020,"y":2160,"wires":[]},{"id":"7b985932412db47d","type":"debug","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Log Zone On","active":false,"tosidebar":true,"console":true,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1100,"y":2280,"wires":[]},{"id":"acdcc72fea065aac","type":"debug","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Log Run Zones","active":false,"tosidebar":true,"console":true,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":350,"y":2260,"wires":[]},{"id":"f78cdb84200eb171","type":"api-call-service","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.front_bed_irrigation_reason"],"data":"{\"value\":\"Recently Ran\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":750,"y":3380,"wires":[[]]},{"id":"93965a61d2c4f5de","type":"api-current-state","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"< 1\" in 5 Days","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"0.5","halt_if_type":"num","halt_if_compare":"gte","entity_id":"sensor.neighbor_5in1_rain_last_5_days","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":420,"y":620,"wires":[["dd9855ca4017c8c0"],["47f1a8018e58e032"]]},{"id":"54bad548.7e9fcc","type":"ha-get-entities","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Get \"On\" Sprinklers","server":"e1dc0b88.463bb8","version":0,"rules":[{"property":"entity_id","logic":"starts_with","value":"switch.irrigation","valueType":"str"},{"property":"entity_id","logic":"does_not_include","value":"switch.irrigation_master_valve,switch.irrigation_24v_power,switch.irrigation_drip","valueType":"str"},{"property":"state","logic":"is","value":"on","valueType":"str"}],"output_type":"array","output_empty_results":true,"output_location_type":"msg","output_location":"payload","output_results_count":1,"x":390,"y":100,"wires":[["bcbf413e.7b188"]]},{"id":"5a10cd93.8e94b4","type":"inject","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":true,"onceDelay":0.1,"topic":"","payloadType":"date","x":170,"y":100,"wires":[["54bad548.7e9fcc"]]},{"id":"a77808ff.3f1288","type":"switch","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"On Longer than 26 minutes?","property":"payload[0].timeSinceChangedMs","propertyType":"msg","rules":[{"t":"gte","v":"1600000","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":720,"y":60,"wires":[["54ae6ec3.1bc63"]]},{"id":"54ae6ec3.1bc63","type":"api-call-service","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Turn Off Zone","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":[],"data":"{ \"entity_id\": payload[0].entity_id }","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":980,"y":60,"wires":[[]]},{"id":"bcbf413e.7b188","type":"switch","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"More Than 0 Entities?","property":"payload","propertyType":"msg","rules":[{"t":"nempty"},{"t":"empty"}],"checkall":"true","repair":false,"outputs":2,"x":400,"y":160,"wires":[["a77808ff.3f1288","3b848bce.76aea4"],["656ad2cd6fb99f57"]]},{"id":"3b848bce.76aea4","type":"change","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Reset Delay","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":670,"y":100,"wires":[["cdd3b7ef.04a618"]]},{"id":"43dedcca.ac7734","type":"api-call-service","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Turn Off Master","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.irrigation_master_valve"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1480,"y":180,"wires":[[]]},{"id":"c42e6d62.7a24c","type":"api-current-state","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Master On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.irrigation_master_valve","state_type":"str","blockInputOverrides":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":750,"y":200,"wires":[["cdd3b7ef.04a618"],["3b848bce.76aea4"]]},{"id":"cdd3b7ef.04a618","type":"trigger","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Wait 1m","op1":"","op2":"0","op1type":"nul","op2type":"str","duration":"1","extend":false,"overrideDelay":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":880,"y":120,"wires":[["5e9007a27732bba9"]]},{"id":"63f07877e73b952a","type":"switch","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"More Than 0 Entities?","property":"payload","propertyType":"msg","rules":[{"t":"nempty"},{"t":"empty"}],"checkall":"true","repair":false,"outputs":2,"x":1100,"y":180,"wires":[[],["749afd72791a5127"]]},{"id":"5e9007a27732bba9","type":"ha-get-entities","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Get \"On\" Sprinklers","server":"e1dc0b88.463bb8","version":0,"rules":[{"property":"entity_id","logic":"starts_with","value":"switch.irrigation","valueType":"str"},{"property":"entity_id","logic":"does_not_include","value":"switch.irrigation_master_valve,switch.irrigation_24v_power","valueType":"str"},{"property":"state","logic":"is","value":"on","valueType":"str"}],"output_type":"array","output_empty_results":true,"output_location_type":"msg","output_location":"payload","output_results_count":1,"x":1070,"y":120,"wires":[["63f07877e73b952a"]]},{"id":"061b74f643477dd9","type":"switch","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"More Than 0 Entities?","property":"payload","propertyType":"msg","rules":[{"t":"nempty"},{"t":"empty"}],"checkall":"true","repair":false,"outputs":2,"x":1380,"y":120,"wires":[["43dedcca.ac7734"],[]]},{"id":"749afd72791a5127","type":"trigger","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Wait 1m","op1":"","op2":"0","op1type":"nul","op2type":"str","duration":"5","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":1260,"y":60,"wires":[["061b74f643477dd9"]]},{"id":"656ad2cd6fb99f57","type":"function","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"clear msg","func":"msg = {}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":600,"y":200,"wires":[["c42e6d62.7a24c"]]}] \ No newline at end of file +[{"id":"9584418c.dafc2","type":"tab","label":"Automations","disabled":false,"info":""},{"id":"f602e6ba.609d28","type":"tab","label":"Irrigation","disabled":false,"info":""},{"id":"e3cd71a658618bda","type":"group","z":"9584418c.dafc2","name":"Front Door Facial Recognition","style":{"label":true},"nodes":["0151c0e6e6069b41","4aa6753cf7f8aab0","9dca394a8020d5e7","3b7342cc0d038b02","f28a763b1531f897","85eabd7943d854db","600c6858cd97bd11","042d631e1f4965c1","feac53432ad8e204","37dde9151438ba72","2a9ba9bc54399191","3048ddac2903b9c6","ad720109e7c5140b","d4d7e72ac2040557","01bd0deabf985fb5","c30bce03a0e91b98","915bbbc78674401b","3f56ae69cfd632f3","b955a2362a347e25","71c092fab87eb15b","64850b3f34c8899b"],"x":54,"y":2779,"w":1532,"h":422},{"id":"9cfe6331fbc680d5","type":"group","z":"9584418c.dafc2","name":"Delivery Logo Object Detection","style":{"label":true},"nodes":["ed80a3f.522526","f3a3e80f.3e8e38","69bc3ab7.bd6104","6469ec7efdb06d81","6f08d11c854dfb00","9b7c5535c74a94a3","d8a16fd91366d112","bcaf3569e7816922","d58f6ef71c326040","7347dd9c5cdf8a37","ae34795ccab80dee","00a968e4ae50d0d3","935c3eb83c353f53","a2635d725d71ca68","42be35f83b764861","df028b4014ad3c15","b2a5543693ac851e","c13f0f20a56d6af5","7151828122e3b80c"],"x":54,"y":2099,"w":1492,"h":282},{"id":"3c4349a7eea9bd3b","type":"group","z":"9584418c.dafc2","name":"Set Cameras Online","style":{"label":true},"nodes":["bd19a17005513c2f","24d1a94e275e5e44","58d0c98797e19829","7a8e43b6f7c84bac","ab66afa5b576de3f","ccf5998fdf8ee50d"],"x":54,"y":1839,"w":492,"h":242},{"id":"35da177d9e2fd258","type":"group","z":"9584418c.dafc2","name":"Virtual Radar Server","style":{"label":true},"nodes":["a9a323de66b6f772","ee139512bcad0966","7da69a7e8ecadc7c","26e32b1d7824356a","3a82b835.c57d48","91afebbf8b9edf05","5684b08aacd6d225","4ca1a5ad47ce7a18","ba68e03143ba4af8","5f1d1b471a1c7cbb","2cd08c8da06afaf6","ea911291f04c7d18","43e5fa289c7550ff","97761f13f8e5c31b","ea239028eda07991"],"x":54,"y":1499,"w":1272,"h":322},{"id":"bd2acc7efb5be5fd","type":"group","z":"9584418c.dafc2","name":"Front Porch Light Occupancy Brightness","style":{"label":true},"nodes":["3f2a2e4d99057b69","67312d79a5108126","3e399d83e4e7f4c3","59f5bc2571b0f12f","c68c969a6b8c2833","b1a99d9698d831b2","17b35d69307a8455","d11c183fff8d848d","fae7fa701710e258"],"x":54,"y":1279,"w":972,"h":202},{"id":"11e25fc28c23144c","type":"group","z":"9584418c.dafc2","name":"Front House Lights","style":{"label":true},"nodes":["86bc310cbc0562af","2fb6a7afb6502a32","8c55985bffebd56a","bfba5a9fec44ff05"],"x":64,"y":1119,"w":472,"h":182},{"id":"b808f2d7ae539c87","type":"group","z":"9584418c.dafc2","name":"Indoor Lights Evening","style":{"label":true},"nodes":["fa90c550.d6c948","e93027cb.6a6308","fc81cfda.29ff5","8ee35d65.a7569","41b918d5.7ce018","5420f9c0.5356c8","77184c93.8790d4","39a5ce57.78e3d2","ea19fe14.80749","ea2604f9.4cdf98","8a82f465.846018","d8ad0651.bf7a18","d9cc182cc3eb2a93","cde7b3c9ca39891b","1457bf6605a50448"],"x":54,"y":659,"w":1073,"h":444},{"id":"9df353d4c0fc9a54","type":"group","z":"9584418c.dafc2","name":"Server Rack Temperature","style":{"label":true},"nodes":["73550501.be7fbc","7dff3ae1.e36a04","88822bfe.2cc598","96b5207d.407dd","b259f0eb.3e83","c7ff978f.ff0728","29b17ed7.fab972"],"x":54,"y":459,"w":932,"h":182},{"id":"18fe74aea06a1180","type":"group","z":"9584418c.dafc2","name":"AC Stale Air","style":{"label":true},"nodes":["ebe84a6f70b4bc2f","cf1c689e51b98aec","6af7abba85612dd9","8b6280c5c448720c","9ce46ce21d8cc964","2b6721107586ceae","830c3ddd08ef396c"],"x":54,"y":299,"w":1152,"h":142},{"id":"cf3a0410bcf837ae","type":"group","z":"9584418c.dafc2","name":"Door Alerts","style":{"label":true},"nodes":["2022689a.938918","8ec438b6.4eb2e8","28fa66cd.af058a","9c1d9c7c.ed9c7","896f5b34.7b4328","c5124616.c9bd48","f9d93af6.184028","3314ec9f.ca8994","5c24f744.30fcb8","6aa388d0.707768","cf758271.d4fd6","5a740c2d.009864"],"x":54,"y":19,"w":1012,"h":262},{"id":"3cf0491ac33aecfa","type":"group","z":"f602e6ba.609d28","name":"Max Time and Master Valve Control","style":{"label":true},"nodes":["54bad548.7e9fcc","5a10cd93.8e94b4","a77808ff.3f1288","54ae6ec3.1bc63","bcbf413e.7b188","3b848bce.76aea4","43dedcca.ac7734","c42e6d62.7a24c","cdd3b7ef.04a618","63f07877e73b952a","5e9007a27732bba9","061b74f643477dd9","749afd72791a5127","656ad2cd6fb99f57"],"x":54,"y":19},{"id":"43a30fe5a5052c22","type":"group","z":"f602e6ba.609d28","name":"Custom Water","style":{"label":true},"nodes":["d269f175.c9dc6","3367e45f.cc981c","116d5bb3.ee92a4","80df47d5.602888","fb46876c.845298","98eeafa7.bd2b9","565ee5c1.561bfc","22a20603.86a06a","a8d96e.1f00969","808e6a81.92e2e8","883f2c00.1d94e8","e42ff3d9.593dc","76160bc4.8cd644","e2c37b65c5582c2b","860a4c61d7557dc9"],"x":54,"y":259},{"id":"a9182c2cc04d2d9a","type":"group","z":"f602e6ba.609d28","name":"Irrigation Delays","style":{"label":true},"nodes":["dd9855ca4017c8c0","c3a696a117416327","27f2580e35031830","9cb8187c669c6485","47f1a8018e58e032","427f7fa58d86cc59","1d9a4d0bb4645f32","d9ebbaa37f5911a9","eeecfc1e8864e39f","89487a4efedec1db","1e4b3bc7c25b294f","2c45af5b3ee5cf0a","d7e50e7a2810667d","28936ec687ee4eb0","974833b6a2eca853","478a5a84d38ba181","c01fd0612615e927","93965a61d2c4f5de"],"x":54,"y":539},{"id":"0f07749a4e1672ad","type":"group","z":"f602e6ba.609d28","name":"Supply Voltage Control","style":{"label":true},"nodes":["1ae21386.a831bc","117145a7.67e99a","882aff35f788008b"],"x":54,"y":1059},{"id":"a08dae6118c91c19","type":"group","z":"f602e6ba.609d28","name":"Run Lawn","style":{"label":true},"nodes":["f2c9c3a5b8b11a64","38affe5cc680d076","9896327569c234da","e95ac52f03478921","174186fb5d054240","287dd3b1af5dc2d0","74cd40702021e86d","bf015af2161c5ec2","151eb6ba5b2d39cd","45ee74d06e9cac2c","95a54981805b22f2","a4b3eba196a504dc","02d1e639f7ac6596","8d3c8370996be2da","863b8fa63f210ebe","7d8374976c01e3dc","b0debe46542c4c67","de509d99b9d965b3","b1c9631973c2f4b1","6ea0448df1383ec2","224d30a98f52c287","5a27d31bfb4a6990","197853479ad9eeda","7b985932412db47d","acdcc72fea065aac"],"x":54,"y":2019},{"id":"79694877249c9902","type":"group","z":"f602e6ba.609d28","name":"Attempt Lawn","style":{"label":true},"nodes":["3b656b89.1ac154","493b435f.c9851c","7b12e66f.57d068","8c060f00.cf577","4422f61c.847d88","dcdeabc7.780578","722d03d6.2ff77c","af4788fe.215ba8","c90fd5e6.c5c678","862ad27a.d347d","83edf648.3f9ed8","8d4bfe8e.ee805","815fddc0.6604c","06d6255efdc31c47","5420d0eed32223fb","3ff9ce03ef7b554b","576b66fa1bd202a3","a3d75225807b70eb","219b37105a8304f1","e7430e17f0b24ed8","b6e7d5b8891bba6d","339ee0ada21856e0","d01fbafafbb34692","f5684be88477322f","336585d4eee0ca73","b3c4a3638c17629e","2fc67b25514de5a5","08e3098cf183e086"],"x":54,"y":1219},{"id":"68ec980b932fdba7","type":"group","z":"f602e6ba.609d28","name":"Attempt Front Beds","style":{"label":true},"nodes":["583f46a3.fc4c38","d9147878.b61cf8","c7e5552e.7f8a08","6bcf06fb.9ca748","f587589f.d739e8","d9d17e8f.590e6","d9f893eb.834f3","9d851699.6a8458","4fae5b92.a9cd44","418058c4.af3158","7350c911a0b1a86d","fdcfa1521191fa40","4f2902edc77f2d3b","f6881b4bf93c27c5","ed6e3d4225582e20","593bee0e8c958df8","67916c3a5554a794","f7ac7a90f3da2298","45c5dbbbd8ce50a1","abb8777dd08aa743","d8637d8d96b68fca","b403eec7866aea22"],"x":54,"y":2559},{"id":"55a2162532da4e14","type":"group","z":"f602e6ba.609d28","name":"Run Front Beds","style":{"label":true},"nodes":["a2ab7368.923fb","a31e3daf.17207","21ced698.708b5a","c661d489.9c9bc8","accc6697.196268","487ff788.8c5c98","2238b09b.1b5b5","84258ddd.41da4","9129b06e.d8925","5ce1803b.06628","62b5545bc6d6e627","aa53225140781dd7","8113d83074ff7701","d83b5ff7a2212931","f78cdb84200eb171"],"x":54,"y":3159},{"id":"8ea53bc2c2669aee","type":"group","z":"9584418c.dafc2","name":"Test Delivery Logo Object Detection","style":{"label":true},"nodes":["be0fbabb24b44974","9b277fca69aebd69","75ef5974262fd7bc","17407dceb7726474","1a39ed5aa10b9a2e","d3cc43be63f35e49","2be1e06ef7807b3f","88baf6aea1d78864","e48b5f0d83c7a8c6","faa9044e31394934","5dacb55a06a1cb1f","82fc9c91a2667f9c","9a9e970d6d7a4727","bf9a785d9f0e5359","b3f4911f67703b3b","1cd44a2e0577b03f"],"x":54,"y":2399,"w":1472,"h":362},{"id":"e1dc0b88.463bb8","type":"server","name":"Home Assistant","version":5,"addon":false,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":false,"cacheJson":true,"heartbeat":true,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true},{"id":"546e31ed.0db1c","type":"mqtt-broker","name":"Mosquitto","broker":"10.0.1.22","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"9f81fd881d01a666","type":"position-config","name":"","isValide":"true","longitude":"0","latitude":"0","angleType":"deg","timeZoneOffset":99,"timeZoneDST":0,"stateTimeFormat":"3","stateDateFormat":"12"},{"id":"4f8f8feffed26998","type":"sqlitedb","db":"/data/amazon.db","mode":"RWC"},{"id":"223dadf98673f8b9","type":"deepstack-server","proto":"http","host":"deepstack","port":"5000","version":"v1","rejectUnauthorized":true},{"id":"96b8babe5c0a6107","type":"deepstack-server","proto":"http","host":"codeproject","port":"32168","version":"v1","rejectUnauthorized":true},{"id":"2022689a.938918","type":"api-call-service","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Notify Via Wrapper: Opened 1 Minute","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"script","service":"notify_wrapper","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": \"The \" & $lowercase(msg.data.new_state.attributes.friendly_name) & \" has been opened for 1 minute\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":890,"y":120,"wires":[[]]},{"id":"8ec438b6.4eb2e8","type":"api-current-state","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Door Notify On","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"true","halt_if_type":"bool","halt_if_compare":"is","entity_id":"input_boolean.door_notify","state_type":"habool","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":460,"y":62,"wires":[["c5124616.c9bd48"],[]]},{"id":"28fa66cd.af058a","type":"trigger","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Wait 1m","op1":"","op2":"1","op1type":"nul","op2type":"str","duration":"1","extend":false,"overrideDelay":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":620,"y":120,"wires":[["2022689a.938918"]]},{"id":"9c1d9c7c.ed9c7","type":"change","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Reset If Closed","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":220,"wires":[["28fa66cd.af058a","5c24f744.30fcb8","cf758271.d4fd6","5a740c2d.009864"]]},{"id":"896f5b34.7b4328","type":"api-call-service","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Notify Via Wrapper","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"script","service":"notify_wrapper","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": payload, \"data\": {\"priority\": 1} \t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":950,"y":60,"wires":[[]]},{"id":"c5124616.c9bd48","type":"template","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Opened","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{ data.new_state.attributes.friendly_name }} opened","output":"str","x":720,"y":60,"wires":[["896f5b34.7b4328"]]},{"id":"f9d93af6.184028","type":"server-state-changed","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Door Opened","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"binary_sensor.*_door$","entityidfiltertype":"regex","outputinitially":false,"state_type":"habool","haltifstate":"true","halt_if_type":"bool","halt_if_compare":"is","outputs":2,"output_only_on_state_change":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":150,"y":100,"wires":[["8ec438b6.4eb2e8","28fa66cd.af058a","5c24f744.30fcb8","cf758271.d4fd6","5a740c2d.009864"],["9c1d9c7c.ed9c7"]]},{"id":"73550501.be7fbc","type":"trigger-state","z":"9584418c.dafc2","g":"9df353d4c0fc9a54","name":"Rack Temperature","server":"e1dc0b88.463bb8","version":2,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityid":"sensor.rack_exhaust_temperature","entityidfiltertype":"exact","debugenabled":false,"constraints":[],"inputs":1,"outputs":2,"customoutputs":[],"outputinitially":false,"state_type":"num","enableInput":true,"x":170,"y":560,"wires":[["7dff3ae1.e36a04"],[]]},{"id":"7dff3ae1.e36a04","type":"switch","z":"9584418c.dafc2","g":"9df353d4c0fc9a54","name":"Above 90?","property":"payload","propertyType":"msg","rules":[{"t":"gt","v":"95","vt":"num"},{"t":"lte","v":"90","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":350,"y":560,"wires":[["29b17ed7.fab972"],["96b5207d.407dd"]]},{"id":"88822bfe.2cc598","type":"api-call-service","z":"9584418c.dafc2","g":"9df353d4c0fc9a54","name":"Turn on Fan","server":"e1dc0b88.463bb8","version":5,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["fan.rack_fan"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":true,"outputProperties":[],"queue":"none","x":710,"y":500,"wires":[[]]},{"id":"96b5207d.407dd","type":"api-current-state","z":"9584418c.dafc2","g":"9df353d4c0fc9a54","name":"Rack Fan","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"true","halt_if_type":"bool","halt_if_compare":"is","entity_id":"fan.rack_fan","state_type":"habool","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":540,"y":580,"wires":[["c7ff978f.ff0728"],[]]},{"id":"b259f0eb.3e83","type":"api-call-service","z":"9584418c.dafc2","g":"9df353d4c0fc9a54","name":"Turn off fan","server":"e1dc0b88.463bb8","version":5,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["fan.rack_fan"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":true,"outputProperties":[],"queue":"none","x":890,"y":540,"wires":[[]]},{"id":"fa90c550.d6c948","type":"inject","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"At 8 PM","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 20 * * 1,2,4,5,6,0","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":700,"wires":[["1457bf6605a50448"]]},{"id":"e93027cb.6a6308","type":"api-current-state","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"Master Bedroom Lamps On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.master_bedroom_lamps","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":680,"y":702,"wires":[["fc81cfda.29ff5"],[]]},{"id":"fc81cfda.29ff5","type":"api-call-service","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"Set brightness to 128","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":[],"data":"{\"brightness\":\"128\",\"transition\":5, \"entity_id\": msg.data.entity_id}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1001,"y":700,"wires":[[]]},{"id":"c7ff978f.ff0728","type":"api-current-state","z":"9584418c.dafc2","g":"9df353d4c0fc9a54","name":"Rack fan auto off?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.rack_fan_auto_off","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":730,"y":600,"wires":[["b259f0eb.3e83"],[]]},{"id":"29b17ed7.fab972","type":"api-current-state","z":"9584418c.dafc2","g":"9df353d4c0fc9a54","name":"Rack Fan","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"true","halt_if_type":"bool","halt_if_compare":"is","entity_id":"fan.rack_fan","state_type":"habool","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":540,"y":520,"wires":[[],["88822bfe.2cc598"]]},{"id":"3314ec9f.ca8994","type":"server-state-changed","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Garage Opened","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"cover.garage_door","entityidfiltertype":"regex","outputinitially":false,"state_type":"str","haltifstate":"open","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":160,"y":160,"wires":[["8ec438b6.4eb2e8"],[]]},{"id":"8ee35d65.a7569","type":"api-current-state","z":"9584418c.dafc2","d":true,"g":"b808f2d7ae539c87","name":"Kitchen Cans On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.kitchen_can_lights","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":650,"y":942,"wires":[["5420f9c0.5356c8"],[]]},{"id":"41b918d5.7ce018","type":"api-current-state","z":"9584418c.dafc2","d":true,"g":"b808f2d7ae539c87","name":"Kitchen Table On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.kitchen_table_light","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":650,"y":1062,"wires":[["d8ad0651.bf7a18"],[]]},{"id":"5420f9c0.5356c8","type":"api-call-service","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"Set brightness to 40","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":[],"data":"{\"brightness\":\"40\",\"transition\": \"5\", \"entity_id\": msg.data.entity_id}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1000,"y":842,"wires":[[]]},{"id":"77184c93.8790d4","type":"api-current-state","z":"9584418c.dafc2","d":true,"g":"b808f2d7ae539c87","name":"Kitchen Sink On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.kitchen_sink_light","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":650,"y":882,"wires":[["5420f9c0.5356c8"],[]]},{"id":"39a5ce57.78e3d2","type":"api-current-state","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"Living Room Cans On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.living_room_can_lights","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":670,"y":822,"wires":[["5420f9c0.5356c8"],[]]},{"id":"5c24f744.30fcb8","type":"trigger","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Wait 5m","op1":"","op2":"5","op1type":"nul","op2type":"str","duration":"5","extend":false,"overrideDelay":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":620,"y":160,"wires":[["6aa388d0.707768"]]},{"id":"6aa388d0.707768","type":"api-call-service","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Alexa Announce Opened","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"alexa_media","areaId":[],"deviceId":[],"entityId":[],"data":"{\"message\":\"The\" & $lowercase(msg.data.new_state.attributes.friendly_name) & \"has been opened for\" & msg.payload & \" minutes.\",\"data\":{\"method\":\"all\",\"type\":\"announce\"},\"target\":[\"Office\",\"Kitchen\",\"Master\",\"Living Room\"]}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":850,"y":180,"wires":[[]]},{"id":"cf758271.d4fd6","type":"trigger","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Wait 10m","op1":"","op2":"10","op1type":"nul","op2type":"str","duration":"10","extend":false,"overrideDelay":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":620,"y":200,"wires":[["6aa388d0.707768"]]},{"id":"5a740c2d.009864","type":"trigger","z":"9584418c.dafc2","g":"cf3a0410bcf837ae","name":"Wait 15m","op1":"","op2":"15","op1type":"nul","op2type":"str","duration":"15","extend":false,"overrideDelay":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":620,"y":240,"wires":[["6aa388d0.707768"]]},{"id":"ea19fe14.80749","type":"api-current-state","z":"9584418c.dafc2","d":true,"g":"b808f2d7ae539c87","name":"Entryway On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.entryway_light","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":640,"y":1002,"wires":[["5420f9c0.5356c8"],[]]},{"id":"ea2604f9.4cdf98","type":"api-current-state","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"Living Room Sconces On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.living_room_sconces","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":680,"y":762,"wires":[["fc81cfda.29ff5"],[]]},{"id":"8a82f465.846018","type":"comment","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"100% = 255","info":"","x":970,"y":773,"wires":[]},{"id":"d8ad0651.bf7a18","type":"api-call-service","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"Set brightness to 80","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":[],"data":"{\"brightness\":\"80\",\"transition\": \"5\", \"entity_id\": msg.data.entity_id}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1000,"y":922,"wires":[[]]},{"id":"86bc310cbc0562af","type":"inject","z":"9584418c.dafc2","g":"11e25fc28c23144c","name":"At 10PM","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"30 22 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":170,"y":1200,"wires":[["2fb6a7afb6502a32","8c55985bffebd56a","bfba5a9fec44ff05"]]},{"id":"2fb6a7afb6502a32","type":"api-call-service","z":"9584418c.dafc2","g":"11e25fc28c23144c","name":"Front Porch Lights Off","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.front_porch_lights"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":410,"y":1220,"wires":[[]]},{"id":"3f2a2e4d99057b69","type":"server-state-changed","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"Front Door Motion","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"binary_sensor.front_door_all_occupancy","entityidfiltertype":"exact","outputinitially":false,"state_type":"habool","haltifstate":"true","halt_if_type":"bool","halt_if_compare":"is","outputs":2,"output_only_on_state_change":false,"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":170,"y":1380,"wires":[["17b35d69307a8455","d11c183fff8d848d"],[]]},{"id":"67312d79a5108126","type":"api-current-state","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"Front Porch On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.front_porch_lights","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":630,"y":1340,"wires":[["3e399d83e4e7f4c3"],[]]},{"id":"3e399d83e4e7f4c3","type":"api-call-service","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"Front Porch Lights to 254","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.front_porch_lights"],"data":"{\"brightness\":\"254\",\"transition\":2}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":890,"y":1340,"wires":[["59f5bc2571b0f12f"]]},{"id":"59f5bc2571b0f12f","type":"delay","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"","pauseType":"delay","timeout":"60","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":560,"y":1440,"wires":[["c68c969a6b8c2833","4c31b367e8d67eb2"]]},{"id":"c68c969a6b8c2833","type":"api-call-service","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"Front Porch Lights Off","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.front_porch_lights"],"data":"{ \"transition\": 5 }","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":780,"y":1440,"wires":[[]]},{"id":"d9cc182cc3eb2a93","type":"inject","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"At 10 PM","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 22 * * 3","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":742,"wires":[["1457bf6605a50448"]]},{"id":"b1a99d9698d831b2","type":"server-state-changed","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"Front Door Open","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"binary_sensor.front_door","entityidfiltertype":"exact","outputinitially":false,"state_type":"habool","haltifstate":"true","halt_if_type":"bool","halt_if_compare":"is","outputs":2,"output_only_on_state_change":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":160,"y":1440,"wires":[["17b35d69307a8455","d11c183fff8d848d"],[]]},{"id":"17b35d69307a8455","type":"within-time-switch","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"","nameInt":"","positionConfig":"9f81fd881d01a666","startTime":"22:00","startTimeType":"entered","startOffset":0,"startOffsetType":"none","startOffsetMultiplier":60000,"endTime":"sunriseStart","endTimeType":"pdsTime","endOffset":"-30","endOffsetType":"num","endOffsetMultiplier":60000,"timeRestrictions":0,"timeRestrictionsType":"none","timeDays":"*","timeOnlyOddDays":false,"timeOnlyEvenDays":false,"timeOnlyOddWeeks":false,"timeOnlyEvenWeeks":false,"timeMonths":"*","timedatestart":"","timedateend":"","propertyStart":"","propertyStartType":"none","propertyStartCompare":"true","propertyStartThreshold":"","propertyStartThresholdType":"num","startTimeAlt":"","startTimeAltType":"entered","startOffsetAlt":0,"startOffsetAltType":"none","startOffsetAltMultiplier":60000,"propertyEnd":"","propertyEndType":"none","propertyEndCompare":"true","propertyEndThreshold":"","propertyEndThresholdType":"num","endTimeAlt":"","endTimeAltType":"entered","endOffsetAlt":0,"endOffsetAltType":"none","endOffsetAltMultiplier":60000,"withinTimeValue":"","withinTimeValueType":"msgInput","outOfTimeValue":"","outOfTimeValueType":"msgInput","tsCompare":"0","x":400,"y":1380,"wires":[["67312d79a5108126","3e399d83e4e7f4c3"],[]]},{"id":"d11c183fff8d848d","type":"change","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"Reset","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":1440,"wires":[["59f5bc2571b0f12f"]]},{"id":"a9a323de66b6f772","type":"http request","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Get Aircraft","method":"GET","ret":"obj","paytoqs":"ignore","url":"http://vrs:8080/VirtualRadar/AircraftList.json","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"Content-Type","valueType":"other","valueValue":"application/json"}],"x":610,"y":1660,"wires":[["7da69a7e8ecadc7c","91afebbf8b9edf05","4ca1a5ad47ce7a18","2cd08c8da06afaf6","43e5fa289c7550ff"]]},{"id":"ee139512bcad0966","type":"inject","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Every 20 Seconds","props":[],"repeat":"20","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":190,"y":1660,"wires":[["ea239028eda07991"]]},{"id":"7da69a7e8ecadc7c","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Amazon","func":"var alert = {}\nvar message = \"Airborne:\\n\"\n\nfor (var i = 0; i < msg.payload.acList.length; i++) {\n if (typeof msg.payload.acList[i].Reg !== \"undefined\" && typeof msg.payload.acList[i].Man !== \"undefined\") {\n if (msg.payload.acList[i].Man.toLowerCase().includes(\"amazon\")) {\n //if (msg.payload.acList[i].Reg.endsWith(\"PA\") && msg.payload.acList[i].Man.toLowerCase().includes(\"amazon\")) {\n alert[msg.payload.acList[i].Reg] = msg.payload.acList[i].Icao\n }\n }\n}\n\nif (Object.keys(alert).length > 0) {\n for (const [key, value] of Object.entries(alert)) {\n message += key + \": https://globe.adsbexchange.com/?icao=\" + value + \"\\n\"\n }\n return { payload: message + \"https://vrs.aneis.ch\" }\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":1660,"wires":[["5684b08aacd6d225"]]},{"id":"26e32b1d7824356a","type":"api-call-service","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_adsb","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": payload \t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1200,"y":1660,"wires":[[]]},{"id":"3a82b835.c57d48","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Rate Limiter","func":"var interval = (1000*60*10); // minimum interval between messages (ms)\ncontext.lastTime = context.lastTime || 0;\n\nvar now = Date.now();\n\nif (now-context.lastTime > interval) {\n context.lastTime = now;\n return msg;\n} else {\n return null;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1010,"y":1600,"wires":[["26e32b1d7824356a"]]},{"id":"91afebbf8b9edf05","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Interesting Tail #","func":"var alert = {}\nvar message = \"Interesting:\\n\"\n// N518GS George Strait\n// N628TS Elon\n// N898TS Taylor Swift\n// N621MM Taylor Swift\n// 82-8000 AF1\n// 92-9000 AF1\n// N5DA Don Adams Prop\n// N4DA Don Adams Lear\n// N68885 Zuckerberg\n// N681JK JB\nvar interesting = [\"N68885\", \"N518GS\", \"N628TS\", \"82-8000\", \"92-9000\", \"N621MM\", \"N898TS\", \"N681JK\"]\n\nfor (var i = 0; i < msg.payload.acList.length; i++) {\n if (typeof msg.payload.acList[i].Reg !== \"undefined\") {\n if (interesting.includes(msg.payload.acList[i].Reg)) {\n alert[msg.payload.acList[i].Reg] = msg.payload.acList[i].Icao\n }\n }\n}\n\nif (Object.keys(alert).length > 0) {\n for (const [key, value] of Object.entries(alert)) {\n message += key + \": https://globe.adsbexchange.com/?icao=\" + value + \"\\n\"\n }\n return { payload: message + \"https://vrs.aneis.ch\" }\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":800,"y":1600,"wires":[["3a82b835.c57d48"]]},{"id":"5684b08aacd6d225","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Rate Limiter","func":"var interval = (1000*60); // minimum interval between messages (ms)\ncontext.lastTime = context.lastTime || 0;\n\nvar now = Date.now();\n\nif (now-context.lastTime > interval) {\n context.lastTime = now;\n return msg;\n} else {\n return null;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1010,"y":1660,"wires":[["26e32b1d7824356a"]]},{"id":"4ca1a5ad47ce7a18","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Amazon Landing","func":"var alert = {}\nvar message = \"Landing:\\n\"\n\nfor (var i = 0; i < msg.payload.acList.length; i++) {\n if (typeof msg.payload.acList[i].Reg !== \"undefined\" && typeof msg.payload.acList[i].Man !== \"undefined\") {\n //if (msg.payload.acList[i].Reg.endsWith(\"PA\") && msg.payload.acList[i].Man.toLowerCase().includes(\"amazon\")) {\n if (msg.payload.acList[i].Man.toLowerCase().includes(\"amazon\")) {\n if (msg.payload.acList[i].Alt < 50){\n alert[msg.payload.acList[i].Reg] = msg.payload.acList[i].Icao\n }\n }\n }\n}\n\nif (Object.keys(alert).length > 0) {\n for (const [key, value] of Object.entries(alert)) {\n message += key + \": https://globe.adsbexchange.com/?icao=\" + value + \"\\n\"\n }\n return { payload: message + \"https://vrs.aneis.ch\" }\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":810,"y":1720,"wires":[["ba68e03143ba4af8"]]},{"id":"ba68e03143ba4af8","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Rate Limiter","func":"var interval = (1000*60); // minimum interval between messages (ms)\ncontext.lastTime = context.lastTime || 0;\n\nvar now = Date.now();\n\nif (now-context.lastTime > interval) {\n context.lastTime = now;\n return msg;\n} else {\n return null;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1010,"y":1720,"wires":[["26e32b1d7824356a"]]},{"id":"5f1d1b471a1c7cbb","type":"sqlite","z":"9584418c.dafc2","g":"35da177d9e2fd258","mydb":"4f8f8feffed26998","sqlquery":"msg.topic","sql":"","name":"Amazon","x":1000,"y":1780,"wires":[["ea911291f04c7d18"]]},{"id":"2cd08c8da06afaf6","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Write Amazon Landing","func":"var sql = \"\"\n\nfor (var i = 0; i < msg.payload.acList.length; i++) {\n var latlong = \"0,0\"\n if (typeof msg.payload.acList[i].Reg !== \"undefined\" && typeof msg.payload.acList[i].Lat !== \"undefined\" && typeof msg.payload.acList[i].Long !== \"undefined\") {\n //if (msg.payload.acList[i].Reg.endsWith(\"PA\") && msg.payload.acList[i].Man.toLowerCase().includes(\"amazon\")) {\n if (msg.payload.acList[i].Man.toLowerCase().includes(\"amazon\")) {\n if (msg.payload.acList[i].Alt < 50){\n latlong = msg.payload.acList[i].Lat + \",\" + msg.payload.acList[i].Long.toString()\n sql += `INSERT INTO deliveries (timestamp, registration, latlong, altitude) VALUES (\"${Date.now()}\", \"${msg.payload.acList[i].Reg}\", \"${latlong}\", \"${msg.payload.acList[i].Alt}\"); `\n }\n }\n }\n}\n\nif (sql.length > 0){\n msg.topic = sql\n return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":820,"y":1780,"wires":[["5f1d1b471a1c7cbb"]]},{"id":"ea911291f04c7d18","type":"api-call-service","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Generate Heatmap","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"shell_command","service":"generate_heatmap","areaId":[],"deviceId":[],"entityId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1210,"y":1780,"wires":[[]]},{"id":"cde7b3c9ca39891b","type":"link in","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"","links":["1457bf6605a50448"],"x":325,"y":722,"wires":[["e93027cb.6a6308","ea2604f9.4cdf98","39a5ce57.78e3d2","77184c93.8790d4","8ee35d65.a7569","ea19fe14.80749","41b918d5.7ce018"]]},{"id":"1457bf6605a50448","type":"link out","z":"9584418c.dafc2","g":"b808f2d7ae539c87","name":"","links":["cde7b3c9ca39891b"],"x":295,"y":722,"wires":[]},{"id":"8c55985bffebd56a","type":"api-call-service","z":"9584418c.dafc2","g":"11e25fc28c23144c","name":"Front Sconces Off","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.front_sconces"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":400,"y":1160,"wires":[[]]},{"id":"fae7fa701710e258","type":"server-state-changed","z":"9584418c.dafc2","g":"bd2acc7efb5be5fd","name":"Front Door Unlock","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"lock.front_door","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"unlocked","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":false,"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":170,"y":1320,"wires":[["17b35d69307a8455","d11c183fff8d848d"],[]]},{"id":"ebe84a6f70b4bc2f","type":"inject","z":"9584418c.dafc2","g":"18fe74aea06a1180","name":"Every 30 Minutes","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"1800","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":190,"y":340,"wires":[["830c3ddd08ef396c"]]},{"id":"cf1c689e51b98aec","type":"api-current-state","z":"9584418c.dafc2","g":"18fe74aea06a1180","name":"Thermostat Idle","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"Idle","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.thermostat_state","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":440,"y":340,"wires":[["6af7abba85612dd9"],[]]},{"id":"6af7abba85612dd9","type":"function","z":"9584418c.dafc2","g":"18fe74aea06a1180","name":"Idle > 2 hours","func":"// If last changed > 3 hours\nif (parseInt(msg.payload.timeSinceChangedMs) > 3600000*2) {\n return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":400,"wires":[["8b6280c5c448720c"]]},{"id":"8b6280c5c448720c","type":"api-call-service","z":"9584418c.dafc2","g":"18fe74aea06a1180","name":"Turn AC Fan on Low","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"climate","service":"set_fan_mode","areaId":[],"deviceId":[],"entityId":["climate.thermostat"],"data":"{\"fan_mode\":\"low\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":760,"y":340,"wires":[["9ce46ce21d8cc964"]]},{"id":"9ce46ce21d8cc964","type":"delay","z":"9584418c.dafc2","g":"18fe74aea06a1180","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":900,"y":400,"wires":[["2b6721107586ceae"]]},{"id":"2b6721107586ceae","type":"api-call-service","z":"9584418c.dafc2","g":"18fe74aea06a1180","name":"Turn AC Fan on Auto","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"climate","service":"set_fan_mode","areaId":[],"deviceId":[],"entityId":["climate.thermostat"],"data":"{\"fan_mode\":\"auto\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1080,"y":340,"wires":[[]]},{"id":"830c3ddd08ef396c","type":"api-current-state","z":"9584418c.dafc2","g":"18fe74aea06a1180","name":"Attic > 100","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"100","halt_if_type":"num","halt_if_compare":"gt","entity_id":"sensor.netatmo_home_attic_temperature","state_type":"str","blockInputOverrides":true,"outputProperties":[{"property":"attic","propertyType":"msg","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":290,"y":400,"wires":[["cf1c689e51b98aec"],[]]},{"id":"43e5fa289c7550ff","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Speedy","func":"var alert = {}\nvar message = \"Speedy:\\n\"\n\nfor (var i = 0; i < msg.payload.acList.length; i++) {\n if (typeof msg.payload.acList[i].Reg !== \"undefined\") {\n if (typeof msg.payload.acList[i].Spd == \"number\") {\n if (msg.payload.acList[i].Spd > 600) {\n alert[msg.payload.acList[i].Reg] = msg.payload.acList[i].Icao\n }\n }\n }\n}\n\nif (Object.keys(alert).length > 0) {\n for (const [key, value] of Object.entries(alert)) {\n message += key + \": https://globe.adsbexchange.com/?icao=\" + value + \"\\n\"\n }\n return { payload: message + \"https://vrs.aneis.ch\" }\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":1540,"wires":[["97761f13f8e5c31b"]]},{"id":"97761f13f8e5c31b","type":"function","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"Rate Limiter","func":"var interval = (1000*60*10); // minimum interval between messages (ms)\ncontext.lastTime = context.lastTime || 0;\n\nvar now = Date.now();\n\nif (now-context.lastTime > interval) {\n context.lastTime = now;\n return msg;\n} else {\n return null;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1010,"y":1540,"wires":[["26e32b1d7824356a"]]},{"id":"ed80a3f.522526","type":"server-state-changed","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Vehicle Detected","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.mailbox_car_count","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"0","halt_if_type":"num","halt_if_compare":"gt","outputs":2,"output_only_on_state_change":false,"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":160,"y":2200,"wires":[["bcaf3569e7816922","7347dd9c5cdf8a37"],[]]},{"id":"f3a3e80f.3e8e38","type":"function","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Image to Payload","func":"msg = {\n payload: msg.payload,\n event_id: msg.event_id\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":2200,"wires":[["ae34795ccab80dee","7151828122e3b80c"]]},{"id":"69bc3ab7.bd6104","type":"http request","z":"9584418c.dafc2","d":true,"g":"9cfe6331fbc680d5","name":"Get Snapshot","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://frigate:5000/api/events/{{{event_id}}}/snapshot.jpg?timestamp=0&bbox=0&crop=1","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":720,"y":2200,"wires":[["f3a3e80f.3e8e38"]]},{"id":"6469ec7efdb06d81","type":"api-call-service","z":"9584418c.dafc2","d":true,"g":"9cfe6331fbc680d5","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_self","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": msg.detection_result,\t \"data\": { \"attachments\": [\"/config/images/logo.jpg\"]}\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1440,"y":2320,"wires":[[]]},{"id":"6f08d11c854dfb00","type":"file","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Write File","filename":"/data/logo.jpg","filenameType":"str","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":720,"y":2260,"wires":[["b2a5543693ac851e","df028b4014ad3c15"]]},{"id":"9b7c5535c74a94a3","type":"function","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Output msg","func":"var oldmsg = msg;\n\nmsg = {\n payload: msg.outlinedImage,\n detection_result: msg.payload[0].label,\n event_id: msg.event_id\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":2260,"wires":[["6f08d11c854dfb00"]]},{"id":"d8a16fd91366d112","type":"switch","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Match Found","property":"payload","propertyType":"msg","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":390,"y":2260,"wires":[["9b7c5535c74a94a3"]]},{"id":"bcaf3569e7816922","type":"http request","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Get Events","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://frigate:5000/api/events?cameras=driveway&labels=car&has_snapshot=1&zones=mailbox&in_progress=1&limit=1","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":350,"y":2200,"wires":[["d58f6ef71c326040","7347dd9c5cdf8a37"]]},{"id":"d58f6ef71c326040","type":"function","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Extract Event ID","func":"if (JSON.parse(msg.payload).length > 0) {\n msg = {\n event_id: JSON.parse(msg.payload)[0].id,\n };\n return msg;\n}\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":2200,"wires":[["7347dd9c5cdf8a37","c13f0f20a56d6af5"]]},{"id":"7347dd9c5cdf8a37","type":"debug","z":"9584418c.dafc2","d":true,"g":"9cfe6331fbc680d5","name":"Event Debug","active":true,"tosidebar":true,"console":true,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":580,"y":2140,"wires":[]},{"id":"ae34795ccab80dee","type":"file","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Write File","filename":"/data/input.jpg","filenameType":"str","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":1120,"y":2200,"wires":[["a2635d725d71ca68"]]},{"id":"00a968e4ae50d0d3","type":"api-call-service","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_self","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": \"Input\",\t \"data\": { \"attachments\": [\"/config/images/input.jpg\"]}\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1440,"y":2200,"wires":[[]]},{"id":"bd19a17005513c2f","type":"inject","z":"9584418c.dafc2","g":"3c4349a7eea9bd3b","name":"Every 15 Minutes","props":[],"repeat":"900","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":190,"y":1940,"wires":[["24d1a94e275e5e44","ab66afa5b576de3f","7a8e43b6f7c84bac","58d0c98797e19829","ccf5998fdf8ee50d"]]},{"id":"24d1a94e275e5e44","type":"http request","z":"9584418c.dafc2","g":"3c4349a7eea9bd3b","name":"Set Doorbell Online","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.0.34/cgi-bin/configManager.cgi?action=setConfig&VSP_PaaS.Online=true","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"digest","senderr":false,"headers":[],"x":410,"y":2000,"wires":[[]]},{"id":"935c3eb83c353f53","type":"function","z":"9584418c.dafc2","d":true,"g":"9cfe6331fbc680d5","name":"Rate Limiter","func":"// 1s\nvar interval = (1000*1); // minimum interval between messages (ms)\ncontext.lastTime = context.lastTime || 0;\n\nvar now = Date.now();\n\nif (now-context.lastTime > interval) {\n context.lastTime = now;\n return msg;\n} else {\n return null;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1390,"y":2260,"wires":[["6469ec7efdb06d81"]]},{"id":"a2635d725d71ca68","type":"within-time-switch","z":"9584418c.dafc2","d":true,"g":"9cfe6331fbc680d5","name":"","nameInt":"","positionConfig":"9f81fd881d01a666","startTime":"12:00","startTimeType":"entered","startOffset":0,"startOffsetType":"none","startOffsetMultiplier":60000,"endTime":"20:00","endTimeType":"entered","endOffset":0,"endOffsetType":"none","endOffsetMultiplier":60000,"timeRestrictions":0,"timeRestrictionsType":"none","timeDays":"*","timeOnlyOddDays":false,"timeOnlyEvenDays":false,"timeOnlyOddWeeks":false,"timeOnlyEvenWeeks":false,"timeMonths":"*","timedatestart":"","timedateend":"","propertyStart":"","propertyStartType":"none","propertyStartCompare":"true","propertyStartThreshold":"","propertyStartThresholdType":"num","startTimeAlt":"","startTimeAltType":"entered","startOffsetAlt":0,"startOffsetAltType":"none","startOffsetAltMultiplier":60000,"propertyEnd":"","propertyEndType":"none","propertyEndCompare":"true","propertyEndThreshold":"","propertyEndThresholdType":"num","endTimeAlt":"","endTimeAltType":"entered","endOffsetAlt":0,"endOffsetAltType":"none","endOffsetAltMultiplier":60000,"withinTimeValue":"true","withinTimeValueType":"msgInput","outOfTimeValue":"false","outOfTimeValueType":"msgInput","tsCompare":"0","x":1270,"y":2200,"wires":[["00a968e4ae50d0d3"],[]]},{"id":"42be35f83b764861","type":"http request","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Add SubLabel","method":"POST","ret":"txt","paytoqs":"ignore","url":"http://frigate:5000/api/events/{{{event_id}}}/sub_label","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"Content-type","valueType":"other","valueValue":"application/json"}],"x":1180,"y":2260,"wires":[["df028b4014ad3c15","935c3eb83c353f53","6469ec7efdb06d81"]]},{"id":"df028b4014ad3c15","type":"debug","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"debug 2","active":true,"tosidebar":true,"console":true,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":430,"y":2340,"wires":[]},{"id":"b2a5543693ac851e","type":"function","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Detection to payload","func":"var new_msg = {\n payload: { \"subLabel\": msg.detection_result },\n detection_result: msg.detection_result,\n event_id: msg.event_id\n};\nvar msg = new_msg\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":2260,"wires":[["42be35f83b764861","df028b4014ad3c15"]]},{"id":"c13f0f20a56d6af5","type":"http request","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Get Current Image","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://frigate:5000/api/driveway/latest.jpg?quality=100","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":810,"y":2140,"wires":[["f3a3e80f.3e8e38"]]},{"id":"7151828122e3b80c","type":"deepstack-custom-model","z":"9584418c.dafc2","g":"9cfe6331fbc680d5","name":"Post to Deepstack","server":"96b8babe5c0a6107","confidence":"60","customModel":"delivery","drawPredictions":true,"outlineColor":"red","custom":"","outputs":1,"x":190,"y":2260,"wires":[["d8a16fd91366d112","df028b4014ad3c15"]]},{"id":"0151c0e6e6069b41","type":"server-state-changed","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Person Detected","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.front_porch_person_count","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"0","halt_if_type":"num","halt_if_compare":"gt","outputs":2,"output_only_on_state_change":false,"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":160,"y":2960,"wires":[["f28a763b1531f897","37dde9151438ba72"],[]]},{"id":"4aa6753cf7f8aab0","type":"function","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Image to Payload","func":"msg = {\n payload: msg.payload,\n event_id: msg.event_id\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":2960,"wires":[["600c6858cd97bd11","042d631e1f4965c1"]]},{"id":"9dca394a8020d5e7","type":"http request","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Get Snapshot","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.1.22:5000/api/events/{{{event_id}}}/snapshot.jpg?timestamp=0&bbox=0&crop=1","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":720,"y":2960,"wires":[["4aa6753cf7f8aab0"]]},{"id":"3b7342cc0d038b02","type":"api-call-service","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_self","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": msg.message,\t \"data\": { \"attachments\": [\"/config/images/input.jpg\"]}\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1460,"y":3020,"wires":[[]]},{"id":"f28a763b1531f897","type":"http request","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Get Events","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://10.0.1.22:5000/api/events?cameras=front_door&labels=person&has_snapshot=1&zones=front_porch&in_progress=1&limit=1","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":350,"y":2960,"wires":[["85eabd7943d854db","37dde9151438ba72"]]},{"id":"85eabd7943d854db","type":"function","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Extract Event ID","func":"if (JSON.parse(msg.payload).length > 0) {\n msg = {\n event_id: JSON.parse(msg.payload)[0].id,\n };\n return msg;\n}\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":2960,"wires":[["3048ddac2903b9c6","37dde9151438ba72"]]},{"id":"600c6858cd97bd11","type":"image","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"","width":"800","data":"payload","dataType":"msg","thumbnail":false,"active":true,"pass":true,"outputs":1,"x":1060,"y":3160,"wires":[[]]},{"id":"042d631e1f4965c1","type":"file","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Write File","filename":"/data/input.jpg","filenameType":"str","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":1120,"y":2960,"wires":[["ad720109e7c5140b"]]},{"id":"feac53432ad8e204","type":"http request","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Add SubLabel","method":"POST","ret":"txt","paytoqs":"ignore","url":"http://10.0.1.22:5000/api/events/{{{event_id}}}/sub_label","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"Content-type","valueType":"other","valueValue":"application/json"}],"x":1260,"y":3020,"wires":[["3b7342cc0d038b02","37dde9151438ba72"]]},{"id":"37dde9151438ba72","type":"debug","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Face Debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":850,"y":3100,"wires":[]},{"id":"2a9ba9bc54399191","type":"function","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Parse Detection","func":"var oldmsg = msg\nvar parsed = JSON.parse(msg.payload)\n\nvar msg = {\n \"event_id\": msg.event_id,\n \"parsed\": parsed\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":3100,"wires":[["d4d7e72ac2040557"]]},{"id":"3048ddac2903b9c6","type":"http request","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Get Current Image","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.1.22:5000/api/front_door/latest.jpg?quality=100","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":810,"y":2900,"wires":[["4aa6753cf7f8aab0"]]},{"id":"ad720109e7c5140b","type":"file-upload","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"","url":"http://10.0.1.22:32168/v1/vision/face/recognize","file":"/data/input.jpg","x":280,"y":3040,"wires":[["2a9ba9bc54399191","37dde9151438ba72"]]},{"id":"d4d7e72ac2040557","type":"switch","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Success?","property":"parsed.success","propertyType":"msg","rules":[{"t":"true"}],"checkall":"true","repair":false,"outputs":1,"x":720,"y":3020,"wires":[["37dde9151438ba72","01bd0deabf985fb5"]]},{"id":"01bd0deabf985fb5","type":"function","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Compute Detection","func":"var event_id = msg.event_id\nvar msg = msg.parsed\nvar detections = ''\nvar sublabel = ''\nvar highest = 0.00\n\nfor (let i = 0; i < msg.predictions.length; i++) {\n var person = msg.predictions[i]['userid']\n var confidence = msg.predictions[i]['confidence']\n if (confidence > highest) { highest = confidence }\n if (confidence > 0.40) {\n detections += person + ' ' + confidence + \" \"\n sublabel = msg.predictions[i]['userid']\n break\n } \n else if (confidence > 0.20){\n detections += person + ' ' + confidence + \" \"\n }\n}\n\n// Only react to high confidence\nif (highest < 0.40) {\n msg = { \"payload\": \"no\" }\n return msg\n}\n\nmsg = {\n \"message\": detections,\n \"payload\": { \"subLabel\": sublabel },\n \"event_id\": event_id\n}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":910,"y":3020,"wires":[["c30bce03a0e91b98","37dde9151438ba72"]]},{"id":"c30bce03a0e91b98","type":"switch","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Match","property":"payload","propertyType":"msg","rules":[{"t":"neq","v":"no","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":1090,"y":3020,"wires":[["feac53432ad8e204","915bbbc78674401b"]]},{"id":"915bbbc78674401b","type":"switch","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Check Sub Label","property":"payload.subLabel","propertyType":"msg","rules":[{"t":"eq","v":"Bethany","vt":"str"},{"t":"eq","v":"Andrew","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":1270,"y":3100,"wires":[["3f56ae69cfd632f3"],["b955a2362a347e25"]]},{"id":"3f56ae69cfd632f3","type":"api-call-service","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_self","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": \"Bethany\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1480,"y":3100,"wires":[[]]},{"id":"b955a2362a347e25","type":"api-call-service","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_self","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": \"Andrew\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1480,"y":3140,"wires":[[]]},{"id":"71c092fab87eb15b","type":"file in","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"","filename":"/data/image.jpg","filenameType":"str","format":"","chunk":false,"sendError":false,"encoding":"none","allProps":false,"x":960,"y":2820,"wires":[["4aa6753cf7f8aab0"]]},{"id":"64850b3f34c8899b","type":"inject","z":"9584418c.dafc2","d":true,"g":"e3cd71a658618bda","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":740,"y":2820,"wires":[["71c092fab87eb15b"]]},{"id":"ea239028eda07991","type":"within-time-switch","z":"9584418c.dafc2","g":"35da177d9e2fd258","name":"","nameInt":"","positionConfig":"9f81fd881d01a666","startTime":"08:00:00","startTimeType":"entered","startOffset":0,"startOffsetType":"none","startOffsetMultiplier":60000,"endTime":"22:00:00","endTimeType":"entered","endOffset":0,"endOffsetType":"none","endOffsetMultiplier":60000,"timeRestrictions":0,"timeRestrictionsType":"none","timeDays":"*","timeOnlyOddDays":false,"timeOnlyEvenDays":false,"timeOnlyOddWeeks":false,"timeOnlyEvenWeeks":false,"timeMonths":"*","timedatestart":"","timedateend":"","propertyStart":"","propertyStartType":"none","propertyStartCompare":"true","propertyStartThreshold":"","propertyStartThresholdType":"num","startTimeAlt":"","startTimeAltType":"entered","startOffsetAlt":0,"startOffsetAltType":"none","startOffsetAltMultiplier":60000,"propertyEnd":"","propertyEndType":"none","propertyEndCompare":"true","propertyEndThreshold":"","propertyEndThresholdType":"num","endTimeAlt":"","endTimeAltType":"entered","endOffsetAlt":0,"endOffsetAltType":"none","endOffsetAltMultiplier":60000,"withinTimeValue":"true","withinTimeValueType":"msgInput","outOfTimeValue":"false","outOfTimeValueType":"msgInput","tsCompare":"0","x":410,"y":1660,"wires":[["a9a323de66b6f772"],[]]},{"id":"58d0c98797e19829","type":"http request","z":"9584418c.dafc2","g":"3c4349a7eea9bd3b","name":"Set Camera 1 Online","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.0.32/cgi-bin/configManager.cgi?action=setConfig&VSP_PaaS.Online=true","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"digest","senderr":false,"headers":[],"x":420,"y":1880,"wires":[[]]},{"id":"7a8e43b6f7c84bac","type":"http request","z":"9584418c.dafc2","g":"3c4349a7eea9bd3b","name":"Set Camera 2 Online","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.0.33/cgi-bin/configManager.cgi?action=setConfig&VSP_PaaS.Online=true","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"digest","senderr":false,"headers":[],"x":420,"y":1920,"wires":[[]]},{"id":"ab66afa5b576de3f","type":"http request","z":"9584418c.dafc2","g":"3c4349a7eea9bd3b","name":"Set Camera 3 Online","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.0.35/cgi-bin/configManager.cgi?action=setConfig&VSP_PaaS.Online=true","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"digest","senderr":false,"headers":[],"x":420,"y":1960,"wires":[[]]},{"id":"be0fbabb24b44974","type":"deepstack-custom-model","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Post to Deepstack","server":"223dadf98673f8b9","confidence":"60","customModel":"USPS","drawPredictions":true,"outlineColor":"red","custom":"","outputs":1,"x":190,"y":2560,"wires":[["88baf6aea1d78864","2be1e06ef7807b3f","faa9044e31394934"]]},{"id":"9b277fca69aebd69","type":"server-state-changed","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Vehicle Detected","server":"e1dc0b88.463bb8","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.mailbox_car_count","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"0","halt_if_type":"num","halt_if_compare":"gt","outputs":2,"output_only_on_state_change":false,"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":160,"y":2500,"wires":[["bf9a785d9f0e5359"],[]]},{"id":"75ef5974262fd7bc","type":"function","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Image to Payload","func":"msg = {\n payload: msg.payload,\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":890,"y":2500,"wires":[["be0fbabb24b44974","e48b5f0d83c7a8c6","5dacb55a06a1cb1f"]]},{"id":"17407dceb7726474","type":"api-call-service","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_self","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": \"USPS!2\",\t \"data\": { \"attachments\": [\"/config/images/logo2.jpg\"]}\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1180,"y":2580,"wires":[[]]},{"id":"1a39ed5aa10b9a2e","type":"file","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Write File","filename":"/data/logo2.jpg","filenameType":"str","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":760,"y":2560,"wires":[["9a9e970d6d7a4727"]]},{"id":"d3cc43be63f35e49","type":"function","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Output Processed Image","func":"msg = {\n payload: msg.outlinedImage,\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":2560,"wires":[["1a39ed5aa10b9a2e"]]},{"id":"2be1e06ef7807b3f","type":"switch","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Match Found","property":"payload","propertyType":"msg","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":370,"y":2560,"wires":[["d3cc43be63f35e49"]]},{"id":"88baf6aea1d78864","type":"debug","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Deepstack Debug","active":true,"tosidebar":true,"console":true,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":580,"y":2660,"wires":[]},{"id":"e48b5f0d83c7a8c6","type":"image","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"","width":"800","data":"payload","dataType":"msg","thumbnail":false,"active":true,"pass":true,"outputs":1,"x":1080,"y":2660,"wires":[[]]},{"id":"faa9044e31394934","type":"image","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"","width":"800","data":"outlinedImage","dataType":"msg","thumbnail":false,"active":true,"pass":true,"outputs":1,"x":380,"y":2720,"wires":[[]]},{"id":"5dacb55a06a1cb1f","type":"file","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Write File","filename":"/data/input2.jpg","filenameType":"str","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":1100,"y":2500,"wires":[["1cd44a2e0577b03f"]]},{"id":"82fc9c91a2667f9c","type":"api-call-service","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Notify Via Signal","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"notify","service":"signal_self","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": \"Input2\",\t \"data\": { \"attachments\": [\"/config/images/input2.jpg\"]}\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1420,"y":2500,"wires":[[]]},{"id":"9a9e970d6d7a4727","type":"function","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Rate Limiter","func":"var interval = (1000*60); // minimum interval between messages (ms)\ncontext.lastTime = context.lastTime || 0;\n\nvar now = Date.now();\n\nif (now-context.lastTime > interval) {\n context.lastTime = now;\n return msg;\n} else {\n return null;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":910,"y":2560,"wires":[["17407dceb7726474"]]},{"id":"bf9a785d9f0e5359","type":"http request","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"Get Image","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.1.22:5000/api/driveway/latest.jpg","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":510,"y":2500,"wires":[["75ef5974262fd7bc"]]},{"id":"b3f4911f67703b3b","type":"inject","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":320,"y":2440,"wires":[["bf9a785d9f0e5359"]]},{"id":"1cd44a2e0577b03f","type":"within-time-switch","z":"9584418c.dafc2","d":true,"g":"8ea53bc2c2669aee","name":"","nameInt":"","positionConfig":"9f81fd881d01a666","startTime":"12:00","startTimeType":"entered","startOffset":0,"startOffsetType":"none","startOffsetMultiplier":60000,"endTime":"19:00","endTimeType":"entered","endOffset":0,"endOffsetType":"none","endOffsetMultiplier":60000,"timeRestrictions":0,"timeRestrictionsType":"none","timeDays":"*","timeOnlyOddDays":false,"timeOnlyEvenDays":false,"timeOnlyOddWeeks":false,"timeOnlyEvenWeeks":false,"timeMonths":"*","timedatestart":"","timedateend":"","propertyStart":"","propertyStartType":"none","propertyStartCompare":"true","propertyStartThreshold":"","propertyStartThresholdType":"num","startTimeAlt":"","startTimeAltType":"entered","startOffsetAlt":0,"startOffsetAltType":"none","startOffsetAltMultiplier":60000,"propertyEnd":"","propertyEndType":"none","propertyEndCompare":"true","propertyEndThreshold":"","propertyEndThresholdType":"num","endTimeAlt":"","endTimeAltType":"entered","endOffsetAlt":0,"endOffsetAltType":"none","endOffsetAltMultiplier":60000,"withinTimeValue":"true","withinTimeValueType":"msgInput","outOfTimeValue":"false","outOfTimeValueType":"msgInput","tsCompare":"0","x":1250,"y":2500,"wires":[["82fc9c91a2667f9c"],[]]},{"id":"ccf5998fdf8ee50d","type":"http request","z":"9584418c.dafc2","d":true,"g":"3c4349a7eea9bd3b","name":"Set PTZ Online","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://10.0.0.36/cgi-bin/configManager.cgi?action=setConfig&VSP_PaaS.Online=true","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"digest","senderr":false,"headers":[],"x":400,"y":2040,"wires":[[]]},{"id":"bfba5a9fec44ff05","type":"api-call-service","z":"9584418c.dafc2","d":true,"g":"11e25fc28c23144c","name":"Front Porch Lights to 40","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.front_porch_lights"],"data":"{\"brightness\":\"40\",\"transition\":5}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":390,"y":1260,"wires":[[]]},{"id":"4c31b367e8d67eb2","type":"api-call-service","z":"9584418c.dafc2","d":true,"name":"Front Porch Lights to 40","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.front_porch_lights"],"data":"{\"brightness\":\"40\",\"transition\":5}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":870.4285888671875,"y":1404.142822265625,"wires":[[]]},{"id":"d269f175.c9dc6","type":"server-events","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Custom Water Event Fired","server":"e1dc0b88.463bb8","version":2,"eventType":"irrigation_custom_water","exposeToHomeAssistant":false,"eventData":"","haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"},{"property":"event_type","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"}],"x":190,"y":340,"wires":[["883f2c00.1d94e8"]]},{"id":"3367e45f.cc981c","type":"function","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"++","func":"if ( (msg.i += 1) < msg.zones.length ) return msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":670,"y":400,"wires":[["116d5bb3.ee92a4"]]},{"id":"116d5bb3.ee92a4","type":"function","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"For Each","func":"if( msg.i == undefined ) msg.i = 0;\n\nmsg.payload = msg.zones[ msg.i ];\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":840,"y":340,"wires":[["565ee5c1.561bfc","80df47d5.602888","e2c37b65c5582c2b"]]},{"id":"80df47d5.602888","type":"api-call-service","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Turn On Zone","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":[],"data":"{ \"entity_id\": payload.zone}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1060,"y":340,"wires":[[]]},{"id":"fb46876c.845298","type":"api-call-service","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Turn Off Zone","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":[],"data":"{ \"entity_id\": payload.zone}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1320,"y":400,"wires":[["98eeafa7.bd2b9","860a4c61d7557dc9"]]},{"id":"98eeafa7.bd2b9","type":"delay","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Delay 5","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":980,"y":480,"wires":[["3367e45f.cc981c"]]},{"id":"565ee5c1.561bfc","type":"change","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Set Delay Variable","rules":[{"t":"set","p":"delay","pt":"msg","to":"payload.time* 60000","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":890,"y":400,"wires":[["22a20603.86a06a"]]},{"id":"22a20603.86a06a","type":"stoptimer-varidelay","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","duration":"5","durationType":"num","units":"Millisecond","payloadtype":"num","payloadval":"0","name":"Delay","reporting":"every_second","persist":false,"x":1090,"y":400,"wires":[["fb46876c.845298"],[],["a8d96e.1f00969"]]},{"id":"a8d96e.1f00969","type":"mqtt out","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Publish Time Remaining","topic":"sensor/irrigation_time_remaining","qos":"","retain":"","broker":"546e31ed.0db1c","x":1350,"y":340,"wires":[]},{"id":"3b656b89.1ac154","type":"inject","z":"f602e6ba.609d28","g":"79694877249c9902","name":"3:00 Attempt","props":[{"p":"payload"}],"repeat":"","crontab":"00 03 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"[{\"zone\":\"switch.irrigation_front_beds\",\"time\":10,\"name\":\"Front beds\"},{\"zone\":\"switch.irrigation_front_lawn\",\"time\":20,\"name\":\"Front lawn\"},{\"zone\":\"switch.irrigation_left_and_main_rear_lawn\",\"time\":20,\"name\":\"Left and main rear lawn\"},{\"zone\":\"switch.irrigation_front_and_right_rear_lawn\",\"time\":20,\"name\":\"Front and right rear lawn\"},{\"zone\":\"switch.irrigation_side_lawn\",\"time\":20,\"name\":\"Side lawn\"}]","payloadType":"json","x":180,"y":1280,"wires":[["493b435f.c9851c"]]},{"id":"493b435f.c9851c","type":"api-current-state","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Schedule Enabled","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.lawn_irrigation_scheduling","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","x":410,"y":1280,"wires":[["8c060f00.cf577"],["7b12e66f.57d068"]]},{"id":"7b12e66f.57d068","type":"api-call-service","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.lawn_irrigation_reason"],"data":"{\"value\":\"Automation Off\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":1300,"wires":[[]]},{"id":"8c060f00.cf577","type":"link out","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["f1cbfe0.7dfb4","576b66fa1bd202a3"],"x":595,"y":1260,"wires":[]},{"id":"4422f61c.847d88","type":"link in","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["3ff9ce03ef7b554b"],"x":135,"y":1480,"wires":[["219b37105a8304f1"]]},{"id":"dcdeabc7.780578","type":"link out","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["1eaa857e.b6b8db","c90fd5e6.c5c678","b8fe96458628f202"],"x":595,"y":1460,"wires":[]},{"id":"722d03d6.2ff77c","type":"link in","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["8d4bfe8e.ee805","d67106b42368e630"],"x":135,"y":1900,"wires":[["b3c4a3638c17629e"]]},{"id":"af4788fe.215ba8","type":"link out","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["405789f7.0727a8","eb1a5268c1aec843","9896327569c234da"],"x":595,"y":1900,"wires":[]},{"id":"c90fd5e6.c5c678","type":"link in","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["dcdeabc7.780578","89d715ddf12d2195"],"x":135,"y":1600,"wires":[["e7430e17f0b24ed8"]]},{"id":"862ad27a.d347d","type":"link out","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["83edf648.3f9ed8"],"x":595,"y":1580,"wires":[]},{"id":"808e6a81.92e2e8","type":"api-call-service","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Turn On Master Valve","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.irrigation_master_valve"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":460,"y":400,"wires":[["e42ff3d9.593dc"]]},{"id":"883f2c00.1d94e8","type":"api-current-state","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"24v Power","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.irrigation_24v_power","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","x":250,"y":400,"wires":[["808e6a81.92e2e8"],[]]},{"id":"e42ff3d9.593dc","type":"delay","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Delay 5","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":480,"y":340,"wires":[["76160bc4.8cd644"]]},{"id":"76160bc4.8cd644","type":"change","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"","rules":[{"t":"set","p":"zones","pt":"msg","to":"payload.event.zones","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":660,"y":340,"wires":[["116d5bb3.ee92a4"]]},{"id":"83edf648.3f9ed8","type":"link in","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["862ad27a.d347d","1bb3825011174363"],"x":135,"y":1700,"wires":[["b6e7d5b8891bba6d"]]},{"id":"8d4bfe8e.ee805","type":"link out","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["722d03d6.2ff77c"],"x":595,"y":1720,"wires":[]},{"id":"583f46a3.fc4c38","type":"inject","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"5:00 Attempt","props":[{"p":"payload"}],"repeat":"","crontab":"00 05 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"[{\"zone\":\"switch.irrigation_front_beds\",\"time\":10,\"name\":\"Front beds\"},{\"zone\":\"switch.irrigation_front_lawn\",\"time\":20,\"name\":\"Front lawn\"},{\"zone\":\"switch.irrigation_left_and_main_rear_lawn\",\"time\":20,\"name\":\"Left and main rear lawn\"},{\"zone\":\"switch.irrigation_front_and_right_rear_lawn\",\"time\":20,\"name\":\"Front and right rear lawn\"},{\"zone\":\"switch.irrigation_side_lawn\",\"time\":20,\"name\":\"Side lawn\"}]","payloadType":"json","x":180,"y":2620,"wires":[["d9147878.b61cf8"]]},{"id":"d9147878.b61cf8","type":"api-current-state","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Schedule Enabled","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.front_bed_irrigation_scheduling","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","x":410,"y":2620,"wires":[["c7e5552e.7f8a08"],["45c5dbbbd8ce50a1"]]},{"id":"c7e5552e.7f8a08","type":"link out","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["f1cbfe0.7dfb4","f6881b4bf93c27c5"],"x":595,"y":2600,"wires":[]},{"id":"6bcf06fb.9ca748","type":"link in","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["4f2902edc77f2d3b"],"x":135,"y":2820,"wires":[["ed6e3d4225582e20"]]},{"id":"f587589f.d739e8","type":"link out","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["1eaa857e.b6b8db","9d851699.6a8458"],"x":595,"y":2800,"wires":[]},{"id":"d9d17e8f.590e6","type":"link in","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["4fae5b92.a9cd44"],"x":135,"y":3040,"wires":[["d8637d8d96b68fca"]]},{"id":"d9f893eb.834f3","type":"link out","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["5ce1803b.06628"],"x":595,"y":3040,"wires":[]},{"id":"9d851699.6a8458","type":"link in","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["f587589f.d739e8"],"x":135,"y":2940,"wires":[["593bee0e8c958df8"]]},{"id":"4fae5b92.a9cd44","type":"link out","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["d9d17e8f.590e6"],"x":595,"y":2920,"wires":[]},{"id":"a2ab7368.923fb","type":"template","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Zone Settings Front Beds","field":"zones","fieldType":"msg","format":"json","syntax":"mustache","template":"{\n \"zone\": \"switch.irrigation_front_beds\",\n \"time\": 20,\n \"name\": \"Front beds\"\n}","output":"json","x":250,"y":3200,"wires":[["62b5545bc6d6e627"]]},{"id":"a31e3daf.17207","type":"api-call-service","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Turn On Master Valve","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.irrigation_master_valve"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":560,"y":3200,"wires":[["21ced698.708b5a"]]},{"id":"21ced698.708b5a","type":"delay","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"2s","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":730,"y":3200,"wires":[["c661d489.9c9bc8"]]},{"id":"c661d489.9c9bc8","type":"api-call-service","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Turn On Zone","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":[],"data":"{ \"entity_id\": msg.zones.zone}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":880,"y":3200,"wires":[["accc6697.196268"]]},{"id":"accc6697.196268","type":"change","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Set Delay Variable","rules":[{"t":"set","p":"delay","pt":"msg","to":"msg.zones.time* 60000","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1090,"y":3200,"wires":[["487ff788.8c5c98"]]},{"id":"487ff788.8c5c98","type":"stoptimer-varidelay","z":"f602e6ba.609d28","g":"55a2162532da4e14","duration":"5","durationType":"num","units":"Millisecond","payloadtype":"num","payloadval":"0","name":"Delay","reporting":"every_second","persist":false,"ignoretimerpass":false,"x":850,"y":3260,"wires":[["2238b09b.1b5b5","9129b06e.d8925"],[],["84258ddd.41da4"]]},{"id":"2238b09b.1b5b5","type":"api-call-service","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Turn Off Zone","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":[],"data":"{ \"entity_id\": msg.zones.zone}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":900,"y":3340,"wires":[[]]},{"id":"84258ddd.41da4","type":"mqtt out","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Publish Time Remaining","topic":"sensor/irrigation_time_remaining","qos":"","retain":"","broker":"546e31ed.0db1c","x":1130,"y":3320,"wires":[]},{"id":"9129b06e.d8925","type":"function","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Create msg object","func":"var message = \"Sprinkler auto-run: \" + msg.zones.name + \" ran for \" + msg.zones.time + \" minutes\"\n\nreturn { alert: message };","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1050,"y":3260,"wires":[["d83b5ff7a2212931"]]},{"id":"5ce1803b.06628","type":"link in","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"","links":["db46e0c1.f9ab5","d9f893eb.834f3"],"x":95,"y":3200,"wires":[["a2ab7368.923fb"]]},{"id":"815fddc0.6604c","type":"api-call-service","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Turn On 24v","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.irrigation_24v_power"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":470,"y":1900,"wires":[["af4788fe.215ba8"]]},{"id":"418058c4.af3158","type":"api-call-service","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Turn On 24v","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.irrigation_24v_power"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":470,"y":3040,"wires":[["d9f893eb.834f3"]]},{"id":"1ae21386.a831bc","type":"inject","z":"f602e6ba.609d28","g":"0f07749a4e1672ad","name":"06:00 24v Off","props":[],"repeat":"","crontab":"00 06 * * *","once":false,"onceDelay":0.1,"topic":"","x":180,"y":1140,"wires":[["117145a7.67e99a","882aff35f788008b"]]},{"id":"117145a7.67e99a","type":"api-call-service","z":"f602e6ba.609d28","g":"0f07749a4e1672ad","name":"Turn Off 24v","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.irrigation_24v_power"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":390,"y":1100,"wires":[[]]},{"id":"06d6255efdc31c47","type":"api-current-state","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Force Run","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_force_run","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","x":250,"y":1380,"wires":[["2fc67b25514de5a5"],["3ff9ce03ef7b554b"]]},{"id":"5420d0eed32223fb","type":"link out","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["f1cbfe0.7dfb4","08e3098cf183e086"],"x":595,"y":1360,"wires":[]},{"id":"3ff9ce03ef7b554b","type":"link out","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["f1cbfe0.7dfb4","4422f61c.847d88","8524a273a6a8ffd0"],"x":595,"y":1400,"wires":[]},{"id":"576b66fa1bd202a3","type":"link in","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["8c060f00.cf577"],"x":135,"y":1380,"wires":[["06d6255efdc31c47"]]},{"id":"7350c911a0b1a86d","type":"api-current-state","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Force Run","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_force_run","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","x":250,"y":2720,"wires":[["abb8777dd08aa743"],["4f2902edc77f2d3b"]]},{"id":"fdcfa1521191fa40","type":"link out","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["f1cbfe0.7dfb4","b403eec7866aea22"],"x":595,"y":2700,"wires":[]},{"id":"4f2902edc77f2d3b","type":"link out","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["f1cbfe0.7dfb4","6bcf06fb.9ca748"],"x":595,"y":2740,"wires":[]},{"id":"f6881b4bf93c27c5","type":"link in","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["c7e5552e.7f8a08"],"x":135,"y":2720,"wires":[["7350c911a0b1a86d"]]},{"id":"882aff35f788008b","type":"api-call-service","z":"f602e6ba.609d28","g":"0f07749a4e1672ad","name":"Turn Off Force Run","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["input_boolean.irrigation_force_run"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":410,"y":1160,"wires":[[]]},{"id":"a3d75225807b70eb","type":"delay","z":"f602e6ba.609d28","g":"79694877249c9902","name":"30 Minute Delay","pauseType":"delay","timeout":"30","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":280,"y":1760,"wires":[["339ee0ada21856e0"]]},{"id":"e2c37b65c5582c2b","type":"api-call-service","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Turn Off Start/Stop tracking","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["automation.store_sprinkler_start_stop_times"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1060,"y":300,"wires":[[]]},{"id":"860a4c61d7557dc9","type":"api-call-service","z":"f602e6ba.609d28","g":"43a30fe5a5052c22","name":"Turn On Start/Stop tracking","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["automation.store_sprinkler_start_stop_times"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1360,"y":460,"wires":[[]]},{"id":"62b5545bc6d6e627","type":"template","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Template: Zone Last Ran >= 23 hours","field":"template","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{%- set entity_name = \"input_datetime{{ zones.zone }}\" | regex_replace(find='switch', replace='', ignorecase=False) -%}\n{%- set time = (as_timestamp(now()) - as_timestamp(states(entity_name+\"_last_start\"))) | int -%}\n{% if time >= 23*3600 %}1{% else %}0{% endif %}","output":"str","x":310,"y":3260,"wires":[["aa53225140781dd7"]]},{"id":"aa53225140781dd7","type":"api-render-template","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Evaluate Template","server":"e1dc0b88.463bb8","version":0,"template":"","resultsLocation":"data.continue","resultsLocationType":"msg","templateLocation":"template","templateLocationType":"msg","x":250,"y":3320,"wires":[["8113d83074ff7701"]]},{"id":"8113d83074ff7701","type":"switch","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Last Ran >= Template Hrs Ago","property":"data.continue","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"},{"t":"eq","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":530,"y":3320,"wires":[["a31e3daf.17207"],["f78cdb84200eb171"]]},{"id":"d83b5ff7a2212931","type":"api-call-service","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Notify via Wrapper","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"script","service":"notify_wrapper","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": alert \t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1270,"y":3260,"wires":[[]]},{"id":"dd9855ca4017c8c0","type":"api-call-service","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Turn on Boolean","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["input_boolean.irrigation_rainfall_delay"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":700,"y":580,"wires":[[]]},{"id":"c3a696a117416327","type":"function","z":"f602e6ba.609d28","d":true,"g":"a9182c2cc04d2d9a","name":"Check Rainfall","func":"var rain_override = false\n\nfor (var i = 0; i < msg.payload.length; i++) {\n if (parseFloat(msg.payload[i].state) > 0.25) {\n rain_override = true\n }\n}\n\n// top = proceed\n// bottom = overridden\nif (rain_override === true) {\n return [ null, {rain_override} ];\n} \nelse {\n return [ {rain_override}, null ];\n}","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":680,"wires":[["47f1a8018e58e032"],["dd9855ca4017c8c0"]]},{"id":"27f2580e35031830","type":"api-get-history","z":"f602e6ba.609d28","d":true,"g":"a9182c2cc04d2d9a","name":"Rainfall 120h","server":"e1dc0b88.463bb8","version":0,"startdate":"","enddate":"","entityid":"sensor.netatmo_home_rain_sum_rain_today_inches","entityidtype":"is","useRelativeTime":true,"relativeTime":"120h","flatten":true,"output_type":"array","output_location_type":"msg","output_location":"payload","x":310,"y":680,"wires":[["c3a696a117416327"]]},{"id":"9cb8187c669c6485","type":"comment","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Rainfall","info":"","x":150,"y":600,"wires":[]},{"id":"47f1a8018e58e032","type":"api-call-service","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Turn off Boolean","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["input_boolean.irrigation_rainfall_delay"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":700,"y":660,"wires":[[]]},{"id":"427f7fa58d86cc59","type":"inject","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"*/30","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"1800","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":640,"wires":[["27f2580e35031830","93965a61d2c4f5de"]]},{"id":"1d9a4d0bb4645f32","type":"api-call-service","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Turn on Boolean","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["input_boolean.irrigation_rain_forecast_delay"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":700,"y":840,"wires":[[]]},{"id":"d9ebbaa37f5911a9","type":"comment","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Rain Forecast","info":"","x":170,"y":760,"wires":[]},{"id":"eeecfc1e8864e39f","type":"api-call-service","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Turn off Boolean","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["input_boolean.irrigation_rain_forecast_delay"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":700,"y":760,"wires":[[]]},{"id":"89487a4efedec1db","type":"inject","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"*/30","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"1800","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":800,"wires":[["2c45af5b3ee5cf0a"]]},{"id":"1e4b3bc7c25b294f","type":"function","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Rain Chance","func":"// Check next 4 precipitation_probability values\n// HA Template: \n// {% for j in state_attr(\"weather.kcll_daynight\",\"forecast\")[:4] %}\n// {{ j.precipitation_probability }}\n// {% endfor %}\n\nvar forecast_override = false\n\n// if (parseFloat(msg.payload) > 40) {\n// forecast_override = true\n// }\n \nfor (var i = 0; i < 4; i++) {\n if (parseFloat(msg.data.attributes.forecast[i].precipitation_probability) >= 60) {\n forecast_override = true\n }\n}\n\n// top = proceed\n// bottom = overridden\nif (forecast_override === true) {\n return [ null, {forecast_override} ];\n} \nelse {\n return [ {forecast_override}, null ];\n}","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":490,"y":800,"wires":[["eeecfc1e8864e39f"],["1d9a4d0bb4645f32"]]},{"id":"2c45af5b3ee5cf0a","type":"api-current-state","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Weather","server":"e1dc0b88.463bb8","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"weather.kcll_daynight","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":300,"y":800,"wires":[["1e4b3bc7c25b294f"]]},{"id":"d7e50e7a2810667d","type":"api-call-service","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Turn on Boolean","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["input_boolean.irrigation_wind_delay"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":700,"y":1000,"wires":[[]]},{"id":"28936ec687ee4eb0","type":"comment","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Wind","info":"","x":150,"y":920,"wires":[]},{"id":"974833b6a2eca853","type":"api-call-service","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Turn off Boolean","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["input_boolean.irrigation_wind_delay"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":700,"y":920,"wires":[[]]},{"id":"478a5a84d38ba181","type":"inject","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"*/5","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"300","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":960,"wires":[["c01fd0612615e927"]]},{"id":"c01fd0612615e927","type":"api-current-state","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"Wind <= 10 MPH","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"10","halt_if_type":"num","halt_if_compare":"lte","entity_id":"sensor.neighbor_5in1_wind","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":330,"y":960,"wires":[["974833b6a2eca853"],["d7e50e7a2810667d"]]},{"id":"219b37105a8304f1","type":"api-current-state","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Rainfall Delay","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"off","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_rainfall_delay","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":260,"y":1480,"wires":[["dcdeabc7.780578"],["d01fbafafbb34692"]]},{"id":"e7430e17f0b24ed8","type":"api-current-state","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Rain Forecast Delay","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"off","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_rain_forecast_delay","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":280,"y":1600,"wires":[["862ad27a.d347d"],["f5684be88477322f"]]},{"id":"b6e7d5b8891bba6d","type":"api-current-state","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Wind Delay","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"off","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_wind_delay","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":250,"y":1700,"wires":[["8d4bfe8e.ee805"],["a3d75225807b70eb"]]},{"id":"339ee0ada21856e0","type":"api-current-state","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Wind Delay","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"off","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_wind_delay","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":250,"y":1820,"wires":[["8d4bfe8e.ee805"],["336585d4eee0ca73"]]},{"id":"ed6e3d4225582e20","type":"api-current-state","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Rainfall Delay","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"off","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_rainfall_delay","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":260,"y":2820,"wires":[["f587589f.d739e8"],["f7ac7a90f3da2298"]]},{"id":"593bee0e8c958df8","type":"api-current-state","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Rain Forecast Delay","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"off","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_rain_forecast_delay","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":280,"y":2940,"wires":[["4fae5b92.a9cd44"],["67916c3a5554a794"]]},{"id":"d01fbafafbb34692","type":"api-call-service","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.lawn_irrigation_reason"],"data":"{\"value\":\"Rainfall\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":1500,"wires":[[]]},{"id":"f5684be88477322f","type":"api-call-service","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.lawn_irrigation_reason"],"data":"{\"value\":\"Rain Forecasted\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":1620,"wires":[[]]},{"id":"336585d4eee0ca73","type":"api-call-service","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.lawn_irrigation_reason"],"data":"{\"value\":\"Wind\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":1820,"wires":[[]]},{"id":"b3c4a3638c17629e","type":"api-call-service","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Clear Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.lawn_irrigation_reason"],"data":"{\"value\":\"None\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":260,"y":1900,"wires":[["815fddc0.6604c"]]},{"id":"67916c3a5554a794","type":"api-call-service","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.front_bed_irrigation_reason"],"data":"{\"value\":\"Rain Forecasted\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":2960,"wires":[[]]},{"id":"f7ac7a90f3da2298","type":"api-call-service","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.front_bed_irrigation_reason"],"data":"{\"value\":\"Rainfall\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":2840,"wires":[[]]},{"id":"45c5dbbbd8ce50a1","type":"api-call-service","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.front_bed_irrigation_reason"],"data":"{\"value\":\"Automation Off\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":2640,"wires":[[]]},{"id":"2fc67b25514de5a5","type":"api-call-service","z":"f602e6ba.609d28","g":"79694877249c9902","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.lawn_irrigation_reason"],"data":"{\"value\":\"Force Run\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":450,"y":1360,"wires":[["5420d0eed32223fb"]]},{"id":"08e3098cf183e086","type":"link in","z":"f602e6ba.609d28","g":"79694877249c9902","name":"","links":["5420d0eed32223fb"],"x":325,"y":1960,"wires":[["815fddc0.6604c"]]},{"id":"abb8777dd08aa743","type":"api-call-service","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.front_bed_irrigation_reason"],"data":"{\"value\":\"Force Run\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":450,"y":2700,"wires":[["fdcfa1521191fa40"]]},{"id":"d8637d8d96b68fca","type":"api-call-service","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"Clear Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.front_bed_irrigation_reason"],"data":"{\"value\":\"None\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":260,"y":3040,"wires":[["418058c4.af3158"]]},{"id":"b403eec7866aea22","type":"link in","z":"f602e6ba.609d28","g":"68ec980b932fdba7","name":"","links":["fdcfa1521191fa40"],"x":325,"y":3100,"wires":[["418058c4.af3158"]]},{"id":"f2c9c3a5b8b11a64","type":"switch","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Continue?","property":"data.continue","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"1","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":1230,"y":2060,"wires":[["287dd3b1af5dc2d0"],["bf015af2161c5ec2"]]},{"id":"38affe5cc680d076","type":"template","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Template: Zone Last Ran >= 71 hours","field":"template","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{%- set entity_name = \"input_datetime{{ payload.zone }}\" | regex_replace(find='switch', replace='', ignorecase=False) -%}\n{%- set time = (as_timestamp(now()) - as_timestamp(states(entity_name+\"_last_start\"))) | int -%}\n{% if time >= 71*3600 %}1{% else %}0{% endif %}","output":"str","x":790,"y":2060,"wires":[["174186fb5d054240"]]},{"id":"9896327569c234da","type":"link in","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"","links":["af4788fe.215ba8"],"x":95,"y":2060,"wires":[["e95ac52f03478921"]]},{"id":"e95ac52f03478921","type":"template","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Lawn Zones","field":"all_zones","fieldType":"msg","format":"json","syntax":"mustache","template":"[\n {\n \"zone\": \"switch.irrigation_front_lawn\",\n \"name\": \"Front lawn\"\n },\n {\n \"zone\": \"switch.irrigation_left_and_main_rear_lawn\",\n \"name\": \"Left and main rear lawn\"\n },\n {\n \"zone\": \"switch.irrigation_front_and_right_rear_lawn\",\n \"name\": \"Front and right rear lawn\"\n },\n {\n \"zone\": \"switch.irrigation_side_lawn\",\n \"name\": \"Side lawn\"\n }\n]","output":"json","x":290,"y":2060,"wires":[["287dd3b1af5dc2d0"]]},{"id":"174186fb5d054240","type":"api-render-template","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Evaluate Template","server":"e1dc0b88.463bb8","version":0,"template":"","resultsLocation":"data.continue","resultsLocationType":"msg","templateLocation":"template","templateLocationType":"msg","x":1050,"y":2060,"wires":[["f2c9c3a5b8b11a64"]]},{"id":"287dd3b1af5dc2d0","type":"array-loop","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Loop Through Zones","key":"al287dd3b1af5dc2d0","keyType":"msg","reset":true,"resetValue":"value-null","array":"all_zones","arrayType":"msg","x":220,"y":2120,"wires":[["74cd40702021e86d","acdcc72fea065aac"],["224d30a98f52c287"]]},{"id":"74cd40702021e86d","type":"template","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Zone Settings Lawn","field":"zones","fieldType":"msg","format":"json","syntax":"mustache","template":"[\n {\n \"zone\": \"switch.irrigation_front_lawn\",\n \"time\": 15,\n \"name\": \"Front lawn\"\n },\n {\n \"zone\": \"switch.irrigation_left_and_main_rear_lawn\",\n \"time\": 15,\n \"name\": \"Left and main rear lawn\"\n },\n {\n \"zone\": \"switch.irrigation_front_and_right_rear_lawn\",\n \"time\": 15,\n \"name\": \"Front and right rear lawn\"\n },\n {\n \"zone\": \"switch.irrigation_side_lawn\",\n \"time\": 10,\n \"name\": \"Side lawn\"\n },\n {\n \"zone\": \"switch.irrigation_front_lawn\",\n \"time\": 15,\n \"name\": \"Front lawn\"\n },\n {\n \"zone\": \"switch.irrigation_left_and_main_rear_lawn\",\n \"time\": 15,\n \"name\": \"Left and main rear lawn\"\n },\n {\n \"zone\": \"switch.irrigation_front_and_right_rear_lawn\",\n \"time\": 15,\n \"name\": \"Front and right rear lawn\"\n },\n {\n \"zone\": \"switch.irrigation_side_lawn\",\n \"time\": 10,\n \"name\": \"Side lawn\"\n }\n]","output":"json","x":460,"y":2180,"wires":[["151eb6ba5b2d39cd"]]},{"id":"bf015af2161c5ec2","type":"function","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Append Run Zones","func":"if (typeof msg.run_zones === 'undefined'){\n msg.run_zones = []\n}\n\n// Add zone to run_zones\nmsg.run_zones.push(msg.payload.zone)\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":210,"y":2180,"wires":[["287dd3b1af5dc2d0"]]},{"id":"151eb6ba5b2d39cd","type":"array-loop","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Loop Through Zones","key":"al287dd3b1af5dc2d0","keyType":"msg","reset":true,"resetValue":"value-null","array":"zones","arrayType":"msg","x":720,"y":2180,"wires":[[],["45ee74d06e9cac2c"]]},{"id":"45ee74d06e9cac2c","type":"switch","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"If Zone in Run Zone","property":"run_zones","propertyType":"msg","rules":[{"t":"cont","v":"payload.zone","vt":"msg"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":710,"y":2240,"wires":[["8d3c8370996be2da"],["151eb6ba5b2d39cd"]]},{"id":"95a54981805b22f2","type":"api-call-service","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Turn On Zone","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":[],"data":"{ \"entity_id\": payload.zone}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":880,"y":2320,"wires":[["02d1e639f7ac6596","7b985932412db47d"]]},{"id":"a4b3eba196a504dc","type":"api-call-service","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Turn Off Zone","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":[],"data":"{ \"entity_id\": payload.zone}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":540,"y":2500,"wires":[["6ea0448df1383ec2"]]},{"id":"02d1e639f7ac6596","type":"change","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Set Delay Variable","rules":[{"t":"set","p":"delay","pt":"msg","to":"payload.time* 60000","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":2380,"wires":[["863b8fa63f210ebe"]]},{"id":"8d3c8370996be2da","type":"api-call-service","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Turn On Master Valve","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.irrigation_master_valve"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":560,"y":2320,"wires":[["b1c9631973c2f4b1"]]},{"id":"863b8fa63f210ebe","type":"stoptimer-varidelay","z":"f602e6ba.609d28","g":"a08dae6118c91c19","duration":"5","durationType":"num","units":"Millisecond","payloadtype":"num","payloadval":"0","name":"Delay","reporting":"every_second","persist":false,"ignoretimerpass":false,"x":510,"y":2440,"wires":[["a4b3eba196a504dc","de509d99b9d965b3"],[],["7d8374976c01e3dc"]]},{"id":"7d8374976c01e3dc","type":"mqtt out","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Publish Time Remaining","topic":"sensor/irrigation_time_remaining","qos":"","retain":"","broker":"546e31ed.0db1c","x":790,"y":2460,"wires":[]},{"id":"b0debe46542c4c67","type":"api-call-service","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Notify via Wrapper","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"script","service":"notify_wrapper","areaId":[],"deviceId":[],"entityId":[],"data":"{\t \"message\": alert \t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":990,"y":2420,"wires":[[]]},{"id":"de509d99b9d965b3","type":"function","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Create msg object","func":"var message = \"Sprinkler auto-run: \" + msg.payload.name + \" ran for \" + msg.payload.time + \" minutes\"\n\nreturn { alert: message };","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":2420,"wires":[["b0debe46542c4c67"]]},{"id":"b1c9631973c2f4b1","type":"delay","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"2s","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":730,"y":2320,"wires":[["95a54981805b22f2"]]},{"id":"6ea0448df1383ec2","type":"delay","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Delay 10","pauseType":"delay","timeout":"10","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":320,"y":2440,"wires":[["151eb6ba5b2d39cd"]]},{"id":"224d30a98f52c287","type":"api-current-state","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Force Run","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.irrigation_force_run","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","x":510,"y":2060,"wires":[["bf015af2161c5ec2"],["38affe5cc680d076"]]},{"id":"5a27d31bfb4a6990","type":"comment","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Actually Handle Watering","info":"","x":1150,"y":2340,"wires":[]},{"id":"197853479ad9eeda","type":"comment","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Decide Which Zones to Run","info":"","x":1020,"y":2160,"wires":[]},{"id":"7b985932412db47d","type":"debug","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Log Zone On","active":false,"tosidebar":true,"console":true,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1100,"y":2280,"wires":[]},{"id":"acdcc72fea065aac","type":"debug","z":"f602e6ba.609d28","g":"a08dae6118c91c19","name":"Log Run Zones","active":false,"tosidebar":true,"console":true,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":350,"y":2260,"wires":[]},{"id":"f78cdb84200eb171","type":"api-call-service","z":"f602e6ba.609d28","g":"55a2162532da4e14","name":"Set Reason","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.front_bed_irrigation_reason"],"data":"{\"value\":\"Recently Ran\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":750,"y":3380,"wires":[[]]},{"id":"93965a61d2c4f5de","type":"api-current-state","z":"f602e6ba.609d28","g":"a9182c2cc04d2d9a","name":"< 1\" in 5 Days","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"0.5","halt_if_type":"num","halt_if_compare":"gte","entity_id":"sensor.neighbor_5in1_rain_last_5_days","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":420,"y":620,"wires":[["dd9855ca4017c8c0"],["47f1a8018e58e032"]]},{"id":"54bad548.7e9fcc","type":"ha-get-entities","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Get \"On\" Sprinklers","server":"e1dc0b88.463bb8","version":0,"rules":[{"property":"entity_id","logic":"starts_with","value":"switch.irrigation","valueType":"str"},{"property":"entity_id","logic":"does_not_include","value":"switch.irrigation_master_valve,switch.irrigation_24v_power,switch.irrigation_drip","valueType":"str"},{"property":"state","logic":"is","value":"on","valueType":"str"}],"output_type":"array","output_empty_results":true,"output_location_type":"msg","output_location":"payload","output_results_count":1,"x":390,"y":100,"wires":[["bcbf413e.7b188"]]},{"id":"5a10cd93.8e94b4","type":"inject","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":true,"onceDelay":0.1,"topic":"","payloadType":"date","x":170,"y":100,"wires":[["54bad548.7e9fcc"]]},{"id":"a77808ff.3f1288","type":"switch","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"On Longer than 26 minutes?","property":"payload[0].timeSinceChangedMs","propertyType":"msg","rules":[{"t":"gte","v":"1600000","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":720,"y":60,"wires":[["54ae6ec3.1bc63"]]},{"id":"54ae6ec3.1bc63","type":"api-call-service","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Turn Off Zone","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":[],"data":"{ \"entity_id\": payload[0].entity_id }","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":980,"y":60,"wires":[[]]},{"id":"bcbf413e.7b188","type":"switch","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"More Than 0 Entities?","property":"payload","propertyType":"msg","rules":[{"t":"nempty"},{"t":"empty"}],"checkall":"true","repair":false,"outputs":2,"x":400,"y":160,"wires":[["a77808ff.3f1288","3b848bce.76aea4"],["656ad2cd6fb99f57"]]},{"id":"3b848bce.76aea4","type":"change","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Reset Delay","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":670,"y":100,"wires":[["cdd3b7ef.04a618"]]},{"id":"43dedcca.ac7734","type":"api-call-service","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Turn Off Master","server":"e1dc0b88.463bb8","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.irrigation_master_valve"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1480,"y":180,"wires":[[]]},{"id":"c42e6d62.7a24c","type":"api-current-state","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Master On?","server":"e1dc0b88.463bb8","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.irrigation_master_valve","state_type":"str","blockInputOverrides":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":750,"y":200,"wires":[["cdd3b7ef.04a618"],["3b848bce.76aea4"]]},{"id":"cdd3b7ef.04a618","type":"trigger","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Wait 1m","op1":"","op2":"0","op1type":"nul","op2type":"str","duration":"1","extend":false,"overrideDelay":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":880,"y":120,"wires":[["5e9007a27732bba9"]]},{"id":"63f07877e73b952a","type":"switch","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"More Than 0 Entities?","property":"payload","propertyType":"msg","rules":[{"t":"nempty"},{"t":"empty"}],"checkall":"true","repair":false,"outputs":2,"x":1100,"y":180,"wires":[[],["749afd72791a5127"]]},{"id":"5e9007a27732bba9","type":"ha-get-entities","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Get \"On\" Sprinklers","server":"e1dc0b88.463bb8","version":0,"rules":[{"property":"entity_id","logic":"starts_with","value":"switch.irrigation","valueType":"str"},{"property":"entity_id","logic":"does_not_include","value":"switch.irrigation_master_valve,switch.irrigation_24v_power","valueType":"str"},{"property":"state","logic":"is","value":"on","valueType":"str"}],"output_type":"array","output_empty_results":true,"output_location_type":"msg","output_location":"payload","output_results_count":1,"x":1070,"y":120,"wires":[["63f07877e73b952a"]]},{"id":"061b74f643477dd9","type":"switch","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"More Than 0 Entities?","property":"payload","propertyType":"msg","rules":[{"t":"nempty"},{"t":"empty"}],"checkall":"true","repair":false,"outputs":2,"x":1380,"y":120,"wires":[["43dedcca.ac7734"],[]]},{"id":"749afd72791a5127","type":"trigger","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"Wait 1m","op1":"","op2":"0","op1type":"nul","op2type":"str","duration":"5","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":1260,"y":60,"wires":[["061b74f643477dd9"]]},{"id":"656ad2cd6fb99f57","type":"function","z":"f602e6ba.609d28","g":"3cf0491ac33aecfa","name":"clear msg","func":"msg = {}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":600,"y":200,"wires":[["c42e6d62.7a24c"]]}] \ No newline at end of file diff --git a/extras/docker-compose/homeassistant/docker-compose.yml b/extras/docker-compose/homeassistant/docker-compose.yml index 1e823f75..fbebc4c9 100644 --- a/extras/docker-compose/homeassistant/docker-compose.yml +++ b/extras/docker-compose/homeassistant/docker-compose.yml @@ -13,7 +13,7 @@ volumes: services: homeassistant: container_name: hass - image: ghcr.io/home-assistant/home-assistant:stable + image: ghcr.io/home-assistant/home-assistant:beta labels: com.centurylinklabs.watchtower.monitor-only: "true" volumes: diff --git a/extras/docker-compose/other/docker-compose.yml b/extras/docker-compose/other/docker-compose.yml index 7b6db3fa..3a898ae2 100644 --- a/extras/docker-compose/other/docker-compose.yml +++ b/extras/docker-compose/other/docker-compose.yml @@ -232,36 +232,21 @@ services: volumes: - /opt/cloudflared/:/home/nonroot/.cloudflared/ command: tunnel run nuc - github-runner-1: - container_name: github-runner-1 - image: myoung34/github-runner:latest - restart: 'always' - environment: - RUNNER_NAME: nuc-runner - ACCESS_TOKEN: XXXX - REPO_URL: https://github.com/aneisch/thermostat_api_server_docker - RUNNER_WORKDIR: /tmp/runner/work - LABELS: linux,x64,self-hosted - security_opt: - - label:disable - volumes: - - '/var/run/docker.sock:/var/run/docker.sock' - - '/tmp/runner-1:/tmp/runner' - github-runner-2: - container_name: github-runner-2 - image: myoung34/github-runner:latest - restart: 'always' - environment: - RUNNER_NAME: nuc-runner-2 - ACCESS_TOKEN: XXXX - REPO_URL: https://github.com/aneisch/home-assistant-config - RUNNER_WORKDIR: /tmp/runner/work - LABELS: linux,x64,self-hosted - security_opt: - - label:disable - volumes: - - '/var/run/docker.sock:/var/run/docker.sock' - - '/tmp/runner-2:/tmp/runner' + #github-runner-1: + # container_name: github-runner-1 + # image: myoung34/github-runner:latest + # restart: 'always' + # environment: + # RUNNER_NAME: nuc-runner + # ACCESS_TOKEN: XXXX + # REPO_URL: https://github.com/aneisch/thermostat_api_server_docker + # RUNNER_WORKDIR: /tmp/runner/work + # LABELS: linux,x64,self-hosted + # security_opt: + # - label:disable + # volumes: + # - '/var/run/docker.sock:/var/run/docker.sock' + # - '/tmp/runner-1:/tmp/runner' signal-rest-api: container_name: signal-rest-api image: bbernhard/signal-cli-rest-api:latest @@ -366,7 +351,7 @@ services: privileged: true restart: always #image: ghcr.io/blakeblackshear/frigate:stable - image: ghcr.io/blakeblackshear/frigate:dev-3921a7f + image: ghcr.io/blakeblackshear/frigate:dev-7c629c1 shm_size: "128mb" devices: - /dev/bus/usb:/dev/bus/usb diff --git a/extras/docker-compose/unified/docker-compose.yml b/extras/docker-compose/unified/docker-compose.yml index 0980e6e4..be059baf 100644 --- a/extras/docker-compose/unified/docker-compose.yml +++ b/extras/docker-compose/unified/docker-compose.yml @@ -14,7 +14,7 @@ volumes: services: homeassistant: container_name: hass - image: ghcr.io/home-assistant/home-assistant:stable + image: ghcr.io/home-assistant/home-assistant:beta labels: com.centurylinklabs.watchtower.monitor-only: "true" volumes: @@ -407,36 +407,21 @@ services: volumes: - /opt/cloudflared/:/home/nonroot/.cloudflared/ command: tunnel run nuc - github-runner-1: - container_name: github-runner-1 - image: myoung34/github-runner:latest - restart: 'always' - environment: - RUNNER_NAME: nuc-runner - ACCESS_TOKEN: XXXX - REPO_URL: https://github.com/aneisch/thermostat_api_server_docker - RUNNER_WORKDIR: /tmp/runner/work - LABELS: linux,x64,self-hosted - security_opt: - - label:disable - volumes: - - '/var/run/docker.sock:/var/run/docker.sock' - - '/tmp/runner-1:/tmp/runner' - github-runner-2: - container_name: github-runner-2 - image: myoung34/github-runner:latest - restart: 'always' - environment: - RUNNER_NAME: nuc-runner-2 - ACCESS_TOKEN: XXXX - REPO_URL: https://github.com/aneisch/home-assistant-config - RUNNER_WORKDIR: /tmp/runner/work - LABELS: linux,x64,self-hosted - security_opt: - - label:disable - volumes: - - '/var/run/docker.sock:/var/run/docker.sock' - - '/tmp/runner-2:/tmp/runner' + #github-runner-1: + # container_name: github-runner-1 + # image: myoung34/github-runner:latest + # restart: 'always' + # environment: + # RUNNER_NAME: nuc-runner + # ACCESS_TOKEN: XXXX + # REPO_URL: https://github.com/aneisch/thermostat_api_server_docker + # RUNNER_WORKDIR: /tmp/runner/work + # LABELS: linux,x64,self-hosted + # security_opt: + # - label:disable + # volumes: + # - '/var/run/docker.sock:/var/run/docker.sock' + # - '/tmp/runner-1:/tmp/runner' signal-rest-api: container_name: signal-rest-api image: bbernhard/signal-cli-rest-api:latest @@ -541,7 +526,7 @@ services: privileged: true restart: always #image: ghcr.io/blakeblackshear/frigate:stable - image: ghcr.io/blakeblackshear/frigate:dev-3921a7f + image: ghcr.io/blakeblackshear/frigate:dev-7c629c1 shm_size: "128mb" devices: - /dev/bus/usb:/dev/bus/usb diff --git a/images/nodered_1.png b/images/nodered_1.png index 0ad14609..80a4f44c 100644 Binary files a/images/nodered_1.png and b/images/nodered_1.png differ diff --git a/images/nodered_2.png b/images/nodered_2.png index 585761d9..884f6f3a 100644 Binary files a/images/nodered_2.png and b/images/nodered_2.png differ diff --git a/packages/frigate.yaml b/packages/frigate.yaml index 4c3629a2..b186cdb9 100644 --- a/packages/frigate.yaml +++ b/packages/frigate.yaml @@ -7,55 +7,55 @@ automation: topic: frigate/events payload: new value_template: "{{ value_json.type }}" - # Only alert on person + id: new + - platform: mqtt + topic: frigate/events + payload: end + value_template: "{{ value_json.type }}" + id: end condition: "{{ trigger.payload_json['after']['label'] == 'person' }}" action: - # Always backup clip to offsite - - service: shell_command.frigate_clips_drive - data: - clip_id: "{{trigger.payload_json['after']['id']}}" - # Play audio clip - # - if: - # - "{{ trigger.payload_json['after']['camera'] == 'front_door' }}" - # then: - # - service: shell_command.front_door_play_audio_file - # data: - # filename: audio.mp3 - # if home and person detection at front door then notify - - if: - - "{{ is_state('input_boolean.security_status', 'off') and trigger.payload_json['after']['camera'] == 'front_door' }}" - then: - - service: notify.signal_frigate - data: - message: >- - A {{trigger.payload_json["after"]["label"]}} was detected. + - choose: + - conditions: "{{ trigger.id == 'end' }}" + sequence: + - service: shell_command.frigate_clips_drive + data: + clip_id: "{{trigger.payload_json['after']['id']}}" + - conditions: "{{ trigger.id == 'new' }}" + sequence: + - if: "{{ is_state('input_boolean.security_status', 'off') and trigger.payload_json['after']['camera'] == 'front_door' }}" + then: + - service: notify.signal_frigate + data: + message: >- + A {{trigger.payload_json["after"]["label"]}} was detected. - Clip: https://secret/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/clip.mp4 + Clip: https://secret/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/clip.mp4 - Stream: https://secret/api/camera_proxy_stream/camera.{{trigger.payload_json['after']['camera'].lower()}}?token={{state_attr( 'camera.' ~ trigger.payload_json['after']['camera'].lower(), 'access_token')}} - data: - urls: - - http://localhost:8123/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/snapshot.jpg?bbox=1×tamp=1&quality=100 - # if not home or sleeping time and person detection anywhere then notify - - if: - - "{{ is_state('input_boolean.security_status', 'on') or is_state('input_boolean.goodnight', 'on') }}" - then: - - service: notify.signal_frigate - data: - message: >- - A {{trigger.payload_json["after"]["label"]}} was detected. + Stream: https://secret/api/camera_proxy_stream/camera.{{trigger.payload_json['after']['camera'].lower()}}?token={{state_attr( 'camera.' ~ trigger.payload_json['after']['camera'].lower(), 'access_token')}} + data: + urls: + - http://localhost:8123/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/snapshot.jpg?bbox=1×tamp=1&quality=100 + + # if not home or sleeping time and person detection anywhere then notify + - if: "{{ is_state('input_boolean.security_status', 'on') or is_state('input_boolean.goodnight', 'on') }}" + then: + - service: notify.signal_frigate + data: + message: >- + A {{trigger.payload_json["after"]["label"]}} was detected. - Clip: https://secret/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/clip.mp4 + Clip: https://secret/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/clip.mp4 - Stream: https://secret/api/camera_proxy_stream/camera.{{trigger.payload_json['after']['camera'].lower()}}?token={{state_attr( 'camera.' ~ trigger.payload_json['after']['camera'].lower(), 'access_token')}} - data: - urls: - - http://localhost:8123/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/snapshot.jpg?bbox=1×tamp=1&quality=100 + Stream: https://secret/api/camera_proxy_stream/camera.{{trigger.payload_json['after']['camera'].lower()}}?token={{state_attr( 'camera.' ~ trigger.payload_json['after']['camera'].lower(), 'access_token')}} + data: + urls: + - http://localhost:8123/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/snapshot.jpg?bbox=1×tamp=1&quality=100 - alias: Frigate Notification USPS id: "frigate_notification_usps" @@ -85,7 +85,7 @@ automation: # No need for container to run after detection made, appdaemon will turn on in the morning # - service: switch.turn_off # entity_id: switch.docker_codeproject - - delay: "00:01:00" + - delay: "00:02:00" - alias: Doorbell Ring id: "frigate_doorbell_ring" @@ -105,11 +105,15 @@ automation: message: >- Doorbell ring! - Talk Live (you'll have to unmute audio, mic always live!): https://frigate.secret/live/webrtc/webrtc.html?src=front_door_twoway data: attachments: - /tmp/doorbell.jpg + - if: "{{ is_state('binary_sensor.weasel_active', 'on') }}" + then: + - service: shell_command.weasel_shortcut + data: + shortcut: open-front-door-cam-weasel - service: siren.toggle entity_id: siren.garage_chime_siren @@ -172,7 +176,7 @@ automation: service_data: entity_id: lock.front_door action: - - if: "{{ trigger.id == 'front_door' }}" + - if: "{{ trigger.id == 'front_door' and is_state('group.trackers', 'home') }}" then: - service: timer.start data: @@ -220,9 +224,6 @@ input_datetime: shell_command: frigate_clips_drive: /config/scripts/frigate_clips_drive.sh {{ clip_id }} -# Use media player below instead -# # "filename" must be present in frigate's /config directory -# front_door_play_audio_file: curl -X POST "http://localhost:5000/live/webrtc/api/streams?dst=front_door_twoway&src=ffmpeg%3A%2Fconfig%2F{{ filename }}%23audio%3Dpcma%23input%3Dfile" timer: frigate_notification_snooze: @@ -235,6 +236,7 @@ media_player: stream: front_door_twoway audio: pcma +# Eg: # - service: media_player.play_media # target: # entity_id: media_player.doorbell @@ -245,10 +247,17 @@ media_player: script: doorbell_not_interested: sequence: - - service: tts.speak + # - service: tts.speak + # target: + # entity_id: tts.google_en_com + # data: + # cache: false + # media_player_entity_id: media_player.doorbell + # message: "Hello. We are not interested. We hope you have a nice day!" + - service: media_player.play_media target: - entity_id: tts.google_en_com + entity_id: media_player.doorbell data: - cache: false - media_player_entity_id: media_player.doorbell - message: "Hello. We Are not interested. Have a nice day!" + media_content_id: media-source://tts/microsoft?message=Hello.+We+are+not+interested.+We+hope+you+have+a+nice+day! + media_content_type: provider + announce: True diff --git a/scripts/frigate_clips_drive.sh b/scripts/frigate_clips_drive.sh index cbb0fb29..ff79dfc3 100755 --- a/scripts/frigate_clips_drive.sh +++ b/scripts/frigate_clips_drive.sh @@ -5,5 +5,6 @@ clip_id=$1 cd /frigate wget -O /frigate/`date +%m_%d_%Y_%H_%M_%S_1690389398.964135-kk1s6p.mp4` http://localhost:5000/api/events/$clip_id/clip.mp4 -# Remove all but latest 60 clips -rm `ls -t /frigate | awk 'NR>60'` &> /dev/null +# Remove all but latest 90 clips +#rm `ls -tr /frigate | awk 'NR>90'` &> /dev/null +rm `ls -t /frigate | awk 'NR>90'` &> /dev/null diff --git a/shell_command.yaml b/shell_command.yaml index 165e8052..bdb8d1b2 100644 --- a/shell_command.yaml +++ b/shell_command.yaml @@ -24,8 +24,6 @@ turn_on_mirroring: ssh weasel '/usr/bin/automator /Users/aneisch/Library/Service turn_off_mirroring: ssh weasel '/usr/bin/automator /Users/aneisch/Library/Services/Mirror\ Off.workflow' -focus_in_a_meeting_off: ssh weasel 'shortcuts run "focus-in-a-meeting-off"' - -focus_in_a_meeting_on: ssh weasel 'shortcuts run "focus-in-a-meeting-on"' +weasel_shortcut: ssh weasel 'shortcuts run "{{ shortcut }}"' sync_cloudflare_records: ssh nuc '/opt/homeassistant/scripts/nginx_proxy_manager_sync.py' diff --git a/switches.yaml b/switches.yaml index e84ccb27..e041a761 100644 --- a/switches.yaml +++ b/switches.yaml @@ -52,9 +52,13 @@ friendly_name: Mac Focus Mode value_template: "{{ is_state('binary_sensor.weasel_focus', 'on') }}" turn_on: - service: shell_command.focus_in_a_meeting_on + service: shell_command.weasel_shortcut + data: + shortcut: focus-in-a-meeting-on turn_off: - service: shell_command.focus_in_a_meeting_off + service: shell_command.weasel_shortcut + data: + shortcut: focus-in-a-meeting-off icon_template: > {% if is_state('binary_sensor.weasel_focus', 'off') %} mdi:bell diff --git a/ui-lovelace/.cards/thermostat.yaml b/ui-lovelace/.cards/thermostat.yaml index fd41ebc7..c6aca754 100644 --- a/ui-lovelace/.cards/thermostat.yaml +++ b/ui-lovelace/.cards/thermostat.yaml @@ -16,6 +16,8 @@ sensors: name: Humidity - entity: sensor.thermostat_temperature name: Thermostat + - entity: sensor.front_door_temperature + name: Entryway - entity: sensor.netatmo_home_indoor_temperature name: Living Room - entity: sensor.kitchen_temperature diff --git a/ui-lovelace/01-home.yaml b/ui-lovelace/01-home.yaml index 1d63daef..3e9c4a67 100644 --- a/ui-lovelace/01-home.yaml +++ b/ui-lovelace/01-home.yaml @@ -37,6 +37,13 @@ cards: --paper-item-icon-color: red {% endif %} } + - entity: lock.back_door + style: | + :host { + {% if states('lock.back_door') == 'unlocked' %} + --paper-item-icon-color: red + {% endif %} + } - entity: cover.garage_door style: | :host { diff --git a/ui-lovelace/05-server.yaml b/ui-lovelace/05-server.yaml index 32a83c3f..2ad114b2 100644 --- a/ui-lovelace/05-server.yaml +++ b/ui-lovelace/05-server.yaml @@ -170,8 +170,8 @@ cards: - switch.docker_plex - switch.docker_portainer - switch.docker_sqliteweb - - switch.docker_github_runner_1 - - switch.docker_github_runner_2 + # - switch.docker_github_runner_1 + # - switch.docker_github_runner_2 - switch.docker_vrs - switch.docker_codeproject # - switch.docker_adguard @@ -214,4 +214,4 @@ cards: name: Update Now icon: "mdi:arrow-up-thick" - #- !include .cards/fingerprint.yaml \ No newline at end of file + #- !include .cards/fingerprint.yaml diff --git a/ui-lovelace/11-irrigation.yaml b/ui-lovelace/11-irrigation.yaml index c7cc0f38..43a7498a 100644 --- a/ui-lovelace/11-irrigation.yaml +++ b/ui-lovelace/11-irrigation.yaml @@ -101,7 +101,6 @@ cards: {# Print Outputs #} **{{ state_attr(sprinkler_zone, "friendly_name") | regex_replace(find='Irrigation ', replace='', ignorecase=False) }}**: Last started: {{ 'less than 1 minute' if time < 60 else days + hours + minutes }} ago. - {{ time_stop }} Last stopped: {% if time_stop < 86400 %}{% elif 172800 > time_stop > 86400 %}{% elif time_stop > 172800 %}{% endif %}{{ 'less than 1 minute' if time_stop < 60 else days_stop + hours_stop + minutes_stop }} ago. Ran for {{ 'less than 1 minute' if time_run < 60 else days_run + hours_run + minutes_run }}. {% endif %}