Files
frappy/frappy_psi/rheo_trigger.py
2025-04-14 11:40:12 +02:00

70 lines
2.2 KiB
Python

from frappy.core import StringType, BoolType, Parameter, Property, PersistentParam, Command, IDLE, ERROR, WARN, Writable
import time
class RheoTrigger(Writable):
addr = Property('Port address', StringType())
value = Parameter('Output state', BoolType(), default=0)
target = Parameter('target', BoolType(), default=0, readonly=False)
status = Parameter()
doBeep = Property('Make noise', BoolType(), default=0)
_status = 0
def initModule(self):
super().initModule()
with open('/sys/class/ionopimax/digital_io/'+self.addr+'_mode', 'w') as f :
f.write('out')
if self.doBeep:
with open('/sys/class/ionopimax/buzzer/beep', 'w') as f :
f.write('200 50 3')
def read_value(self):
with open('/sys/class/ionopimax/digital_io/'+self.addr, 'r') as f :
file_value = f.read()
if file_value == '0\n':
value = False
self._status = 0
elif file_value == '1\n':
value = True
self._status = 1
else:
self._status = -1
value = False
return value
def write_target(self,target):
if target == self.value:
return target
else:
with open('/sys/class/ionopimax/digital_io/'+self.addr, 'w') as f :
if target == True:
f.write('1')
elif target == False:
f.write('0')
time.sleep(0.05)
if self.doBeep:
with open('/sys/class/ionopimax/buzzer/beep', 'w') as f :
f.write('200')
self.status = self.read_status()
return target
def read_status(self):
self.value = self.read_value()
if self._status == 0:
return IDLE, 'Signal low'
elif self._status == 1:
return IDLE, 'Signal high'
else:
return ERROR, 'Cannot read status'
@Command
def toggle(self):
"""Toggle output"""
value = self.read_value()
if value == True:
self.write_target(False)
else:
self.write_target(True)