本帖最后由 trz0332 于 2019-11-27 00:15 编辑
发现一个重大问题,当连不上mqtt服务器的时候,过几分钟程序就死掉了。看了一下错误日志,貌似是一个并行的列队满了导致的。这个应该是我使用的那个mqtt_as.py导致的,没能力去改,也不想改,于是简单粗暴的想了个解决办法,加看门狗,只有在从电表取到了数据的时候才会喂狗,2分钟不喂狗,esp32就自动重启了。
需要使用最新的micropython固件。
清除所有数据之后下载把我附件内容全部传送到板子就行了。
修改为采集时间10秒钟,但是上传间隔为,当2次数据变化超过5%才会上传数据
把cfg.py里面的内容按照自己的需要修改就行了,其他都不动
config={
'dev_name':'szdb1', #设备名
'ssid':'iot', #wifi的ssid
'wifi_pw':'xxxx', #wifi密码
'port':1883, #mqtt端口
'server':'192.168.88.1', #mqttf服务器IP
'user':'pi', #mqtt用户名
'password':'xxxxxx', #mqtt密码
'keepalive':120,
'clean':False,
'clean_init':False,
'dog_time':120000, #看门狗时间
}
复制代码
这个方案实现成本比较低。 不到160块钱。精度比较高。按照电表说明书上说的,可以实现1%的精度。
需要设备如下:支持modbus485电表:
esp32模块:
ttl转485模块:
220v转5V模块:
接线方式:
ESP32:TX2-----TTL-485:TX
ESP32:RX2-----TTL-485:RX
ESP32:3.3V-----TTL-485:vcc
ESP32:gnd-----TTL-485:gnd
TTL-485:A------电表:A
TTL-485:B------电表:B
电源模块的输出+极--------ESP32:VIN
电源模块的输出-极--------ESP32:GND
esp32.zip
(23.17 KB, 下载次数: 94)
把所有文件用uPyCraft_V1.1这个软件传入到esp32模块中就行了
topic为cfg.py里面的'dev_name':'szdb1', 这个字段,如果是这么设置的,那么topoc就是/szdb1/data
上传上来的数据格式是
{"pf": 0.92, "pow": 82.98, "vol": 226.84, "cur": 0.4, "fre": 50.0, "eng": 720.41}
最后显示的效果如下:
更新一个自己用的pack,用来统计月电费:
dianbiao_sz.yaml
(6.37 KB, 下载次数: 149)
我用的是mysql数据库,这个配置文件只在mysql下面试过,其他的不保证成功
另外这个配置还是有2个问题,
1、hass里面记录的时间是不带时区的。所以导致每天统计数据的时候真正在早上8点的时候
2、每天8点的时候由于查找数据库的时候,这个时候电表没有上传数据到数据库里面,查到的抄表数据为空,这个时候计算出来的日数据,和昨日数据都不对。我是用一条sql语句来删除掉明显不对的数据
DELETE from states where entity_id in ("sensor.sz_eng_week" ,"sensor.sz_eng_today","sensor.sz_eng_yesterday" ,"sensor.sz_eng_month","sensor.sz_eng_price") and (state >100 or state <0);
复制代码
统一回答楼下的答复:
1、安装问题:这个电表非常好安装,差不多就一个2P空开大小。可以直接装到家庭入户的电箱,可以卡导轨的。断掉家里输入的总空开,电表的输入接入户总空开的输出,非常安全。
2、价格问题:总成本160,确实不算便宜了。相对于培正电表。可能优势就是好安装了。
PS:
虽然是用micropython写的。但是这里面有个异步的mqtt的库只支持esp32.esp8266配置太低,跑不动。所以有条件还是上esp32,反正现在esp32也便宜了。我上传的压缩包里面带了一个dht12和bme180的库,主程序也对i2c初始化的函数,但是没有运行这段代码,如果对python稍微了解一点的人,稍微改改就能加上温湿度和BME180大气压力传感器的代码了。
def init_I2C(self):
self.i2c=I2C(scl=Pin(23), sda=Pin(22), freq=20000)
self.dht12=dht12(self.i2c)
self.bmp280=BMP280(self.i2c)
复制代码