控制(日本)空调的简易图书馆

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"]

访问不可用的枚举元素将引发AttributeErrorKeyError,具体取决于所使用的访问方法:

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中:

  • 计时器不受支持(缺乏兴趣)
  • 额外功能,如单元清洁、触发诊断等。。。不支持

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Android:如何写入特定行,Java   Java中从欧元货币字符串中删除空格的数字   Java非均匀多维数组   解密AES时出现java空指针异常   java ConcurrentModificationException尝试移除列表上的所有内容时(非迭代)   Java数学库计算日志   java ISO8601,使用Jackson以毫秒表示json   避免副作用的java最佳实践   java获取JMeterException:调用bsh方法时出错:未定义参数:saa。使用beanshell取样器时   使用javascript将会话从一个jsp页面传输到另一个jsp页面   java在列表中组合相邻元素   java多行JTextPane   java Hibernate映射文件连接两个表而不定义关系?   如何使用Ajax、Java和Spring框架将文件从网页上传到Google云存储   多线程多线程Java中producerconsumer代码的多线程没有提供正确的输出?