update: relay control
This commit is contained in:
parent
846fc4d210
commit
746f4bfda5
BIN
__pycache__/sainsmartrelay.cpython-311.pyc
Normal file
BIN
__pycache__/sainsmartrelay.cpython-311.pyc
Normal file
Binary file not shown.
@ -28,6 +28,8 @@ import cv2
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
import sainsmartrelay
|
||||||
|
|
||||||
# db_config = {
|
# db_config = {
|
||||||
# 'user': 'dbUser',
|
# 'user': 'dbUser',
|
||||||
# 'password': 'dbPassword',
|
# 'password': 'dbPassword',
|
||||||
@ -459,6 +461,14 @@ class Ui_MainWindow(object):
|
|||||||
self.graphicsView.setGeometry(QtCore.QRect(10, int(1080/2), 661, int(480*1.05))) # position and size of camera frame # int(640*1.05)
|
self.graphicsView.setGeometry(QtCore.QRect(10, int(1080/2), 661, int(480*1.05))) # position and size of camera frame # int(640*1.05)
|
||||||
self.graphicsView.setObjectName("graphicsView")
|
self.graphicsView.setObjectName("graphicsView")
|
||||||
|
|
||||||
|
# relay control
|
||||||
|
self.startSpotlightBtn = QtWidgets.QPushButton(self.centralwidget)
|
||||||
|
self.startSpotlightBtn.setGeometry(QtCore.QRect(700+200, int(1080/2)+100, 161, 25)) #int(1080/2)+100
|
||||||
|
self.startSpotlightBtn.setObjectName("startSpotlightBtn")
|
||||||
|
self.stopSpotlightBtn = QtWidgets.QPushButton(self.centralwidget)
|
||||||
|
self.stopSpotlightBtn.setGeometry(QtCore.QRect(700+200, int(1080/2)+150, 161, 25))
|
||||||
|
self.stopSpotlightBtn.setObjectName("stopSpotlightBtn")
|
||||||
|
|
||||||
#self.myTestLambda = lambda: self.worker.checkWaageStartSignal.emit(einzelteilID, self.teileZuViel, self.auftragsnummer)
|
#self.myTestLambda = lambda: self.worker.checkWaageStartSignal.emit(einzelteilID, self.teileZuViel, self.auftragsnummer)
|
||||||
|
|
||||||
'''
|
'''
|
||||||
@ -562,6 +572,10 @@ class Ui_MainWindow(object):
|
|||||||
# self.camWorkFlowcheckBox.clicked.connect(self.onCheckboxCheck)
|
# self.camWorkFlowcheckBox.clicked.connect(self.onCheckboxCheck)
|
||||||
self.modelComboBox
|
self.modelComboBox
|
||||||
|
|
||||||
|
# relay control
|
||||||
|
self.startSpotlightBtn.setText(_translate("MainWindow", "Turn on light"))
|
||||||
|
self.stopSpotlightBtn.setText(_translate("MainWindow", "Turn off light"))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def mousePressEvent(self, event):
|
def mousePressEvent(self, event):
|
||||||
@ -1045,6 +1059,46 @@ class CameraStreamApp(QtWidgets.QMainWindow):
|
|||||||
self.yolo_stream.cap.release()
|
self.yolo_stream.cap.release()
|
||||||
event.accept()
|
event.accept()
|
||||||
|
|
||||||
|
# new class for relay control
|
||||||
|
class RelayControl(QtWidgets.QMainWindow):
|
||||||
|
def __init__(self, ui):
|
||||||
|
super().__init__()
|
||||||
|
self.ui = ui
|
||||||
|
# self.timer = QtCore.QTimer(self)
|
||||||
|
# self.timer.timeout.connect(self.update_frame)
|
||||||
|
|
||||||
|
# # Populate the model dropdown menu
|
||||||
|
# self.populate_model_dropdown()
|
||||||
|
|
||||||
|
self.ui.startSpotlightBtn.clicked.connect(self.spot_on)
|
||||||
|
self.ui.stopSpotlightBtn.clicked.connect(self.spot_off)
|
||||||
|
# self.scene = QtWidgets.QGraphicsScene(self)
|
||||||
|
# self.ui.graphicsView.setScene(self.scene)
|
||||||
|
|
||||||
|
# def populate_model_dropdown(self):
|
||||||
|
# """Populate the dropdown menu with model files from the models directory."""
|
||||||
|
# models_dir = "models"
|
||||||
|
# model_files = [f for f in os.listdir(models_dir) if f.endswith(".pt")]
|
||||||
|
# self.ui.modelComboBox.clear()
|
||||||
|
# self.ui.modelComboBox.addItems(model_files)
|
||||||
|
|
||||||
|
def spot_on(self):
|
||||||
|
# Start the YOLOv8 camera stream (only if not already started)
|
||||||
|
# if self.yolo_stream is None:
|
||||||
|
# self.yolo_stream = YOLOv8CameraStream(model_path="models/yolov8m_seg_e300.pt", logging_level="high")
|
||||||
|
# # self.yolo_stream.start() # Start the YOLOv8 stream
|
||||||
|
# self.timer.start(30) # Start the timer to update the frame every 30ms (about 33 FPS)
|
||||||
|
sainsmartrelay.turn_on(1)
|
||||||
|
|
||||||
|
def spot_off(self):
|
||||||
|
# # Stop the camera stream and processing
|
||||||
|
# if self.yolo_stream is not None:
|
||||||
|
# self.timer.stop() # Stop the timer
|
||||||
|
# self.yolo_stream.cap.release() # Release the camera resource
|
||||||
|
# self.yolo_stream = None # Reset the YOLOv8 stream object
|
||||||
|
# self.scene.clear() # Clear the displayed frame from the graphicsView
|
||||||
|
# print("Camera stream stopped and resources released.")
|
||||||
|
sainsmartrelay.turn_off(1)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import sys
|
import sys
|
||||||
|
53
sainsmartrelay.py
Normal file
53
sainsmartrelay.py
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
import subprocess
|
||||||
|
|
||||||
|
class SainsmartRelay:
|
||||||
|
def __init__(self, executable="sainsmartrelay"):
|
||||||
|
self.executable = executable
|
||||||
|
|
||||||
|
def _run_command(self, args):
|
||||||
|
try:
|
||||||
|
result = subprocess.run(
|
||||||
|
["sudo", self.executable] + args,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.PIPE,
|
||||||
|
text=True,
|
||||||
|
check=True
|
||||||
|
)
|
||||||
|
return result.stdout.strip()
|
||||||
|
except subprocess.CalledProcessError as e:
|
||||||
|
print(f"Error: {e.stderr.strip()}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
def turn_on(self, relays):
|
||||||
|
"""Turn on specified relays."""
|
||||||
|
relays_str = ','.join(map(str, relays)) if isinstance(relays, (list, tuple)) else str(relays)
|
||||||
|
return self._run_command(["--on", relays_str])
|
||||||
|
|
||||||
|
def turn_off(self, relays):
|
||||||
|
"""Turn off specified relays."""
|
||||||
|
relays_str = ','.join(map(str, relays)) if isinstance(relays, (list, tuple)) else str(relays)
|
||||||
|
return self._run_command(["--off", relays_str])
|
||||||
|
|
||||||
|
def get_status(self, relays="all"):
|
||||||
|
"""Get the status of specified relays."""
|
||||||
|
return self._run_command(["--status", str(relays)])
|
||||||
|
|
||||||
|
def find_all_devices(self):
|
||||||
|
"""Find all connected FTDI devices."""
|
||||||
|
return self._run_command(["--findall"])
|
||||||
|
|
||||||
|
# Example usage:
|
||||||
|
if __name__ == "__main__":
|
||||||
|
relay = SainsmartRelay()
|
||||||
|
|
||||||
|
# Turn on relay 1
|
||||||
|
print(relay.turn_on(1))
|
||||||
|
|
||||||
|
# Turn off all relays
|
||||||
|
print(relay.turn_off("all"))
|
||||||
|
|
||||||
|
# Get the status of all relays
|
||||||
|
print(relay.get_status())
|
||||||
|
|
||||||
|
# Find all FTDI devices
|
||||||
|
print(relay.find_all_devices())
|
Loading…
Reference in New Issue
Block a user