控制(日本)空调的简易图书馆
eakon的Python项目详细描述
埃肯
eakon是一个控制空调的简单python库。在
网上有很多这样的代码,但我发现没有一个能满足我的需求:
要控制的每个HVAC单元都需要创建自己的实例(实例依赖于单元制造商)。在
- 在
每个实例跟踪空调的当前状态(假设不随机组遥控器改变)
在 - 在
可以使状态保持不变
在 - 在
处理日本市场的空调
在
此外,为了确保可读性和演进性,代码应该尽可能地保持最少的深奥性。在
使用bitstring大大有助于实现这一目标。在
使用
在实例化过程中或之后,进行设置,得到一个位串或一个wave。 wave的格式是pigpio library使用的,遵循sample irrp.py脚本的示例。在
注:The内部收益率脚本有长度限制。 您可以参考(或者更好地说,使用)my AnaviInfraredPhat库,该库处理波的压缩,以解决pigpio长度限制的问题。在
压缩算法是https://korintje.com/archives/28的功劳
hvac=Daikin()hvac.power=daikin_enum.Power.ONhvac.temperature=21hvac.mode=daikin_enum.Mode.COOLhvac.fan_vertical_mode=daikin_enum.FanVerticalMode.TOPlogging.info("\r{}".format(hvac))logging.info(hvac.bitstring)logging.info(hvac.wave)>>2020-01-0100:00:00.000UTC[INFO]__init__:Model:Daikinpower:ONmode:COOLtemperature:21°Cwide_vanne_mode:NOT_AVAILABLEarea_mode:NOT_AVAILABLEfan_power:AUTOfan_high_power:NOT_AVAILABLEfan_vertical_mode:TOPfan_horizontal_mode:UNDEFINEDfan_long:NOT_AVAILABLE2020-01-0100:00:00.000UTC[INFO]__init__:1000100001011011111001000000000001000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000100100100010000101101111100100000000000000000010011100010101000000000000000101000000000000000001100000000001100000000000000000110000110000000000000000011111002020-01-0100:00:00.000UTC[INFO]__init__:[433,440,433,440,433,440,433,440,433,440,433,25194,3495,1746,433,1288,433,440,433,440,433,440,433,1288,433,440,433,440,433,440,433,440,433,1288,433,440,433,1288,433,1288,433,440,433,1288,433,1288,433,1288,433,1288,433,1288,433,440,433,440,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,440,433,440,433,1288,433,440,433,440,433,25194,3495,1746,433,1288,433,440,433,440,433,440,433,1288,433,440,433,440,433,440,433,440,433,1288,433,440,433,1288,433,1288,433,440,433,1288,433,1288,433,1288,433,1288,433,1288,433,440,433,440,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,440,433,440,433,1288,433,1288,433,1288,433,440,433,440,433,440,433,1288,433,440,433,1288,433,440,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,440,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,1288,433,440,433,440,433,440,433,440,433,1288,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,1288,433,1288,433,1288,433,1288,433,440,433,440,433]hvac.power=daikin_enum.Power.OFFlogging.info("\r{}".format(hvac))logging.info(hvac.bitstring)logging.info(hvac.wave)>>2020-01-0100:00:00.000UTC[INFO]__init__:Model:Daikinpower:OFFmode:COOLtemperature:21°Cwide_vanne_mode:NOT_AVAILABLEarea_mode:NOT_AVAILABLEfan_power:AUTOfan_high_power:NOT_AVAILABLEfan_vertical_mode:TOPfan_horizontal_mode:UNDEFINEDfan_long:NOT_AVAILABLE2020-01-0100:00:00.000UTC[INFO]__init__:1000100001011011111001000000000001000000000000000000000000000000000000000000000000000000000000010000100000000000000000000000000000000000000000000000000000100101100010000101101111100100000000000000000000011100010101000000000000000101000000000000000001100000000001100000000000000000110000110000000000000000101111002020-01-0100:00:00.000UTC[INFO]__init__:[433,440,433,440,433,440,433,440,433,440,433,25194,3495,1746,433,1288,433,440,433,440,433,440,433,1288,433,440,433,440,433,440,433,440,433,1288,433,440,433,1288,433,1288,433,440,433,1288,433,1288,433,1288,433,1288,433,1288,433,440,433,440,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,440,433,440,433,440,433,440,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,440,433,440,433,1288,433,440,433,1288,433,25194,3495,1746,433,1288,433,440,433,440,433,440,433,1288,433,440,433,440,433,440,433,440,433,1288,433,440,433,1288,433,1288,433,440,433,1288,433,1288,433,1288,433,1288,433,1288,433,440,433,440,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,1288,433,1288,433,440,433,440,433,440,433,1288,433,440,433,1288,433,440,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,440,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,1288,433,440,433,440,433,440,433,440,433,1288,433,1288,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,440,433,1288,433,440,433,1288,433,1288,433,1288,433,1288,433,440,433,440,433]
位串主要用于调试目的,但我认为它也可以用于其他目的。在
现在,您的住宅中可能有多个不同型号的HVAC,您可能需要一种简单的方法来配置哪个型号的房间。在
对于这种情况,可以使用helper方法按名称动态实例化:
^{pr2}$您可以注意到比较上述两个示例,Daikin类支持设置“fan_horizontal_mode”(但目前尚未定义),但Toshiba类不支持
此外,第一个示例显示通过直接使用关联枚举来设置属性,而第二个示例显示按名称设置属性。在
注意:这里的目的是允许访问特定于模型的枚举,而不必以硬编码的方式引用它们。在
设置值也可以用字符串设置,即e.power = e.enums["Power"].ON
相当于e.power = e.enums["Power"]["ON"]
访问不可用的枚举元素将引发AttributeError
或KeyError
,具体取决于所使用的访问方法:
e.power=e.enums["Power"].PARTIALLY_ON>>AttributeError:PARTIALLY_ONe.power=e.enums["Power"]["PARTIALLY_ON"]>>KeyError:'PARTIALLY_ON'
最后,如果模型不受支持,将引发NotImplementedError
:
try:e=get_eakon_instance_by_model("toto")exceptNotImplementedErrorase:logging.warning(e)>>2020-01-0100:00:00.000UTC[WARNING]__init__:NomoduletotoimplementingclassTotowasfound.Modeltotoisunsupported.
(支持)已知型号
正如图书馆的名称(エアコン)所暗示的那样,人们对日本品牌非常关注,而且很可能仅限于最近(2020年)的日本车型。在
开发采用以下型号的遥控器:
- 大金ARC47850(至少C型和CX型)
- 日立SP-RC4(封面a lot of hitachi models)
- 东芝RG66J5(显然所有设备都是从2020年开始的,也可能是几年前?)在
Daikin在日本至少有2个其他协议可用(此外,用于非国内市场的协议可能有所不同)。在
附加模型的实现应该相对容易。在
局限性
只实现标准函数,在extenso中:
- 计时器不受支持(缺乏兴趣)
- 额外功能,如单元清洁、触发诊断等。。。不支持
- 项目
标签: