SequentMicrosystems_API/scripts/speed_reader.py

52 lines
1.5 KiB
Python
Raw Permalink Normal View History

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-22 10:02:54 +01:00
import datetime, os, json
2025-01-14 18:30:53 +01:00
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-22 10:02:54 +01:00
#set_variable("actual_rpm_unfiltered", 0, False)
set_variable("rpm_filter", json.dumps([0]), False)
if get_variable("rpm_filter_count") == None:
set_variable("rpm_filter_count", 8, True)
2025-01-14 18:30:53 +01:00
def printer(text):
if bool(os.getenv("DEBUG")):
print(text)
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-22 10:02:54 +01:00
#actual_rpm = (float(get_variable("actual_rpm_unfiltered")) + rpm) / 2
#set_variable("actual_rpm_unfiltered", rpm, False)
rpm_filter = json.loads(get_variable("rpm_filter"))
print(rpm_filter)
while len(rpm_filter) > int(get_variable("rpm_filter_count")):
rpm_filter.remove(rpm_filter[0])
rpm_filter.append(rpm)
set_variable("rpm_filter", json.dumps(rpm_filter), False)
average = 0
for i in rpm_filter:
average = average + i
actual_rpm = average / len(rpm_filter)
2025-01-15 08:53:54 +01:00
set_variable("actual_rpm", round(actual_rpm, 1), False)
printer("Measured RPM: {}".format(round(actual_rpm, 1)))
2025-01-14 18:30:53 +01:00
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 = event