Advertisement
boelle11

Untitled

Nov 30th, 2021
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.18 KB | None | 0 0
  1. ###################################
  2. # iRobot Vacuum Package
  3. ###################################
  4.  
  5. ###################################
  6. # Sensor
  7. ###################################
  8.  
  9. sensor:
  10. # Roomba via Rest980 Docker Image
  11. - platform: rest
  12. name: rest980
  13. json_attributes:
  14. - batPct
  15. - bin
  16. - cleanMissionStatus
  17. - dock
  18. - pose
  19. - signal
  20. - bbmssn
  21. - bbrun
  22. - name
  23. - pmaps
  24. - vacHigh
  25. - openOnly
  26. - twoPass
  27. - noAutoPasses
  28. - softwareVer
  29. resource: !secret vacuum_state
  30. value_template: 'OK'
  31. scan_interval: 10
  32. - platform: template
  33. sensors:
  34. vacuum:
  35. friendly_name_template: >-
  36. {{ state_attr('sensor.rest980', 'name') }}
  37. value_template: >-
  38. {% if state_attr('sensor.rest980', 'cleanMissionStatus')['cycle'] == 'none' and state_attr('sensor.rest980', 'cleanMissionStatus')['notReady'] == 39 %}
  39. Pending
  40. {% elif state_attr('sensor.rest980', 'cleanMissionStatus')['notReady'] > 0 %}
  41. Not Ready
  42. {% else %}
  43. {% set mapper = {
  44. 'clean' : 'Clean',
  45. 'quick' : 'Clean',
  46. 'spot' : 'Spot',
  47. 'evac' : 'Empty',
  48. 'dock' : 'Dock',
  49. 'train' : 'Train',
  50. 'none' : 'Ready' } %}
  51. {% set state = state_attr('sensor.rest980', 'cleanMissionStatus')['cycle'] %}
  52. {{ mapper[state] if state in mapper else state }}
  53. {% endif %}
  54. icon_template: mdi:robot-vacuum
  55. attribute_templates:
  56. notready_msg: >-
  57. {% set mapper = {
  58. 0 : 'n-a',
  59. 2 : 'Uneven Ground',
  60. 15 : 'Low Battery',
  61. 39 : 'Pending',
  62. 48 : 'Path Blocked' } %}
  63. {% set state = state_attr('sensor.rest980', 'cleanMissionStatus')['notReady'] %}
  64. {{ mapper[state] if state in mapper else state }}
  65. error_msg: >-
  66. {% set mapper = {
  67. 0 : 'n-a',
  68. 15 : 'Reboot Required',
  69. 18 : 'Docking Issue'} %}
  70. {% set state = state_attr('sensor.rest980', 'cleanMissionStatus')['error'] %}
  71. {{ mapper[state] if state in mapper else state }}
  72. battery: >-
  73. {{ state_attr('sensor.rest980', 'batPct') }} %
  74. software_ver: >-
  75. {% if state_attr('sensor.rest980', 'softwareVer') is defined %}
  76. {% set version = state_attr('sensor.rest980', 'softwareVer') %}
  77. {{ version.split('+')[1] }}
  78. {% else %}
  79. n-a
  80. {% endif %}
  81. phase: >-
  82. {% if state_attr('sensor.rest980', 'cleanMissionStatus')['phase'] == 'charge' and state_attr('sensor.rest980', 'batPct') == 100 %}
  83. Idle
  84. {% elif state_attr('sensor.rest980', 'cleanMissionStatus')['cycle'] == 'none' and state_attr('sensor.rest980', 'cleanMissionStatus')['phase'] == 'stop' %}
  85. Stopped
  86. {% else %}
  87. {% set mapper = {
  88. 'charge' : 'Charge',
  89. 'run' : 'Run',
  90. 'evac' : 'Empty',
  91. 'stop' : 'Paused',
  92. 'stuck' : 'Stuck',
  93. 'hmUsrDock' : 'Sent Home',
  94. 'hmMidMsn' : 'Mid Dock',
  95. 'hmPostMsn' : 'Final Dock' } %}
  96. {% set state = state_attr('sensor.rest980', 'cleanMissionStatus')['phase'] %}
  97. {{ mapper[state] if state in mapper else state }}
  98. {% endif %}
  99. bin: >-
  100. {% set mapper = {
  101. true : 'Full',
  102. false : 'Not Full' } %}
  103. {% set state = state_attr('sensor.rest980', 'bin')['full'] %}
  104. {{ mapper[state] if state in mapper else state }}
  105. bin_present: >-
  106. {% set mapper = {
  107. true : 'Yes',
  108. false : 'No' } %}
  109. {% set state = state_attr('sensor.rest980', 'bin')['present'] %}
  110. {{ mapper[state] if state in mapper else state }}
  111. clean_base: >-
  112. {% if state_attr('sensor.rest980', 'dock')['state'] is defined %}
  113. {% set mapper = {
  114. 300 : 'Ready',
  115. 301 : 'Ready',
  116. 302 : 'Empty',
  117. 303 : 'Empty',
  118. 350 : 'Bag Missing',
  119. 351 : 'Clogged',
  120. 352 : 'Sealing Problem',
  121. 353 : 'Bag Full',
  122. 360 : 'Comms Problem' } %}
  123. {% set state = state_attr('sensor.rest980', 'dock')['state'] %}
  124. {{ mapper[state] if state in mapper else state }}
  125. {% else %}
  126. n-a
  127. {% endif %}
  128. location: >-
  129. {% if state_attr('sensor.rest980', 'pose')['theta'] is defined %}
  130. ({{ state_attr('sensor.rest980', 'pose')['point']['x'] }}, {{ state_attr('sensor.rest980', 'pose')['point']['y'] }}, {{ state_attr('sensor.rest980', 'pose')['theta'] }})
  131. {% else %}
  132. n-a
  133. {% endif %}
  134. rssi: >-
  135. {% if state_attr('sensor.rest980', 'signal')['rssi'] is defined %}
  136. {{ state_attr('sensor.rest980', 'signal')['rssi'] }}
  137. {% else %}
  138. n-a
  139. {% endif %}
  140. total_area: >-
  141. {% if state_attr('sensor.rest980', 'bbrun')['sqft'] is defined %}
  142. {{ (state_attr('sensor.rest980', 'bbrun')['sqft'] / 10.764 * 100)| round() }}m²
  143. {% else %}
  144. n-a
  145. {% endif %}
  146. # {{ (state_attr('sensor.rest980', 'bbrun')['sqft'] }}ft²
  147. total_time: >-
  148. {% if state_attr('sensor.rest980', 'bbrun')['hr'] is defined %}
  149. {{ state_attr('sensor.rest980', 'bbrun')['hr'] }}h {{ state_attr('sensor.rest980', 'bbrun')['min'] }}m
  150. {% else %}
  151. n-a
  152. {% endif %}
  153. total_jobs: >-
  154. {% if state_attr('sensor.rest980', 'bbmssn')['nMssn'] is defined %}
  155. {{ state_attr('sensor.rest980', 'bbmssn')['nMssn'] }}
  156. {% else %}
  157. n-a
  158. {% endif %}
  159. dirt_events: >-
  160. {% if state_attr('sensor.rest980', 'bbrun')['nScrubs'] is defined %}
  161. {{ state_attr('sensor.rest980', 'bbrun')['nScrubs'] }}
  162. {% else %}
  163. n-a
  164. {% endif %}
  165. # evac_events I7+/S9+ Models (Clean Base)
  166. evac_events: >-
  167. {% if state_attr('sensor.rest980', 'bbrun')['nEvacs'] is defined %}
  168. {{ state_attr('sensor.rest980', 'bbrun')['nEvacs'] }}
  169. {% else %}
  170. n-a
  171. {% endif %}
  172. job_initiator: >-
  173. {% set mapper = {
  174. 'schedule' : 'Scheduler',
  175. 'rmtApp' : 'App',
  176. 'manual' : 'Robot',
  177. 'localApp' : 'HA' } %}
  178. {% set state = state_attr('sensor.rest980', 'cleanMissionStatus')['initiator'] %}
  179. {{ mapper[state] if state in mapper else state }}
  180. job_time: >-
  181. {% if state_attr('sensor.rest980', 'cleanMissionStatus')['mssnStrtTm'] is defined %}
  182. {% if state_attr('sensor.rest980', 'cleanMissionStatus')['mssnStrtTm'] != 0 %}
  183. {% set time = state_attr('sensor.rest980', 'cleanMissionStatus')['mssnStrtTm'] | timestamp_local %}
  184. {% set elapsed = ((as_timestamp(now()) - as_timestamp(time)) / 60) | round(0) %}
  185. {% if elapsed > 60 %}
  186. {{ elapsed // 60 }}h {{ '{:0>2d}'.format(elapsed%60) }}m
  187. {% else %}
  188. {{elapsed}}m
  189. {% endif %}
  190. {% else %}
  191. n-a
  192. {% endif %}
  193. {% else %}
  194. n-a
  195. {% endif %}
  196. job_recharge: >-
  197. {% if state_attr('sensor.rest980', 'cleanMissionStatus')['rechrgTm'] is defined %}
  198. {% if state_attr('sensor.rest980', 'cleanMissionStatus')['rechrgTm'] != 0 %}
  199. {% set time = state_attr('sensor.rest980', 'cleanMissionStatus')['rechrgTm'] | timestamp_local %}
  200. {% set resume = ((as_timestamp(time) - as_timestamp(now())) / 60) | round(0) %}
  201. {% if resume > 60 %}
  202. {{ resume // 60 }}h {{ '{:0>2d}'.format(resume%60) }}m
  203. {% else %}
  204. {{resume}}m
  205. {% endif %}
  206. {% else %}
  207. n-a
  208. {% endif %}
  209. {% else %}
  210. n-a
  211. {% endif %}
  212. job_expires: >-
  213. {% if state_attr('sensor.rest980', 'cleanMissionStatus')['expireTm'] is defined %}
  214. {% if state_attr('sensor.rest980', 'cleanMissionStatus')['expireTm'] != 0 %}
  215. {% set time = state_attr('sensor.rest980', 'cleanMissionStatus')['expireTm'] | timestamp_local %}
  216. {% set resume = ((as_timestamp(time) - as_timestamp(now())) / 60) | round(0) %}
  217. {% if resume > 60 %}
  218. {{ resume // 60 }}h {{ '{:0>2d}'.format(resume%60) }}m
  219. {% else %}
  220. {{resume}}m
  221. {% endif %}
  222. {% else %}
  223. n-a
  224. {% endif %}
  225. {% else %}
  226. n-a
  227. {% endif %}
  228. clean_mode: >-
  229. {% if state_attr('sensor.rest980', 'noAutoPasses') is defined and state_attr('sensor.rest980', 'twoPass') is defined %}
  230. {% if state_attr('sensor.rest980', 'noAutoPasses') == true and state_attr('sensor.rest980', 'twoPass') == false %}
  231. One
  232. {% elif state_attr('sensor.rest980', 'noAutoPasses') == true and state_attr('sensor.rest980', 'twoPass') == true %}
  233. Two
  234. {% else %}
  235. Auto
  236. {% endif %}
  237. {% else %}
  238. n-a
  239. {% endif %}
  240. carpet_boost: >-
  241. {% if state_attr('sensor.rest980', 'vacHigh') is defined %}
  242. {% if state_attr('sensor.rest980', 'vacHigh') == false and state_attr('sensor.rest980', 'carpetBoost') == false %}
  243. Eco
  244. {% elif state_attr('sensor.rest980', 'vacHigh') == true and state_attr('sensor.rest980', 'carpetBoost') == false %}
  245. Performance
  246. {% else %}
  247. Auto
  248. {% endif %}
  249. {% else %}
  250. n-a
  251. {% endif %}
  252. clean_edges: >-
  253. {% if state_attr('sensor.rest980', 'openOnly') is defined %}
  254. {% if state_attr('sensor.rest980', 'openOnly') == true %}
  255. False
  256. {% else %}
  257. True
  258. {% endif %}
  259. {% else %}
  260. n-a
  261. {% endif %}
  262. maint_due: >-
  263. {% if is_state('input_boolean.vacuum_maint_due', 'on') %}
  264. True
  265. {% else %}
  266. False
  267. {% endif %}
  268. # pmap0_id I7/S9 Models
  269. pmap0_id: >-
  270. {% if state_attr('sensor.rest980', 'pmaps')[0] is defined %}
  271. {{ state_attr('sensor.rest980', 'pmaps')[0] | regex_findall_index("{'([\w\-]+)': '\w+'}") }}
  272. {% else %}
  273. n-a
  274. {% endif %}
  275. vacuum_location:
  276. friendly_name_template: >-
  277. {{ state_attr('sensor.rest980', 'name') }} Location
  278. value_template: >-
  279. {{ state_attr('sensor.vacuum', 'location') }}
  280. icon_template: mdi:home-map-marker
  281.  
  282. ###################################
  283. # Rest Command
  284. ###################################
  285.  
  286. rest_command:
  287. vacuum_action:
  288. url: >-
  289. {{ states('input_text.vacuum_action') }}{{ command }}
  290. verify_ssl: !secret vacuum_verify_ssl
  291. method: 'get'
  292. timeout: 20
  293. vacuum_clean:
  294. url: >-
  295. {{ states('input_text.vacuum_action') }}cleanRoom
  296. verify_ssl: !secret vacuum_verify_ssl
  297. method: POST
  298. content_type: 'application/json'
  299. payload: '{{ payload }}'
  300.  
  301. ###################################
  302. # Input Boolean
  303. ###################################
  304.  
  305. input_boolean:
  306. vacuum_clean_bedroom:
  307. name: Bedroom
  308. icon: mdi:bed-empty
  309. vacuum_clean_office:
  310. name: Office
  311. icon: mdi:chair-rolling
  312. vacuum_maint_due:
  313. name: Vacuum Maintenance
  314. icon: mdi:wrench
  315. vacuum_schedule_1:
  316. name: Vacuum Schedule 1
  317. icon: mdi:timetable
  318. vacuum_schedule_2:
  319. name: Vacuum Schedule 2
  320. icon: mdi:timetable
  321.  
  322. ###################################
  323. # Input Text
  324. ###################################
  325.  
  326. input_text:
  327. vacuum_action:
  328. name: Vacuum Action URL
  329. initial: !secret vacuum_action
  330. vacuum_map:
  331. name: Vacuum Map URL
  332. initial: !secret vacuum_map
  333. vacuum_log:
  334. name: Vacuum Log Path
  335. initial: !secret vacuum_log
  336. vacuum_dir:
  337. name: Vacuum Dir Path
  338. initial: !secret vacuum_dir
  339. vacuum_rooms:
  340. name: Vacuum Rooms
  341. max: 255
  342.  
  343. vacuum_clean_bedroom:
  344. name: Bedroom
  345. initial: !secret vacuum_bedroom
  346. vacuum_clean_office:
  347. name: Office
  348. initial: !secret vacuum_office
  349.  
  350.  
  351. ###################################
  352. # Group
  353. ###################################
  354.  
  355. group:
  356. vacuum_rooms:
  357. entities:
  358. - input_boolean.vacuum_clean_bedroom
  359. - input_boolean.vacuum_clean_office
  360.  
  361. ###################################
  362. # Automation
  363. ###################################
  364.  
  365. automation:
  366. # Initiate Selective Room Clean
  367. - alias: Vacuum Clean Rooms
  368. trigger:
  369. - platform: event
  370. event_type: initiate_vacuum_clean
  371. condition:
  372. condition: not
  373. conditions:
  374. - condition: state
  375. entity_id: input_text.vacuum_rooms
  376. state: ''
  377. action:
  378. - service: rest_command.vacuum_clean
  379. data_template:
  380. payload: >
  381. {% set rooms = states('input_text.vacuum_rooms') %}
  382. {% if rooms[-1:] == ',' %}
  383. {% set rooms = rooms[:-1] %}
  384. {% endif %}
  385. {% set rooms = rooms.split(",") %}
  386. {
  387. "ordered": 1,
  388. "pmap_id": "{{ state_attr('sensor.vacuum', 'pmap0_id') | string }}",
  389. "regions": [{% for id in rooms %}
  390. {% set room = 'input_text.vacuum_clean_' + id %} {{ states(room) | string }} {%- if not loop.last %},{%- endif %}
  391. {%- endfor %}
  392. ]
  393. }
  394. - service: input_text.set_value
  395. data:
  396. entity_id: input_text.vacuum_rooms
  397. value: ''
  398. - service: input_boolean.turn_off
  399. data:
  400. entity_id: group.vacuum_rooms
  401.  
  402. # Update Vacuum REST Sensor for Location Details
  403. - alias: Vacuum Update Location
  404. initial_state: true
  405. trigger:
  406. - platform: time_pattern
  407. seconds: /2
  408. - platform: event
  409. event_type: call_service
  410. event_data:
  411. domain: rest_command
  412. service: vacuum_clean
  413. condition:
  414. condition: or
  415. conditions:
  416. - condition: template
  417. value_template: "{{ is_state_attr('sensor.vacuum', 'phase', 'Run') }}"
  418. - condition: template
  419. value_template: "{{ is_state_attr('sensor.vacuum', 'phase', 'Sent Home') }}"
  420. - condition: template
  421. value_template: "{{ is_state_attr('sensor.vacuum', 'phase', 'Mid Dock') }}"
  422. - condition: template
  423. value_template: "{{ is_state_attr('sensor.vacuum', 'phase', 'Final Dock') }}"
  424. action:
  425. - service: homeassistant.update_entity
  426. entity_id: sensor.rest980
  427.  
  428. # Log Vacuum Location to File
  429. - alias: Vacuum Log Position
  430. initial_state: true
  431. trigger:
  432. platform: state
  433. entity_id: sensor.vacuum_location
  434. condition:
  435. condition: or
  436. conditions:
  437. - condition: state
  438. entity_id: sensor.vacuum
  439. state: 'Clean'
  440. - condition: state
  441. entity_id: sensor.vacuum
  442. state: 'Train'
  443. action:
  444. - service: notify.vacuumfile
  445. data_template:
  446. message: "{{ states('sensor.vacuum_location') }}"
  447.  
  448. # Initialize Blank Vacuum Log File
  449. - alias: Vacuum Clean Log
  450. initial_state: true
  451. trigger:
  452. - platform: state
  453. entity_id: sensor.vacuum
  454. from: 'Ready'
  455. to: 'Clean'
  456. - platform: state
  457. entity_id: sensor.vacuum
  458. from: 'Ready'
  459. to: 'Train'
  460. action:
  461. - service: shell_command.vacuum_clear_log
  462. - service: shell_command.vacuum_clear_image
  463.  
  464. # Update Vacuum Log File with Finished Status
  465. - alias: Vacuum Notify on Finished Cleaning
  466. initial_state: true
  467. trigger:
  468. - platform: state
  469. entity_id: sensor.vacuum
  470. from: 'Clean'
  471. to: 'Ready'
  472. - platform: state
  473. entity_id: sensor.vacuum
  474. from: 'Train'
  475. to: 'Ready'
  476. - platform: state
  477. entity_id: sensor.vacuum
  478. from: 'Pending'
  479. to: 'Ready'
  480. action:
  481. - service: notify.vacuumfile
  482. data_template:
  483. message: "Finished"
  484.  
  485. # Update Vacuum Log File with Stuck Status
  486. - alias: Vacuum Notify on Stuck Status
  487. initial_state: true
  488. trigger:
  489. platform: template
  490. value_template: "{{ is_state_attr('sensor.vacuum', 'phase', 'Stuck') }}"
  491. action:
  492. - service: notify.vacuumfile
  493. data_template:
  494. message: "Stuck"
  495. # DELETE BELOW SECTION IF YOU DONT WANT NOTIFICATIONS
  496. - delay: 5
  497. - service: !secret vacuum_notify
  498. data_template:
  499. title: "{{ state_attr('sensor.rest980', 'name') }} requires your attention"
  500. message: "{{ state_attr('sensor.rest980', 'name') }} is stuck."
  501. # =============
  502. # NOTICE THIS SECTION IS VALID FOR IOS USERS ONLY!
  503. data:
  504. attachment:
  505. content-type: jpeg
  506. push:
  507. category: camera
  508. entity_id: camera.roomba
  509. # =============
  510.  
  511. # Generate Complete Vacuum Map
  512. - alias: Vacuum Generate Image after Cleaning
  513. initial_state: true
  514. trigger:
  515. - platform: state
  516. entity_id: sensor.vacuum
  517. from: 'Clean'
  518. to: 'Ready'
  519. for:
  520. seconds: 10
  521. - platform: state
  522. entity_id: sensor.vacuum
  523. from: 'Train'
  524. to: 'Ready'
  525. for:
  526. seconds: 10
  527. - platform: state
  528. entity_id: sensor.vacuum
  529. from: 'Pending'
  530. to: 'Ready'
  531. for:
  532. seconds: 10
  533. action:
  534. - service: shell_command.vacuum_generate_image
  535. # DELETE BELOW SECTION IF YOU DONT WANT NOTIFICATIONS
  536. - delay: 5
  537. - service: !secret vacuum_notify
  538. data_template:
  539. title: "{{ state_attr('sensor.rest980', 'name') }}"
  540. message: "{{ state_attr('sensor.rest980', 'name') }} successfully completed a job!"
  541. # =============
  542. # NOTICE THIS SECTION IS VALID FOR IOS USERS ONLY!
  543. data:
  544. attachment:
  545. content-type: jpeg
  546. push:
  547. category: camera
  548. entity_id: camera.roomba
  549. # =============
  550.  
  551. # Maintenance Check
  552. - alias: Vacuum Maintenance Check
  553. initial_state: true
  554. trigger:
  555. - platform: time_pattern
  556. minutes: /15
  557. - platform: state
  558. entity_id: [
  559. 'sensor.vacuum_maint_clean_brushes',
  560. 'sensor.vacuum_maint_clean_contacts',
  561. 'sensor.vacuum_maint_clean_filter',
  562. 'sensor.vacuum_maint_clean_wheel',
  563. 'sensor.vacuum_maint_clean_bin',
  564. 'sensor.vacuum_maint_replace_brushes',
  565. 'sensor.vacuum_maint_replace_filter',
  566. 'sensor.vacuum_maint_replace_wheel'
  567. ]
  568. action:
  569. - service: >-
  570. {% set ns = namespace(count = 0) %}
  571. {% for item in states.sensor if 'sensor.vacuum_maint' in item.entity_id and (state_attr(item.entity_id, 'timeout_timestamp') < as_timestamp(now())) %}
  572. {% set ns.count = loop.index %}
  573. {% endfor %}
  574. {% if ns.count > 0 %}
  575. input_boolean.turn_on
  576. {% else %}
  577. input_boolean.turn_off
  578. {% endif %}
  579. entity_id: input_boolean.vacuum_maint_due
  580.  
  581. # Add Rooms for Ordered Cleaning
  582. - alias: Vacuum Add Rooms for Cleaning
  583. initial_state: true
  584. trigger:
  585. platform: state
  586. entity_id: [
  587. 'input_boolean.vacuum_clean_bedroom',
  588. 'input_boolean.vacuum_clean_office'
  589. ]
  590. to: 'on'
  591. action:
  592. service: input_text.set_value
  593. data_template:
  594. entity_id: input_text.vacuum_rooms
  595. value: |
  596. {% set room = trigger.entity_id %}
  597. {% set room = room.replace("input_boolean.vacuum_clean_","") %}
  598. {% if ((states('input_text.vacuum_rooms') == "unknown") or (states('input_text.vacuum_rooms') == "")) %}
  599. {{ room }},
  600. {% else %}
  601. {{ states('input_text.vacuum_rooms') }}{{ room }},
  602. {% endif %}
  603.  
  604. # Remove Rooms for Ordered Cleaning
  605. - alias: Vacuum Remove Rooms for Cleaning
  606. initial_state: true
  607. trigger:
  608. platform: state
  609. entity_id: [
  610. 'input_boolean.vacuum_clean_bedroom',
  611. 'input_boolean.vacuum_clean_office'
  612. ]
  613. to: 'off'
  614. action:
  615. service: input_text.set_value
  616. data_template:
  617. entity_id: input_text.vacuum_rooms
  618. value: |
  619. {% set room = trigger.entity_id %}
  620. {% set room = room.replace("input_boolean.vacuum_clean_","") %}
  621. {% set result = states('input_text.vacuum_rooms') %}
  622. {% set result = result.replace(room + ",","") %}
  623. {{ result }}
  624.  
  625. # Vacuum Cleaning Schedule 1
  626. - alias: Vacuum Cleaning Schedule 1
  627. initial_state: true
  628. trigger:
  629. platform: time_pattern
  630. hours: "6"
  631. condition:
  632. condition: and
  633. conditions:
  634. - condition: state
  635. entity_id: input_boolean.vacuum_schedule_1
  636. state: 'on'
  637. - condition: state
  638. entity_id: input_boolean.vacation
  639. state: 'off'
  640. action:
  641. - service: input_text.set_value
  642. entity_id: input_text.vacuum_rooms
  643. data_template:
  644. entity_id: input_text.vacuum_rooms
  645. value: "kitchen"
  646. - service: automation.trigger
  647. entity_id: automation.vacuum_clean_rooms
  648.  
  649. # Vacuum Cleaning Schedule 2
  650. - alias: Vacuum Cleaning Schedule 2
  651. initial_state: true
  652. trigger:
  653. platform: time_pattern
  654. hours: "10"
  655. condition:
  656. condition: and
  657. conditions:
  658. - condition: state
  659. entity_id: input_boolean.vacuum_schedule_2
  660. state: 'on'
  661. - condition: state
  662. entity_id: input_boolean.vacation
  663. state: 'off'
  664. - condition: time
  665. weekday:
  666. - mon
  667. - wed
  668. - fri
  669. action:
  670. - service: input_text.set_value
  671. entity_id: input_text.vacuum_rooms
  672. data_template:
  673. entity_id: input_text.vacuum_rooms
  674. value: "bedroom,office"
  675. - service: automation.trigger
  676. entity_id: automation.vacuum_clean_rooms
  677.  
  678. # Delete Old Vacuum Image Files
  679. - alias: Vacuum Delete Images
  680. initial_state: true
  681. trigger:
  682. platform: time_pattern
  683. hours: "00"
  684. action:
  685. - service: shell_command.vacuum_delete_images
  686.  
  687. ###################################
  688. # Notify
  689. ###################################
  690.  
  691. notify:
  692. - name: VacuumFile
  693. platform: file
  694. filename: !secret vacuum_log
  695.  
  696. ###################################
  697. # Camera
  698. ###################################
  699.  
  700. camera:
  701. - platform: generic
  702. still_image_url: >-
  703. {{ states('input_text.vacuum_map') }}
  704. content_type: image/png
  705. name: Roomba
  706.  
  707. ###################################
  708. # Shell Command
  709. ###################################
  710.  
  711. shell_command:
  712. vacuum_clear_log: cp /dev/null {{ states('input_text.vacuum_log') }}
  713. vacuum_clear_image: curl -X GET -s -O /dev/null '{{ states("input_text.vacuum_map") }}?clear=true'
  714. vacuum_generate_image: curl -X GET -s -O /dev/null '{{ states("input_text.vacuum_map") }}?last=true'
  715. vacuum_delete_images: find {{ states('input_text.vacuum_dir') }} -regex ".*[0-9]\.png" -type f -mtime +20 -exec rm -f {} \;
  716.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement