|
[ |
|
{ |
|
"id": "57cd083.640ddf8", |
|
"type": "group", |
|
"z": "9c2fe368.3156b", |
|
"style": { |
|
"stroke": "#2e333a", |
|
"stroke-opacity": "1", |
|
"fill": "#2e333a", |
|
"fill-opacity": "0.75", |
|
"label": true, |
|
"label-position": "nw", |
|
"color": "#a4a4a4" |
|
}, |
|
"nodes": [ |
|
"e30ec927.c9cf98", |
|
"7f684585.8f9bcc", |
|
"df0a0486.fa8208", |
|
"a1d34834.2a3008", |
|
"eb03bc70.17297", |
|
"673dcdaf.9cee44", |
|
"b6d33022.6ade6", |
|
"d8c95920.05e568", |
|
"fd170b20.6bfb58", |
|
"c862faec.6cfee8", |
|
"a1a1818f.84d5", |
|
"9afe842a.46e888", |
|
"f8f7e5de.4c4f68", |
|
"1582535e.7b192d", |
|
"bde473a.2a0c99", |
|
"56638388.98f5fc", |
|
"4c487b02.0aa994", |
|
"5bf167a2.0ce568", |
|
"4238a7f7.639a78" |
|
], |
|
"x": 34, |
|
"y": 159, |
|
"w": 872, |
|
"h": 322 |
|
}, |
|
{ |
|
"id": "2ebb81e.39d4b7e", |
|
"type": "subflow", |
|
"name": "Todoist Token", |
|
"info": "", |
|
"category": "", |
|
"in": [ |
|
{ |
|
"x": 40, |
|
"y": 80, |
|
"wires": [ |
|
{ |
|
"id": "a7be04bc.9983b8" |
|
} |
|
] |
|
} |
|
], |
|
"out": [ |
|
{ |
|
"x": 460, |
|
"y": 80, |
|
"wires": [ |
|
{ |
|
"id": "6b560c2f.af0674", |
|
"port": 0 |
|
} |
|
] |
|
} |
|
], |
|
"env": [], |
|
"color": "#DDAA99" |
|
}, |
|
{ |
|
"id": "6b560c2f.af0674", |
|
"type": "credentials", |
|
"z": "2ebb81e.39d4b7e", |
|
"name": "", |
|
"props": [ |
|
{ |
|
"value": "headers['Authorization']", |
|
"type": "msg" |
|
} |
|
], |
|
"x": 330, |
|
"y": 80, |
|
"wires": [ |
|
[] |
|
] |
|
}, |
|
{ |
|
"id": "a7be04bc.9983b8", |
|
"type": "function", |
|
"z": "2ebb81e.39d4b7e", |
|
"name": "reset headers", |
|
"func": "msg.headers = {}\nreturn msg;", |
|
"outputs": 1, |
|
"noerr": 0, |
|
"initialize": "", |
|
"finalize": "", |
|
"x": 160, |
|
"y": 80, |
|
"wires": [ |
|
[ |
|
"6b560c2f.af0674" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "201f0843.1ef468", |
|
"type": "comment", |
|
"z": "2ebb81e.39d4b7e", |
|
"name": "Enter Todoist API key into the Credentials node in the format \"Bearer 69420xxxxxx…\"", |
|
"info": "", |
|
"x": 370, |
|
"y": 40, |
|
"wires": [] |
|
}, |
|
{ |
|
"id": "ce62daf1.32ac38", |
|
"type": "subflow", |
|
"name": "Get Or Create Todoist Label", |
|
"info": "", |
|
"category": "", |
|
"in": [ |
|
{ |
|
"x": 40, |
|
"y": 80, |
|
"wires": [ |
|
{ |
|
"id": "b05ef05d.e89d7" |
|
} |
|
] |
|
} |
|
], |
|
"out": [ |
|
{ |
|
"x": 900, |
|
"y": 120, |
|
"wires": [ |
|
{ |
|
"id": "45ae6120.eb748", |
|
"port": 0 |
|
}, |
|
{ |
|
"id": "4f06bd54.657744", |
|
"port": 0 |
|
} |
|
] |
|
} |
|
], |
|
"env": [], |
|
"color": "#DDAA99" |
|
}, |
|
{ |
|
"id": "4f06bd54.657744", |
|
"type": "http request", |
|
"z": "ce62daf1.32ac38", |
|
"name": "Create Label", |
|
"method": "POST", |
|
"ret": "obj", |
|
"paytoqs": "query", |
|
"url": "https://api.todoist.com/rest/v1/labels", |
|
"tls": "", |
|
"persist": false, |
|
"proxy": "", |
|
"authType": "", |
|
"x": 730, |
|
"y": 160, |
|
"wires": [ |
|
[] |
|
] |
|
}, |
|
{ |
|
"id": "53123516.0368dc", |
|
"type": "function", |
|
"z": "ce62daf1.32ac38", |
|
"name": "POST body", |
|
"func": "msg.payload = {\n \"name\": msg.label_name\n}\nreturn msg;", |
|
"outputs": 1, |
|
"noerr": 0, |
|
"initialize": "", |
|
"finalize": "", |
|
"x": 570, |
|
"y": 160, |
|
"wires": [ |
|
[ |
|
"4f06bd54.657744" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "d889905d.5939", |
|
"type": "http request", |
|
"z": "ce62daf1.32ac38", |
|
"name": "Get Todoist Labels", |
|
"method": "GET", |
|
"ret": "obj", |
|
"paytoqs": "ignore", |
|
"url": "https://api.todoist.com/rest/v1/labels", |
|
"tls": "", |
|
"persist": false, |
|
"proxy": "", |
|
"authType": "", |
|
"x": 370, |
|
"y": 80, |
|
"wires": [ |
|
[ |
|
"d3f0ad2.1b49c5" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "d3f0ad2.1b49c5", |
|
"type": "function", |
|
"z": "ce62daf1.32ac38", |
|
"name": "Find label for label_name", |
|
"func": "msg.label_id = -1;\nmsg.payload.forEach((label) => {\n if(label.name == msg.label_name) {\n msg.payload = label\n }\n});\nreturn msg;", |
|
"outputs": 1, |
|
"noerr": 0, |
|
"initialize": "", |
|
"finalize": "", |
|
"x": 590, |
|
"y": 80, |
|
"wires": [ |
|
[ |
|
"45ae6120.eb748" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "45ae6120.eb748", |
|
"type": "switch", |
|
"z": "ce62daf1.32ac38", |
|
"name": "Does label exist?", |
|
"property": "label_id", |
|
"propertyType": "msg", |
|
"rules": [ |
|
{ |
|
"t": "neq", |
|
"v": "-1", |
|
"vt": "num" |
|
}, |
|
{ |
|
"t": "eq", |
|
"v": "-1", |
|
"vt": "num" |
|
} |
|
], |
|
"checkall": "true", |
|
"repair": false, |
|
"outputs": 2, |
|
"x": 190, |
|
"y": 140, |
|
"wires": [ |
|
[], |
|
[ |
|
"3d5b82ab.8e1fde" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "7eb15e65.37c24", |
|
"type": "comment", |
|
"z": "ce62daf1.32ac38", |
|
"name": "Get or create Todoist label named label_name", |
|
"info": "", |
|
"x": 190, |
|
"y": 40, |
|
"wires": [] |
|
}, |
|
{ |
|
"id": "b05ef05d.e89d7", |
|
"type": "subflow:2ebb81e.39d4b7e", |
|
"z": "ce62daf1.32ac38", |
|
"name": "", |
|
"env": [], |
|
"x": 180, |
|
"y": 80, |
|
"wires": [ |
|
[ |
|
"d889905d.5939" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "3d5b82ab.8e1fde", |
|
"type": "subflow:2ebb81e.39d4b7e", |
|
"z": "ce62daf1.32ac38", |
|
"name": "", |
|
"env": [], |
|
"x": 400, |
|
"y": 160, |
|
"wires": [ |
|
[ |
|
"53123516.0368dc" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "e30ec927.c9cf98", |
|
"type": "comment", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "Create Todoist task if sensor battery is low", |
|
"info": "", |
|
"x": 220, |
|
"y": 200, |
|
"wires": [] |
|
}, |
|
{ |
|
"id": "7f684585.8f9bcc", |
|
"type": "server-state-changed", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "Sensor Battery Levels", |
|
"server": "c822cecb.8a7ba", |
|
"version": 1, |
|
"exposeToHomeAssistant": false, |
|
"haConfig": [ |
|
{ |
|
"property": "name", |
|
"value": "" |
|
}, |
|
{ |
|
"property": "icon", |
|
"value": "" |
|
} |
|
], |
|
"entityidfilter": "sensor.bedroom_motion_sensor_battery,sensor.bedroom_window_1_power,sensor.bedroom_window_2_power,sensor.front_door_power,sensor.goodnight_button_battery,sensor.kitchen_motion_sensor_power,sensor.kitchen_window_power,sensor.living_room_motion_sensor_battery,sensor.patio_door_power,sensor.storage_room_battery,sensor.third_reality_inc_3rss008z_power", |
|
"entityidfiltertype": "substring", |
|
"outputinitially": true, |
|
"state_type": "num", |
|
"haltifstate": "", |
|
"halt_if_type": "str", |
|
"halt_if_compare": "is", |
|
"outputs": 1, |
|
"output_only_on_state_change": true, |
|
"for": 0, |
|
"forType": "num", |
|
"forUnits": "minutes", |
|
"ignorePrevStateNull": false, |
|
"ignorePrevStateUnknown": false, |
|
"ignorePrevStateUnavailable": false, |
|
"ignoreCurrentStateUnknown": false, |
|
"ignoreCurrentStateUnavailable": false, |
|
"x": 180, |
|
"y": 240, |
|
"wires": [ |
|
[ |
|
"df0a0486.fa8208" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "df0a0486.fa8208", |
|
"type": "switch", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "state < 25", |
|
"property": "payload", |
|
"propertyType": "msg", |
|
"rules": [ |
|
{ |
|
"t": "lt", |
|
"v": "25", |
|
"vt": "str" |
|
} |
|
], |
|
"checkall": "true", |
|
"repair": false, |
|
"outputs": 1, |
|
"x": 360, |
|
"y": 240, |
|
"wires": [ |
|
[ |
|
"a1a1818f.84d5" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "a1d34834.2a3008", |
|
"type": "http request", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "Active Todoist Tasks", |
|
"method": "GET", |
|
"ret": "obj", |
|
"paytoqs": "query", |
|
"url": "https://api.todoist.com/rest/v1/tasks", |
|
"tls": "", |
|
"persist": false, |
|
"proxy": "", |
|
"authType": "", |
|
"x": 620, |
|
"y": 400, |
|
"wires": [ |
|
[ |
|
"673dcdaf.9cee44" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "eb03bc70.17297", |
|
"type": "function", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "Filter Query", |
|
"func": "msg.payload = {\"filter\":\"@HomeAssistant & @battery & @\" + msg.topic}\nreturn msg;", |
|
"outputs": 1, |
|
"noerr": 0, |
|
"initialize": "", |
|
"finalize": "", |
|
"x": 430, |
|
"y": 400, |
|
"wires": [ |
|
[ |
|
"a1d34834.2a3008" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "673dcdaf.9cee44", |
|
"type": "switch", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "Empty List", |
|
"property": "payload.length", |
|
"propertyType": "msg", |
|
"rules": [ |
|
{ |
|
"t": "eq", |
|
"v": "0", |
|
"vt": "num" |
|
} |
|
], |
|
"checkall": "true", |
|
"repair": false, |
|
"outputs": 1, |
|
"x": 810, |
|
"y": 400, |
|
"wires": [ |
|
[ |
|
"4238a7f7.639a78" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "b6d33022.6ade6", |
|
"type": "http request", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "Create Task", |
|
"method": "POST", |
|
"ret": "obj", |
|
"paytoqs": "query", |
|
"url": "https://api.todoist.com/rest/v1/tasks", |
|
"tls": "", |
|
"persist": false, |
|
"proxy": "", |
|
"authType": "", |
|
"x": 590, |
|
"y": 440, |
|
"wires": [ |
|
[] |
|
] |
|
}, |
|
{ |
|
"id": "d8c95920.05e568", |
|
"type": "function", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "Build Task", |
|
"func": "var friendly_name = msg.data.new_state.attributes.friendly_name.toLowerCase();\nfriendly_name = friendly_name.replace(\" power\", \"\");\nfriendly_name = friendly_name.replace(\" battery\", \"\");\nfriendly_name += \" sensor\";\nmsg.payload = {\n \"content\": \"Replace battery in \" + friendly_name,\n \"label_ids\": [msg.ha_label_id, msg.batt_label_id, msg.label_id]\n}\nreturn msg;", |
|
"outputs": 1, |
|
"noerr": 0, |
|
"initialize": "", |
|
"finalize": "", |
|
"x": 430, |
|
"y": 440, |
|
"wires": [ |
|
[ |
|
"b6d33022.6ade6" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "fd170b20.6bfb58", |
|
"type": "change", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "Set label_id", |
|
"rules": [ |
|
{ |
|
"t": "set", |
|
"p": "label_id", |
|
"pt": "msg", |
|
"to": "payload.id", |
|
"tot": "msg" |
|
} |
|
], |
|
"action": "", |
|
"property": "", |
|
"from": "", |
|
"to": "", |
|
"reg": false, |
|
"x": 690, |
|
"y": 360, |
|
"wires": [ |
|
[ |
|
"5bf167a2.0ce568" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "c862faec.6cfee8", |
|
"type": "subflow:ce62daf1.32ac38", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "", |
|
"env": [], |
|
"x": 480, |
|
"y": 280, |
|
"wires": [ |
|
[ |
|
"bde473a.2a0c99" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "a1a1818f.84d5", |
|
"type": "change", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "HomeAssistant label", |
|
"rules": [ |
|
{ |
|
"t": "set", |
|
"p": "label_name", |
|
"pt": "msg", |
|
"to": "HomeAssistant", |
|
"tot": "str" |
|
} |
|
], |
|
"action": "", |
|
"property": "", |
|
"from": "", |
|
"to": "", |
|
"reg": false, |
|
"x": 240, |
|
"y": 280, |
|
"wires": [ |
|
[ |
|
"c862faec.6cfee8" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "9afe842a.46e888", |
|
"type": "subflow:ce62daf1.32ac38", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "", |
|
"x": 480, |
|
"y": 320, |
|
"wires": [ |
|
[ |
|
"56638388.98f5fc" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "f8f7e5de.4c4f68", |
|
"type": "change", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "battery label", |
|
"rules": [ |
|
{ |
|
"t": "set", |
|
"p": "label_name", |
|
"pt": "msg", |
|
"to": "battery", |
|
"tot": "str" |
|
} |
|
], |
|
"action": "", |
|
"property": "", |
|
"from": "", |
|
"to": "", |
|
"reg": false, |
|
"x": 270, |
|
"y": 320, |
|
"wires": [ |
|
[ |
|
"9afe842a.46e888" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "1582535e.7b192d", |
|
"type": "change", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "device label", |
|
"rules": [ |
|
{ |
|
"t": "set", |
|
"p": "label_name", |
|
"pt": "msg", |
|
"to": "topic", |
|
"tot": "msg" |
|
} |
|
], |
|
"action": "", |
|
"property": "", |
|
"from": "", |
|
"to": "", |
|
"reg": false, |
|
"x": 270, |
|
"y": 360, |
|
"wires": [ |
|
[ |
|
"4c487b02.0aa994" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "bde473a.2a0c99", |
|
"type": "change", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "set ha_label_id", |
|
"rules": [ |
|
{ |
|
"t": "set", |
|
"p": "ha_label_id", |
|
"pt": "msg", |
|
"to": "payload.id", |
|
"tot": "msg" |
|
} |
|
], |
|
"action": "", |
|
"property": "", |
|
"from": "", |
|
"to": "", |
|
"reg": false, |
|
"x": 700, |
|
"y": 280, |
|
"wires": [ |
|
[ |
|
"f8f7e5de.4c4f68" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "56638388.98f5fc", |
|
"type": "change", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "set batt_label_id", |
|
"rules": [ |
|
{ |
|
"t": "set", |
|
"p": "batt_label_id", |
|
"pt": "msg", |
|
"to": "payload.id", |
|
"tot": "msg" |
|
} |
|
], |
|
"action": "", |
|
"property": "", |
|
"from": "", |
|
"to": "", |
|
"reg": false, |
|
"x": 700, |
|
"y": 320, |
|
"wires": [ |
|
[ |
|
"1582535e.7b192d" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "4c487b02.0aa994", |
|
"type": "subflow:ce62daf1.32ac38", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "", |
|
"x": 480, |
|
"y": 360, |
|
"wires": [ |
|
[ |
|
"fd170b20.6bfb58" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "5bf167a2.0ce568", |
|
"type": "subflow:2ebb81e.39d4b7e", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "", |
|
"env": [], |
|
"x": 260, |
|
"y": 400, |
|
"wires": [ |
|
[ |
|
"eb03bc70.17297" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "4238a7f7.639a78", |
|
"type": "subflow:2ebb81e.39d4b7e", |
|
"z": "9c2fe368.3156b", |
|
"g": "57cd083.640ddf8", |
|
"name": "", |
|
"env": [], |
|
"x": 260, |
|
"y": 440, |
|
"wires": [ |
|
[ |
|
"d8c95920.05e568" |
|
] |
|
] |
|
}, |
|
{ |
|
"id": "c822cecb.8a7ba", |
|
"type": "server", |
|
"name": "Home Assistant", |
|
"addon": true |
|
} |
|
] |