rabin 4 years ago
parent
commit
fb2a9ca82b
6 changed files with 44 additions and 10 deletions
  1. 17 0
      model/sync_data.py
  2. 4 1
      service/cron/timesync.py
  3. 1 1
      service/modbus/handle.py
  4. 1 1
      service/modbus/rtu.py
  5. 1 1
      service/modbus/tcp.py
  6. 20 6
      service/zeus/core.py

+ 17 - 0
model/sync_data.py

@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+"""
+    demeter database
+    name:hardware.py
+    author:rabin
+"""
+from .__load__ import *
+
+class Sync_data(Model):
+	__table__ = 'sync_data'
+	__comment__ = '同步数据表'
+	id = Fields(type='int', primaryKey=True, autoIncrement=True, comment='数据id')
+	farm = Fields(type='varchar(11)', comment='农场id')
+	table = Fields(type='varchar(50)', comment='表名')
+	data = Fields(type='text(255)', comment='同步的数据')
+	state = Fields(type='boolean', default='True', comment='数据存在状态')
+	cdate = Fields(type='int', default='time', comment='创建时间')

+ 4 - 1
service/cron/timesync.py

@@ -19,4 +19,7 @@ class Timesync(object):
 		pub = Pub()
 		key = 'time/bh'
 		value = Demeter.date(Demeter.time())
-		pub.push(key, value)
+		pub.push(key, value)
+
+		# 定时同步
+		Demeter.service('core', 'zeus').timeSync()

+ 1 - 1
service/modbus/handle.py

@@ -35,7 +35,7 @@ class Handle(object):
 						pass
 
 	# 发送数据
-	def send(self, master, type_info, info, value):
+	def send(self, master, server, type_info, info, value):
 		master.set_timeout(6.0)
 		master.set_verbose(True)
 		code = Demeter.service('common').one('setting_modbus_code', id=info['code_id'])

+ 1 - 1
service/modbus/rtu.py

@@ -25,4 +25,4 @@ class Rtu(object):
 
 	def send(self, server, type_info, info, value):
 		master = modbus_tcp.RtuMaster(host=server['server_host'], port=int(server['server_port']))
-		Demeter.service('handle', 'modbus').send(master, type_info, info, value)
+		Demeter.service('handle', 'modbus').send(master, server, type_info, info, value)

+ 1 - 1
service/modbus/tcp.py

@@ -25,4 +25,4 @@ class Tcp(object):
 
 	def send(self, server, type_info, info, value):
 		master = modbus_tcp.TcpMaster(host=server['server_host'], port=int(server['server_port']))
-		Demeter.service('handle', 'modbus').send(master, type_info, info, value)
+		Demeter.service('handle', 'modbus').send(master, server, type_info, info, value)

+ 20 - 6
service/zeus/core.py

@@ -5,8 +5,7 @@ class Core(object):
 
     def init(self):
         # 注册
-        zeus = Demeter.config['zeus']['host']
-        url = zeus + 'interface/init'
+        url = Demeter.config['zeus']['host'] + 'interface/init'
         farm = Demeter.config['setting']['farm']
         ip = '192.168.33.10'
         data = Demeter.curl(url, {'id':farm,'ip':ip}, 'post')
@@ -24,8 +23,7 @@ class Core(object):
 
     # 远程同步
     def sync(self, table, search={}):
-        zeus = Demeter.config['zeus']['host']
-        url = zeus + 'interface/sync'
+        url = Demeter.config['zeus']['host'] + 'interface/sync'
         farm = Demeter.config['setting']['farm']
         state = True
         id = str(search['id'])
@@ -41,6 +39,22 @@ class Core(object):
         param['data'] = data
         param['table'] = table
         param['farm'] = farm
-        Demeter.curl(url, param, 'post')
+        state = Demeter.curl(url=url, param=param, method='post', timeout=5, max=2)
 
-        # 如果断网了,就要保存起来,暂时留着
+        # 重试3次之后还失败,就要保存起来
+        if not state:
+            Demeter.service('common').update('sync_data', False, param)
+
+    # 定时同步
+    def timeSync(self):
+        data = Demeter.service('common').update('sync_data')
+        if data:
+            url = Demeter.config['zeus']['host'] + 'interface/sync'
+            for key, value in enumerate(data):
+                param = {}
+                param['data'] = value['data']
+                param['table'] = value['table']
+                param['farm'] = value['farm']
+                state = Demeter.curl(url=url, param=param, method='post', timeout=5, max=2)
+                if state:
+                    Demeter.service('common').rDelete('sync_data', value['id'])