-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathweather.py
executable file
·85 lines (68 loc) · 2.36 KB
/
weather.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/env python3
import argparse
from datetime import datetime
import logging
import logging.handlers
import math
import sys
import time
import os
import board
import busio
import setproctitle
from hih6130 import HIH6130
from influxdb import InfluxDBClient
if __name__ == "__main__":
setproctitle.setproctitle(os.path.basename(__file__))
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", action="store_true", default=False)
parser.add_argument("-l", "--local", action="store_true", default=False,
help="Skip logging to syslog")
args = parser.parse_args()
# Get root logger.
STREAM_FMT = "[%(asctime)s] %(levelname)s:%(name)s: %(message)s"
SYSLOG_FMT = "weather.py: %(levelname)s:%(name)s: %(message)s"
log = logging.getLogger()
if args.verbose:
log.setLevel(logging.DEBUG)
else:
log.setLevel(logging.INFO)
if args.local:
# Set up stream handler with custom format.
streamhandler = logging.StreamHandler()
streamhandler.setFormatter(logging.Formatter(fmt=STREAM_FMT))
log.addHandler(streamhandler)
else:
# Set root logger output to syslog with custom format.
syslog_handler = logging.handlers.SysLogHandler(address = "/dev/log")
syslog_handler.setFormatter(logging.Formatter(fmt=SYSLOG_FMT))
log.addHandler(syslog_handler)
log.debug("Logging to syslog")
bus = busio.I2C(board.SCL, board.SDA)
sensor = HIH6130(bus)
client = InfluxDBClient('arg', 8086, 'home_assistant', 'home_assistant', 'home_assistant')
PERIOD = 15.0
n = math.ceil(time.time())
startdelay = n - time.time()
log.debug("Sleeping for %f at startup", startdelay)
time.sleep(startdelay)
while True:
now = datetime.now()
humidity, temperature = sensor.read()
log.info("%.2f C, %.2f %%RH", temperature, humidity * 100)
data = [
{
"measurement": "train_shed",
"time": now.isoformat(),
"fields": {
"humidity": humidity * 100.0,
"temperature": temperature,
}
}
]
client.write_points(data)
n += PERIOD
remain = n - time.time()
if remain > 0.0:
log.debug("Sleeping for %.4f", remain)
time.sleep(remain)