3 Commits
v1.8.1 ... main

Author SHA1 Message Date
1629563b73 now to gitea 2025-10-03 09:45:09 +02:00
6d7e06e9ec v1.8.3 2025-08-28 13:48:57 +02:00
ec53e627db v1.8.2 2025-06-22 14:06:24 +02:00
15 changed files with 168 additions and 54 deletions

View File

@@ -1,5 +1,4 @@
{
"Parameters":{
"drawLine" : {"flag" : 0, "data":{ "widget": "QHLine", "text" : "None", "value" : "None"}},
@@ -10,10 +9,6 @@
},
"Expert":{
"alarmMinor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Minor Alarm:",
"value" : " 90"}},
"alarmMajor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Major Alarm:",
"value" : "180"}},
"debug": {"flag" : 0, "data":{ "widget": "None", "text" : "Debug", "value" : 0}},
"simulation": {"flag" : 1, "data":{ "widget": "None", "text" : "Dry run", "value" : 0}}
},

View File

@@ -10,10 +10,6 @@
},
"Expert":{
"alarmMinor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Minor Alarm:",
"value" : " 90"}},
"alarmMajor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Major Alarm:",
"value" : "180"}},
"debug": {"flag" : 0, "data":{ "widget": "None", "text" : "Debug", "value" : 0}},
"simulation": {"flag" : 1, "data":{ "widget": "None", "text" : "Dry run", "value" : 0}}
},

View File

@@ -10,10 +10,6 @@
},
"Expert":{
"alarmMinor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Minor Alarm:",
"value" : " 90"}},
"alarmMajor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Major Alarm:",
"value" : "180"}},
"debug": {"flag" : 0, "data":{ "widget": "None", "text" : "Debug", "value" : 0}},
"simulation": {"flag" : 1, "data":{ "widget": "None", "text" : "Dry run", "value" : 0}}
},

View File

@@ -10,10 +10,6 @@
},
"Expert":{
"alarmMinor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Minor Alarm:",
"value" : " 90"}},
"alarmMajor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Major Alarm:",
"value" : "180"}},
"debug": {"flag" : 0, "data":{ "widget": "None", "text" : "Debug", "value" : 0}},
"simulation": {"flag" : 1, "data":{ "widget": "None", "text" : "Dry run", "value" : 0}}
},

View File

@@ -10,10 +10,6 @@
},
"Expert":{
"alarmMinor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Minor Alarm:",
"value" : " 90"}},
"alarmMajor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Major Alarm:",
"value" : "180"}},
"debug": {"flag" : 0, "data":{ "widget": "None", "text" : "Debug", "value" : 0}},
"simulation": {"flag" : 1, "data":{ "widget": "None", "text" : "Dry run", "value" : 0}}
},

View File

@@ -10,10 +10,6 @@
},
"Expert":{
"alarmMinor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Minor Alarm:",
"value" : " 90"}},
"alarmMajor": {"flag" : 1, "data":{"widget": "QLineEdit", "text" : "Minutes to Major Alarm:",
"value" : "180"}},
"debug": {"flag" : 0, "data":{ "widget": "None", "text" : "Debug", "value" : 0}},
"simulation": {"flag" : 1, "data":{ "widget": "None", "text" : "Dry run", "value" : 0}}
},

View File

@@ -21,7 +21,7 @@ from src.gui import AppGui
_pymodule = os.path.basename(__file__)
_appname, _appext = _pymodule.split(".")
_appversion = "1.8.1"
_appversion = "1.8.4"
# _title = """Power Usage & Saving Hierarchy""" #, HUSH!"""
_title = """HUSH!"""

View File

@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.8.1
cd /proscan/bd/applications/hush/hla/latest
# For use if script is sourced rather than executed
appNameDefault="hush.sh"

View File

@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.8.1
cd /proscan/bd/applications/hush/hla/latest
# For use if script is sourced rather than executed
appNameDefault="hush_g1.sh"

View File

@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.8.1
cd /proscan/bd/applications/hush/hla/latest
# For use if script is sourced rather than executed
appNameDefault="hush_g2.sh"

View File

@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.8.1
cd /proscan/bd/applications/hush/hla/latest
# For use if script is sourced rather than executed
appNameDefault="hush_g3.sh"

View File

@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.8.1
cd /proscan/bd/applications/hush/hla/1.8.4
# For use if script is sourced rather than executed
appNameDefault="hush_o2.sh"

View File

@@ -1,5 +1,5 @@
#!/bin/bash
cd /proscan/bd/applications/hush/hla/1.8.1
cd /proscan/bd/applications/hush/hla/latest
# For use if script is sourced rather than executed
appNameDefault="hush_pif.sh"

View File

@@ -94,7 +94,44 @@ class AppGui(QWidget):
no_alarm_color_str = f'background-color: {no_alarm_color};'
self.no_alarm_sss = ('QLabel {color:#000000; font-weight: bold; ' +
no_alarm_color_str + '}')
self.pv_alarm_warn = self.settings.data['alarmPV']['warn']
self.pv_alarm_error = self.settings.data['alarmPV']['error']
self.pv_user_start_time = self.settings.data['alarmPV']['startTime']
self.pv_user_end_time = self.settings.data['alarmPV']['endTime']
self.alarm_warn = 90
self.alarm_error = 180
self.user_start_time = "07:00"
self.user_end_time = "17:00"
def cb_alarm_warn(pv, handle, pvdata):
if pvdata.value[0] is not None:
self.alarm_warn = pvdata.value[0]
def cb_alarm_error(pv, handle, pvdata):
if pvdata.value[0] is not None:
self.alarm_error = pvdata.value[0]
def cb_user_start(pv, handle, pvdata):
if pvdata.value[0] is not None:
self.user_start_time = pvdata.value[0]
def cb_user_end(pv, handle, pvdata):
if pvdata.value[0] is not None:
self.user_end_time = pvdata.value[0]
self.cafe.openMonitorPrepare()
self.cafe.monitorStart(self.pv_alarm_warn, cb=cb_alarm_warn)
self.cafe.monitorStart(self.pv_alarm_error, cb=cb_alarm_error)
self.cafe.monitorStart(self.pv_user_start_time, cb=cb_user_start)
self.cafe.monitorStart(self.pv_user_end_time, cb=cb_user_end)
self.cafe.openMonitorNow()
self.status_dict = {}
self.font_gui = self.parent.gui_frame.font_gui
@@ -102,7 +139,7 @@ class AppGui(QWidget):
self.input_labels = self.parent.input_labels
self.expert_parameters = self.parent.expert_parameters
self.gui_frame.expert_parameters_group.setFixedWidth(260) #260
self.gui_frame.expert_parameters_group.setFixedHeight(180) #130
self.gui_frame.expert_parameters_group.setFixedHeight(130) #130
self.gui_frame.operator_parameters_group.setFixedWidth(260)
self.gui_frame.operator_parameters_group.setFixedHeight(130)
self.gui_frame.measurement_tab_wgt.setFixedWidth(440)
@@ -158,8 +195,11 @@ class AppGui(QWidget):
self.gui_frame.central_tab_widget.tabBar().setTabText(0, "Control")
#self.gui_frame.central_tab_widget.tabBar().setTabText(1, "IOC")
print("====================================")
if "Controlroom" in self.assigned_master:
shift_type = CAQMenu(self, pv_name="PRO-HUSH:SHIFT-TYPE")
self.gui_frame.operator_parameters_group.layout().insertWidget(
0, QLabel(" Shift Type:"))
@@ -199,7 +239,8 @@ class AppGui(QWidget):
self.gui_frame.results_layout.addWidget(
self.reset_lastpwr(), 1, 0, 1, 1,
Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignCenter))
self.expert_labels = self.parent.expert_labels
self.settings = self.parent.settings
@@ -255,9 +296,14 @@ class AppGui(QWidget):
open_list = (hush_list + self.sec_state_list + pv_list +
self.pv_name_in_sector_list)
self.cafe.openPrepare()
self.cafe.open(open_list)
self.cafe.openNowAndWait(1.0)
self.cafe.open(open_list)
self.cafe.open(self.pv_alarm_warn)
self.cafe.open(self.pv_alarm_error)
self.cafe.open(self.pv_user_start_time)
self.cafe.open(self.pv_user_end_time)
self.cafe.openNowAndWait(0.4)
time.sleep(0.1)
self.cafe.printDisconnected()
self.submastership_dict = {
@@ -347,6 +393,13 @@ class AppGui(QWidget):
except Exception as ex:
print("EMIT FAILED", str(ex))
#Alarm handling
self.gui_frame.results_layout.addWidget(
self.group_alarm(), 1, 1, 1, 1,
Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignCenter))
self.gui_frame.simulation_checkbox.stateChanged.connect(
self.simulation_update)
@@ -419,7 +472,7 @@ class AppGui(QWidget):
#for sect in self.simple_sector_list:
# self.is_sector_standby(sect)
self.timer_awake = QTimer()
self.timer_awake.timeout.connect(self.update_awake_alarm_message)
self.timer_awake.start(10000)
@@ -428,6 +481,22 @@ class AppGui(QWidget):
def update_awake_alarm_message(self):
#No alarm in day shift
def in_operation_range():
current_time = datetime.now().time()
#given_time_start = datetime.strptime("07:00AM", "I:%M%p").time()
#given_time_stop = datetime.strptime("05:30PM", "I:%M%p").time()
given_time_start = datetime.strptime(self.user_start_time, "%H:%M").time()
given_time_stop = datetime.strptime(self.user_end_time, "%H:%M").time()
#print(given_time_start, given_time_stop)
if given_time_start <= current_time <= given_time_stop:
return True
else:
return False
def what_alarm(sect, plot_only=False):
alarm_val = 0
pvdata = self.cafe.getPVCache(
@@ -447,13 +516,17 @@ class AppGui(QWidget):
datet = date2 if date1 < date2 else date1
self.simple_tdiff[idx] = self.time_difference(datet)
if in_operation_range():
self.simple_alarm[idx].setStyleSheet(self.no_alarm_sss)
alarm_val = 0
if self.simple_tdiff[idx][0] > int(
self.input_parameters['alarmMajor']):
elif self.simple_tdiff[idx][0] > int(self.alarm_error):
#self.input_parameters['alarmMajor']):
self.simple_alarm[idx].setStyleSheet(self.alarm_major_sss)
alarm_val = 2
elif self.simple_tdiff[idx][0] > int(
self.input_parameters['alarmMinor']):
elif self.simple_tdiff[idx][0] > int(self.alarm_warn):
#self.input_parameters['alarmMinor']):
self.simple_alarm[idx].setStyleSheet(self.alarm_minor_sss)
alarm_val = 1
else:
@@ -465,7 +538,8 @@ class AppGui(QWidget):
int(self.simple_tdiff[idx][0])) + ' min ')
return alarm_val
for sect in self.simple_sector_list:
idx = self.simple_sector_list.index(sect)
pv = self.settings.data[sect]['alarm']
@@ -484,18 +558,21 @@ class AppGui(QWidget):
self.simple_alarm[idx].setText(' Active ')
alarm_val = 0
#elif 'SH' in sect:
# continue
else:
alarm_val = what_alarm(sect)
#if in_operation_range():
# alarm_val = 0
# self.simple_alarm[idx].setStyleSheet(self.no_alarm_sss)
pv = self.settings.data[sect]['alarm']
if not self.input_parameters["simulation"]:
stat = self.cafe.set(pv, alarm_val)
if stat != self.cyca.ECAFE_NOWTACCESS:
self.check_status(_pymodule, 'set', pv, stat, _line())
#print(pv, sect, alarm_val)
if 'Controlroom' in self.assigned_master:
stat = self.cafe.set(pv, alarm_val)
if stat != self.cyca.ECAFE_NOWTACCESS:
self.check_status(_pymodule, 'set', pv, stat, _line())
#print(pv, sect, alarm_val)
date1 = self.simple_t0[idx]
@@ -537,8 +614,12 @@ class AppGui(QWidget):
self.simple_alarm[idx].setText(self.alarm_text + str(
int(self.simple_tdiff[idx][0])) + ' min ')
alarm_val = what_alarm('SH', plot_only=True)
#if in_operation_range():
# alarm_val = 0
pv = self.settings.data['SH']['alarm']
if not self.input_parameters["simulation"]:
stat = self.cafe.set(pv, alarm_val)
@@ -1149,6 +1230,40 @@ class AppGui(QWidget):
return qsector, qpinit, qpnow, qpsave, qptime, qptotsave, qawakealarm
def group_alarm(self):
qgrid = QGridLayout()
qwarn = CAQTextEntry(self, pv_name=self.pv_alarm_warn)
qerror = CAQTextEntry(self, pv_name=self.pv_alarm_error)
qstarttime = CAQTextEntry(self, pv_name=self.pv_user_start_time)
qendtime = CAQTextEntry(self, pv_name=self.pv_user_end_time)
qlwarn = QLabel("Minutes to Minor Alarm:")
qlerror = QLabel(" Major Alarm:")
qlstarttime = QLabel("User Operation Start Time:")
#qlstarttime.setToolTip("Format HH::MM")
qlendtime = QLabel(" End Time:")
#qlendtime.setToolTip("Format HH::MM")
qgrid.addWidget(qlwarn, 0, 0, 1, 2)
qgrid.addWidget(qlerror, 0, 3, 1, 1)
qgrid.addWidget(qlstarttime, 1, 0, 1, 2)
qgrid.addWidget(qlendtime, 1, 3, 1, 1)
qgrid.addWidget(qwarn, 0, 2, 1, 1)
qgrid.addWidget(qerror, 0, 4, 1, 1)
qgrid.addWidget(qstarttime, 1, 2, 1, 1)
qgrid.addWidget(qendtime, 1, 4, 1, 1)
qw = QGroupBox("Alarm Settings")
qw.setContentsMargins(9, 9, 9, 9)
qw.setObjectName("OUTER")
qw.setLayout(qgrid)
qw.setFixedWidth(410) # 596
qw.setFixedHeight(150)
return qw
def group_sector_qtabwidget(self):
#idx_last = self.settings.data["header"].index("MASTER")

24
src/t.py Normal file
View File

@@ -0,0 +1,24 @@
from datetime import datetime
def in_range():
current_time = datetime.now().time()
#given_time_start = datetime.strptime("07:00AM", "I:%M%p").time()
#given_time_stop = datetime.strptime("05:30PM", "I:%M%p").time()
given_time_start = datetime.strptime("07:00", "%H:%M").time()
given_time_stop = datetime.strptime("17:00", "%H:%M").time()
if given_time_start <= current_time <= given_time_stop:
print("in range", current_time)
return True
else:
print(current_time)
print(given_time_stop)
if in_range():
print("in range")
else:
print("not in range")