Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions data/mock/conf/services/smartswitch.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
"/SwitchableOutput/0/Settings/ShowUIControl": 1,
"/SwitchableOutput/0/Settings/Type": 0,
"/SwitchableOutput/0/Settings/ValidTypes": 7,
"/SwitchableOutput/0/Settings/Function": 0,
"/SwitchableOutput/0/Settings/ValidFunctions": 255,
"/SwitchableOutput/0/State": 0,
"/SwitchableOutput/0/Status": 0,
"/SwitchableOutput/0/Temperature": 28.330608367919922,
Expand All @@ -49,6 +51,8 @@
"/SwitchableOutput/1/Settings/ShowUIControl": 1,
"/SwitchableOutput/1/Settings/Type": 2,
"/SwitchableOutput/1/Settings/ValidTypes": 7,
"/SwitchableOutput/1/Settings/Function": 3,
"/SwitchableOutput/1/Settings/ValidFunctions": 175,
"/SwitchableOutput/1/State": 0,
"/SwitchableOutput/1/Status": 0,
"/SwitchableOutput/1/Temperature": 28.654977798461914,
Expand All @@ -62,6 +66,8 @@
"/SwitchableOutput/2/Settings/ShowUIControl": 1,
"/SwitchableOutput/2/Settings/Type": 1,
"/SwitchableOutput/2/Settings/ValidTypes": 7,
"/SwitchableOutput/2/Settings/Function": 8,
"/SwitchableOutput/2/Settings/ValidFunctions": 79,
"/SwitchableOutput/2/State": 1,
"/SwitchableOutput/2/Status": 9,
"/SwitchableOutput/2/Temperature": 29.42300033569336,
Expand All @@ -75,6 +81,8 @@
"/SwitchableOutput/3/Settings/ShowUIControl": 1,
"/SwitchableOutput/3/Settings/Type": 1,
"/SwitchableOutput/3/Settings/ValidTypes": 7,
"/SwitchableOutput/3/Settings/Function": 3,
"/SwitchableOutput/3/Settings/ValidFunctions": 4,
"/SwitchableOutput/3/State": 0,
"/SwitchableOutput/3/Status": 9,
"/SwitchableOutput/3/Temperature": 29.693782806396484,
Expand Down
34 changes: 17 additions & 17 deletions pages/settings/PageSettingsRelay.qml
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ Page {

function notifyRelayFunctionChange(relayFunction) {
switch (relayFunction) {
case VenusOS.Relay_Function_GeneratorStartStop:
case VenusOS.SwitchableOutput_Function_GeneratorStartStop:
//% "The Genset can now be found in the devices list"
Global.showToastNotification(VenusOS.Notification_Info, qsTrId("settings_relay_genset_can_now_be_found"), 5000)
break
case VenusOS.Relay_Function_Tank_Pump:
case VenusOS.SwitchableOutput_Function_Tank_Pump:
//% "The Tank Pump can now be found in the devices list"
Global.showToastNotification(VenusOS.Notification_Info, qsTrId("settings_relay_tank_pump_can_now_be_found"), 5000)
break
case VenusOS.Relay_Function_Manual:
case VenusOS.SwitchableOutput_Function_Manual:
//% "The Relay can now be found in the devices list"
Global.showToastNotification(VenusOS.Notification_Info, qsTrId("settings_relay_manual_can_now_be_found"), 5000)
break
Expand Down Expand Up @@ -51,18 +51,18 @@ Page {
dataItem.uid: Global.systemSettings.serviceUid + "/Settings/Relay/Function"
optionModel: [
//% "Disabled"
{ display: qsTrId("settings_relay_disabled"), value: VenusOS.Relay_Function_Disabled },
{ display: qsTrId("settings_relay_disabled"), value: VenusOS.SwitchableOutput_Function_Disabled },
//% "Alarm relay"
{ display: qsTrId("settings_relay_alarm_relay"), value: VenusOS.Relay_Function_Alarm },
{ display: qsTrId("settings_relay_alarm_relay"), value: VenusOS.SwitchableOutput_Function_Alarm },
//% "Genset start/stop"
{ display: qsTrId("settings_relay_genset_start_stop"), value: VenusOS.Relay_Function_GeneratorStartStop },
{ display: qsTrId("settings_relay_genset_start_stop"), value: VenusOS.SwitchableOutput_Function_GeneratorStartStop },
//% "Connected genset helper relay"
{ display: qsTrId("settings_relay_genset_helper_relay"), value: VenusOS.Relay_Function_GensetHelperRelay },
{ display: qsTrId("settings_relay_genset_helper_relay"), value: VenusOS.SwitchableOutput_Function_GensetHelperRelay },
//% "Tank pump"
{ display: qsTrId("settings_relay_tank_pump"), value: VenusOS.Relay_Function_Tank_Pump },
{ display: qsTrId("settings_relay_tank_pump"), value: VenusOS.SwitchableOutput_Function_Tank_Pump },
//% "Manual"
{ display: qsTrId("settings_relay_manual"), value: VenusOS.Relay_Function_Manual },
{ display: CommonWords.temperature, value: VenusOS.Relay_Function_Temperature },
{ display: qsTrId("settings_relay_manual"), value: VenusOS.SwitchableOutput_Function_Manual },
{ display: CommonWords.temperature, value: VenusOS.SwitchableOutput_Function_Temperature },
]
onOptionClicked: function(index) {
root.notifyRelayFunctionChange(optionModel[index].value)
Expand All @@ -77,7 +77,7 @@ Page {
//% "Polarity"
: qsTrId("settings_relay_polarity")
dataItem.uid: Global.systemSettings.serviceUid + "/Settings/Relay/Polarity"
preferredVisible: [VenusOS.Relay_Function_Alarm, VenusOS.Relay_Function_Manual].indexOf(relayFunction.currentValue) >= 0
preferredVisible: [VenusOS.SwitchableOutput_Function_Alarm, VenusOS.SwitchableOutput_Function_Manual].indexOf(relayFunction.currentValue) >= 0
optionModel: [
//% "Normally open"
{ display: qsTrId("settings_relay_normally_open"), value: 0 },
Expand All @@ -95,10 +95,10 @@ Page {
preferredVisible: relay1State.seen
optionModel: [
//% "Disabled"
{ display: qsTrId("settings_relay_disabled"), value: VenusOS.Relay_Function_Disabled },
{ display: qsTrId("settings_relay_disabled"), value: VenusOS.SwitchableOutput_Function_Disabled },
//% "Manual"
{ display: qsTrId("settings_relay_manual"), value: VenusOS.Relay_Function_Manual },
{ display: CommonWords.temperature, value: VenusOS.Relay_Function_Temperature },
{ display: qsTrId("settings_relay_manual"), value: VenusOS.SwitchableOutput_Function_Manual },
{ display: CommonWords.temperature, value: VenusOS.SwitchableOutput_Function_Temperature },
]
onOptionClicked: function(index) {
root.notifyRelayFunctionChange(optionModel[index].value)
Expand All @@ -110,15 +110,15 @@ Page {
//% "Polarity (Relay 2)"
text: qsTrId("settings_relay_polarity_relay2")
dataItem.uid: Global.systemSettings.serviceUid + "/Settings/Relay/1/Polarity"
preferredVisible: relay1Function.currentValue === VenusOS.Relay_Function_Manual
preferredVisible: relay1Function.currentValue === VenusOS.SwitchableOutput_Function_Manual
optionModel: relayPolaritySwitch.optionModel
}

ListNavigation {
//% "Temperature control rules"
text: qsTrId("settings_relay_temp_control_rules")
preferredVisible: relayFunction.currentValue === VenusOS.Relay_Function_Temperature
|| relay1Function.currentValue === VenusOS.Relay_Function_Temperature
preferredVisible: relayFunction.currentValue === VenusOS.SwitchableOutput_Function_Temperature
|| relay1Function.currentValue === VenusOS.SwitchableOutput_Function_Temperature
onClicked: {
Global.pageManager.pushPage("/pages/settings/PageSettingsRelayTempSensors.qml", { title: text })
}
Expand Down
6 changes: 3 additions & 3 deletions pages/settings/PageSettingsRelayTempSensors.qml
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,9 @@ Page {
Page {
function _hasInvalidRelayTempConfig(relayNr) {
if (relayNr === 0) {
return relay0FunctionItem.value !== VenusOS.Relay_Function_Temperature
return relay0FunctionItem.value !== VenusOS.SwitchableOutput_Function_Temperature
} else if (relayNr === 1) {
return relay1FunctionItem.value !== VenusOS.Relay_Function_Temperature
return relay1FunctionItem.value !== VenusOS.SwitchableOutput_Function_Temperature
}
return false
}
Expand All @@ -93,7 +93,7 @@ Page {
}

GradientListView {
model: relay0FunctionItem.value === VenusOS.Relay_Function_Temperature || relay1FunctionItem.value === VenusOS.Relay_Function_Temperature
model: relay0FunctionItem.value === VenusOS.SwitchableOutput_Function_Temperature || relay1FunctionItem.value === VenusOS.SwitchableOutput_Function_Temperature
? tempRelayModel
: disabledModel

Expand Down
2 changes: 1 addition & 1 deletion pages/settings/PageSettingsTankPump.qml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Page {

model: relayFunction.value === undefined
? startStopModel
: relayFunction.value === VenusOS.Relay_Function_Tank_Pump ? startStopModel : disabledModel
: relayFunction.value === VenusOS.SwitchableOutput_Function_Tank_Pump ? startStopModel : disabledModel

VeQuickItem {
id: relayFunction
Expand Down
4 changes: 2 additions & 2 deletions pages/settings/devicelist/DeviceListPage.qml
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ Page {
id: gensetMenu
//% "Genset"
text: qsTrId("devicelistpage_genset")
preferredVisible: relay0.valid && relayFunction.valid && relayFunction.value === VenusOS.Relay_Function_GeneratorStartStop
preferredVisible: relay0.valid && relayFunction.valid && relayFunction.value === VenusOS.SwitchableOutput_Function_GeneratorStartStop
onClicked: Global.pageManager.pushPage("/pages/settings/PageRelayGenerator.qml", {"title": text})

VeQuickItem {
Expand All @@ -113,7 +113,7 @@ Page {

ListNavigation {
id: tankPumpMenu
preferredVisible: relayFunction.valid && relayFunction.value === VenusOS.Relay_Function_Tank_Pump
preferredVisible: relayFunction.valid && relayFunction.value === VenusOS.SwitchableOutput_Function_Tank_Pump
//% "Tank pump"
text: qsTrId("settings_tank_pump")
onClicked: Global.pageManager.pushPage("/pages/settings/PageSettingsTankPump.qml", {"title": text})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,30 @@ Page {
defaultSecondaryText: VenusOS.switchableOutput_typeToText(root.switchableOutput.type, root.switchableOutput.outputId)
}

ListRadioButtonGroup {
//% "Function"
text: qsTrId("page_switchable_output_function")
dataItem.uid: root.switchableOutput.uid + "/Settings/Function"
preferredVisible: dataItem.valid
&& (root.switchableOutput.validFunctions !== (1 << VenusOS.SwitchableOutput_Function_Manual))
secondaryLabel.color: root.switchableOutput.hasValidFunction ? Theme.color_listItem_secondaryText : Theme.color_critical
optionModel: {
let options = []
for (let i = 0; i <= VenusOS.SwitchableOutput_Function_MaxSupportedType; i++) {
if (root.switchableOutput.validFunctions & (1 << i)) {
options.push({ display: VenusOS.switchableOutput_functionToText(i), value: i })
}
}
return options
}
interactive: optionModel.length > 1 || !root.switchableOutput.hasValidFunction

// Set the fallback text explicitly, in case the output Function is not supported by its
// ValidFunctions, which means the current Function is not one of the listed options and
// thus cannot be displayed by ListRadioButtonGroup.
defaultSecondaryText: VenusOS.switchableOutput_functionToText(root.switchableOutput.function)
}

ListRadioButtonGroup {
//: Whether UI controls should be shown for this output
//% "Show controls"
Expand Down
33 changes: 33 additions & 0 deletions src/enums.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -461,6 +461,39 @@ QString Enums::switchableOutput_typeToText(SwitchableOutput_Type value, const QS
}
}

QString Enums::switchableOutput_functionToText(SwitchableOutput_Function value) const
{
switch (value) {
case SwitchableOutput_Function_Disabled:
//% "Disabled"
return qtTrId("switchable_output_function_disabled");
case SwitchableOutput_Function_Alarm:
//% "Alarm"
return qtTrId("switchable_output_function_alarm");
case SwitchableOutput_Function_GeneratorStartStop:
//% "Generator start/stop"
return qtTrId("switchable_output_function_generator_startstop");
case SwitchableOutput_Function_Manual:
//% "Manual"
return qtTrId("switchable_output_function_manual");
case SwitchableOutput_Function_Tank_Pump:
//% "Tank pump"
return qtTrId("switchable_output_function_tankpump");
case SwitchableOutput_Function_Temperature:
//% "Temperature"
return qtTrId("switchable_output_function_temperature");
case SwitchableOutput_Function_GensetHelperRelay:
//% "Genset Helper"
return qtTrId("switchable_output_function_genset_helper");
case SwitchableOutput_Function_OpportunityLoad:
//% "Opportunity load"
return qtTrId("switchable_output_function_opportunity_load");
default:
//% "Unsupported type: %1"
return qtTrId("switchable_output_unsupported").arg(value);
}
}

QString Enums::switchableOutput_statusToText(SwitchableOutput_Status value, SwitchableOutput_Type type) const
{
switch (value) {
Expand Down
27 changes: 16 additions & 11 deletions src/enums.h
Original file line number Diff line number Diff line change
Expand Up @@ -530,6 +530,21 @@ class Enums : public QObject
};
Q_ENUM(SwitchableOutput_Type)

enum SwitchableOutput_Function {
SwitchableOutput_Function_Disabled = -1,
SwitchableOutput_Function_Alarm = 0,
SwitchableOutput_Function_GeneratorStartStop,
SwitchableOutput_Function_Manual,
SwitchableOutput_Function_Tank_Pump,
SwitchableOutput_Function_Temperature,
SwitchableOutput_Function_GensetHelperRelay,
SwitchableOutput_Function_OpportunityLoad,

SwitchableOutput_Function_MaxSupportedType = SwitchableOutput_Function_OpportunityLoad
};
Q_ENUM(SwitchableOutput_Function)


enum SwitchableOutput_Status {
SwitchableOutput_Status_Off = 0x00,
SwitchableOutput_Status_Powered = 0x01,
Expand Down Expand Up @@ -604,17 +619,6 @@ class Enums : public QObject
};
Q_ENUM(CanBusConfig_Type)

enum Relay_Function {
Relay_Function_Disabled = -1,
Relay_Function_Alarm = 0,
Relay_Function_GeneratorStartStop,
Relay_Function_Manual,
Relay_Function_Tank_Pump,
Relay_Function_Temperature,
Relay_Function_GensetHelperRelay
};
Q_ENUM(Relay_Function)

enum Temperature_DeviceType {
Temperature_DeviceType_Battery = 0,
Temperature_DeviceType_Fridge,
Expand Down Expand Up @@ -980,6 +984,7 @@ class Enums : public QObject

Q_INVOKABLE QString switch_deviceStateToText(Switch_DeviceState value) const;
Q_INVOKABLE QString switchableOutput_typeToText(SwitchableOutput_Type value, const QString &channelId = QString()) const;
Q_INVOKABLE QString switchableOutput_functionToText(SwitchableOutput_Function value) const;
Q_INVOKABLE QString switchableOutput_statusToText(SwitchableOutput_Status value, SwitchableOutput_Type type) const;

Q_INVOKABLE QString microgridModeToText(MicrogridMode mode) const;
Expand Down
Loading