Ciao stefano sto seguendo un po’ questa tua discussione per creare una card ocme le vostre, sono riuscito in parte a fare tutto, ma ho fatto quella come l’altro ragazzo mentre la tua e piu completa, mi passeresti la tua card? Mi piacciono tutte quelle info che ci sono nella tua.
dove bisogna inserire queste righe di ocmando per avere il colore variabile?
Stefano, thanks for all the work
I’m trying to implement the map but your instructions are not really clear Where do I need to paste the code you provided?
@Gabriele_Mandalari @StefanoGiu
Good job!
Could you share your card with all the related codes to make it work properly?
Fantastic the possibility to change the color according to the chosen option and also to be able to decide the cleaning areas.
Thanks
As many of you asked about the configuration I used, please find below:
Lovelace:
##################################
# ASPIRAPOLVERE
##################################
- badges: []
visible: false
cards:
- cards:
- buttons:
locate: false
pause: false
return: false
spot: false
start: false
stop: false
entity: vacuum.aspirapolvere
image: /local/deebot.jpg
name: Aspirapolvere
type: 'custom:xiaomi-vacuum-card'
vendor: deebot
- color: black
entity: null
icon: null
name: Controllo
styles:
card:
- font-size: 16px
- background-color: black
- color: white
name:
- justify-self: start
- padding-left: 16px
type: 'custom:button-card'
- cards:
- color: white
entity: null
icon: 'mdi:map-marker-radius'
name: Trova
styles:
card:
- font-size: 12px
- background-color: black
- color: white
tap_action:
action: call-service
service: vacuum.locate
service_data:
entity_id: vacuum.aspirapolvere
type: 'custom:button-card'
- color: white
entity: null
icon: 'mdi:play'
name: Inizia
styles:
card:
- font-size: 12px
- background-color: black
- color: white
tap_action:
action: call-service
service: vacuum.start
service_data:
entity_id: vacuum.aspirapolvere
type: 'custom:button-card'
- type: 'custom:config-template-card'
entities:
- input_boolean.deebot_times
- input_boolean.deebot_cucina
- input_boolean.deebot_sala
- input_boolean.deebot_camera
- input_boolean.deebot_bagno_grande
- input_boolean.deebot_bagno_piccolo
- input_boolean.deebot_corridoio
- input_boolean.deebot_aurora
- input_boolean.deebot_giovanni
card:
type: 'custom:button-card'
color: white
entity: null
icon: 'mdi:view-dashboard-outline'
name: Stanze
styles:
card:
- font-size: 12px
- background-color: black
- color: white
tap_action:
action: call-service
service: script.vacuum_clean_zone
- color: white
entity: null
icon: 'mdi:pause'
name: Pausa
styles:
card:
- font-size: 12px
- background-color: black
- color: white
tap_action:
action: call-service
service: vacuum.pause
service_data:
entity_id: vacuum.aspirapolvere
type: 'custom:button-card'
- color: white
entity: null
icon: 'mdi:robot-vacuum'
name: Ricarica
styles:
card:
- font-size: 12px
- background-color: black
- color: white
tap_action:
action: call-service
service: vacuum.return_to_base
service_data:
entity_id: vacuum.aspirapolvere
type: 'custom:button-card'
type: horizontal-stack
- color: black
entity: null
icon: null
name: >
[[[
var stanze = states['input_text.valuestanze'].state;
stanze = stanze.substring(0,stanze.length - 1);
return "Stanze da pulire: <br>" + stanze;
]]]
styles:
card:
- font-size: 13px
- background-color: black
- color: white
name:
- width: 100%
- align: 'left'
- justify-self: start
- padding-left: 10px
- word-wrap: anywhere
type: 'custom:button-card'
- cards:
- color: yellow
entity: input_boolean.deebot_cucina
icon: 'mdi:toaster-oven'
state:
- color: 'rgb(100, 100, 100)'
value: 'off'
styles:
card:
- font-size: 12px
- background-color: black
- color: white
type: 'custom:button-card'
- color: yellow
entity: input_boolean.deebot_sala
icon: 'mdi:sofa'
state:
- color: 'rgb(100, 100, 100)'
value: 'off'
styles:
card:
- font-size: 12px
- background-color: black
- color: white
type: 'custom:button-card'
- color: yellow
entity: input_boolean.deebot_camera
icon: 'mdi:bed-king'
state:
- color: 'rgb(100, 100, 100)'
value: 'off'
styles:
card:
- font-size: 12px
- background-color: black
- color: white
type: 'custom:button-card'
- color: yellow
entity: input_boolean.deebot_bagno_grande
icon: 'mdi:shower'
state:
- color: 'rgb(100, 100, 100)'
value: 'off'
styles:
card:
- font-size: 12px
- background-color: black
- color: white
type: 'custom:button-card'
type: horizontal-stack
- cards:
- color: yellow
entity: input_boolean.deebot_bagno_piccolo
icon: 'mdi:shower-head'
state:
- color: 'rgb(100, 100, 100)'
value: 'off'
styles:
card:
- font-size: 12px
- background-color: black
- color: white
type: 'custom:button-card'
- color: yellow
entity: input_boolean.deebot_corridoio
icon: 'mdi:road-variant'
state:
- color: 'rgb(100, 100, 100)'
value: 'off'
styles:
card:
- font-size: 12px
- background-color: black
- color: white
type: 'custom:button-card'
- color: yellow
entity: input_boolean.deebot_aurora
icon: 'mdi:bed-empty'
state:
- color: 'rgb(100, 100, 100)'
value: 'off'
styles:
card:
- font-size: 12px
- background-color: black
- color: white
type: 'custom:button-card'
- color: yellow
entity: input_boolean.deebot_giovanni
icon: 'mdi:bed-empty'
state:
- color: 'rgb(100, 100, 100)'
value: 'off'
styles:
card:
- font-size: 12px
- background-color: black
- color: white
type: 'custom:button-card'
- color: 'rgb(0, 255, 0)'
entity: input_boolean.deebot_times
icon: 'mdi:numeric-2'
state:
- color: 'rgb(255, 0, 0)'
icon: 'mdi:numeric-1'
value: 'off'
styles:
card:
- font-size: 12px
- background-color: black
- color: white
type: 'custom:button-card'
type: horizontal-stack
- color: auto
entity: null
icon: null
name: Potenza di aspirazione e quantità d'acqua
styles:
card:
- font-size: 16px
- background-color: black
- color: white
name:
- justify-self: start
- padding-left: 16px
type: 'custom:button-card'
- cards:
- type: 'custom:config-template-card'
entities:
- sensor.deebot_fan_speed
variables:
- states['sensor.deebot_fan_speed'].state
card:
color: "${vars[0] === 'quiet' ? 'yellow' : 'white'}"
entity: null
icon: 'mdi:fan'
name: Basso
styles:
card:
- font-size: 12px
- background-color: black
- color: white
tap_action:
action: call-service
service: vacuum.set_fan_speed
service_data:
entity_id: vacuum.aspirapolvere
fan_speed: quiet
type: 'custom:button-card'
- type: 'custom:config-template-card'
entities:
- sensor.deebot_fan_speed
variables:
- states['sensor.deebot_fan_speed'].state
card:
color: "${vars[0] === 'normal' ? 'yellow' : 'white'}"
entity: null
icon: 'mdi:fan'
name: Medio
styles:
card:
- font-size: 12px
- background-color: black
- color: white
tap_action:
action: call-service
service: vacuum.set_fan_speed
service_data:
entity_id: vacuum.aspirapolvere
fan_speed: normal
type: 'custom:button-card'
- type: 'custom:config-template-card'
entities:
- sensor.deebot_fan_speed
variables:
- states['sensor.deebot_fan_speed'].state
card:
color: "${vars[0] === 'max' ? 'yellow' : 'white'}"
entity: null
icon: 'mdi:fan'
name: 'Alto'
styles:
card:
- font-size: 12px
- background-color: black
- color: white
tap_action:
action: call-service
service: vacuum.set_fan_speed
service_data:
entity_id: vacuum.aspirapolvere
fan_speed: max
type: 'custom:button-card'
- type: 'custom:config-template-card'
entities:
- sensor.deebot_fan_speed
variables:
- states['sensor.deebot_fan_speed'].state
card:
color: "${vars[0] === 'max+' ? 'yellow' : 'white'}"
entity: null
icon: 'mdi:fan'
name: Altissimo
styles:
card:
- font-size: 12px
- background-color: black
- color: white
tap_action:
action: call-service
service: vacuum.set_fan_speed
service_data:
entity_id: vacuum.aspirapolvere
fan_speed: max+
type: 'custom:button-card'
type: horizontal-stack
- cards:
- type: 'custom:config-template-card'
entities:
- sensor.deebot_water_level
variables:
- states['sensor.deebot_water_level'].state
card:
color: "${vars[0] === 'low' ? 'yellow' : 'white'}"
entity: null
icon: 'mdi:flask-empty-outline'
name: Bassa
styles:
card:
- font-size: 12px
- background-color: black
- color: white
tap_action:
action: call-service
service: vacuum.send_command
service_data:
command: set_water
entity_id: vacuum.aspirapolvere
params:
amount: low
type: 'custom:button-card'
- type: 'custom:config-template-card'
entities:
- sensor.deebot_water_level
variables:
- states['sensor.deebot_water_level'].state
card:
color: "${vars[0] === 'medium' ? 'yellow' : 'white'}"
entity: null
icon: 'mdi:flask-outline'
name: Media
styles:
card:
- font-size: 12px
- background-color: black
- color: white
tap_action:
action: call-service
service: vacuum.send_command
service_data:
command: set_water
entity_id: vacuum.aspirapolvere
params:
amount: medium
type: 'custom:button-card'
- type: 'custom:config-template-card'
entities:
- sensor.deebot_water_level
variables:
- states['sensor.deebot_water_level'].state
card:
color: "${vars[0] === 'high' ? 'yellow' : 'white'}"
entity: null
icon: 'mdi:flask-empty'
name: Alta
styles:
card:
- font-size: 12px
- background-color: black
- color: white
tap_action:
action: call-service
service: vacuum.send_command
service_data:
command: set_water
entity_id: vacuum.aspirapolvere
params:
amount: high
type: 'custom:button-card'
- type: 'custom:config-template-card'
entities:
- sensor.deebot_water_level
variables:
- states['sensor.deebot_water_level'].state
card:
color: "${vars[0] === 'ultrahigh' ? 'yellow' : 'white'}"
entity: null
icon: 'mdi:flask-empty-plus'
name: Altissima
styles:
card:
- font-size: 12px
- background-color: black
- color: white
tap_action:
action: call-service
service: vacuum.send_command
service_data:
command: set_water
entity_id: vacuum.aspirapolvere
params:
amount: ultrahigh
type: 'custom:button-card'
type: horizontal-stack
type: vertical-stack
- card:
entity: sensor.deebot_last_clean_image
image: '${states[''sensor.deebot_last_clean_image''].state}'
type: 'custom:hui-image-element'
entities:
- sensor.deebot_last_clean_image
style:
height: 5%
left: 35%
top: 45%
transform: 'translate(0%,2%)'
width: 5%
type: 'custom:config-template-card'
path: aspirapolvere
title: Aspirapolvere
Script:
vacuum_clean_zone:
alias: Pulisci zona
sequence:
- service: vacuum.send_command
data_template:
command: spot_area
entity_id: vacuum.aspirapolvere
params:
cleanings: >
{%- if is_state('input_boolean.deebot_times', 'on') -%}{{2|int}}{%- else
-%}{{1|int}}{% endif %}
rooms: >
{{-states('input_text.idstanze')[:-1]}}
- service: input_boolean.turn_off
data:
entity_id: input_boolean.deebot_cucina
- service: input_boolean.turn_off
data:
entity_id: input_boolean.deebot_sala
- service: input_boolean.turn_off
data:
entity_id: input_boolean.deebot_camera
- service: input_boolean.turn_off
data:
entity_id: input_boolean.deebot_bagno_grande
- service: input_boolean.turn_off
data:
entity_id: input_boolean.deebot_bagno_piccolo
- service: input_boolean.turn_off
data:
entity_id: input_boolean.deebot_corridoio
- service: input_boolean.turn_off
data:
entity_id: input_boolean.deebot_aurora
- service: input_boolean.turn_off
data:
entity_id: input_boolean.deebot_giovanni
- service: input_boolean.turn_off
data:
entity_id: input_boolean.deebot_times
I was also able to integrate Google Assistant Voice Command “Hey google, clean my kitchen and my living room twice…” --> IFTTT --> WebHooks --> HA --> Deebot
Script:
clean_a_room:
alias: Pulisci una stanza
sequence:
- service: input_text.set_value
data_template:
entity_id: input_text.valuestanze
value: "{{room}},"
- service: vacuum.send_command
data_template:
command: spot_area
entity_id: vacuum.aspirapolvere
params:
cleanings: >
{% set y = room %}
{% set y = y | lower %}
{% if "2 volte" in y or "due volte" in y %}
{% set y = "2" %}
{% else %}
{% set y = "1" %}
{% endif %}
{{y}}
rooms: >
{% set x = room %}
{% set x = x | lower %}
{% if "casa" in x %}
{% set x = "1,0,2,7,8,6,5,3" %}
{% else %}
{% set x = x | replace(",","") %}
{% set x = x | replace("la c","c") %}
{% set x = x | replace("la s","s") %}
{% set x = x | replace("il ","") %}
{% set x = x | replace("camera di ","") %}
{% set x = x | replace("camera ","") %}
{% set x = x | replace("cucina","1") %}
{% set x = x | replace("sala","0") %}
{% set x = x | replace("da letto","3") %}
{% set x = x | replace("bagno grande","5") %}
{% set x = x | replace("bagno piccolo","8") %}
{% set x = x | replace("corridoio","2") %}
{% set x = x | replace("aurora","7") %}
{% set x = x | replace("giovanni","6") %}
{% set x = x | replace(" e ",",") %}
{% set x = x | regex_replace("[^0-9,^.]","") %}
{% endif %}
{{x}}
Automations:
- alias: "IFTTT Pulisci Stanza"
trigger:
- event_data:
action: call_service
event_type: ifttt_webhook_received
platform: event
condition:
condition: template
value_template: "{{ trigger.event.data.servizio == 'Pulisci' }}"
action:
- service: script.clean_a_room
data_template:
room: >
{{trigger.event.data.stanza}}
Modified xiaomi-vacuum-card.js
((LitElement) => {
const html = LitElement.prototype.html;
const css = LitElement.prototype.css;
class XiaomiVacuumCard extends LitElement {
static get properties() {
return {
_hass: {},
_config: {},
stateObj: {},
state: {},
style: {}
}
}
static get styles() {
return css`
.background {
background-repeat: no-repeat;
background-position: center center;
background-size: cover;
}
.title {
font-size: 20px;
padding: 16px 16px 0;
text-align: center;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.content {
cursor: pointer;
}
.flex {
display: flex;
align-items: center;
justify-content: space-evenly;
}
.button {
cursor: pointer;
padding: 16px;
}
.grid {
display: grid;
grid-template-columns: repeat(2, auto);
}
.grid-content {
display: grid;
align-content: space-between;
grid-row-gap: 6px;
}
.grid-left {
text-align: left;
font-size: 110%;
padding-left: 10px;
border-left: 2px solid var(--primary-color);
}
.grid-right {
text-align: right;
padding-right: 10px;
border-right: 2px solid var(--primary-color);
}`;
}
render() {
return html`
<ha-card .hass="${this._hass}" .config="${this._config}" class="background" style="${this.style.background}">
${this.state.name ?
html`<div class="title" style="${this.style.text}" @click="${() => this.fireEvent('hass-more-info')}">${this.state.name}</div>`
: null}
${this.state.showLabels ? html`
<div class="content grid" style="${this.style.content + this.style.text}" @click="${() => this.fireEvent('hass-more-info')}">
<div class="grid-content grid-left">
<div>${this.getValue('vacuum_status')}</div>
<div>${this.getValue('battery', ' %')}</div>
<div>${this.getValue('mode')}</div>
</div>
${this.state.showDetails ? html`
<div class="grid-content grid-right" >
<div>${this.getValue('main_brush', ' %')}</div>
<div>${this.getValue('side_brush', ' %')}</div>
<div>${this.getValue('filter', ' %')}</div>
<div>${this.getValue('water_level')}</div>
</div>` : null}
</div>` : null}
${this.state.showButtons ? html`
<div class="flex" style="${this.style.text}">
${Object.keys(this.state.buttons).map(this.renderButton.bind(this))}
</div>` : null}
</ha-card>`;
}
renderButton(key) {
return this.state.buttons[key]
? html`<div class="button" @tap="${() => this.callService(key)}"><ha-icon icon="${this.state.icons[key]}"></ha-icon></div>`
: null;
}
getValue(field, unit = '') {
const value = (this.stateObj && this.state.attributes[field] in this.stateObj.attributes)
? this.stateObj.attributes[this.state.attributes[field]] + unit
: (this._hass ? this._hass.localize('state.default.unavailable') : 'Unavailable');
return `${this.state.labels[field]}: ${value}`;
};
computeValue(field) {
if (this.state.attributes[field] === undefined || this.state.attributes[field] === false) {
return null;
} else if (this.stateObj && this.state.attributes[field] in this.stateObj.attributes) {
const computed = this.state.computeValue(this.stateObj.attributes[this.state.attributes[field]]);
const unit = typeof computed === 'number' ? ` ${this.state.labels.hours}` : '';
return `${this.state.labels[field]}: ${computed}${unit}`;
} else {
return `${this.state.labels[field]}: - `;
}
};
callService(service) {
this._hass.callService('vacuum', this.state.service[service], {entity_id: this.stateObj.entity_id});
}
fireEvent(type, options = {}) {
const event = new Event(type, {
bubbles: options.bubbles || true,
cancelable: options.cancelable || true,
composed: options.composed || true,
});
event.detail = {entityId: this.stateObj.entity_id};
this.dispatchEvent(event);
}
getCardSize() {
if (this.state.name && this.state.showButtons) return 5;
if (this.state.name || this.state.showButtons) return 4;
return 3;
}
setConfig(config) {
const labels = {
vacuum_status: 'Stato',
battery: 'Batteria',
mode: 'Modalità',
main_brush: 'Spazzola Principale',
side_brush: 'Spazzola Laterale',
filter: 'Filtro',
water_level: 'Livello Acqua',
hours: 'h',
};
const attributes = {
vacuum_status: 'vacuum_status',
battery: 'battery_level',
mode: 'fan_speed',
main_brush: 'component_brush',
side_brush: 'component_sideBrush',
filter: 'component_heap',
water_level: 'water_level',
};
const services = {
start: 'start',
pause: 'pause',
stop: 'stop',
locate: 'locate',
return: 'return_to_base',
spot: 'clean_spot',
};
const buttons = {
start: true,
pause: true,
stop: true,
spot: false,
locate: true,
return: true,
};
const icons = {
start: 'mdi:play',
pause: 'mdi:pause',
stop: 'mdi:stop',
locate: 'mdi:map-marker',
return: 'mdi:home-map-marker',
spot: 'mdi:broom',
};
const vendors = {
xiaomi: {
details: true,
},
valetudo: {
details: true,
attributes: {
vacuum_status: 'vacuum_status',
main_brush: 'mainBrush',
side_brush: 'sideBrush',
filter: 'filter',
sensor: 'water_level',
},
},
roomba: {
details: true,
attributes: {
main_brush: 'bin_present',
side_brush: 'bin_full',
filter: false,
sensor: false,
},
labels: {
main_brush: 'Bin Present',
side_brush: 'Bin Full',
},
computeValue: v => (v === true ? 'Yes' : (v === false ? 'No' : '-')),
},
robovac: {
details: false,
buttons: {
stop: false,
spot: true,
},
},
ecovacs: {
image: '/local/img/vacuum_ecovacs.png',
details: false,
buttons: {
stop: false,
spot: true,
},
service: {
start: 'turn_on',
pause: 'stop',
stop: 'turn_off',
},
},
deebot: {
image: '/local/img/vacuum_ecovacs.png',
details: true,
service: {
start: 'turn_on',
pause: 'stop',
stop: 'turn_off',
},
attributes: {
main_brush: 'component_brush',
side_brush: 'component_sideBrush',
filter: 'component_heap',
water_level: 'water_level',
},
}
};
if (!config.entity) throw new Error('Please define an entity.');
if (config.entity.split('.')[0] !== 'vacuum') throw new Error('Please define a vacuum entity.');
if (config.vendor && !config.vendor in vendors) throw new Error('Please define a valid vendor.');
const vendor = vendors[config.vendor] || vendors.xiaomi;
this.state = {
showDetails: vendor.details,
showButtons: config.buttons !== false,
showLabels: config.labels !== false,
showName: config.name !== false,
service: Object.assign({}, services, vendor.service),
buttons: Object.assign({}, buttons, vendor.buttons, config.buttons),
attributes: Object.assign({}, attributes, vendor.attributes, config.attributes),
labels: Object.assign({}, labels, vendor.labels, config.labels),
icons: Object.assign({}, icons, config.icons),
computeValue: vendor.computeValue || (val => val),
};
this.style = {
text: `color: ${config.image !== false ? 'white; text-shadow: 0 0 10px black;' : 'var(--primary-text-color);'}`,
content: `padding: ${config.showButtons ? '16px 16px 4px' : '16px'};`,
background: config.image !== false ? `background-image: url('${config.image || vendor.image || '/local/img/vacuum.png'}')` : ''
};
this._config = config;
}
set hass(hass) {
this._hass = hass;
if (hass && this._config) {
this.stateObj = this._config.entity in hass.states ? hass.states[this._config.entity] : null;
if (this.stateObj && this.state.showName) {
this.state.name = this._config.name || this.stateObj.attributes.friendly_name;
}
}
}
}
customElements.define('xiaomi-vacuum-card', XiaomiVacuumCard);
})(window.LitElement || Object.getPrototypeOf(customElements.get("hui-view")));
Thanks Stefano for sharing your excellent work.
Is anyone else using the Deebot 900 with HA?
Close, I have the 901.
I ended up having to just use the deebot integration with alexa, depedning on what integration I would use one or the other of my two deebots would work and the other not.
Hello Community,
I have a Ecovacs OZMO 900 and running HA as a Docker Container, has anyone sucessfully get it to work in a docker container?
Hey guys,
thanks for all the great work in here. Just trying to get @StefanGiu`s setup to work for me, but I am already getting stuck with setting up the custom xiaomi vacuum card. I have a 950 and the integration works, so I can see everything and get the data:
But, using the custom card, it does not uses the data:
It does not matter if I use the standard .js file from HACS itself or the one @StefanGiu provided…Here is my code:
- icon: 'mdi:robot-vacuum'
badges: []
cards:
- type: 'custom:xiaomi-vacuum-card'
entity: vacuum.juan_son
image: /local/deebot.jpg
name: Juan Son
vendor: deebot
buttons:
start: true
stop: true
locate: false
icons:
start: mdi:some-icon
stop: mdi:other-icon
labels:
status: Etat
battery: Batterie
mode: Puissance
main_brush: Brosse Principale
side_brush: Brosse Latérale
filter: Filtre
sensor: Capteurs
Anyone got an idea what I am doing wrong?
Having the same issue as @marothe
i think we missed something, i read everything again, but found no solution.
The basic functions are working but no status displayed at the lovelace card.
Great to see that I am not alone been tinkering with that one for a while. Did you use the Modified xiaomi-vacuum-card.js Stefano provided? Or the one the HACS plugin comes with? Have the feeling there might be the issue?!
I tried both, but i had the feeling that after changing the .js file nothing happend, i am not sure about the reason.
Had the same feeling! Nothing changed for me, tried all the other automations and scripts as well from Setfano but I guessed that if the basic implemenation does not work, there is no need in trying the rest or finding an error there. Maybe some of the other guys can chime in? Would be greatly appreciated! @StefanoGiu
Hey guys,
I’m completely new to hass but I’m trying to connect my Deebot 900 using steps above but for some reason the integration is not working.
configuration.yaml
vacuum:
- platform: deebot
username: myuseranme
password: mypassword
country: uk
continent: eu
deviceid: deviceid as per instructions
After saving and restating entities shows up but when I open it there is nothing
Funny thing is that I can actually see the link to my cleaning map in Developer Tools->States and when I open it is really the last one. so there is a connection of some kind with the robot.
Is there something i’m missing? Is there a way to get all data from deebot 900?
It seems that for at least some devices the data only updates after the vac is switched on. Then the info is lost after a reboot.
Ciao Mi puoi dire esattamente cosa fare per selezionare e pulire solo le stanze selezionate? Ho gia la card funzionante (Grazie per tutto il lavoro svolto) Ho solo bisogno di far funzionare la selezione delle stanza…
Hi guys,
i’m trying to use the Andrea Liosi custom component with deebot ozmo 950.
I configured configuration.yaml following instructions on github but I receive an error and no entity is showed in HA.
In log file I see a Vacuum inizialized in debug mode but checking registers in HA there is:
deebot: Error on device update!
17:28:27 – Aspirapolvere (ERROR)
Logger: homeassistant.components.vacuum
Source: custom_components/deebot/vacuum.py:224
Integration: Aspirapolvere ([documentation](https://www.home-assistant.io/integrations/vacuum), [issues](https://github.com/home-assistant/home-assistant/issues?q=is%3Aissue+is%3Aopen+label%3A%22integration%3A+vacuum%22))
First occurred: 17:28:27 (1 occurrences)
Last logged: 17:28:27
deebot: Error on device update!
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 322, in _async_add_entity await entity.async_device_update(warning=False)
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 470, in async_device_update await self.async_update()
File "/config/custom_components/deebot/vacuum.py", line 224, in async_update await self.hass.async_add_executor_job(self.device.request_all_statuses)
File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run result = self.fn(*self.args, **self.kwargs)
File "/usr/local/lib/python3.7/site-packages/deebotozmo/__init__.py", line 664, in request_all_statuses self.refresh_components()
File "/usr/local/lib/python3.7/site-packages/deebotozmo/__init__.py", line 642, in refresh_components self.exc_command('getCachedMapInfo')
File "/usr/local/lib/python3.7/site-packages/deebotozmo/__init__.py", line 714, in exc_command self.send_command(VacBotCommand(action, params))
File "/usr/local/lib/python3.7/site-packages/deebotozmo/__init__.py", line 718, in send_command self.iotmq.send_command(action, self._vacuum_address()) #IOTMQ devices need the full action for additional parsing
File "/usr/local/lib/python3.7/site-packages/deebotozmo/__init__.py", line 884, in send_command self._handle_ctl_api(action, self.__call_iotdevmanager_api(c ,verify_ssl=self.verify_ssl ))
File "/usr/local/lib/python3.7/site-packages/deebotozmo/__init__.py", line 1001, in _handle_ctl_api s(resp)
File "/usr/local/lib/python3.7/site-packages/deebotozmo/__init__.py", line 466, in _handle_ctl getattr(self, method)(ctl)
File "/usr/local/lib/python3.7/site-packages/deebotozmo/__init__.py", line 548, in _handle_cached_map mapid = response['info'][0]['mid']
IndexError: list index out of range
Any idea what is missing?
Thank for any suggestion