Coverage for flask/src/rasp_water/weather_sensor.py: 27%
22 statements
« prev ^ index » next coverage.py v7.6.8, created at 2024-11-24 13:56 +0900
« prev ^ index » next coverage.py v7.6.8, created at 2024-11-24 13:56 +0900
1#!/usr/bin/env python3
2"""
3雨量データを取得します.
5Usage:
6 weather_sensor.py [-c CONFIG] [-d DAYS]
8Options:
9 -c CONFIG : CONFIG を設定ファイルとして読み込んで実行します.[default: config.yaml]
10 -d DAYS : 集計する日数を指定します.[default: 1]
11"""
13import datetime
14import logging
16import rasp_water.scheduler
17from my_lib.sensor_data import get_day_sum
20def days_since_last_watering():
21 schedule_data = rasp_water.scheduler.schedule_load()
23 wday_list = [x or y for x, y in zip(schedule_data[0]["wday"], schedule_data[1]["wday"])]
24 wday = datetime.datetime.now().weekday() # noqa: DTZ005
26 for i in range(1, len(wday_list) + 1):
27 index = (wday - i) % len(wday_list)
28 if wday_list[index]:
29 return i
30 return 7
33def get_rain_fall_sum(config, days):
34 return get_day_sum(
35 config["influxdb"],
36 config["weather"]["rain_fall"]["sensor"]["type"],
37 config["weather"]["rain_fall"]["sensor"]["name"],
38 "rain",
39 days=days,
40 )
43def get_rain_fall(config):
44 days = days_since_last_watering()
45 rain_fall_sum = get_rain_fall_sum(config, days)
47 logging.info("Rain fall sum since last watering: %.1f (%d days)", rain_fall_sum, days)
49 rainfall_judge = rain_fall_sum > config["weather"]["rain_fall"]["sensor"]["threshold"]["sum"]
50 logging.info("Rain fall sensor judge: %s", rainfall_judge)
52 return (rainfall_judge, rain_fall_sum)
55if __name__ == "__main__":
56 import docopt
57 import my_lib.config
58 import my_lib.logger
59 import my_lib.webapp.config
61 args = docopt.docopt(__doc__)
63 config_file = args["-c"]
64 days = int(args["-d"])
66 my_lib.logger.init("test", level=logging.INFO)
68 config = my_lib.config.load(config_file)
70 my_lib.webapp.config.init(config)
71 rasp_water.scheduler.init()
73 logging.info("Sum of rainfall is %.1f", get_rain_fall_sum(config, days))
75 logging.info("Finish.")