首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python雨量计,更正误报

Python雨量计,更正误报
EN

Stack Overflow用户
提问于 2021-02-27 04:02:25
回答 1查看 61关注 0票数 0

我在Pi Zero上运行了以下脚本,并附加了一个倾倒桶雨量计。正如您所看到的,它会统计提示的数量,并每30分钟记录一次sql。不过,我还是有一些误报。大约每30分钟1到2次。每一天,即使是最干燥的日子。我怎样才能避免它们呢?我在想这样的事情:

代码语言:javascript
复制
if rainTick <= 2:
     rainTick = 0

但我不想让它重置一整天,只重置最后30分钟。它应该只会在午夜完全重置。

代码语言:javascript
复制
import time
import datetime
import RPi.GPIO as GPIO
import mysql.connector

rainTick = 0
Input_Sig = 6
starttime = time.time()
last_day = datetime.datetime.now().day
lastrainevent = datetime.datetime.now()

GPIO.setmode(GPIO.BCM)
GPIO.setup(Input_Sig, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(Input_Sig, GPIO.FALLING,  bouncetime=5)

def raintrig(self):
    global rainTick
    rainTick += 1
 
mydb = mysql.connector.connect(
    host='localhost',
    user='pi',
    passwd='************',
    database='weatherDB'
)
mycursor = mydb.cursor()

def write2DB(values):
    sqlText = '''INSERT INTO rainfall(rain) VALUES({:.2f})'''.format(values)
    #print( values, 'mm')
    mycursor.execute(sqlText)
    mydb.commit()

GPIO.add_event_callback(Input_Sig, raintrig)

while True:
 
    rainFall = rainTick * 0.2794
    day = datetime.datetime.now().day
    if day != last_day:
        last_day = day
        rainTick = 0
    print(rainFall, 'mm')
    write2DB(rainFall)
    time.sleep(1800.0 - ((time.time() - starttime) % 60.0))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-27 21:12:53

好吧,我想我可能已经解决了。至少是一个非常基本的方法。

代码语言:javascript
复制
import time
import datetime
import RPi.GPIO as GPIO
import mysql.connector

rainTick = 0
lastTick = 0
inputPin = 6
startTime = time.time()
lastDay = datetime.datetime.now().day

GPIO.setmode(GPIO.BCM)
GPIO.setup(inputPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(inputPin, GPIO.FALLING,  bouncetime=5)

def rainTrig(self):
    global rainTick
    global lastTick
    rainTick += 1
    lastTick += 1
    
mydb = mysql.connector.connect(
    host='localhost',
    user='pi',
    passwd='Snabela1',
    database='weatherDB'
)
mycursor = mydb.cursor()

def write2DB(values):
    sqlText = '''INSERT INTO rainfall(rain) VALUES({:.2f})'''.format(values)
    mycursor.execute(sqlText)
    mydb.commit()

GPIO.add_event_callback(inputPin, rainTrig)

while True:
 
    if lastTick <= 2:
        rainTick -= lastTick   
    rainFall = rainTick * 0.2794
    day = datetime.datetime.now().day
    if day != lastDay:
        lastDay = day
        rainTick = 0
    lastTick = 0
    #print(rainFall, 'mm')
    write2DB(rainFall)
    time.sleep(1800.0 - ((time.time() - startTime) % 60.0))

我设置了一个新变量,每次重置一次,如果它等于1或2,它会从总数中减去vlue。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66392130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档