83 lines
2.7 KiB
Groff
83 lines
2.7 KiB
Groff
|
from influxdb_client import InfluxDBClient, Point
|
||
|
from influxdb_client.client.write_api import SYNCHRONOUS
|
||
|
from weather.stations.davis import VantagePro
|
||
|
import gc
|
||
|
from pprint import pprint
|
||
|
import time
|
||
|
import logging
|
||
|
import serial.tools.list_ports
|
||
|
import os
|
||
|
import sys
|
||
|
import psutil
|
||
|
|
||
|
logging.basicConfig(filename="Stations.log",
|
||
|
format='%(asctime)s %(message)s',
|
||
|
filemode='a')
|
||
|
logger = logging.getLogger('davis_api')
|
||
|
logger.setLevel(logging.DEBUG)
|
||
|
ef restart_program():
|
||
|
try:
|
||
|
p = psutil.Process(os.getpid())
|
||
|
for handler in p.open_files() + p.connections():
|
||
|
os.close(handler.fd)
|
||
|
except Exception as e:
|
||
|
logging.error(e)
|
||
|
python = sys.executable
|
||
|
os.execl(python,python,*sys.argv)
|
||
|
|
||
|
|
||
|
def write_data(device, station, send=True):
|
||
|
try:
|
||
|
device.parse()
|
||
|
data = device.fields
|
||
|
points = []
|
||
|
fields = ['BarTrend', 'CRC', 'DateStamp', 'DewPoint', 'HeatIndex', 'ETDay', 'HeatIndex',
|
||
|
'HumIn', 'HumOut', 'Pressure', 'RainDay', 'RainMonth', 'RainRate', 'RainStorm',
|
||
|
'RainYear', 'SunRise', 'SunSet', 'TempIn', 'TempOut', 'WindDir', 'WindSpeed',
|
||
|
'WindSpeed10Min']
|
||
|
if send:
|
||
|
for field in fields:
|
||
|
points.append(Point(station).field(field, data[field]))
|
||
|
write_api.write(bucket=bucket, record=points)
|
||
|
else:
|
||
|
pprint(data)
|
||
|
# tables = query_api.query(f'from(bucket:"{bucket}") |> range(start: -1h)')
|
||
|
del data
|
||
|
del points
|
||
|
del fields
|
||
|
gc.collect()
|
||
|
except Exception as e:
|
||
|
logger.error(str(e))
|
||
|
os.execl('runme.sh','')
|
||
|
|
||
|
|
||
|
try:
|
||
|
token = "2CEePET3ss2khtjsdGrJap8mVzHhR2dRwuyK3NuFBvDgGtOMSi6Jstsrp2o-OANzD8fxB73PsTyIbqgbnokoXQ=="
|
||
|
bucket = 'wind'
|
||
|
org = "UlSTU"
|
||
|
url = "http://influxdb.athene.tech/"
|
||
|
client = InfluxDBClient(url=url, token=token, org=org)
|
||
|
write_api = client.write_api(write_options=SYNCHRONOUS)
|
||
|
query_api = client.query_api()
|
||
|
except Exception as e:
|
||
|
logger.error('DB_ERR:' + str(e))
|
||
|
|
||
|
try:
|
||
|
ports = serial.tools.list_ports.comports()
|
||
|
available_ports = {}
|
||
|
for port in ports:
|
||
|
# print(port)
|
||
|
if port.serial_number == '0001':
|
||
|
available_ports['/dev/'+port.name] = port.vid
|
||
|
# COM = 'COM8' # '/dev/ttyUSB0'
|
||
|
# COM1 = '/dev/ttyUSB1'
|
||
|
# available_ports = {'/dev/ttyUSB0':'st1'}
|
||
|
devices = [VantagePro(port) for port in available_ports.keys()]
|
||
|
# print(available_ports)
|
||
|
while True:
|
||
|
for i in range(len(devices)):
|
||
|
write_data(devices[i], 'st' + str(available_ports[list(available_ports.keys())[i]]), True)
|
||
|
time.sleep(15)
|
||
|
except Exception as e:
|
||
|
logger.error('Device_error' + str(e))
|