Init
This commit is contained in:
14
07-Other/生活/智能家居/AppleTV.md
Normal file
14
07-Other/生活/智能家居/AppleTV.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# 前言
|
||||
- 知乎
|
||||
- https://www.zhihu.com/people/XMedia2015
|
||||
# 相关软件
|
||||
>有什么关于 Apple TV 的用后体验及软件意见分享? - 殇小辛的回答 - 知乎
|
||||
- https://www.zhihu.com/question/572608645/answer/3167083336
|
||||
>在大陆使用 Apple TV 有什么建议?
|
||||
- https://www.zhihu.com/question/59459394/answer/2933247325
|
||||
|
||||
1. infuse
|
||||
2. Fileball
|
||||
3. B站:miao/cheers
|
||||
4. 看电视台节目的App:APTV、iSTB Lite、iSTB、iPlay TV、TV+
|
||||
5. 阿里云盘播放器:iiVA和Alplayer
|
41
07-Other/生活/智能家居/Aqara Homekit & HomeAssistant.md
Normal file
41
07-Other/生活/智能家居/Aqara Homekit & HomeAssistant.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# 前言
|
||||
- Aqara M2刷固件(M2需要拆机,M1S 4.0固件之后也不支持Telnet开启)
|
||||
- 利用Aqara Gateway集成将Aqara网关(M1s,P3,E1)接入HA:https://post.smzdm.com/p/agqnrkpw/
|
||||
- AqaraGateway:https://github.com/niceboygithub/AqaraGateway
|
||||
- Aqara M2 网关开启Telnet集成到Home Assistant:https://sspai.com/post/86223
|
||||
- M2 2022 POE版本开启Telnet: https://github.com/niceboygithub/AqaraCameraHubfw/blob/main/modified/M2PoE/telnet.md
|
||||
- [[#M2 2022 Telnet]]
|
||||
- ***万物皆可HA?教你把各种智能设备接入Home Assistant 图文教程***:https://www.bilibili.com/opus/770959033731383298
|
||||
# Aqara HomeKit反接到HA
|
||||
https://post.smzdm.com/p/awz3kgrg/
|
||||
|
||||
1. Aqara接入一次Homekit之后,在IOS家庭App中选中网关,点击网关,之后选择从"家庭"中移除桥接设备。(在家庭APP中可以打开配对模式) 31141937533
|
||||
2. 重新启动一下Aqara网关。
|
||||
3. 之后就可以HA中找到Aqara网关的HomeKit设备连接提示了。
|
||||
|
||||
| https://bbs.hassbian.com/thread-24044-1-1.html |
|
||||
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| _本帖最后由 longtor 于 2024-5-22 05:38 编辑_ <br> <br><br>Aqara m2网关反向接入homeassistant ,一个网关同时接入 Aqara、苹果家庭、HA 。<br><br>总体思路:先接Aqara APP、苹果家庭APP(homekit),再删除homekit,然后接入ha,最后从ha接回homekit(ha自带的hassbridge接入到苹果家庭)。<br><br>1、Aqara APP:添加网关M2<br>2、苹果家庭APP:<br>(1)加入:网关M2。<br>(2)删除:家庭设置 - 家居中枢与桥接 - 删除 Aqara Hub M2<br><br>3、homeassistant:<br>(1)集成 里面,自动弹出新集成。配置。<br>(2)填写网关上面homekit的ID码,提交。<br>(3)在 新增设备选项中填写 区域,或取消,接入成功。<br>(4)Homekit Bridge:生成二维码。<br><br>4、苹果家庭 APP:扫二维码,新增 网桥,homekit 设备 出现。 |
|
||||
| |
|
||||
# M2 2022 Telnet
|
||||
Aqara M2网关接HA教程
|
||||
如果你正在寻找如何将Aqara M2 POE网关接入Home Assistant,那么你来对地方了!这里有一个详细的教程,专门针对M2 POE版本(型号ZHWG19LM)。通过以下步骤,你可以轻松地将你的网关接入Home Assistant。
|
||||
|
||||
**准备工作** 🛠️
|
||||
首先,你需要准备一个U盘并格式化。注意,格式化必须为FAT32,分区必须为MBR。如果后续网关降级失败,可以从这两点入手。
|
||||
下载降级文件 📥
|
||||
从GitHub的AqaraCameraHubfw项目中下载两个降级文件,并将它们放入U盘。
|
||||
|
||||
**正式步骤** 📋
|
||||
断电并插入U盘:拔掉M2的电源线断电,然后将U盘插上。
|
||||
按住按钮并通电:按住前面的小按钮,同时插上电源线通电。当小灯变成淡紫色时,松开按钮。等待一会儿,M2会完成降级并重启,灯会变成正常的颜色。成功后,M2就降级为了一个很老的版本并开启了telnet。
|
||||
|
||||
**连接telnet**
|
||||
使用telnet连上M2,账号为root,没有密码,直接回车。然后执行三条命令来进行更新,用的是AqaraCameraHubfw中修改过的固件。看了下基本是跟官方同步的版本。后续不要用aqara home进行更新,需要更新的话就连上telnet使用这个命令进行更新。执行更新命令的时候可能需要网关所在的网络有科学上网环境。如果执行第三个命令的时候后输出找不到文件或目录,那就是第二个命令没有成功下载到文件。我们将/tmp/curl -s -k -L -o....中的-s删掉,不让他静默执行,就可以看到报错信息输出,可通过这个查找问题原因。执行完这三个命令后,输入reboot对网关进行重启,然后再次连上telnet执行那三个命令,然后reboot重启(非常重要,一定要这样执行两次)。这时候我们进aqara home查看版本信息,会看到已经是最新的版本了。
|
||||
|
||||
**关闭自动更新** 🚫
|
||||
接下来关闭自动更新固件的指令,防止网关自动更新。
|
||||
|
||||
**接入Home Assistant** 🏠
|
||||
这时候M2网关已经完成了固件的刷入并开启了telnet,然后我们在hacs中的Repository中输入aqara gateway的项目地址并安装。安装完成重启ha,然后我们就能把网关接入ha了。
|
||||
|
3
07-Other/生活/智能家居/HDIM CEC.md
Normal file
3
07-Other/生活/智能家居/HDIM CEC.md
Normal file
@@ -0,0 +1,3 @@
|
||||
- 这是一个简单的连接器,用于通过 MQTT 公开 HDMI-CEC 适配器 https://hub.docker.com/r/tobiasha/hdmi-cec
|
||||
- Raspberry Pi 运行 hdmi-cec-rest 的 Docker 映像 https://github.com/blakeblackshear/rpi-hdmi-cec-rest
|
||||
- https://github.com/hsbiti/docker-hdmi-cec-rest
|
62
07-Other/生活/智能家居/HomeAssistant设置天气相关.md
Normal file
62
07-Other/生活/智能家居/HomeAssistant设置天气相关.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# 前言
|
||||
- 和风天气(heweather) HomeAssistant插件使用说明 https://www.bilibili.com/opus/687775477026259015
|
||||
- HomeAssistant 和风天气插件的自动化分享 https://www.bilibili.com/read/cv18078640/
|
||||
# 和风天气 Token
|
||||
afdc8b37975043888ad47943ff25b980
|
||||
|
||||
|
||||
# HA
|
||||
在configuration.yaml中添加:
|
||||
```YAML
|
||||
template:
|
||||
- trigger:
|
||||
- platform: time_pattern
|
||||
hours: "*"
|
||||
action:
|
||||
- service: weather.get_forecasts
|
||||
data:
|
||||
type: hourly
|
||||
target:
|
||||
entity_id: weather.he_feng_tian_qi
|
||||
response_variable: hourly
|
||||
sensor:
|
||||
- name: "小时天气预警"
|
||||
unique_id: weather_forecast_hourly
|
||||
state: >
|
||||
{% if hourly['weather.he_feng_tian_qi'].forecast[0].condition in ('sunny','cloudy','partlycloudy','windy') %}
|
||||
off
|
||||
{% else %}
|
||||
on
|
||||
{% endif %}
|
||||
attributes:
|
||||
states: >
|
||||
{% if hourly['weather.he_feng_tian_qi'].forecast[0].condition in ('sunny','cloudy','partlycloudy','windy') %}
|
||||
未来一小时,天气{{ hourly['weather.he_feng_tian_qi'].forecast[0].text }},没有降雨
|
||||
{% else %}
|
||||
接下来一小时会有{{ hourly['weather.he_feng_tian_qi'].forecast[0].text }},降水概率为 {{ hourly['weather.he_feng_tian_qi'].forecast[0].precipitation_probability }}%
|
||||
{% endif %}
|
||||
```
|
||||
|
||||
## 自动化
|
||||
对应的自动化:
|
||||
```yaml
|
||||
alias: 一小时天气预警
|
||||
description: ""
|
||||
triggers:
|
||||
- entity_id:
|
||||
- sensor.xiao_shi_tian_qi_yu_jing
|
||||
trigger: state
|
||||
actions:
|
||||
- device_id: 384bea520a0ee825ecb63fb71d19b2a1
|
||||
domain: mobile_app
|
||||
type: notify
|
||||
message: "注意注意! 接下来的天气为{{state_attr('sensor.xiao_shi_tian_qi_yu_jing','states')}} "
|
||||
title: 天气预警
|
||||
- action: notify.send_message
|
||||
metadata: {}
|
||||
data:
|
||||
message: "[\"注意注意! {{state_attr('sensor.xiao_shi_tian_qi_yu_jing','states')}}\"]"
|
||||
target:
|
||||
entity_id: notify.xiaomi_cn_799945688_l06a_play_text_a_5_1
|
||||
initial_state: true
|
||||
```
|
11
07-Other/生活/智能家居/Node-Red.md
Normal file
11
07-Other/生活/智能家居/Node-Red.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# 安装
|
||||
Docker模式下安装:
|
||||
https://blog.csdn.net/weixin_44379605/article/details/127784744
|
||||
```c++
|
||||
docker run -d -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red
|
||||
```
|
||||
|
||||
# 创建令牌
|
||||
点击用户->"安全"选项卡->创建长期令牌
|
||||
|
||||
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJjMWZlYjYzYmZjMzk0MDU3YjE1MTFhN2IyZTQzODYwZCIsImlhdCI6MTczODY2MjgzMiwiZXhwIjoyMDU0MDIyODMyfQ.P8nUFoxJFPst_CpJHvShag7sMk6yvG841Kv0hL_tPdU
|
1
07-Other/生活/智能家居/“Homeassistant+Siri+捷径”实现更多个性化智能家居场景.md
Normal file
1
07-Other/生活/智能家居/“Homeassistant+Siri+捷径”实现更多个性化智能家居场景.md
Normal file
@@ -0,0 +1 @@
|
||||
https://zhuanlan.zhihu.com/p/352298928
|
271
07-Other/生活/智能家居/扫地机器人.md
Normal file
271
07-Other/生活/智能家居/扫地机器人.md
Normal file
@@ -0,0 +1,271 @@
|
||||
科沃斯ID:ECJ3FLME
|
||||
|
||||
# fix HA不出现实体的问题
|
||||
- https://bbs.hassbian.com/thread-27784-1-1.html
|
||||
- https://bbs.hassbian.com/thread-28408-1-1.html
|
||||
|
||||
1. 进入容器的CMD
|
||||
2. cd /usr/local/lib/python3.13/site-packages/deebot_client/hardware/deebot
|
||||
3. ln -svfT lr4qcs.py 3sp2in.py
|
||||
|
||||
删除 rm -rf 3sp2in.py
|
||||
|
||||
- https://mitmproxy.org/
|
||||
- 【mitmproxy抓包工具!!! 从安装到简单使用】 https://www.bilibili.com/video/BV1UC4y1t7EL/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
|
||||
- IOS使用MitmProxy
|
||||
- https://www.jianshu.com/p/498073a8971f
|
||||
- https://hachibye.medium.com/%E4%BB%A5mitmproxy%E7%8D%B2%E5%8F%96%E6%89%8B%E6%A9%9F%E6%95%B8%E6%93%9A%E5%B0%81%E5%8C%85-9870f6507b63
|
||||
|
||||
https://github.com/DeebotUniverse/client.py/issues/492
|
||||
|
||||
```
|
||||
<redacted>
|
||||
```
|
||||
|
||||
# In HA my X5 Pro did'nt accept cleaning commands (rcp not support error)
|
||||
# Command Json
|
||||
Start
|
||||
https://api-ngiot.dc-cn.cn.ecouser.net/api/iot/endpoint/control?si=6btMpMAS6PhZrX3D&ct=q&eid=9b7f3e00-3bea-4354-9ba8-b0dc9ceb6e0e&et=3sp2in&er=96uOLWSM&apn=clean_V2&fmt=j
|
||||
{"body":{"data":{"act":"start","content":{"type":"auto"}}},"header":{"channel":"iOS","reqid":"RIzVHS","ts":"1741248430546","ver":"0.0.50","m":"request","pri":1,"tzm":480,"tzc":"Asia\/Shanghai"}}
|
||||
|
||||
Pause
|
||||
https://api-ngiot.dc-cn.cn.ecouser.net/api/iot/endpoint/control?si=EKptJpQmzpbr4rKF&ct=q&eid=9b7f3e00-3bea-4354-9ba8-b0dc9ceb6e0e&et=3sp2in&er=96uOLWSM&apn=clean_V2&fmt=j
|
||||
{"body":{"data":{"act":"pause"}},"header":{"channel":"iOS","reqid":"yepkRW","ts":"1741248436662","ver":"0.0.50","m":"request","pri":1,"tzm":480,"tzc":"Asia\/Shanghai"}}
|
||||
|
||||
Resume
|
||||
https://api-ngiot.dc-cn.cn.ecouser.net/api/iot/endpoint/control?si=6hYStayiak272hKX&ct=q&eid=9b7f3e00-3bea-4354-9ba8-b0dc9ceb6e0e&et=3sp2in&er=96uOLWSM&apn=clean_V2&fmt=j
|
||||
{"body":{"data":{"act":"resume"}},"header":{"channel":"iOS","reqid":"nYtIgx","ts":"1741248438194","ver":"0.0.50","m":"request","pri":1,"tzm":480,"tzc":"Asia\/Shanghai"}}
|
||||
|
||||
Stop
|
||||
https://api-ngiot.dc-cn.cn.ecouser.net/api/iot/endpoint/control?si=kSFXbynehrfkNWEK&ct=q&eid=9b7f3e00-3bea-4354-9ba8-b0dc9ceb6e0e&et=3sp2in&er=96uOLWSM&apn=clean_V2&fmt=j
|
||||
{"body":{"data":{"act":"stop"}},"header":{"channel":"iOS","reqid":"EiLUjr","ts":"1741248516782","ver":"0.0.50","m":"request","pri":1,"tzm":480,"tzc":"Asia\/Shanghai"}}
|
||||
|
||||
AI Clean Start
|
||||
https://api-ngiot.dc-cn.cn.ecouser.net/api/iot/endpoint/control?si=trfmKfcdAKwWaRim&ct=q&eid=9b7f3e00-3bea-4354-9ba8-b0dc9ceb6e0e&et=3sp2in&er=96uOLWSM&apn=clean_V2&fmt=j
|
||||
{"body":{"data":{"act":"start","content":{"type":"entrust"}}},"header":{"channel":"iOS","reqid":"pSKuSb","ts":"1741249424264","ver":"0.0.50","m":"request","pri":1,"tzm":480,"tzc":"Asia\/Shanghai"}}
|
||||
|
||||
Charge
|
||||
https://api-ngiot.dc-cn.cn.ecouser.net/api/iot/endpoint/control?si=JC4G5mYJnMHaA6mR&ct=q&eid=9b7f3e00-3bea-4354-9ba8-b0dc9ceb6e0e&et=3sp2in&er=96uOLWSM&apn=charge&fmt=j
|
||||
{"body":{"data":{"act":"go"}},"header":{"channel":"iOS","reqid":"GDJHxj","ts":"1741249495751","ver":"0.0.50","m":"request","pri":1,"tzm":480,"tzc":"Asia\/Shanghai"}}
|
||||
|
||||
This is a single room vacuum only:
|
||||
https://api-ngiot.dc-cn.cn.ecouser.net/api/iot/endpoint/control?si=NM7kXnJYG2mszmwY&ct=q&eid=9b7f3e00-3bea-4354-9ba8-b0dc9ceb6e0e&et=3sp2in&er=96uOLWSM&apn=clean_V2&fmt=j
|
||||
{"body":{"data":{"act":"start","content":{"type":"freeClean","value":"1,0"}}},"header":{"channel":"iOS","reqid":"MMTIad","ts":"1741249568936","ver":"0.0.50","m":"request","pri":1,"tzm":480,"tzc":"Asia\/Shanghai"}}
|
||||
|
||||
|
||||
# Add Deebot X5 Pro Omni 提交
|
||||
相关的Git提交:
|
||||
https://github.com/DeebotUniverse/client.py/pull/659/commits/da52c671ce544c21b6753b380148f93f8dadc6e5#diff-a5514fb587b325f41e547af3e94ae3470a2366bef25dd8b5ae5842fc25328bc0
|
||||
|
||||
- lr4qcs.py:p1jij8.py
|
||||
- p1jij8.py
|
||||
## p1jij8.py
|
||||
```c++
|
||||
"""Deebot T20 Omni Capabilities."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from deebot_client.capabilities import (
|
||||
Capabilities,
|
||||
CapabilityClean,
|
||||
CapabilityCleanAction,
|
||||
CapabilityCustomCommand,
|
||||
CapabilityEvent,
|
||||
CapabilityExecute,
|
||||
CapabilityLifeSpan,
|
||||
CapabilityMap,
|
||||
CapabilitySet,
|
||||
CapabilitySetEnable,
|
||||
CapabilitySettings,
|
||||
CapabilitySetTypes,
|
||||
CapabilityStats,
|
||||
CapabilityWater,
|
||||
DeviceType,
|
||||
)
|
||||
from deebot_client.commands.json.advanced_mode import GetAdvancedMode, SetAdvancedMode
|
||||
from deebot_client.commands.json.battery import GetBattery
|
||||
from deebot_client.commands.json.carpet import (
|
||||
GetCarpetAutoFanBoost,
|
||||
SetCarpetAutoFanBoost,
|
||||
)
|
||||
from deebot_client.commands.json.charge import Charge
|
||||
from deebot_client.commands.json.charge_state import GetChargeState
|
||||
from deebot_client.commands.json.clean import Clean, CleanArea, GetCleanInfo
|
||||
from deebot_client.commands.json.clean_count import GetCleanCount, SetCleanCount
|
||||
from deebot_client.commands.json.clean_logs import GetCleanLogs
|
||||
from deebot_client.commands.json.clean_preference import (
|
||||
GetCleanPreference,
|
||||
SetCleanPreference,
|
||||
)
|
||||
from deebot_client.commands.json.continuous_cleaning import (
|
||||
GetContinuousCleaning,
|
||||
SetContinuousCleaning,
|
||||
)
|
||||
from deebot_client.commands.json.custom import CustomCommand
|
||||
from deebot_client.commands.json.error import GetError
|
||||
from deebot_client.commands.json.fan_speed import GetFanSpeed, SetFanSpeed
|
||||
from deebot_client.commands.json.life_span import GetLifeSpan, ResetLifeSpan
|
||||
from deebot_client.commands.json.map import (
|
||||
GetCachedMapInfo,
|
||||
GetMajorMap,
|
||||
GetMapTrace,
|
||||
GetMinorMap,
|
||||
)
|
||||
from deebot_client.commands.json.multimap_state import (
|
||||
GetMultimapState,
|
||||
SetMultimapState,
|
||||
)
|
||||
from deebot_client.commands.json.network import GetNetInfo
|
||||
from deebot_client.commands.json.play_sound import PlaySound
|
||||
from deebot_client.commands.json.pos import GetPos
|
||||
from deebot_client.commands.json.relocation import SetRelocationState
|
||||
from deebot_client.commands.json.stats import GetStats, GetTotalStats
|
||||
from deebot_client.commands.json.true_detect import GetTrueDetect, SetTrueDetect
|
||||
from deebot_client.commands.json.volume import GetVolume, SetVolume
|
||||
from deebot_client.commands.json.water_info import GetWaterInfo, SetWaterInfo
|
||||
from deebot_client.commands.json.work_mode import GetWorkMode, SetWorkMode
|
||||
from deebot_client.const import DataType
|
||||
from deebot_client.events import (
|
||||
AdvancedModeEvent,
|
||||
AvailabilityEvent,
|
||||
BatteryEvent,
|
||||
CachedMapInfoEvent,
|
||||
CarpetAutoFanBoostEvent,
|
||||
CleanCountEvent,
|
||||
CleanLogEvent,
|
||||
CleanPreferenceEvent,
|
||||
ContinuousCleaningEvent,
|
||||
CustomCommandEvent,
|
||||
ErrorEvent,
|
||||
FanSpeedEvent,
|
||||
FanSpeedLevel,
|
||||
LifeSpan,
|
||||
LifeSpanEvent,
|
||||
MajorMapEvent,
|
||||
MapChangedEvent,
|
||||
MapTraceEvent,
|
||||
MultimapStateEvent,
|
||||
NetworkInfoEvent,
|
||||
PositionsEvent,
|
||||
ReportStatsEvent,
|
||||
RoomsEvent,
|
||||
StateEvent,
|
||||
StatsEvent,
|
||||
TotalStatsEvent,
|
||||
TrueDetectEvent,
|
||||
VolumeEvent,
|
||||
WorkMode,
|
||||
WorkModeEvent,
|
||||
water_info,
|
||||
)
|
||||
from deebot_client.models import StaticDeviceInfo
|
||||
from deebot_client.util import short_name
|
||||
|
||||
from . import DEVICES
|
||||
|
||||
DEVICES[short_name(__name__)] = StaticDeviceInfo(
|
||||
DataType.JSON,
|
||||
Capabilities(
|
||||
device_type=DeviceType.VACUUM,
|
||||
availability=CapabilityEvent(
|
||||
AvailabilityEvent, [GetBattery(is_available_check=True)]
|
||||
),
|
||||
battery=CapabilityEvent(BatteryEvent, [GetBattery()]),
|
||||
charge=CapabilityExecute(Charge),
|
||||
clean=CapabilityClean(
|
||||
action=CapabilityCleanAction(command=Clean, area=CleanArea),
|
||||
continuous=CapabilitySetEnable(
|
||||
ContinuousCleaningEvent,
|
||||
[GetContinuousCleaning()],
|
||||
SetContinuousCleaning,
|
||||
),
|
||||
count=CapabilitySet(CleanCountEvent, [GetCleanCount()], SetCleanCount),
|
||||
log=CapabilityEvent(CleanLogEvent, [GetCleanLogs()]),
|
||||
preference=CapabilitySetEnable(
|
||||
CleanPreferenceEvent, [GetCleanPreference()], SetCleanPreference
|
||||
),
|
||||
work_mode=CapabilitySetTypes(
|
||||
event=WorkModeEvent,
|
||||
get=[GetWorkMode()],
|
||||
set=SetWorkMode,
|
||||
types=(
|
||||
WorkMode.MOP,
|
||||
WorkMode.MOP_AFTER_VACUUM,
|
||||
WorkMode.VACUUM,
|
||||
WorkMode.VACUUM_AND_MOP,
|
||||
),
|
||||
),
|
||||
),
|
||||
custom=CapabilityCustomCommand(
|
||||
event=CustomCommandEvent, get=[], set=CustomCommand
|
||||
),
|
||||
error=CapabilityEvent(ErrorEvent, [GetError()]),
|
||||
fan_speed=CapabilitySetTypes(
|
||||
event=FanSpeedEvent,
|
||||
get=[GetFanSpeed()],
|
||||
set=SetFanSpeed,
|
||||
types=(
|
||||
FanSpeedLevel.QUIET,
|
||||
FanSpeedLevel.NORMAL,
|
||||
FanSpeedLevel.MAX,
|
||||
FanSpeedLevel.MAX_PLUS,
|
||||
),
|
||||
),
|
||||
life_span=CapabilityLifeSpan(
|
||||
types=(LifeSpan.BRUSH, LifeSpan.FILTER, LifeSpan.SIDE_BRUSH),
|
||||
event=LifeSpanEvent,
|
||||
get=[GetLifeSpan([LifeSpan.BRUSH, LifeSpan.FILTER, LifeSpan.SIDE_BRUSH])],
|
||||
reset=ResetLifeSpan,
|
||||
),
|
||||
map=CapabilityMap(
|
||||
cached_info=CapabilityEvent(CachedMapInfoEvent, [GetCachedMapInfo()]),
|
||||
changed=CapabilityEvent(MapChangedEvent, []),
|
||||
major=CapabilityEvent(MajorMapEvent, [GetMajorMap()]),
|
||||
minor=CapabilityExecute(GetMinorMap),
|
||||
multi_state=CapabilitySetEnable(
|
||||
MultimapStateEvent, [GetMultimapState()], SetMultimapState
|
||||
),
|
||||
position=CapabilityEvent(PositionsEvent, [GetPos()]),
|
||||
relocation=CapabilityExecute(SetRelocationState),
|
||||
rooms=CapabilityEvent(RoomsEvent, [GetCachedMapInfo()]),
|
||||
trace=CapabilityEvent(MapTraceEvent, [GetMapTrace()]),
|
||||
),
|
||||
network=CapabilityEvent(NetworkInfoEvent, [GetNetInfo()]),
|
||||
play_sound=CapabilityExecute(PlaySound),
|
||||
settings=CapabilitySettings(
|
||||
advanced_mode=CapabilitySetEnable(
|
||||
AdvancedModeEvent, [GetAdvancedMode()], SetAdvancedMode
|
||||
),
|
||||
carpet_auto_fan_boost=CapabilitySetEnable(
|
||||
CarpetAutoFanBoostEvent,
|
||||
[GetCarpetAutoFanBoost()],
|
||||
SetCarpetAutoFanBoost,
|
||||
),
|
||||
true_detect=CapabilitySetEnable(
|
||||
TrueDetectEvent, [GetTrueDetect()], SetTrueDetect
|
||||
),
|
||||
volume=CapabilitySet(VolumeEvent, [GetVolume()], SetVolume),
|
||||
),
|
||||
state=CapabilityEvent(StateEvent, [GetChargeState(), GetCleanInfo()]),
|
||||
stats=CapabilityStats(
|
||||
clean=CapabilityEvent(StatsEvent, [GetStats()]),
|
||||
report=CapabilityEvent(ReportStatsEvent, []),
|
||||
total=CapabilityEvent(TotalStatsEvent, [GetTotalStats()]),
|
||||
),
|
||||
water=CapabilityWater(
|
||||
amount=CapabilitySetTypes(
|
||||
event=water_info.WaterAmountEvent,
|
||||
get=[GetWaterInfo()],
|
||||
set=SetWaterInfo,
|
||||
types=(
|
||||
water_info.WaterAmount.LOW,
|
||||
water_info.WaterAmount.MEDIUM,
|
||||
water_info.WaterAmount.HIGH,
|
||||
water_info.WaterAmount.ULTRAHIGH,
|
||||
),
|
||||
),
|
||||
mop_attached=CapabilityEvent(water_info.MopAttachedEvent, [GetWaterInfo()]),
|
||||
),
|
||||
),
|
||||
)
|
||||
```
|
Reference in New Issue
Block a user