diff --git a/README.md b/README.md
index 924425a..7ec230d 100644
--- a/README.md
+++ b/README.md
@@ -63,7 +63,7 @@ This project is updated irregularly or provided with new features.
* **Latest Release:** [3.1](https://github.com/beep-projects/SystaPi/releases/tag/3.1)
* **Unreleased Changes on main:**
- * none
+ * added operation modes for heating circuit 2
* **Future Development:** New releases are always prepared on the **main** branch. If you want to get a sneak peek on it, check it out and [contribute](#contribute) your test results. You can also update your running version to main, by executing `helpers/update.sh -b main` but you should backup you system before that.
* **Known Limitations:** Compatibility with any SystaComfort software or Raspberry Pi OS versions is not guaranteed. See [Known Issues](#known-issues) and [Contribute](#contribute) for more details.
diff --git a/SystaRESTServer/bin/.gitignore b/SystaRESTServer/bin/.gitignore
index 093c81e..fd04598 100644
--- a/SystaRESTServer/bin/.gitignore
+++ b/SystaRESTServer/bin/.gitignore
@@ -1,5 +1 @@
-/SystaREST.properties
/de/
-/fakeremoteportal.html
-/rawdatamonitor.html
-/systapidashboard.html
diff --git a/SystaRESTServer/src/de/freaklamarsch/systarest/FakeSystaWeb.java b/SystaRESTServer/src/de/freaklamarsch/systarest/FakeSystaWeb.java
index 7fdb6bc..51f78fd 100644
--- a/SystaRESTServer/src/de/freaklamarsch/systarest/FakeSystaWeb.java
+++ b/SystaRESTServer/src/de/freaklamarsch/systarest/FakeSystaWeb.java
@@ -97,7 +97,7 @@ public FakeSystaWebStatus(boolean running, boolean connected, long udpPacketsRec
this.loggerFileRootPath = logFileRootPath;
this.loggerFileCount = writerFileCount;
this.loggerBufferedEntries = bufferedEntries;
- this.commitDate = "2025-08-06T21:01:33+00:00";
+ this.commitDate = "2025-11-02T23:31:38+00:00";
}
}
@@ -149,7 +149,7 @@ public SystaComfortInfo(String systawebIp, int systawebPort, String systaBcastIp
}
// Constants
- private static final String commitDate = "2025-08-06T21:01:33+00:00";
+ private static final String commitDate = "2025-11-02T23:31:38+00:00";
private static final int PORT = 22460;
private static final int MAX_DATA_LENGTH = 1048;
private static final int MAX_NUMBER_ENTRIES = 256;
@@ -340,6 +340,7 @@ public SystaStatus getParadigmaStatus() {
status.circulationTemp = intData[i][SystaIndex.CIRCULATION_TEMP] / 10.0;
status.circuit2FlowTemp = intData[i][SystaIndex.CIRCUIT_2_FLOW_TEMP] / 10.0;
status.circuit2ReturnTemp = intData[i][SystaIndex.CIRCUIT_2_RETURN_TEMP] / 10.0;
+ status.circuit2OperationMode = intData[i][SystaIndex.CIRCUIT_2_OPERATION_MODE];
status.roomTempActual1 = intData[i][SystaIndex.ROOM_TEMP_ACTUAL_1] / 10.0;
status.roomTempActual2 = intData[i][SystaIndex.ROOM_TEMP_ACTUAL_2] / 10.0;
status.collectorTempActual = intData[i][SystaIndex.COLLECTOR_TEMP_ACTUAL] / 10.0;
@@ -363,6 +364,7 @@ public SystaStatus getParadigmaStatus() {
status.roomTempSetComfort = intData[i][SystaIndex.ROOM_TEMP_SET_COMFORT] / 10.0;
status.roomTempSetReduced = intData[i][SystaIndex.ROOM_TEMP_SET_REDUCED] / 10.0;
status.heatingOperationMode = intData[i][SystaIndex.HEATING_OPERATION_MODE];
+ status.circuit2HeatingOperationMode = intData[i][SystaIndex.CIRCUIT_2_HEATING_OPERATION_MODE];
status.controlledBy = intData[i][SystaIndex.CONTROLLED_BY];
status.heatingCurveBasePoint = intData[i][SystaIndex.HEATING_CURVE_BASE_POINT] / 10.0;
status.heatingCurveGradient = intData[i][SystaIndex.HEATING_CURVE_GRADIENT] / 10.0;
@@ -428,6 +430,7 @@ public SystaStatus getParadigmaStatus() {
status.unknowRelayState5IsOn = (status.relay & SystaStatus.UNKNOWN_5_MASK) != 0;
status.error = intData[i][SystaIndex.ERROR];
status.operationModeX = intData[i][SystaIndex.OPERATION_MODE_X];
+ status.circuit2OperationModeX = intData[i][SystaIndex.CIRCUIT_2_OPERATION_MODE_X];
status.heatingOperationModeX = intData[i][SystaIndex.HEATING_OPERATION_MODE_X];
status.logBoilerBufferTempMin = intData[i][SystaIndex.LOG_BOILER_BUFFER_TEMP_MIN] / 10.0;
status.logBoilerTempMin = intData[i][SystaIndex.LOG_BOILER_TEMP_MIN] / 10.0;
diff --git a/SystaRESTServer/src/de/freaklamarsch/systarest/SystaIndex.java b/SystaRESTServer/src/de/freaklamarsch/systarest/SystaIndex.java
index 840ebc3..6ef27ee 100644
--- a/SystaRESTServer/src/de/freaklamarsch/systarest/SystaIndex.java
+++ b/SystaRESTServer/src/de/freaklamarsch/systarest/SystaIndex.java
@@ -591,9 +591,23 @@ private SystaIndex() {
final static int CIRCUIT_1_OPERATION_MODE = 232;
// final static int = 233
// final static int = 234
- // final static int = 235
- // final static int = 236
- // final static int = 237
+ /**
+ * Status HK 1 0="Aus" 1="Aus Heizgrenze" 2="Aus TI" 3="Gesperrt TPO" 4="Aus
+ * WW-Vorrang" 5="Ein" 6="Frostschutz" 7=,"K\u00fchlen" 8="Vorhaltezeit"
+ * 9="Heizbetrieb" 10="Komfortbetrieb" 11="Absenkbetrieb" 12="Aus TSB"
+ * 13="Gesperrt" 14="Normal" 15="Erh\u00f6ht" 16="WW-Modus" 17="Estrich
+ * trocknen" 18="K\u00fchlbetrieb"
+ */
+ // added on request https://github.com/beep-projects/SystaPi/issues/35
+ final static int CIRCUIT_2_OPERATION_MODE = 235;
+ /**
+ * Betriebsart ???
+ */
+ final static int CIRCUIT_2_OPERATION_MODE_X = 236;
+ /**
+ * Heizung aus=0; normal=1, komfort=2, abgesenkt=3 ???
+ */
+ final static int CIRCUIT_2_HEATING_OPERATION_MODE = 237;
// final static int = 238
// final static int = 239
// final static int = 240
diff --git a/SystaRESTServer/src/de/freaklamarsch/systarest/SystaRESTAPI.java b/SystaRESTServer/src/de/freaklamarsch/systarest/SystaRESTAPI.java
index 71b33fb..afe2df0 100644
--- a/SystaRESTServer/src/de/freaklamarsch/systarest/SystaRESTAPI.java
+++ b/SystaRESTServer/src/de/freaklamarsch/systarest/SystaRESTAPI.java
@@ -355,7 +355,10 @@ public JsonObject getStatus() {
.add("circulationLockoutTimePushButton", ps.circulationLockoutTimePushButton)
.add("circulationHysteresis", ps.circulationHysteresis).add("circuit2FlowTemp", ps.circuit2FlowTemp)
.add("circuit2FlowTemp", ps.circuit2FlowTemp).add("circuit2ReturnTemp", ps.circuit2ReturnTemp)
- .add("circuit2FlowTempSet", ps.circuit2FlowTempSet).add("roomTempActual1", ps.roomTempActual1)
+ .add("circuit2FlowTempSet", ps.circuit2FlowTempSet)
+ .add("circuit2OperationMode", ps.circuit2OperationMode)
+ .add("circuit2OperationModeName", ps.circuit2OperationModeNames[ps.circuit2OperationMode])
+ .add("roomTempActual1", ps.roomTempActual1)
.add("roomTempSet1", ps.roomTempSet1).add("roomTempActual2", ps.roomTempActual2)
.add("roomTempSet2", ps.roomTempSet2).add("roomTempSetNormal", ps.roomTempSetNormal)
.add("roomTempSetComfort", ps.roomTempSetComfort).add("roomTempSetReduced", ps.roomTempSetReduced)
@@ -365,6 +368,8 @@ public JsonObject getStatus() {
.add("swimmingpoolReturnTemp", ps.swimmingpoolReturnTemp)
.add("heatingOperationMode", ps.heatingOperationMode)
.add("heatingOperationModeName", ps.heatingOperationModes[ps.heatingOperationMode])
+ .add("circuit2HeatingOperationMode", ps.circuit2HeatingOperationMode)
+ .add("circuit2HeatingOperationModeName", ps.circuit2HeatingOperationModes[ps.circuit2HeatingOperationMode])
.add("heatingCurveBasePoint", ps.heatingCurveBasePoint)
.add("heatingCurveGradient", ps.heatingCurveGradient).add("heatingLimitTemp", ps.heatingLimitTemp)
.add("heatingLimitTeampReduced", ps.heatingLimitTeampReduced)
@@ -391,6 +396,8 @@ public JsonObject getStatus() {
.add("unknowRelayState2IsOn", ps.unknowRelayState2IsOn)
.add("unknowRelayState5IsOn", ps.unknowRelayState5IsOn).add("error", ps.error)
.add("operationModeX", ps.operationModeX).add("heatingOperationModeX", ps.heatingOperationModeX)
+ .add("circuit2OperationModeX", ps.circuit2OperationModeX)
+ .add("heatingOperationModeX", ps.heatingOperationModeX)
.add("timestamp", ps.timestamp).add("timestampString", ps.timestampString).build();
return jo;
diff --git a/SystaRESTServer/src/de/freaklamarsch/systarest/SystaStatus.java b/SystaRESTServer/src/de/freaklamarsch/systarest/SystaStatus.java
index 130b43d..e94bab0 100644
--- a/SystaRESTServer/src/de/freaklamarsch/systarest/SystaStatus.java
+++ b/SystaRESTServer/src/de/freaklamarsch/systarest/SystaStatus.java
@@ -475,6 +475,16 @@ public class SystaStatus {
* heatingOperationModes = { "off", "normal", "comfort", "reduced" }
*/
public final String[] heatingOperationModes = { "off", "normal", "comfort", "reduced" };
+ /**
+ * Heizung aus=0; normal=1, komfort=2, abgesenkt=3 ???
+ *
+ * heating off=0; normal=1, comfort=2, reduced=3 ???
+ */
+ public int circuit2HeatingOperationMode;
+ /**
+ * heatingOperationModes = { "off", "normal", "comfort", "reduced" }
+ */
+ public final String[] circuit2HeatingOperationModes = { "off", "normal", "comfort", "reduced" };
/**
* Regelung HK nach:
* 0 = Aussentemperatur
@@ -908,6 +918,12 @@ public class SystaStatus {
* Operating mode ???
*/
public int operationModeX;
+ /**
+ * Betriebsart ???
+ *
+ * Operating mode ???
+ */
+ public int circuit2OperationModeX;
/**
* Heizung aus=0; normal=1, komfort=2, abgesenkt=3 ???
*
@@ -1070,6 +1086,25 @@ public class SystaStatus {
"heating", "comfort", "reduced", "off (temp swimming pool)", "locked", "normal", "raised", "hot water",
"screed heating", "cooling mode" };
+ /**
+ * 0 = "Aus" 1 = "Aus Heizgrenze" 2 = "Aus TI" 3 = "Gesperrt TPO" 4 = "Aus
+ * WW-Vorrang" 5 = "Ein" 6 = "Frostschutz" 7 = "Kühlen" 8 = "Vorhaltezeit" 9 =
+ * "Heizbetrieb" 10 = "Komfortbetrieb" 11 = "Absenkbetrieb" 12 = "Aus TSB" 13 =
+ * "Gesperrt" 14 = "Normal" 15 = "Erhöht" 16 = "WW-Modus" 17 = "Estrich
+ * trocknen" 18 = "Kühlbetrieb"
+ *
+ * 0 = "off" 1 = "off (heating limit)" 2 = "off (room temperature)" 3 = "locked
+ * (buffer temp top)" 4 = "off (yield hot water)" 5 = "on" 6 = "anti freeze" 7 =
+ * "cooling" 8 = "lead time heat up" 9 = "heating" 10 = "comfort" 11 =
+ * "reduced" 12 = "off (temp swimming pool)" 13 = "locked" 14 = "normal" 15 =
+ * "raised" 16 = "hot water" 17 = "screed heating" 18 = "cooling mode"
+ */
+ public int circuit2OperationMode;
+ public final String[] circuit2OperationModeNames = { "off", "off (heating limit)", "off (room temperature)",
+ "locked (buffer temp top)", "off (yield hot water)", "on", "anti freeze", "cooling", "lead time heat up",
+ "heating", "comfort", "reduced", "off (temp swimming pool)", "locked", "normal", "raised", "hot water",
+ "screed heating", "cooling mode" };
+
/**
* Status Zirkulation 0="Aus" 1="Nachlauf" 2="Sperrzeit" 3="Gesperrt" 4="Aus
* F\u00fchler TZR" 5="Ein" 6="Frost"