06-sep: [aspiradora] pack2: vaciado, auto, stats, consumibles, potencia, agua, voz

This commit is contained in:
juanjo
2026-09-06 14:45:22 +02:00
parent d995af2007
commit df2fbadcc3
3 changed files with 191 additions and 19 deletions

View File

@@ -21,6 +21,21 @@ MAP_R2205 = {
"cleaning_time": {"siid": 4, "piid": 2},
"cleaning_area": {"siid": 4, "piid": 3},
"volume": {"siid": 7, "piid": 1},
"voice_id": {"siid": 7, "piid": 2},
"set_voice": {"siid": 7, "aiid": 4},
"auto_collect": {"siid": 15, "piid": 1},
"start_collect": {"siid": 15, "aiid": 1},
"first_clean_time": {"siid": 12, "piid": 1},
"total_clean_time": {"siid": 12, "piid": 2},
"total_clean_times": {"siid": 12, "piid": 3},
"total_clean_area": {"siid": 12, "piid": 4},
"brush_left_time": {"siid": 9, "piid": 1},
"brush_life_level": {"siid": 9, "piid": 2},
"brush_left_time2": {"siid": 10, "piid": 1},
"brush_life_level2": {"siid": 10, "piid": 2},
"filter_life_level": {"siid": 11, "piid": 1},
"filter_left_time": {"siid": 11, "piid": 2},
"mop_mode": {"siid": 4, "piid": 5},
"start_clean": {"siid": 2, "aiid": 1},
"stop_clean": {"siid": 4, "aiid": 2},
"pause": {"siid": 2, "aiid": 2},
@@ -37,6 +52,7 @@ ESTADOS = {
}
CARGAS = {1: "cargando", 2: "no cargando", 5: "volviendo a cargar"}
MODOS = {0: "silencioso", 1: "estándar", 2: "medio", 3: "fuerte"}
AGUAS = {1: "bajo", 2: "medio", 3: "alto"}
def _env(nombre, defecto=""):
@@ -87,11 +103,53 @@ def estado():
f"Area: {d.get('cleaning_area')} m2{extra}")
def _get(vac, nombre):
d = vac.status().data
return d.get(nombre)
def stats():
vac = conectar()
d = vac.status().data
return (f"📊 <b>Estadísticas Dreame</b>\n"
f"Limpiezas totales: <b>{d.get('total_clean_times')}</b>\n"
f"Tiempo total: <b>{d.get('total_clean_time')} min</b>\n"
f"Area total: <b>{d.get('total_clean_area')} m2</b>")
def consumibles():
vac = conectar()
d = vac.status().data
return (f"🔧 <b>Consumibles</b>\n"
f"Cepillo: <b>{d.get('brush_life_level')}%</b> "
f"({d.get('brush_left_time')}h restantes)\n"
f"Lateral: <b>{d.get('brush_life_level2')}%</b> "
f"({d.get('brush_left_time2')}h restantes)\n"
f"Filtro: <b>{d.get('filter_life_level')}%</b> "
f"({d.get('filter_left_time')}h restantes)")
def auto_estado():
vac = conectar()
d = vac.status().data
return ("🗑️ Vaciado automático: "
f"<b>{'ON' if d.get('auto_collect') else 'OFF'}</b>")
def voz_estado():
vac = conectar()
d = vac.status().data
return (f"🔊 Voz actual: <b>{d.get('voice_id')}</b> | "
f"Volumen: <b>{d.get('volume')}</b>")
def main(argv):
if len(argv) < 2:
print("Uso: aspiradora.py estado|start|stop|home|pause|locate")
print("Uso: aspiradora.py estado|start|stop|home|pause|locate|"
"vaciar|auto|stats|consumibles|potencia|agua|voz")
return 1
cmd = argv[1].lower()
arg = argv[2] if len(argv) > 2 else ""
try:
vac = conectar()
if cmd == "estado":
@@ -111,8 +169,46 @@ def main(argv):
elif cmd == "locate":
vac.call_action("play_sound")
print("Emitiendo sonido de localizacion.")
elif cmd == "vaciar":
vac.call_action("start_collect")
print("Vaciando en la base.")
elif cmd == "auto":
if arg.lower() in ("on", "1"):
vac.set_property_by(15, 1, 1)
print("Vaciado automatico activado.")
elif arg.lower() in ("off", "0"):
vac.set_property_by(15, 1, 0)
print("Vaciado automatico desactivado.")
else:
print(auto_estado().replace("<b>", "").replace("</b>", ""))
elif cmd == "stats":
print(stats().replace("<b>", "").replace("</b>", ""))
elif cmd == "consumibles":
print(consumibles().replace("<b>", "").replace("</b>", ""))
elif cmd == "potencia":
if arg.isdigit() and int(arg) in MODOS:
vac.set_property_by(4, 4, int(arg))
print(f"Potencia: {MODOS[int(arg)]}.")
else:
d = vac.status().data
print(f"Potencia actual: {MODOS.get(d.get('cleaning_mode'))} "
f"(0-3).")
elif cmd == "agua":
if arg.isdigit() and int(arg) in AGUAS:
vac.set_property_by(4, 5, int(arg))
print(f"Agua: {AGUAS[int(arg)]}.")
else:
d = vac.status().data
print(f"Agua actual: {AGUAS.get(d.get('mop_mode'))} (1-3).")
elif cmd == "voz":
if arg:
vac.set_voice(arg)
print(f"Voz cambiada a {arg} (si el pack existe).")
else:
print(voz_estado().replace("<b>", "").replace("</b>", ""))
else:
print("Uso: aspiradora.py estado|start|stop|home|pause|locate")
print("Uso: aspiradora.py estado|start|stop|home|pause|locate|"
"vaciar|auto|stats|consumibles|potencia|agua|voz")
return 1
except Exception as e:
print(f"ERROR: {e}")