2025-01-14 18:30:53 +01:00
|
|
|
from src.variables.service import get_variable, set_variable
|
2025-01-14 19:41:53 +01:00
|
|
|
from gpiozero import Button
|
2025-01-14 18:30:53 +01:00
|
|
|
import datetime
|
|
|
|
|
2025-01-15 08:57:14 +01:00
|
|
|
pulses_per_rotation = 4
|
2025-01-14 22:06:41 +01:00
|
|
|
reader = Button(4, pull_up=False, bounce_time=0.0005)
|
2025-01-14 18:30:53 +01:00
|
|
|
set_variable("speed_reader_last_impulse_time", datetime.datetime.now(), False)
|
2025-01-15 08:58:29 +01:00
|
|
|
set_variable("actual_rpm_unfiltered", 0, False)
|
2025-01-16 06:21:17 +01:00
|
|
|
set_variable("impulses", 0, False)
|
2025-01-16 06:23:10 +01:00
|
|
|
set_variable("last_calc_time", datetime.datetime.now(), False)
|
2025-01-14 18:30:53 +01:00
|
|
|
|
|
|
|
|
2025-01-14 19:41:53 +01:00
|
|
|
def event():
|
2025-01-14 18:30:53 +01:00
|
|
|
actual = datetime.datetime.now()
|
|
|
|
last = get_variable("speed_reader_last_impulse_time")
|
|
|
|
difference = (actual - last).total_seconds()
|
2025-01-14 20:56:23 +01:00
|
|
|
set_variable("speed_reader_last_impulse_time", actual, False)
|
2025-01-14 18:30:53 +01:00
|
|
|
|
2025-01-15 08:53:54 +01:00
|
|
|
rpm = (60 / difference) / pulses_per_rotation
|
|
|
|
|
2025-01-15 08:57:14 +01:00
|
|
|
actual_rpm = (float(get_variable("actual_rpm_unfiltered")) + rpm) / 2
|
|
|
|
set_variable("actual_rpm_unfiltered", rpm, False)
|
2025-01-15 08:53:54 +01:00
|
|
|
|
|
|
|
set_variable("actual_rpm", round(actual_rpm, 1), False)
|
2025-01-15 09:26:17 +01:00
|
|
|
print(round(actual_rpm, 1))
|
2025-01-14 18:30:53 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-16 06:07:01 +01:00
|
|
|
def new_event():
|
2025-01-16 06:10:58 +01:00
|
|
|
set_variable("impulses", int(get_variable("impulses")) + 1, False)
|
2025-01-14 18:30:53 +01:00
|
|
|
|
2025-01-16 06:21:17 +01:00
|
|
|
def speed_calc():
|
|
|
|
now = datetime.datetime.now()
|
2025-01-16 06:23:10 +01:00
|
|
|
last_time = get_variable("last_calc_time")
|
|
|
|
set_variable("last_calc_time", datetime.datetime.now(), False)
|
2025-01-16 06:25:06 +01:00
|
|
|
|
2025-01-16 06:21:17 +01:00
|
|
|
impulses = int(get_variable("impulses"))
|
|
|
|
set_variable("impulses", 0, False)
|
|
|
|
time_delta = (now - last_time).total_seconds()
|
|
|
|
|
|
|
|
actual_rpm = (impulses/pulses_per_rotation) * (60/time_delta)
|
2025-01-16 06:34:08 +01:00
|
|
|
|
|
|
|
last_rpm = float(get_variable("actual_rpm_unfiltered"))
|
2025-01-16 06:34:39 +01:00
|
|
|
set_variable("actual_rpm_unfiltered", actual_rpm, False)
|
2025-01-16 06:34:08 +01:00
|
|
|
actual_rpm = (last_rpm + actual_rpm) / 2
|
|
|
|
|
2025-01-16 06:21:17 +01:00
|
|
|
set_variable("actual_rpm", round(actual_rpm, 1), False)
|
2025-01-16 06:25:06 +01:00
|
|
|
print(actual_rpm)
|
2025-01-16 06:21:17 +01:00
|
|
|
|
2025-01-14 18:30:53 +01:00
|
|
|
|
2025-01-16 06:07:01 +01:00
|
|
|
|
|
|
|
|
|
|
|
reader.when_pressed = new_event
|