initial
This commit is contained in:
126
ws.py
Normal file
126
ws.py
Normal file
@@ -0,0 +1,126 @@
|
||||
#!/usr/bin/env python
|
||||
#test
|
||||
import os
|
||||
from socket import *
|
||||
from datetime import datetime, time
|
||||
import math
|
||||
|
||||
import psycopg2
|
||||
import psycopg2.extensions
|
||||
from psycopg2.extras import Json
|
||||
conn = psycopg2.connect(host='localhost', database='nws', user='nws', password='nws')
|
||||
cursor = conn.cursor()
|
||||
|
||||
cursor.execute("SELECT stationid,lat,lon,tempf,dewpt, humidity,winddir,windspd,windgust,cwop,cwoptime,preciptotal, pressure from wusites WHERE (Active = True and CWOP IS NOT NULL) and (((EXTRACT(EPOCH FROM (current_timestamp - cwoptime ))/60) > 9 ) or (cwoptime ISNULL)) and ((EXTRACT(EPOCH FROM (current_timestamp - lastob ))/60) < 15 )")
|
||||
allcwasites = cursor.fetchall()
|
||||
print(allcwasites)
|
||||
|
||||
|
||||
def decdeg2dms(dd,pad):
|
||||
is_positive = dd >= 0
|
||||
dd = abs(dd)
|
||||
minutes,seconds = divmod(dd*3600,60)
|
||||
degrees,minutes = divmod(minutes,60)
|
||||
degrees = degrees
|
||||
if pad == 'lat':
|
||||
coord = str(int(degrees)).zfill(2) + str(int(minutes)).zfill(2) + '.' + str(int(seconds)).zfill(2)
|
||||
if is_positive:
|
||||
coord = coord + 'N'
|
||||
if not(is_positive):
|
||||
coord = coord + 'S'
|
||||
if pad == 'lon':
|
||||
coord = str(int(degrees)).zfill(3) + str(int(minutes)).zfill(2) + '.' + str(int(seconds)).zfill(2)
|
||||
if is_positive:
|
||||
coord = coord + 'E'
|
||||
if not(is_positive):
|
||||
coord = coord + 'W'
|
||||
|
||||
return (coord)
|
||||
|
||||
devicename = 'WURELAY' #This identifies your equipment/software. You can put anything you want. I use 'WS2902A', which is the model of weather station I have
|
||||
|
||||
|
||||
for i in allcwasites:
|
||||
stationid = i[0]
|
||||
latitude = i[1]
|
||||
longitude = i[2]
|
||||
tempf = i[3]
|
||||
dewpt = i[4]
|
||||
humidity = i[5]
|
||||
winddir = i[6]
|
||||
windspd = i[7]
|
||||
windgust = i[8]
|
||||
callsign = i[9]
|
||||
cwoptime = i[10]
|
||||
preciptotal = i[11]
|
||||
pressure = i[12]
|
||||
latitude = decdeg2dms(latitude,'lat')
|
||||
longitude = decdeg2dms(longitude,'lon')
|
||||
print(i)
|
||||
|
||||
if tempf != None:
|
||||
if tempf < 0:
|
||||
temp = str(int(round(tempf))).zfill(3)
|
||||
else:
|
||||
temp = str(int(round(tempf))).zfill(3)
|
||||
else:
|
||||
temp = '...'
|
||||
if (winddir != None and winddir > -1):
|
||||
winddir = str(int(winddir)).zfill(3)
|
||||
else:
|
||||
winddir = '...'
|
||||
if windspd != None:
|
||||
if windspd > 99:
|
||||
windspeed = '...'
|
||||
else:
|
||||
windspeed = str(int(math.ceil(windspd))).zfill(3)
|
||||
else:
|
||||
windspeed = '...'
|
||||
if windgust != None:
|
||||
if windgust > 99:
|
||||
windgust = '...'
|
||||
else:
|
||||
windgust = str(int(math.ceil(windgust))).zfill(3)
|
||||
else:
|
||||
windgust = '...'
|
||||
if humidity != None:
|
||||
if humidity > 8:
|
||||
humidity = str(int(humidity%100)).zfill(2)
|
||||
else:
|
||||
humidity = '...'
|
||||
else:
|
||||
humidity = '...'
|
||||
if pressure != None:
|
||||
if pressure > 29.00 and pressure < 31.00:
|
||||
pressure = str(int(pressure * 338.63886666667)).zfill(5)
|
||||
else:
|
||||
pressure = '...'
|
||||
else:
|
||||
pressure = '...'
|
||||
|
||||
if preciptotal != None:
|
||||
preciptotal = str(int(preciptotal*100)).zfill(3)
|
||||
else:
|
||||
preciptotal = '...'
|
||||
packet = callsign + '>APRS,TCPIP*:@' + datetime.utcnow().strftime("%d%H%M") + 'z' + latitude + '/' + longitude + '_' + winddir + '/' + windspeed + 'g' + windgust + 't' + temp + 'r...P' + preciptotal + 'h' + humidity + 'b' + pressure + devicename
|
||||
|
||||
s = socket(AF_INET, SOCK_STREAM)
|
||||
s.connect(('cwop.aprs.net', 14580))
|
||||
print(packet)
|
||||
s.send(('user ' + callsign + ' pass -1 vers Python\n').encode())
|
||||
s.send((packet+'\n').encode())
|
||||
s.shutdown(0)
|
||||
s.close()
|
||||
sql = 'UPDATE wusites set cwoptime = current_timestamp where cwop = %s'
|
||||
val = (callsign,)
|
||||
cursor.execute(sql,val)
|
||||
conn.commit()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user