271 lines
11 KiB
Markdown
271 lines
11 KiB
Markdown
科沃斯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()]),
|
||
),
|
||
),
|
||
)
|
||
``` |