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

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第三方库


热门话题
检查java中两个链表之间的子集   java仅在findViewById()下显示一个ImageButton   在Java Graphics2D中,文本如何在矩形上居中对齐?   java需要一个用于电子表格计算器的正则表达式   ^java中的运算符   java通过一些属性配置文件根据环境动态更改wsdl端点URL   java Ebean/Play框架关系未更新   集合如何将POJO列表转换为Java流中的映射<String,List>?   java为什么JFrame不显示整个图像?   java如何将调用静态导入的泛型方法的结果传递给另一个方法?   迭代器或foreach中的java延迟   需要java socket logback日志接收器   在Java中初始化Map的静态数组   雅加达邮件Java MimeMail:解码后获得额外字符   java为什么这个xmldom解析器不能正确解析rtept、name和cmt标记?   java如何刷新Log4J2中的异步记录器(带中断器)   java使用构建插件pom生成的jar。xml作为同一pom中的依赖项   java基于位置的序列ADT如何在O(1)时间内插入元素?   java ORM实体与DDD实体   Java对象分配