rabin 7 سال پیش
والد
کامیت
e42f1f5a88

+ 3 - 0
cron.py

@@ -47,9 +47,12 @@ def control():
 			model.id = v['id']
 			if v['exp'] == '-1':
 				msg = service.notice('timeout')
+				service.mul(v['id'], v['name'], v['cxtype'], '失败:' + msg, False)
 			else:
 				msg = '1'
+				service.mul(v['id'], v['name'], v['cxtype'], '', True)
 			model.update(exp=msg)
+
 		gevent.sleep(timeSleep)
 		
 

+ 13 - 7
front/page/device.py

@@ -21,6 +21,11 @@ class mul_path(Load):
 	@Web.auth
 	def get(self):
 		self.data['list'] = self.service('common').list('device_mul', search={'farm_id':self.data['setting']['farm']})
+		if self.data['list']:
+			for key, value in enumerate(self.data['list']):
+				info = self.service('common').one('device_mul_queue', mul_id=value['id'])
+				if not info:
+					self.data['list'][key]['oper'] = ''
 		self.view("device/mul.html")
 
 	@Web.auth
@@ -32,14 +37,15 @@ class mul_path(Load):
 			if info:
 				update = {}
 				update['value'] = value
-				state = self.service('common').update('device_mul', id, update, cdate=False)
-				self.out('yes', {'state':state})
+				if value == '1':
+					update['oper'] = '批量启动中'
+				else:
+					update['oper'] = '批量关闭中'
+				self.service('common').update('device_mul', id, update, cdate=False)
 				if info['devices']:
-					device = info['devices'].split(',')
-					"""
-					for value in device:
-						Demeter.service('device').switch(value, value)
-					"""
+					devices = tuple(eval(info['devices']))
+					for device in devices:
+						Demeter.service('device').switch(device, value, id)
 			self.out('yes', {'id':id})
 		else:
 			self.out('no')

+ 12 - 4
front/templates/mobile/device/inc/data.html

@@ -33,13 +33,17 @@
     </li>
     {% elif value['hardware_type'] == 3 and value['unit'] == 'button' %}
     <li class="form-input buttons">
+        {%set layer = False %}
+        {% if value['exp'] != '-1' and  value['exp'] != '1' and value['exp'] != 'None' and value['exp'] %}
+        {%set layer = value['exp'] %}
+        {% end %}
         <label><span>{{value['name']}}</span>
         <p>
-        <button onclick="Farm.Button(this, '/device/update', '{{value['id']}}', 1, '#button_down_{{value['id']}}')" id="button_up_{{value['id']}}" class="btn btn-switch {% if value['value'] in ('2','3') %}disabled{% end %} {% if value['value'] in ('1','4') %}open{% end %}"></button>
+        <button {% if layer %}data-hint="{{layer}}"{% end %} onclick="Farm.Button(this, '/device/update', '{{value['id']}}', 1, '#button_down_{{value['id']}}')" id="button_up_{{value['id']}}" class="btn btn-switch {% if layer and value['cxnum'] in (1,4) %}hint--top hint--info hint--always {% end %} {% if value['exp'] == '-1' and value['cxnum'] in (1,4) %}loading{% end %} {% if value['value'] in ('2','3') %}disabled{% end %} {% if value['value'] in ('1','4') %}open{% end %}"></button>
 
-        <button onclick="Farm.Button(this, '/device/update', '{{value['id']}}', 5)" id="button_stop_{{value['id']}}" class="btn btn-switch {% if value['value'] == '5' %}open{% end %}"></button>
+        <button {% if layer %}data-hint="{{layer}}"{% end %} onclick="Farm.Button(this, '/device/update', '{{value['id']}}', 5)" id="button_stop_{{value['id']}}" class="btn btn-switch {% if layer and value['cxnum'] == 5 %}hint--top hint--info hint--always {% end %} {% if value['exp'] == '-1' and value['cxnum'] == 5 %}loading{% end %} {% if value['value'] == '5' %}open{% end %}"></button>
 
-        <button onclick="Farm.Button(this, '/device/update', '{{value['id']}}', 2, '#button_up_{{value['id']}}')" id="button_down_{{value['id']}}" class="btn btn-switch {% if value['value'] in ('1','4') %}disabled{% end %} {% if value['value'] in ('2','3') %}open{% end %}"></button>
+        <button {% if layer %}data-hint="{{layer}}"{% end %} onclick="Farm.Button(this, '/device/update', '{{value['id']}}', 2, '#button_up_{{value['id']}}')" id="button_down_{{value['id']}}" class="btn btn-switch {% if layer and value['cxnum'] in (2,3) %}hint--top hint--info hint--always {% end %} {% if value['exp'] == '-1' and value['cxnum'] in (2,3) %}loading{% end %} {% if value['value'] in ('1','4') %}disabled{% end %} {% if value['value'] in ('2','3') %}open{% end %}"></button>
         </p>
         </label>
             
@@ -47,7 +51,11 @@
     </li>
     {% elif value['hardware_type'] == 3 %}
     <li class="form-input">
-        <label><span>{{value['name']}}</span><p><a href="javascript:;" data-status="{% if value['value'] == '1' %}0{% else %}1{% end %}"  onclick="Farm.Switch(this, '/device/update', '{{value['id']}}')" class="btn btn-switch {% if value['value'] == '1' %}open{% end %}"><i></i></a></p></label>
+        {%set layer = False %}
+        {% if value['exp'] != '-1' and  value['exp'] != '1' and value['exp'] != 'None' and value['exp'] %}
+        {%set layer = value['exp'] %}
+        {% end %}
+        <label><span>{{value['name']}}</span><p><a href="javascript:;" {% if layer %}data-hint="{{layer}}"{% end %} data-status="{% if value['value'] == '1' %}0{% else %}1{% end %}"  onclick="Farm.Switch(this, '/device/update', '{{value['id']}}')" class="{% if layer %}hint--left hint--info hint--always {% end %} {% if value['exp'] != '-1' and  value['exp'] != '1' %}data-layer{% end %} btn btn-switch {% if value['exp'] == '-1' %}loading{% end %} {% if value['value'] == '1' %}open{% end %}"><i></i></a></p></label>
     </li>
 
     {% end %}

+ 5 - 1
front/templates/mobile/device/mul.html

@@ -15,8 +15,12 @@
     	<div id="loadMain">
         {% end %}
         {% for value in data['list'] %}
+        {%set layer = False %}
+        {% if value['oper'] %}
+        {%set layer = value['oper'] %}
+        {% end %}
         <li class="form-input">
-	        <label><span>{{value['name']}}</span><p><a href="javascript:;" data-status="{% if value['value'] == '1' %}0{% else %}1{% end %}"  onclick="Farm.Switch(this, '/device/mul', '{{value['id']}}')" class="btn btn-switch {% if value['value'] == '1' %}open{% end %}"><i></i></a></p></label>
+	        <label><span>{{value['name']}}</span><p><a {% if layer %}data-hint="{{layer}}"{% end %} href="javascript:;" data-status="{% if value['value'] == '1' %}0{% else %}1{% end %}"  onclick="Farm.Switch(this, '/device/mul', '{{value['id']}}')" class="{% if layer %}hint--left hint--info hint--always loading{% end %} btn btn-switch {% if value['value'] == '1' %}open{% end %}"><i></i></a></p></label>
 	    </li>
         {% end %}
         {% if data['ajax'] == False %}

+ 2 - 1
front/templates/mobile/inc/header.html

@@ -6,4 +6,5 @@
 <title>{% if 'farmInfo' in data['setting'] %}{{data['setting']['farmInfo']['name']}} - {% end %}{{data['setting']['name']}}</title>
 <meta name="Keywords" content="" />
 <meta name="Description" content="" />
-<link href="{{static_url('mobile/css/global.css')}}" rel="stylesheet">
+<link href="{{static_url('mobile/css/global.css')}}" rel="stylesheet">
+<link href="{{static_url('pc/lib/layer/hint.css')}}" rel="stylesheet">

+ 0 - 1
front/templates/pc/device/data.html

@@ -4,7 +4,6 @@
 <html>
     <head>
         {%include '../inc/header.html'%}
-        <link href="{{static_url('pc/lib/layer/hint.css')}}" rel="stylesheet">
         {% if 'camera' in data and data['camera'] %}
         <link href="{{static_url('pc/lib/player/video-js.min.css')}}" rel="stylesheet">
         {% end %}

+ 5 - 1
front/templates/pc/device/mul.html

@@ -6,10 +6,14 @@
     	<h2>批量控制</h2>
         <div class="ul3">
             {% for value in data['list'] %}
+            {%set layer = False %}
+            {% if value['oper'] %}
+            {%set layer = value['oper'] %}
+            {% end %}
             <dl>
                 <dd class="controller"></dd>
                 <dt>
-                    <p href="javascript:;" data-status="{% if value['value'] == '1' %}0{% else %}1{% end %}"  onclick="Farm.Switch(this, '/device/mul', '{{value['id']}}')" class="btn-switch {% if value['value'] == '1' %}open{% end %}"><i></i></p>
+                    <p href="javascript:;" {% if layer %}data-hint="{{layer}}"{% end %} data-status="{% if value['value'] == '1' %}0{% else %}1{% end %}"  onclick="Farm.Switch(this, '/device/mul', '{{value['id']}}')" class="{% if layer %}hint--top hint--info hint--always loading{% end %} btn-switch {% if value['value'] == '1' %}open{% end %}"><i></i></p>
                 </dt>
                 <dd class="tit">{{value['name']}}</dd>          
             </dl>

+ 1 - 0
front/templates/pc/inc/header.html

@@ -10,4 +10,5 @@
 <meta name="Description" content="" />
 
 <link href="{{static_url('pc/css/global.css')}}" rel="stylesheet">
+<link href="{{static_url('pc/lib/layer/hint.css')}}" rel="stylesheet">
 <script type="text/javascript" src="{{static_url('pc/lib/jquery/jquery-1.8.3.min.js')}}"></script>

+ 5 - 5
pub.py

@@ -12,13 +12,13 @@ import random
 import time
 import base64
 
-"""
+
 pub = Pub()
-key = 'status/blower/10086/100114'
-value = 'error'
+key = 'status/valve/10086/100109'
+value = 'ok'
 state = pub.push(key, value)
 print state
-
+"""
 def callback(param, client, userdata, mid):
 	print mid
 
@@ -84,7 +84,7 @@ def pic():
 			print k
 			i = i+1
 
-push()
+#push()
 #pic()
 
 def tcp_sensor():

+ 35 - 3
service/device.py

@@ -51,7 +51,7 @@ class Device(object):
 				self.switch(v, switch)
 
 	# 处理开关-向设备发送请求
-	def switch(self, device_id, switch=1):
+	def switch(self, device_id, switch=1, mul=False):
 		model = Demeter.model('device_info')
 		model.id = device_id
 		info = model.select(type='fetchone')
@@ -59,6 +59,13 @@ class Device(object):
 			# 设置为loading状态,cxnum保存当前的值
 			model.id = device_id
 			model.update(exp='-1', cxnum=switch)
+			# 如果有批量控制,还要保存mul的id
+			if mul:
+				model = Demeter.model('device_mul_queue')
+				model.mul_id = mul
+				model.device_id = info['id']
+				model.insert()
+
 			model = Demeter.model('device_gateway')
 			model.id = info['gateway_id']
 			gateway_info = model.select(type='fetchone')
@@ -95,11 +102,13 @@ class Device(object):
 			model = Demeter.model('device_gateway')
 			model.id = info['gateway_id']
 			gateway = model.select(type='fetchone')
-
 			if msg == 'ok':
 				model = Demeter.model('device_info')
 				model.id = info['id']
 				model.update(value=param['switch'], exp='1')
+
+				# 如果有批量控制
+				self.mul(info['id'], info['name'], param['switch'], '成功', True)
 			else:
 				msg = self.notice(msg)
 				model = Demeter.model('device_info')
@@ -121,6 +130,10 @@ class Device(object):
 						oper = '开启'
 					else:
 						oper = '关闭'
+
+				# 如果有批量控制
+				self.mul(info['id'], info['name'], param['switch'], '失败:' + msg, False)
+
 				content = oper + gateway['name'] + '下的'+ info['name'] + '失败,错误提示:' + msg
 				Demeter.service('record').msg(info['id'], content, info['farm_id'], 3)
 
@@ -132,4 +145,23 @@ class Device(object):
 		info = model.select(type='fetchone')
 		if info:
 			msg = info['name']
-		return msg
+		return msg
+
+	def mul(self, id, name, switch, msg, state):
+		model = Demeter.model('device_mul_queue')
+		model.device_id = id
+		queue = model.select()
+		if queue:
+			if state:
+				model.device_id = id
+				model.delete()
+			model = Demeter.model('device_mul')
+			if msg:
+				for v in queue:
+					model.id = v['mul_id']
+					if switch == 1:
+						oper = '开启'
+					else:
+						oper = '关闭'
+					oper = oper + name + msg
+					model.update(oper=oper)