iRobot Roomba vyhrál výběrové řízení přesně jak jsem předpokládal. pro možnost komunikace v češtině a to jak mobilní aplikace tak i samotný robot mluví česky s originálním firmware.
Rozhodl jsem se integrovat ho pomocí tohoto postupu:
Kód: Vybrat vše
https://github.com/jeremywillans/ha-rest980-roomba#ha-rest980-roomba
Přidávám svoje soubory vacuum.yaml a secrets.yaml neboť jsem u souborů autora obdržel pár chybových hlášek a také kartu lovelace s cz lokalizací, kterou budu ještě dolaďovat.
[spoiler=soubor vacuum.yaml]
soubor je "Balíček"
tak nezapomeňte dát do config.yaml něco jako:
Kód: Vybrat vše
homeassistant:
packages:
pack_1: !include vacuum.yaml
tady je můj soubor vacuum.yaml:
Kód: Vybrat vše
# vacuum.yaml - patřím do adresáře config, takže local/vacuum.yaml
type: vertical-stack
cards:
- type: custom:roomba-vacuum-card
entity: sensor.vacuum
clean_base: false
buttons: null
labels:
status: Stav
mode: Režim
battery: Baterie
bin: Zásobník
total_area: Plocha
total_time: Čas celkem
total_jobs: Úklidů
job_initiator: Inicioval
job_time: Před
job_recharge: Dobíjení
job_expires: Zbývá
full_clean: Ukliďit všude
resume: POKRAČOVAT
pause: POZASTAVIT
empty: Prázdný
dock: STANICE
stop: TOTAL STOP
tank: Zásobník
pad: Podklad
robot_states:
ready: Připraven
stuck: Zasekl se
pending: Čeká
charge: Nabíjení
idle: Nečinný
empty: Prázdný
- type: entities
entities:
- entities:
- entity: input_boolean.vacuum_schedule_1
name: Čištění kuchyně (6 hodin denně)
- entity: input_boolean.vacuum_schedule_2
name: Úklid bytu (10am Po/St/Pa)
head:
label: Plány čištění
type: section
type: custom:fold-entity-row
- entities:
- input_boolean.vacuum_clean_room_1
- input_boolean.vacuum_clean_room_2
- input_boolean.vacuum_clean_room_3
- input_boolean.vacuum_clean_room_4
- input_boolean.vacuum_clean_room_5
- input_boolean.vacuum_clean_room_6
- input_boolean.vacuum_clean_room_7
- input_boolean.vacuum_clean_zone_0
- input_boolean.vacuum_clean_zone_1
- input_boolean.vacuum_clean_zone_2
- input_boolean.vacuum_clean_zone_3
- input_boolean.vacuum_clean_zone_4
- input_boolean.vacuum_clean_zone_5
- input_boolean.vacuum_clean_zone_6
- input_boolean.vacuum_clean_zone_7
- entity: automation.vacuum_clean_rooms
lock:
enabled: |-
[[[
if ((states['group.vacuum_rooms'].state == "on") && (states['sensor.vacuum'].state == "Připraven"))
return false;
return true;
]]]
exemptions: []
name: Úklid místností
styles:
card:
- height: 50px
tap_action:
action: call-service
service: automation.trigger
service_data:
entity_id: automation.vacuum_clean_rooms
type: custom:button-card
head:
label: Selektivní úklid pokojů
type: section
type: custom:fold-entity-row
- entities:
- style: |-
.text-divider {
padding: 0em;
margin: 0em;
} h2 {
font-size: 1em;
margin-block-start: 0em;
margin-block-end: 0em;
}
text: Vyčistit
type: custom:text-divider-row
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_clean_brushes
locale: cs_CZ
severity:
- color: '#bfb540'
value: 0 days
- color: '#bf4060'
value: '-1 days'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
timeout: 10 days
title: Kartáče
type: custom:check-button-card
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_clean_contacts
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
locale: cs_CZ
severity:
- color: '#bfb540'
value: 0 days
- color: '#bf4060'
value: '-3 days'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
timeout: 18 days
title: Kontakty
type: custom:check-button-card
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_clean_filter
locale: cs_CZ
severity:
- color: '#bfb540'
value: 0 days
- color: '#bf4060'
value: '-10 days'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
timeout: 10 days
title: Filtr
type: custom:check-button-card
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_clean_wheel
locale: cs_CZ
severity:
- color: '#bfb540'
value: 0 days
- color: '#bf4060'
value: '-3 days'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
timeout: 18 days
title: Kolečko
type: custom:check-button-card
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_clean_bin
locale: cs_CZ
severity:
- color: '#bfb540'
value: 1 day
- color: '#bf4060'
value: '-2 days'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
timeout: 3 weeks
title: Sáček
type: custom:check-button-card
- style: |-
.text-divider {
padding: 0em;
margin: 0em;
} h2 {
font-size: 1em;
margin-block-start: 0em;
margin-block-end: 0em;
}
text: Výměna
type: custom:text-divider-row
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_replace_brushes
locale: cs_CZ
severity:
- color: '#bfb540'
value: 0 months
- color: '#bf4060'
value: '-4 months'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
timeout: 8 months
title: Kartáče
type: custom:check-button-card
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_replace_filter
locale: cs_CZ
severity:
- color: '#bfb540'
value: 0 months
- color: '#bf4060'
value: '-1 months'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
timeout: 3 months
title: Filtr
type: custom:check-button-card
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_replace_wheel
locale: cs_CZ
severity:
- color: '#bfb540'
value: 0 months
- color: '#bf4060'
value: '-4 months'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
timeout: 2 years
title: Kolečko
type: custom:check-button-card
head:
label: Údržba
type: section
type: custom:fold-entity-row
- type: picture-glance
entities: []
camera_image: camera.roomba
aspect_ratio: 0%
[spoiler=soubor secrets.yaml]
Do souboru secret proto, že pokud změníte mapu bude nutné provést změny i na mnoha místech v vacuum.yaml, v souboru secrets.yaml to bude s textovými pomocníky mnohem snazší...
Pokud nemáte soubor secrets.yaml vytvořte jej a do něj vložte následující
Kód: Vybrat vše
##################################################################################
# Secrets - soubor secrets.yaml - patřím do složky config/sacrets.yaml tedy local/secrets.yaml
##################################################################################
# Vacuum
vacuum_state: http://ip_vašeho_ha:3000/api/local/info/state
vacuum_action: http://ip_vašeho_ha:3000:3000/api/local/action/
vacuum_verify_ssl: false
vacuum_notify: notify.mobile_app_xxxxxxx # You can also use a notify group here
vacuum_map: http://ip_vašeho_ha:3000ip_vašeho_ha:3000:3001/image.php
vacuum_log: /config/vacuum/vacuum.log
vacuum_dir: /config/vacuum
vacuum_room_1: '{"region_id": "2", "type": "rid"}' # Obývák
vacuum_room_2: '{"region_id": "8", "type": "rid"}' # Kuchyň
vacuum_room_3: '{"region_id": "15", "type": "rid"}' # Ložnice
vacuum_room_4: '{"region_id": "18", "type": "rid"}' # WC
vacuum_room_5: '{"region_id": "19", "type": "rid"}' # Chodba
vacuum_room_6: '{"region_id": "12", "type": "rid"}' # Pokoj
vacuum_room_7: '{"region_id": "17", "type": "rid"}' # Koupelna
# vacuum_room_8: '{"region_id": "xx", "type": "rid"}'# Rezerva
vacuum_zone_0: '{"region_id": "0", "type": "zid"}' # u kuchyňské linky
vacuum_zone_1: '{"region_id": "1", "type": "zid"}' # koupelnový koberec
vacuum_zone_2: '{"region_id": "2", "type": "zid"}' # jídelní stůl
vacuum_zone_3: '{"region_id": "3", "type": "zid"}' # vstup
vacuum_zone_4: '{"region_id": "4", "type": "zid"}' # u stolku v obýváku
vacuum_zone_5: '{"region_id": "5", "type": "zid"}' # u terária
vacuum_zone_6: '{"region_id": "6", "type": "zid"}' # u stolu v pokoji
vacuum_zone_7: '{"region_id": "7", "type": "zid"}' # ukázka u tv
# vacuum_room_8: '{"region_id": "x", "type": "zid"}' # rezerva
# vacuum_room_9: '{"region_id": "x", "type": "zid"}' # rezerva
# Mop
# mop_state: http://<ip or fqdn of docker host>:<rest980_2port>/api/local/info/state
# mop_action: http://<ip or fqdn of docker host>:<rest980_2port>/api/local/action/
# mop_verify_ssl: false
# mop_notify: notify.mobile_app_xxxxxxx # You can also use a notify group here
# mop_map: http://<ip or fqdn of docker host>:<nginxphpport>/mop_kitchen.php # My example is multi floor-plan, could just be mop.php
# mop_log: /config/vacuum/mop.log
# mop_dir: /config/vacuum
# mop_kitchen: '{"region_id": "0", "type": "rid"}'
# mop_entry: '{"region_id": "0", "type": "rid"}'
# mop_bathroom: '{"region_id": "0", "type": "rid"}'
# mop_master_ensuite: '{"region_id": "0", "type": "rid"}'
# mop_map_kitchen: http://<ip or fqdn of docker host>:<nginxphpport>/mop_kitchen.php
# mop_map_entry: http://<ip or fqdn of docker host>:<nginxphpport>/mop_entry.php
# mop_map_bathroom: http://<ip or fqdn of docker host>:<nginxphpport>/mop_bathroom.php
# mop_map_ensuite: http://<ip or fqdn of docker host>:<nginxphpport>/mop_ensuite.php
[spoiler=karta lovelace]
Je to kombinace několika vlastních karet custom_card, jakých se dozvíte v dokumentaci
ha-rest980-roomba
Kód: Vybrat vše
https://github.com/jeremywillans/ha-rest980-roomba
Kód: Vybrat vše
type: vertical-stack
cards:
- type: custom:roomba-vacuum-card
entity: sensor.vacuum
clean_base: false
buttons: null
labels:
status: Stav
mode: Režim
battery: Baterie
bin: Zásobník
total_area: Plocha
total_time: Čas celkem
total_jobs: Úklidů
job_initiator: Inicioval
job_time: Před
job_recharge: Dobíjení
job_expires: Zbývá
full_clean: Ukliďit všude
resume: POKRAČOVAT
pause: POZASTAVIT
empty: Prázdný
dock: STANICE
stop: TOTAL STOP
tank: Zásobník
pad: Podklad
robot_states:
ready: Připraven
stuck: Zasekl se
pending: Čeká
charge: Nabíjení
idle: Nečinný
empty: Prázdný
- type: entities
entities:
- entities:
- entity: input_boolean.vacuum_schedule_1
name: Čištění kuchyně (6 hodin denně)
- entity: input_boolean.vacuum_schedule_2
name: Úklid bytu (10am Po/St/Pa)
head:
label: Plány čištění
type: section
type: custom:fold-entity-row
- entities:
- input_boolean.vacuum_clean_room_1
- input_boolean.vacuum_clean_room_2
- input_boolean.vacuum_clean_room_3
- input_boolean.vacuum_clean_room_4
- input_boolean.vacuum_clean_room_5
- input_boolean.vacuum_clean_room_6
- input_boolean.vacuum_clean_room_7
- input_boolean.vacuum_clean_zone_0
- input_boolean.vacuum_clean_zone_1
- input_boolean.vacuum_clean_zone_2
- input_boolean.vacuum_clean_zone_3
- input_boolean.vacuum_clean_zone_4
- input_boolean.vacuum_clean_zone_5
- input_boolean.vacuum_clean_zone_6
- input_boolean.vacuum_clean_zone_7
- entity: automation.vacuum_clean_rooms
lock:
enabled: |-
[[[
if ((states['group.vacuum_rooms'].state == "on") && (states['sensor.vacuum'].state == "Připraven"))
return false;
return true;
]]]
exemptions: []
name: Úklid místností
styles:
card:
- height: 50px
tap_action:
action: call-service
service: automation.trigger
service_data:
entity_id: automation.vacuum_clean_rooms
type: custom:button-card
head:
label: Selektivní úklid pokojů
type: section
type: custom:fold-entity-row
- entities:
- style: |-
.text-divider {
padding: 0em;
margin: 0em;
} h2 {
font-size: 1em;
margin-block-start: 0em;
margin-block-end: 0em;
}
text: Vyčistit
type: custom:text-divider-row
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_clean_brushes
locale: cs_CZ
severity:
- color: '#bfb540'
value: 0 days
- color: '#bf4060'
value: '-1 days'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
timeout: 10 days
title: Kartáče
type: custom:check-button-card
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_clean_contacts
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
locale: cs_CZ
severity:
- color: '#bfb540'
value: 0 days
- color: '#bf4060'
value: '-3 days'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
timeout: 18 days
title: Kontakty
type: custom:check-button-card
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_clean_filter
locale: cs_CZ
severity:
- color: '#bfb540'
value: 0 days
- color: '#bf4060'
value: '-10 days'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
timeout: 10 days
title: Filtr
type: custom:check-button-card
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_clean_wheel
locale: cs_CZ
severity:
- color: '#bfb540'
value: 0 days
- color: '#bf4060'
value: '-3 days'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
timeout: 18 days
title: Kolečko
type: custom:check-button-card
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_clean_bin
locale: cs_CZ
severity:
- color: '#bfb540'
value: 1 day
- color: '#bf4060'
value: '-2 days'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
timeout: 3 weeks
title: Sáček
type: custom:check-button-card
- style: |-
.text-divider {
padding: 0em;
margin: 0em;
} h2 {
font-size: 1em;
margin-block-start: 0em;
margin-block-end: 0em;
}
text: Výměna
type: custom:text-divider-row
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_replace_brushes
locale: cs_CZ
severity:
- color: '#bfb540'
value: 0 months
- color: '#bf4060'
value: '-4 months'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
timeout: 8 months
title: Kartáče
type: custom:check-button-card
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_replace_filter
locale: cs_CZ
severity:
- color: '#bfb540'
value: 0 months
- color: '#bf4060'
value: '-1 months'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
timeout: 3 months
title: Filtr
type: custom:check-button-card
- color: '#40bf6a'
due: true
entity: sensor.vacuum_maint_replace_wheel
locale: cs_CZ
severity:
- color: '#bfb540'
value: 0 months
- color: '#bf4060'
value: '-4 months'
style: |
ha-card {
padding: 2px;
--ha-card-box-shadow: 'none';
--paper-card-background-color: rgba(0, 0, 0, 0);
}
text:
due_in: Provést do
year: roku
years: let
month: měsíce
months: měsíců
week: týdene
weeks: týdnů
day: dne
days: dní
hour: hodiny
hours: hodin
minute: minuty
minutes: minut
less_than: méně než
more_than: více než
ago: Před
over_by: Během
timeout: 2 years
title: Kolečko
type: custom:check-button-card
head:
label: Údržba
type: section
type: custom:fold-entity-row
- type: picture-glance
entities: []
camera_image: camera.roomba
aspect_ratio: 0%
Původní příspěvek:
Ahoj.
čeká mě nákup nového robovysavače, bude to nejspíš iRobot (Roomba) .
Máte někdo zkušenosti s integrací konkrétních modelů?
Který model vybrat? Nebo raději jinou značku?