『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
楼主: Yonsm

[插件集成] ZhiModBus -通用 ModBus 空调组件(及中央空调接入方案简述)

  [复制链接]

46

主题

641

帖子

4394

积分

元老级技术达人

积分
4394
金钱
3723
HASS币
120
发表于 2020-6-25 11:19:03 | 显示全部楼层
膜拜大神,最近也准备搞空调
回复

使用道具 举报

3

主题

334

帖子

2018

积分

金牌会员

Rank: 6Rank: 6

积分
2018
金钱
1684
HASS币
0
发表于 2020-6-25 12:49:07 | 显示全部楼层
大哥能帮我编写下吗?   家里的志高中央空调也是modbus的,主要的命令已经弄出来了,具体能再帮忙完善下吗?

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from socket import *
import struct 
from functools import reduce
import re
def check_sum(data1):
        b1 = bytearray.fromhex(data1)
        sum = reduce(lambda x,y : x+y, b1[2:],0)
        checksum = (sum ^ 0xFF) + 1 & 0xFF
        b1+=struct.pack('B',(checksum))
        comend = re.findall(r'.{2}', b1.hex())
        print ('生成控制指令'+b1.hex())
        print ('生成控制指令'+'0x'+',0x'.join(comend))
        #print (b1.hex())
        return b1.hex()
        
def main():
        # 1.创建tcp_client_socket 套接字对象
        tcp_client_socket = socket(AF_INET,SOCK_STREAM)
        # 作为客户端,主动连接服务器较多,一般不需要绑定端口
        # 2.连接服务器
        tcp_client_socket.connect(("192.168.4.12",50000))
        #tcp_client_socket.connect(("www.baidu.com",80))
        air_v = '001301d3'#版本 #001301da锁定模式 #解除锁定模式001301db,调试模式001301d0  001301d3(书房可用)
        air_id = '80' #设备1#'80' 设备2#'40' 设备3#'20' 设备4#'10'
        air_x = '00000000000000'#补码 
        air_pow = '81'# 开机(  88制冷  81送风    #82 除湿  #83 制冷 #84制热  #90自动  )#80关机(错误 实际是制冷(但机器不工作)) #08关机
        air_Mod = '03'#04低 #02中 #01高 #03自动
        air_hot = '14'#温度 13表示19度.;14表示20度
        air_x2 = '0000'
        air_swing = '00'#开启摆动'04',#关闭摆动'00'
        air_end = '002c'#控制模式 #自由模式'002c' #遥控器锁定模式'0023' #解除遥控器模式'0022'
        #前20位参数组合
        aircomend =[
                air_v,
                air_id,
                air_x,
                air_pow,
                air_Mod,
                air_hot,
                air_x2,
                air_swing,
                air_end
        ]
        #合并前20位参数
        str1 = ''.join(aircomend)
        #生成效验码
        #查询码
        #str1 = '001301d00800000000000000000000000000002f'

        air_cmd = check_sum(str1)
        #生成控制指令
        tcp_client_socket.send(bytes.fromhex(air_cmd))
        
        #tcp_client_socket.send(bytes.fromhex('001301d08000000000000000000000000000002f80'))
        recv_data = tcp_client_socket.recv(1024)  # 此处与udp不同,客户端已经知道消息来自哪台服务器,不需要用recvfrom了
        #                                           设备                       开关状态          开关模式  风度     温度                             摆风 遥控器84开启04关闭                             
        #002a01d0 f0fe6b4b715e 80   00 00 00 00 00 00 00   01       00 14   00      00      13   54 50 50 49 00 00 00 00 00  00  00    00 00 00 00 00 0a 00 00 cd#设备1 #送风模式#19度
        #002a01d0 f0fe6b4b715e 80   00 00 00 00 00 00 00   01       00 14   00      00      12   54 50 50 49 00 00 00 00 00  00  00    00 00 00 00 00 0a 00 00 cd#设备1 #送风模式#18度
        #002a01d0 f0fe6b4b715e 80   00 00 00 00 00 00 00   00       00 14   00      00      12   54 50 50 49 00 00 00 00 00  00  00    00 00 00 00 00 0a 00 00 cf#设备1 #制冷模式#18度
        #002a01d0 f0fe6b4b715e 80   00 00 00 00 00 00 00   00       00 14   88      00      12   54 50 50 49 00 00 00 00 00  00  00    00000000000a000047#开启制冷模式
        #002a01d0 f0fe6b4b715e 80   00 00 00 00 00 00 00   01       00 14   00      00      12   54 50 50 49 00 00 00 00 00  00  00    00000000000a0000ce#关机
        #002a01d0 f0fe6b4b715e 80   00 00 00 00 00 00 00   01       00 14   88      04      12   54 50 50 49 00 00 00 00 00  04  00    00 00 00 00 00 0a 00 00 3e
        #002a01d0 f0fe6b4b715e 80   00 00 00 00 00 00 00   01       00 14   88      02      12   52 50 50 49 00 00 00 00 00  00  00    00000000000a000046
        #002a01d0 f0fe6b4b715e 80   00 00 00 00 00 00 00   01       00 14   88      04      12   52 50 50 49 00 00 00 00 00  00  00    00000000000a000044
        #002a01d0 f0fe6b4b715e 80   00000000000000         01       00 14   88      00      12   52 50 50 49 00 00 00 00 00  00  00    00000000000a000048
        #002a01d0 f0fe6b4b715e 80   00000000000000         01       00 14   a8      00      12   52 50 50 49 00 00 00 00 00  00  14    00000000000a000014#锁定
        #002a01d0 f0fe6b4b715e 80   00000000000000         01       00 14   00      00      15   52 50 50 49 00 00 00 00 00  00  00    00000000000a0000cd
        #002a01d0 f0fe6b4b715e 80   00000000000000         01       00 14   20      00      15   52 50 50 49 00 00 00 00 00  00  10    00000000000a00009d

        #002a01d0f0fe6b4b715e8000000000000000010014000015525050490000000000008000000000000a00004d#遥控器锁定模式
        #002a01d0f0fe6b4b715e8000000000000000000014000015525050490000000000000000000000000a0000ce
        #002a01d0f0fe6b4b715e8000000000000000010014000015525050490000000000000000000000000a0000cd#关闭遥控器锁定模式

        if recv_data:
            print("返回的消息为:",recv_data.hex())
        else:
            print("对方已离线。。")


        tcp_client_socket.close()

if __name__ == '__main__':
    main()


志高(smartac).rar

1.61 KB, 下载次数: 6

志高smart

回复

使用道具 举报

0

主题

36

帖子

231

积分

中级会员

Rank: 3Rank: 3

积分
231
金钱
195
HASS币
0
发表于 2020-7-2 04:34:23 | 显示全部楼层
好厉害~根本神人了
回复

使用道具 举报

46

主题

641

帖子

4394

积分

元老级技术达人

积分
4394
金钱
3723
HASS币
120
发表于 2020-7-12 22:44:36 | 显示全部楼层
请教一下,如果是tcp透传的modbus,与每个温控器通信都要指定savle id,怎么配置?
回复

使用道具 举报

0

主题

17

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
金钱
263
HASS币
0
发表于 2020-8-6 19:58:00 | 显示全部楼层
你说的这些设备家里好像都有,回头试试看
回复

使用道具 举报

9

主题

135

帖子

745

积分

高级会员

Rank: 4

积分
745
金钱
610
HASS币
0
发表于 2020-9-10 14:17:39 | 显示全部楼层
学习下,看下多少积分、。。。、、、
回复

使用道具 举报

201

主题

546

帖子

3851

积分

论坛元老

Rank: 8Rank: 8

积分
3851
金钱
3305
HASS币
0
发表于 2020-10-29 00:49:07 来自手机 | 显示全部楼层
请问大家,自定义目录里是建modbus2还是建climate呀?
回复

使用道具 举报

201

主题

546

帖子

3851

积分

论坛元老

Rank: 8Rank: 8

积分
3851
金钱
3305
HASS币
0
发表于 2020-10-29 00:58:12 来自手机 | 显示全部楼层
bomb40 发表于 2020-6-25 10:50
感谢分享,0.111.3升级成功
hass 自带的modbus变量从__init__.py挪到了const.py. custom_components里面的c ...

你好,没有看明白,能给说说如何使用吗?
回复

使用道具 举报

1

主题

33

帖子

230

积分

中级会员

Rank: 3Rank: 3

积分
230
金钱
197
HASS币
0
发表于 2020-11-5 19:00:17 | 显示全部楼层
强人,学习了!
回复

使用道具 举报

0

主题

26

帖子

150

积分

注册会员

Rank: 2

积分
150
金钱
124
HASS币
0
发表于 2021-1-23 18:51:48 来自手机 | 显示全部楼层
我想问一下那个host是谁的ip地址
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-7 10:19 , Processed in 0.493560 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表