- platform: template sensors: vacuum: friendly_name_template: >- {{ state_attr('sensor.rest980', 'name') }} value_template: >- {% if state_attr('sensor.rest980', 'cleanMissionStatus')['cycle'] == 'none' and state_attr('sensor.rest980', 'cleanMissionStatus')['notReady'] == 39 %} Wartet {% elif state_attr('sensor.rest980', 'cleanMissionStatus')['notReady'] > 0 %} Nicht bereit {% else %} {% set mapper = { 'clean' : 'Reinigen', 'quick' : 'Reinigen', 'spot' : 'Spot', 'evac' : 'Leer', 'dock' : 'Station', 'train' : 'Lernen', 'none' : 'Bereit' } %} {% set state = state_attr('sensor.rest980', 'cleanMissionStatus')['cycle'] %} {{ mapper[state] if state in mapper else state }} {% endif %} icon_template: mdi:robot-vacuum attribute_templates: notready_msg: >- {% set mapper = { 0 : 'n-a', 2 : 'Unebener Untergrund', 15 : 'Akku niedrig', 39 : 'Ausstehend', 48 : 'Weg blockiert' } %} {% set state = state_attr('sensor.rest980', 'cleanMissionStatus')['notReady'] %} {{ mapper[state] if state in mapper else state }} error_msg: >- {% set mapper = { 0 : 'n-a', 15 : 'Neustart notwendig', 18 : 'Andocken Fehler'} %} {% set state = state_attr('sensor.rest980', 'cleanMissionStatus')['error'] %} {{ mapper[state] if state in mapper else state }} battery: >- {{ state_attr('sensor.rest980', 'batPct') }} % software_ver: >- {% if state_attr('sensor.rest980', 'softwareVer') is defined %} {% set version = state_attr('sensor.rest980', 'softwareVer') %} {% if '+' in version %} {{ version.split('+')[1] }} {% else %} {{ version }} {% endif %} {% else %} n-a {% endif %} phase: >- {% if state_attr('sensor.rest980', 'cleanMissionStatus')['phase'] == 'charge' and state_attr('sensor.rest980', 'batPct') == 100 %} Wartet {% elif state_attr('sensor.rest980', 'cleanMissionStatus')['cycle'] == 'none' and state_attr('sensor.rest980', 'cleanMissionStatus')['phase'] == 'stop' %} Gestoppt {% else %} {% set mapper = { 'charge' : 'Lädt', 'run' : 'Läuft', 'evac' : 'Leert', 'stop' : 'Pausiert', 'stuck' : 'Hängt', 'hmUsrDock' : 'Nach Hause', 'hmMidMsn' : 'Dockt an', 'hmPostMsn' : 'Angedockt' } %} {% set state = state_attr('sensor.rest980', 'cleanMissionStatus')['phase'] %} {{ mapper[state] if state in mapper else state }} {% endif %} bin: >- {% set mapper = { true : 'Voll', false : 'Leer' } %} {% set state = state_attr('sensor.rest980', 'bin')['full'] %} {{ mapper[state] if state in mapper else state }} bin_present: >- {% set mapper = { true : 'Ja', false : 'Nein' } %} {% set state = state_attr('sensor.rest980', 'bin')['present'] %} {{ mapper[state] if state in mapper else state }} clean_base: >- {% if state_attr('sensor.rest980', 'dock')['state'] is defined %} {% set mapper = { 300 : 'Bereit', 301 : 'Bereit', 302 : 'Leer', 303 : 'Leer', 350 : 'Beutel fehlt', 351 : 'Verstopft', 352 : 'Verschluss Problem', 353 : 'Beutel voll', 360 : 'Staub Problem' } %} {% set state = state_attr('sensor.rest980', 'dock')['state'] %} {{ mapper[state] if state in mapper else state }} {% else %} n-a {% endif %} location: >- {% if state_attr('sensor.rest980', 'pose')['theta'] is defined %} ({{ state_attr('sensor.rest980', 'pose')['point']['x'] }}, {{ state_attr('sensor.rest980', 'pose')['point']['y'] }}, {{ state_attr('sensor.rest980', 'pose')['theta'] }}) {% else %} n-a {% endif %} rssi: >- {% if state_attr('sensor.rest980', 'signal')['rssi'] is defined %} {{ state_attr('sensor.rest980', 'signal')['rssi'] }} {% else %} n-a {% endif %} total_area: >- {% if state_attr('sensor.rest980', 'runtimeStats')['sqft'] is defined %} {{ (state_attr('sensor.rest980', 'runtimeStats')['sqft'] / 10.764 * 100)| round() }}m² {% else %} n-a {% endif %} # {{ (state_attr('sensor.rest980', 'runtimeStats')['sqft'] }}ft² total_time: >- {% if state_attr('sensor.rest980', 'runtimeStats')['hr'] is defined %} {{ state_attr('sensor.rest980', 'runtimeStats')['hr'] }}h {{ state_attr('sensor.rest980', 'runtimeStats')['min'] }}m {% else %} n-a {% endif %} total_jobs: >- {% if state_attr('sensor.rest980', 'bbmssn')['nMssn'] is defined %} {{ state_attr('sensor.rest980', 'bbmssn')['nMssn'] }} {% else %} n-a {% endif %} dirt_events: >- {% if state_attr('sensor.rest980', 'bbrun')['nScrubs'] is defined %} {{ state_attr('sensor.rest980', 'bbrun')['nScrubs'] }} {% else %} n-a {% endif %} # evac_events I7+/S9+ Models (Clean Base) evac_events: >- {% if state_attr('sensor.rest980', 'bbrun')['nEvacs'] is defined %} {{ state_attr('sensor.rest980', 'bbrun')['nEvacs'] }} {% else %} n-a {% endif %} job_initiator: >- {% set mapper = { 'schedule' : 'Programm', 'rmtApp' : 'App', 'manual' : 'Robot', 'localApp' : 'HA' } %} {% set state = state_attr('sensor.rest980', 'cleanMissionStatus')['initiator'] %} {{ mapper[state] if state in mapper else state }} job_time: >- {% if state_attr('sensor.rest980', 'cleanMissionStatus')['mssnStrtTm'] is defined %} {% if state_attr('sensor.rest980', 'cleanMissionStatus')['mssnStrtTm'] != 0 %} {% set time = state_attr('sensor.rest980', 'cleanMissionStatus')['mssnStrtTm'] | timestamp_local %} {% set elapsed = ((as_timestamp(now()) - as_timestamp(time)) / 60) | round(0) %} {% if elapsed > 60 %} {{ elapsed // 60 }}h {{ '{:0>2d}'.format(elapsed%60) }}m {% else %} {{elapsed}}m {% endif %} {% else %} n-a {% endif %} {% else %} n-a {% endif %} job_recharge: >- {% if state_attr('sensor.rest980', 'cleanMissionStatus')['rechrgTm'] is defined %} {% if state_attr('sensor.rest980', 'cleanMissionStatus')['rechrgTm'] != 0 %} {% set time = state_attr('sensor.rest980', 'cleanMissionStatus')['rechrgTm'] | timestamp_local %} {% set resume = ((as_timestamp(time) - as_timestamp(now())) / 60) | round(0) %} {% if resume > 60 %} {{ resume // 60 }}h {{ '{:0>2d}'.format(resume%60) }}m {% else %} {{resume}}m {% endif %} {% else %} n-a {% endif %} {% else %} n-a {% endif %} job_expires: >- {% if state_attr('sensor.rest980', 'cleanMissionStatus')['expireTm'] is defined %} {% if state_attr('sensor.rest980', 'cleanMissionStatus')['expireTm'] != 0 %} {% set time = state_attr('sensor.rest980', 'cleanMissionStatus')['expireTm'] | timestamp_local %} {% set resume = ((as_timestamp(time) - as_timestamp(now())) / 60) | round(0) %} {% if resume > 60 %} {{ resume // 60 }}h {{ '{:0>2d}'.format(resume%60) }}m {% else %} {{resume}}m {% endif %} {% else %} n-a {% endif %} {% else %} n-a {% endif %} clean_mode: >- {% if state_attr('sensor.rest980', 'noAutoPasses') is defined and state_attr('sensor.rest980', 'twoPass') is defined %} {% if state_attr('sensor.rest980', 'noAutoPasses') == true and state_attr('sensor.rest980', 'twoPass') == false %} One {% elif state_attr('sensor.rest980', 'noAutoPasses') == true and state_attr('sensor.rest980', 'twoPass') == true %} Two {% else %} Auto {% endif %} {% else %} n-a {% endif %} carpet_boost: >- {% if state_attr('sensor.rest980', 'vacHigh') is defined %} {% if state_attr('sensor.rest980', 'vacHigh') == false and state_attr('sensor.rest980', 'carpetBoost') == false %} Eco {% elif state_attr('sensor.rest980', 'vacHigh') == true and state_attr('sensor.rest980', 'carpetBoost') == false %} Performance {% else %} Auto {% endif %} {% else %} n-a {% endif %} clean_edges: >- {% if state_attr('sensor.rest980', 'openOnly') is defined %} {% if state_attr('sensor.rest980', 'openOnly') == true %} False {% else %} True {% endif %} {% else %} n-a {% endif %} maint_due: >- {% if is_state('input_boolean.vacuum_maint_due', 'on') %} True {% else %} False {% endif %} # pmap0_id I7/S9 Models pmap0_id: >- {% if state_attr('sensor.rest980', 'pmaps')[0] is defined %} {{ state_attr('sensor.rest980', 'pmaps')[0] | regex_findall_index("{'([\w\-]+)': '\w+'}") }} {% else %} n-a {% endif %}