|
@@ -48,16 +48,27 @@ class Device(object):
|
|
|
if gateway['server_id'] and gateway['product_id']:
|
|
|
server = Demeter.service('common').one('setting_server', id=gateway['server_id'])
|
|
|
if server['server_type'] == 2 or server['server_type'] == 3:
|
|
|
- device = Demeter.service('common').list('setting_device', search={'product_id':gateway['product_id']})
|
|
|
- if device:
|
|
|
- for v in device:
|
|
|
- if v['modbus_slave_id']:
|
|
|
- hardware_type = Demeter.service('core', 'setting').hardware_type(v['oper_type'])
|
|
|
- self.add({'type_id':v['id']}, v['name'], farm_id, v['id'], hardware_type, gateway_id, v['id'], gateway['server_id'], gateway['product_id'], '')
|
|
|
+ code = Demeter.service('common').list('setting_modbus_code', search={'product_id':gateway['product_id']})
|
|
|
+ if code:
|
|
|
+ for v in code:
|
|
|
+ if v['slave_id']:
|
|
|
+ #hardware_type = Demeter.service('core', 'setting').hardware_type(v['oper_type'])
|
|
|
+ hardware_type = v['hardware_type']
|
|
|
+ device_type_key = v['device_type_key'].split("\r\n")
|
|
|
+ for i in device_type_key:
|
|
|
+ device_type = Demeter.service('common').one('setting_device_type', key=i)
|
|
|
+ if device_type:
|
|
|
+ self.add({'type_id':device_type['id']}, device_type['name'], farm_id, 0, hardware_type, gateway_id, device_type['id'], gateway['server_id'], gateway['product_id'], '')
|
|
|
# 添加设备
|
|
|
def add(self, where, name, farm_id, hardware_id, hardware_type, gateway_id, type_id, server_id, product_id, value):
|
|
|
info = Demeter.service('common').list('device_info', search=where)
|
|
|
if not info:
|
|
|
+ if hardware_id < 1:
|
|
|
+ device = Demeter.service('common').list('device_info', limit='0,1')
|
|
|
+ if device:
|
|
|
+ hardware_id = device[0]['hardware_id'] + 1
|
|
|
+ else:
|
|
|
+ hardware_id = 1
|
|
|
insert = {}
|
|
|
insert['farm_id'] = farm_id
|
|
|
insert['name'] = name
|
|
@@ -138,7 +149,7 @@ class Device(object):
|
|
|
gateway_info = model.select(type='fetchone')
|
|
|
|
|
|
if info['type_id'] > 0:
|
|
|
- model = Demeter.model('setting_device')
|
|
|
+ model = Demeter.model('setting_device_type')
|
|
|
model.id = info['type_id']
|
|
|
type_info = model.select(type='fetchone')
|
|
|
if type_info:
|
|
@@ -197,7 +208,7 @@ class Device(object):
|
|
|
|
|
|
def msg(self, type_id, switch):
|
|
|
oper = ''
|
|
|
- type_model = Demeter.model('setting_device')
|
|
|
+ type_model = Demeter.model('setting_device_type')
|
|
|
type_model.id = type_id
|
|
|
type_info = type_model.select(type='fetchone')
|
|
|
if type_info['unit'] == 'button':
|
|
@@ -428,13 +439,18 @@ class Device(object):
|
|
|
server = Demeter.service('common').one('setting_server', id=info['server_id'])
|
|
|
if server['server_type'] == 2:
|
|
|
send_modbus_tcp(type_info, gateway_info, info, switch, server)
|
|
|
+ elif server['server_type'] == 3:
|
|
|
+ send_modbus_rtu(type_info, gateway_info, info, switch, server)
|
|
|
else:
|
|
|
feedback = send_pub(type_info, gateway_info, info, switch)
|
|
|
|
|
|
return feedback
|
|
|
|
|
|
- def send_modbus_tcp(self, device, gateway_info, info, value, server):
|
|
|
- Demeter.service('tcp', 'modbus').send(server, device, value)
|
|
|
+ def send_modbus_tcp(self, type_info, gateway_info, info, value, server):
|
|
|
+ Demeter.service('tcp', 'modbus').send(server, type_info, info, value)
|
|
|
+
|
|
|
+ def send_modbus_rtu(self, type_info, gateway_info, info, value, server):
|
|
|
+ Demeter.service('rtu', 'modbus').send(server, type_info, info, value)
|
|
|
|
|
|
def send_pub(self, type_info, gateway_info, info, value):
|
|
|
from demeter.mqtt import Pub
|