本帖最后由 louis_lee 于 2022-11-28 23:08 编辑
icloud 出了啥问题?
最近突然发现icloud集成不好用了,登陆提示各种错误。于是,我就在论坛翻了翻,看看有没有大佬遇到过这种问题。发现还不少:
homeassistant 添加Apple icloud 无法输入验证码问题
设置icloud集成出现Unknown error occurred
apple icloud集成无法使用的问题
原来问题居然是苹果将中国区icloud域名由icloud.com换为了icloud.com.cn,而icloud集成的依赖pyicloud没有做针对性修改。我翻了翻pyicloud github repo,看到了有一个PR修改了国区icloud域名:Move endpoints of Chinese iCloud account to icloud.com.cn by WestXu · Pull Request #383 · picklepete/pyicloud,但一直没merge。我估计merge概率不大,因为就国区跟别人不一样,搞特殊
然而问题还是得解决啊,因为icloud集成对我来说还挺重要的。倒不是用icloud device_tracker(HA IOS APP可以很好解决这个问题),而是用icloud:play sound服务,也就是用来找手机的。由于我在家里会把手机乱丢乱放而且还开静音,只能一个一个屋到处翻,很浪费时间。通过小爱同学调用HA icloud:play sound服务,iphone就会发出提醒声,大幅降低了找手机时间~
最开始的解决思路
活人不能被尿憋死~于是我就按照论坛的方法开搞,也就是将pyicloud/base.py文件里的域名,修改为icloud.com.cn。不过由于我是用HAOS的方式部署的homeassistant,也就是说icloud运行在HA容器里,而pyicloud所在目录不能持久化,会随着HA升级而被覆盖,改动也无效了。针对这种情况,最开始我搞了一个HA自动化,每次HA启动后执行一个shell脚本:如果/config/.HA_VERSION(意味着HA升级了)发生变化且pyicloud包没有升版本,那么就将预先改好(将icloud域名换为icloud.com.cn)的pyicloud/base.py文件copy到指定位置。
运行一段时间后,整体还不错,但还是有个小问题。由于HA在所有集成都加载后才执行自动化,这意味着每次升级后先加载icloud集成,再复制文件,icloud还是会报错。这时候,只能再重启一遍HA,icloud集成才能恢复正常。这还是很麻烦,不仅增加了额外操作,而且还要浪费1分钟的宝贵时间,强迫症简直不能忍~
那么还有什么的别的方案嘛?
想了想,还可以搞一个DNS解析,在路由器hosts文件针对icloud.com加一个cname icloud.com.cn。但转念一想,就算可以成功解析到icloud中国的服务器,估计Nginx(或其他web server)也会check域名,请求大概率不会通过。
解决方案 pro max:icloud888
只能换个思路了~诶,自定义集成不随HA版本而变动,不就可以持久化了吗?于是我就将icloud集成与pyicloud打包在一起,把pyicloud中icloud domain改好,并调整了icloud集成的pyicloud依赖。这样一来,就封装成了中国大区特供icloud集成:icloud888(听名字就知道是国区特供啦)
有朋友可能问了,你这个集成与友商(原icloud集成)有啥区别?
除了domain换了以外,其他一点区别都没有,也就是说包括entity/device name, unique_id在内都完全一样,所以在使用icloud888时,请不要配置icloud集成已使用的appleid。
使用方法也很简单,直接从GitHub上clone下来重启即可。可以在webUI配置-》设备与服务-》添加集成中找到icloud888,配置与使用方法与原icloud一样。
cd /config/custom_components
git clone https://github.com/louisslee/icloud888.git
这样问题就解决了,终于能痛痛快快用上icloud集成啦!有需要的朋友,可以用起来~
另注:请使用2022.08.x以上的HA
|