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

1#!/usr/bin/env python3 

2""" 

3雨量データを取得します. 

4 

5Usage: 

6 weather_sensor.py [-c CONFIG] [-d DAYS] 

7 

8Options: 

9 -c CONFIG : CONFIG を設定ファイルとして読み込んで実行します.[default: config.yaml] 

10 -d DAYS : 集計する日数を指定します.[default: 1] 

11""" 

12 

13import datetime 

14import logging 

15 

16import rasp_water.scheduler 

17from my_lib.sensor_data import get_day_sum 

18 

19 

20def days_since_last_watering(): 

21 schedule_data = rasp_water.scheduler.schedule_load() 

22 

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 

25 

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 

31 

32 

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 ) 

41 

42 

43def get_rain_fall(config): 

44 days = days_since_last_watering() 

45 rain_fall_sum = get_rain_fall_sum(config, days) 

46 

47 logging.info("Rain fall sum since last watering: %.1f (%d days)", rain_fall_sum, days) 

48 

49 rainfall_judge = rain_fall_sum > config["weather"]["rain_fall"]["sensor"]["threshold"]["sum"] 

50 logging.info("Rain fall sensor judge: %s", rainfall_judge) 

51 

52 return (rainfall_judge, rain_fall_sum) 

53 

54 

55if __name__ == "__main__": 

56 import docopt 

57 import my_lib.config 

58 import my_lib.logger 

59 import my_lib.webapp.config 

60 

61 args = docopt.docopt(__doc__) 

62 

63 config_file = args["-c"] 

64 days = int(args["-d"]) 

65 

66 my_lib.logger.init("test", level=logging.INFO) 

67 

68 config = my_lib.config.load(config_file) 

69 

70 my_lib.webapp.config.init(config) 

71 rasp_water.scheduler.init() 

72 

73 logging.info("Sum of rainfall is %.1f", get_rain_fall_sum(config, days)) 

74 

75 logging.info("Finish.")