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

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

[进阶教程] 拼夕夕电表大改造接入homeassistant_ 重要更新

  [复制链接]

3

主题

98

帖子

1048

积分

金牌会员

Rank: 6Rank: 6

积分
1048
金钱
950
HASS币
0
发表于 2020-2-25 16:55:24 | 显示全部楼层
高手!!!!!!!!!!!!
回复

使用道具 举报

2

主题

175

帖子

1981

积分

金牌会员

Rank: 6Rank: 6

积分
1981
金钱
1806
HASS币
0
发表于 2020-3-11 11:13:12 | 显示全部楼层
谢谢分享。。。。。。。。。
回复

使用道具 举报

10

主题

97

帖子

587

积分

高级会员

Rank: 4

积分
587
金钱
490
HASS币
0
发表于 2020-6-2 13:17:11 | 显示全部楼层
本帖最后由 lnight 于 2020-6-2 14:37 编辑

大佬您好,我在学习您的代码的时候出了一些问题,在学习的时候查了一下,读取modbus的库您用的可能是pycom-modbus,所以我去github上下了一份,里边有例程,其中读取端口的应该是这一段。
######################### RTU SERIAL MODBUS #########################
uart_id = 0x01
modbus_obj = Serial(uart_id, pins=('P9', 'P10'))

这里对应的应该是serial.py包里的:

class Serial:

    def __init__(self, uart_id, baudrate=9600, data_bits=8, stop_bits=1, parity=None, pins=None, ctrl_pin=None):
        self._uart = UART(uart_id, baudrate=baudrate, bits=data_bits, parity=parity, stop=stop_bits, timeout_char=10)
        if ctrl_pin is not None:
            self._ctrlPin = Pin(ctrl_pin, mode=Pin.OUT)
        else:
            self._ctrlPin = None
        self.char_time_ms = (1000 * (data_bits + stop_bits + 2)) // baudrate


这里我猜测uart_id指的是RX、TX,比如uart_id=2,就代表RX2、TX2。
不过里边的pins代表什么还没有搞懂。我猜测是因为不同的设备,管脚不同,所以需要对RX、TX的管脚做定义。

我用的ESP32,upycraft上传的,想先直接把例程跑通,于是稍微改了一下main.py:

14. ######################### RTU SERIAL MODBUS #########################
15. uart_id = 0x02
16. modbus_obj = Serial(uart_id)


但是会报错

  File "main.py", line 16, in <module>
  File "serial.py", line 21, in __init__
TypeError: extra keyword arguments given

这个错我查了一下,是指有必要的关键词我没有给出。"main.py", line 16指的就是modbus_obj = Serial(uart_id)这句。

但是我看大佬写的有关这里的代码:

if __name__=='__main__':
        ts=Serial(2)
        print(hf_enginx(ts))


也是直接用的Serial(2),我猜测是直接定义的uart_id=2,忽略了后边的pins。
但是我不管怎么改,比如像您一样加上if __name__=='__main__':,或者按照例程一样加上pin变成modbus_obj = Serial(uart_id, pins=('P25', 'P27'))
也还是会报错。
  File "<stdin>", line 8, in <module>
  File "serial.py", line 21, in __init__
ValueError: UART(2) does not exist

不知道大佬当初编写这段的时候有没有遇见同样的错误,希望能给小弟一些指点,万分感谢。
回复

使用道具 举报

37

主题

396

帖子

4106

积分

元老级技术达人

积分
4106
金钱
3655
HASS币
250
 楼主| 发表于 2020-6-3 22:47:26 | 显示全部楼层
lnight 发表于 2020-6-2 13:17
大佬您好,我在学习您的代码的时候出了一些问题,在学习的时候查了一下,读取modbus的库您用的可能是pycom- ...

你不要从github上下载,直接用我压缩包里面的试试?

评分

参与人数 1金钱 +5 收起 理由
lnight + 5 我来瀚思就为看你!

查看全部评分

回复

使用道具 举报

10

主题

97

帖子

587

积分

高级会员

Rank: 4

积分
587
金钱
490
HASS币
0
发表于 2020-6-4 11:52:59 | 显示全部楼层
trz0332 发表于 2020-6-3 22:47
你不要从github上下载,直接用我压缩包里面的试试?

谢谢大佬的回复,我试了一下用大佬压缩包里有关modbus rtu的三个包,就是const.py、functions.py、sertal.py这三个。然后main.py里分别用大佬esp32_db.py和esp32_db1.py里的语句试验。

if __name__=='__main__':
        ts=Serial(2)
        print(hf_enginx(ts))

if __name__=='__main__':
    from serial import Serial 
    import time
    ts=Serial(2)
    while 1:
        print(hf_enginx(ts))
        time.sleep(5)


可还是会出

  File "<stdin>", line 8, in <module>
  File "serial.py", line 21, in __init__
ValueError: UART(2) does not exist


这个错误,说UART(2)不存在。

请问大佬有没有什么解决思路可以借鉴,大佬当初编写这块的时候是如何调试的?
回复

使用道具 举报

10

主题

97

帖子

587

积分

高级会员

Rank: 4

积分
587
金钱
490
HASS币
0
发表于 2020-6-5 13:53:34 | 显示全部楼层
今天试着导入了必要的三个库const.py、functions.py、sertal.py,之后试着用REPL调试

modbus_obj = Serial()

报错TypeError: function takes 2 positional arguments but 1 were given,意思应该是有2个关键参数,但是1个没给。

modbus_obj = Serial(2)
或者
modbus_obj = Serial(1)
或者
modbus_obj = Serial(2, pins=('P25', 'P27'))

则是报错TypeError: extra keyword arguments given,说是给出了额外的关键字参数。这就尴尬了,不写说没有,写了说多余。

modbus_obj = Serial(0)
说是UART(0) is disabled (dedicated to REPL),这个应该是本身片子给micro口接电脑了


modbus_obj = Serial(3)或者以上
报错ValueError: UART(3) does not exist,再往上应该就是不存在了。

回复

使用道具 举报

37

主题

396

帖子

4106

积分

元老级技术达人

积分
4106
金钱
3655
HASS币
250
 楼主| 发表于 2020-6-7 10:46:30 | 显示全部楼层
lnight 发表于 2020-6-5 13:53
今天试着导入了必要的三个库const.py、functions.py、sertal.py,之后试着用REPL调试

modbus_obj = Serial ...

你确定是ESP32模块?我今天试了一下,用最新版本的固件也没有问题啊。
>>> from serial import Serial
>>> ts=Serial(2)
I (79330) uart: ALREADY NULL
>>> 

评分

参与人数 1金钱 +5 收起 理由
lnight + 5 我再多买几款试试

查看全部评分

回复

使用道具 举报

37

主题

266

帖子

2141

积分

论坛DIY达人

积分
2141
金钱
1875
HASS币
20
发表于 2021-3-1 09:49:21 | 显示全部楼层

支持一下   学习了   赞一个
回复

使用道具 举报

5

主题

87

帖子

1822

积分

金牌会员

Rank: 6Rank: 6

积分
1822
金钱
1735
HASS币
0
发表于 2021-9-14 11:03:21 | 显示全部楼层
多谢分享……
回复

使用道具 举报

0

主题

3

帖子

54

积分

注册会员

Rank: 2

积分
54
金钱
51
HASS币
0
发表于 2021-10-20 00:14:53 | 显示全部楼层
学习学习
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-3 03:05 , Processed in 0.147856 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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