Browse Source

上传文件至 'env'

master
nfa 4 years ago
parent
commit
f28159a810
  1. 88
      env/models.py
  2. 57
      env/netutil.py
  3. 40
      env/sms.py
  4. 3
      env/tests.py
  5. 12
      env/urls.py

88
env/models.py

@ -0,0 +1,88 @@
from django.db import models
from datetime import datetime
class Spot(models.Model):
name = models.CharField(max_length=30, verbose_name='地点名称')
sn = models.CharField(max_length=20, verbose_name='设备序列号')
ip = models.CharField(max_length=15, verbose_name='设备IP')
def __str__(self):
return self.name
class Meta:
verbose_name_plural='地点设置'
class Envdata(models.Model):
spot = models.ForeignKey('Spot', on_delete=models.CASCADE, verbose_name='地点')
errcode = models.IntegerField(default=0, verbose_name='错误代码')
electricity = models.SmallIntegerField(default=1, verbose_name='供电')
fire = models.IntegerField(default=0, verbose_name='火情')
water = models.SmallIntegerField(default=0, verbose_name='漏水')
temperature = models.FloatField(default=0.0, verbose_name='温度')
humidity = models.FloatField(default=0.0, verbose_name='湿度')
rectime = models.DateTimeField(verbose_name='记录时间')
def __str__(self):
return self.spot.name
class Meta:
verbose_name_plural='采集数据'
class Alarm(models.Model):
spot = models.ForeignKey('Spot', on_delete=models.CASCADE, verbose_name='地点')
errcode = models.IntegerField(default=0, verbose_name='报警代码')
almname = models.CharField(max_length=20, null=True, verbose_name='报警名称')
almvalue = models.IntegerField(default=0, verbose_name='报警数值')
almtime = models.DateTimeField(verbose_name='报警时间')
def __str__(self):
return self.almname
class Meta:
verbose_name_plural='报警数据'
class Sms(models.Model):
name = models.CharField(max_length=10, verbose_name='姓名')
phone = models.CharField(max_length=11, verbose_name='手机', null=True)
email = models.CharField(max_length=25, verbose_name='邮箱', null=True)
def __str__(self):
return self.name
class Meta:
verbose_name_plural='通讯设置'
class Alarmset(models.Model):
spot = models.ForeignKey('Spot', on_delete=models.CASCADE, verbose_name='地点')
connection = models.BooleanField(default=False, verbose_name='设备离线')
electricity = models.BooleanField(default=False, verbose_name='断电')
fire = models.BooleanField(default=False, verbose_name='火情')
water = models.BooleanField(default=False, verbose_name='漏水')
temperature = models.BooleanField(default=False, verbose_name='温度')
humidity = models.BooleanField(default=False, verbose_name='湿度')
def __str__(self):
return self.spot.name
class Meta:
verbose_name_plural='报警设置'
class Sendlog(models.Model):
sendtype = models.CharField(max_length=8, default='mail', verbose_name='发送类型')
sendresult = models.BooleanField(default=True, verbose_name='发送结果')
sendto = models.CharField(max_length=200, default='', verbose_name='发送对象')
sendtime = models.DateTimeField(default=datetime.now(), verbose_name='发送时间')
def __str__(self):
return self.sendtype
class Meta:
verbose_name_plural = '发送日志'
class Device(models.Model):
spot = models.CharField(max_length=20, verbose_name='设备序列号')
# servaddr = models.CharField(max_length=30, default='http://172.18.17.136:8000', verbose_name='服务器地址')
timespan = models.IntegerField(default=1, verbose_name='采集时间间隔')
afire = models.IntegerField(default=15000, verbose_name='火情报警阈值')
atemp = models.FloatField(default=32.0, verbose_name='温度报警阈值')
ahum = models.FloatField(default=75.0, verbose_name='湿度报警阈值')
def __str__(self):
return self.spot
class Meta:
verbose_name_plural = '设备管理'
class Envchart(models.Model):
class Meta:
verbose_name_plural = '统计图表'
class Sysmanager(models.Model):
class Meta:
verbose_name_plural = '系统管理'

57
env/netutil.py

@ -0,0 +1,57 @@
import subprocess, platform
import os, sys
import django
from datetime import datetime,timedelta
parDIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir)
BASE_DIR = os.path.dirname(os.path.join(parDIR, os.pardir))
sys.path.append(BASE_DIR)
print(BASE_DIR)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'envdect.settings')
django.setup()
from env.models import *
from env.envpost import save_alarm, send_alm_message
# from env.sms import sendSMS
from env.mail import sendmail
alert_people = ['nfa@yeah.net',]
def pingTEST(host):
res = False
try:
output = subprocess.check_output("ping -{} 6 {}".format('n' if platform.system().lower()=="windows" else 'c', host), shell=True)
if output.index(b'TTL=') > 0:
res = True
except:
return False
return res
def online_dect():
alms = Alarmset.objects.all()
for alm in alms:
host = alm.spot.ip
print('testing ip :', host)
r = pingTEST(host)
print('Testing result:', r)
if not r:
save_alarm(alm.spot, 7, '设备离线', 0)
if alm.connection:
send_alm_message(alm.spot, 7, '设备离线', 0)
def device_dect():
spots = Spot.objects.all()
for spot in spots:
device = Envdata.objects.filter(spot=spot).order_by('-rectime').first()
if device:
mailtext = '%s机房设备离线,请及时处理,上次提交数据时间:%s' % (device.spot.name, datetime.strftime(device.rectime,'%Y-%m-%d %H:%M:%S'))
if datetime.now() - device.rectime >= timedelta(minutes=20):
sendmail(alert_people, '机房环境监测报警', mailtext)
if __name__ == '__main__':
# host = input('Please input the IP address:')
# r = pingTEST(host)
# print(r)
# online_dect()
device_dect()

40
env/sms.py

@ -0,0 +1,40 @@
# -*- coding: utf-8 -*-
from urllib import request,parse
import time,datetime
def sendSMS(txtBody,phone):
url = 'http://sms.api.ums86.com:8899/sms/Api/Send.do'
data = {
'SpCode': 'xxxxxx',
'LoginName': 'cz_xxxxx',
'Password': 'xxxxxxxx',
'MessageContent': txtBody,
'UserNumber': phone,
'SerialNumber': getSerial(),
'f': '1'
}
res = False
try:
data = parse.urlencode(data).encode('gb2312')
print(data)
req = request.Request(url, data=data)
page = request.urlopen(req).read()
page = page.decode('gb2312')
if 'result=0' in page:
res = True
except:
page = ''
print(page)
return res
def getSerial():
t = time.localtime()
h = '888018'
s = h + time.strftime('%Y%m%d%H%M%S', t)
return s
if __name__ == '__main__':
pn = 18951210000
txt = u'机房设备离线报警,请及时处理。报警代码:7,报警参数:0。'
r = sendSMS(txt.encode('gb2312'), pn)
print(r)

3
env/tests.py

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

12
env/urls.py

@ -0,0 +1,12 @@
from django.urls import path, include
from .views import *
urlpatterns = [
path('time/', ntp_time, name='ntptime'),
path('api/', epost, name='envpost'),
path('envchart/', chart_index, name='chartindex'),
path('cmdmanager/', sys_cmd, name='sysmanager'),
path('cmd/', cmd_query, name='cmd'),
path('cmdqueue/', cmd_queue, name='cmdqueue'),
path('deviceinfo/', query_deviceinfo, name='deviceinfo'),
]
Loading…
Cancel
Save