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

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

[修仙教程] 我是来填坑的@网络电表制作攻略(MQTT)

  [复制链接]

66

主题

779

帖子

4407

积分

论坛元老

Rank: 8Rank: 8

积分
4407
金钱
3623
HASS币
20
发表于 2017-11-13 11:38:45 | 显示全部楼层
如果能用智能仪表+485用wifi转发接入,这样接入的难度会小很多;毕竟自己动手能力还是比较差,上述转发模块100+,仪表三相的300左右,本地还能液晶显示,所以调试以及用起来也顺手一点,想用这套方案,望LZ多多指教一下
回复

使用道具 举报

0

主题

273

帖子

2106

积分

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
1833
HASS币
0
发表于 2017-11-13 12:04:32 | 显示全部楼层
看起来好强大,这个设备是装在强电盒里?
回复

使用道具 举报

15

主题

192

帖子

2057

积分

论坛技术达人

积分
2057
金钱
1845
HASS币
0

卓越贡献

 楼主| 发表于 2017-11-13 14:54:56 | 显示全部楼层
guitengyue 发表于 2017-11-13 11:24
大神,问一下,如果我买了一个智能仪表,支持485接口的,再通过485转wifi模块发射,这样的话要怎么弄?
相 ...

485转wifi模块发射 这个模块应该可以编程的吧,否则你怎么定义他通过wifi发送到哪呢
回复

使用道具 举报

66

主题

779

帖子

4407

积分

论坛元老

Rank: 8Rank: 8

积分
4407
金钱
3623
HASS币
20
发表于 2017-11-13 15:15:44 | 显示全部楼层
syjjx 发表于 2017-11-13 14:54
485转wifi模块发射 这个模块应该可以编程的吧,否则你怎么定义他通过wifi发送到哪呢 ...

接入路由器的,然后pc通过虚拟串口来访问,这是一种模式
相当于是usb转串口一样的
回复

使用道具 举报

26

主题

555

帖子

1965

积分

金牌会员

Rank: 6Rank: 6

积分
1965
金钱
1405
HASS币
40
发表于 2017-11-13 22:25:21 | 显示全部楼层
好牛B~~
回复

使用道具 举报

15

主题

192

帖子

2057

积分

论坛技术达人

积分
2057
金钱
1845
HASS币
0

卓越贡献

 楼主| 发表于 2017-11-14 10:14:52 | 显示全部楼层
guitengyue 发表于 2017-11-13 15:15
接入路由器的,然后pc通过虚拟串口来访问,这是一种模式
相当于是usb转串口一样的 ...

哦,那东西我也有一个的,你还是要搞个单片机去处理收到的数据呀
回复

使用道具 举报

66

主题

779

帖子

4407

积分

论坛元老

Rank: 8Rank: 8

积分
4407
金钱
3623
HASS币
20
发表于 2017-11-14 10:38:21 | 显示全部楼层
syjjx 发表于 2017-11-14 10:14
哦,那东西我也有一个的,你还是要搞个单片机去处理收到的数据呀

那我试试看,但是由于我的是三相的,电表就不用你的那款了;
电表的计量输出应该是一样的,就是要改一下三相的代码
回复

使用道具 举报

66

主题

779

帖子

4407

积分

论坛元老

Rank: 8Rank: 8

积分
4407
金钱
3623
HASS币
20
发表于 2017-11-14 10:46:30 | 显示全部楼层
syjjx 发表于 2017-11-14 10:14
哦,那东西我也有一个的,你还是要搞个单片机去处理收到的数据呀

原本我想直接485输出,然后用python写个程序,就不用单片机了;
类似如下:
https://github.com/lewei50/DTU/blob/master/python/iammeterDTU.py
#!/usr/bin/env python
# -*- coding: utf_8 -*-
"""
 [url]https://www.iammeter.com[/url] DTU for python
 auther [email][email protected][/email]
 This is distributed under GNU LGPL license, see license.txt
"""
import sys
import serial
import socket
import time
from random import *
leweiModbusServer = "pm.modbus.lewei50.com"
leweiModbusPort = 9970

message=''


ser=None
#serial_port="/dev/ttyUSB0"
serial_port=5 #serial_port = 8  means serial id 9 in windows
serial_timeout=1
serial_baud = 9600


def run(svr_status):
    global ser,serial_timeout,serial_port,serial_baud
    
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_address = (leweiModbusServer, leweiModbusPort)
    print >>sys.stderr, 'connecting to %s port %s' % server_address
    #print serial_port
    try:
        try:
            try:
                if ser is None:
                    ser=serial.Serial(port=serial_port, baudrate=serial_baud, bytesize=8, parity="N", stopbits=1, xonxoff=0)
                    #ser.setTimeout(serial_timeout)
            except:
                print "fail to connect serial"
                ser.close()
                ser=None
            # Send data
            sock.connect(server_address)

            print >>sys.stderr, 'sending "%s"' % message
            sock.sendall(message)


            while 1:
                data = sock.recv(1024)
                print >>sys.stderr, 'received "%s"' % data
                '''try to send to serial'''
                try:
                    ser.write(data)
                    #wait 2 second to get feed back from serial
                    time.sleep(2)
                    
                    '''read from serial'''
                    n = ser.inWaiting()
                    print(n)
                    if(n>4):
                        serialData = ser.read(n)
                        sock.sendall(serialData)
                        
                except:
                    print "error write to serial"
                if data == "":
                    sock.close()
                    print "connection break!wait a while to reconnect"
                    time.sleep(10 + randint(1, 60))
                    run(0)
                    break

        finally:
            print >>sys.stderr, 'closing socket'
            sock.close()
    except:
        print "fail"
        
    
    

if __name__ == "__main__":
    run(0)

回复

使用道具 举报

66

主题

779

帖子

4407

积分

论坛元老

Rank: 8Rank: 8

积分
4407
金钱
3623
HASS币
20
发表于 2017-11-14 16:32:35 | 显示全部楼层
再问一下:网上找了下说明,那个485转wifi应该是这么个配置界面:
QQ拼音截图未命名.png
是不是我在ubuntu上安装个mqtt的服务器,然后把这个配置里面的地址发到mqtt服务器的地址,然后在mqtt的服务器上写入LZ你的首页的固件代码就行了?
回复

使用道具 举报

14

主题

266

帖子

1640

积分

论坛技术达人

积分
1640
金钱
1354
HASS币
40

教程狂人

发表于 2017-11-18 12:50:26 | 显示全部楼层
留名,以后后用,说话,这行代码,能使用到其它485电表上或者断路器吗
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-24 18:18 , Processed in 0.135852 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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