Skip to content

Commit a1f1468

Browse files
committed
Estimate panel temperature from ambient temperature and radiation
Additional parameter: temperature coefficient Adapt efficiency according to these values Bugfix input filter Prepare V1.2
1 parent ab477f2 commit a1f1468

File tree

23 files changed

+139
-145
lines changed

23 files changed

+139
-145
lines changed

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ android {
1212
applicationId "org.woheller69.solxpect"
1313
minSdkVersion 26
1414
targetSdkVersion 31
15-
versionCode 11
16-
versionName "1.1"
15+
versionCode 12
16+
versionName "1.2"
1717

1818
buildConfigField "String", "BASE_URL", "\"https://api.open-meteo.com/v1/\""
1919
buildConfigField "String", "GITHUB_URL","\"https://github.com/woheller69/solxpect/\""

app/src/main/assets/help/help-de.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,11 @@ <h3>Zellen max. Leistung [W]</h3>
2828
<h3>Zelleneffizienz [%]</h3>
2929
Energieanteil in Form von Sonnenlicht, der von der Solarzelle in Strom umgewandelt werden kann.
3030

31+
<h3>Temperaturkoeffizient [%/K]</h3>
32+
Abhängigkeit der Leistung der Solarmodule von der Temperatur (normalerweise im Bereich von -0.4%/K).
33+
3134
<h3>Zellenfläche [m<sup>2</sup>]</h3>
32-
Größe der aktiven Fläche Ihres Solarpanels.
35+
Fläche Ihres Solarpanels.
3336

3437
<h3>Diffuse Strahlungseffizienz [%]</h3>
3538
Wirkungsgrad Ihres Solarkraftwerks bei diffuser Strahlung. Bei der Ausrichtung nach oben sollte er etwa 100 % betragen, bei der Ausrichtung zum Horizont etwa 50 %.

app/src/main/assets/help/help-en.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,11 @@ <h3>Cells max power [W]</h3>
2828
<h3>Cells efficiency [%]</h3>
2929
Portion of energy in the form of sunlight that can be converted into electricity by the solar cell.
3030

31+
<h3>Temperature coefficient [%/K]</h3>
32+
Dependence of the cell power on temperature (usually in the range of -0.4%/K).
33+
3134
<h3>Cell area [m<sup>2</sup>]</h3>
32-
Size of the active area your solar panel.
35+
Size of your solar panel.
3336

3437
<h3>Diffuse radiation efficiency [%]</h3>
3538
Efficiency of your solar power plant for diffuse radiation. When pointing up it should be around 100%, when pointing to the horizon it may be around 50%.

app/src/main/java/org/woheller69/weather/SolarPowerPlant.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public class SolarPowerPlant {
1414
double cellsMaxPower;
1515
double cellsArea;
1616
double cellsEfficiency;
17+
double cellsTempCoeff;
1718
double diffuseEfficiency;
1819
double inverterPowerLimit;
1920
double inverterEfficiency;
@@ -22,7 +23,7 @@ public class SolarPowerPlant {
2223
private int[] shadingElevation;
2324
private int[] shadingOpacity;
2425

25-
public SolarPowerPlant(double latitude, double longitude, double cellsMaxPower, double cellsArea, double cellsEfficiency, double diffuseEfficiency, double inverterPowerLimit, double inverterEfficiency, double azimuthAngle, double tiltAngle, int[] shadingElevation, int[] shadingOpacity ) {
26+
public SolarPowerPlant(double latitude, double longitude, double cellsMaxPower, double cellsArea, double cellsEfficiency, double cellsTempCoeff, double diffuseEfficiency, double inverterPowerLimit, double inverterEfficiency, double azimuthAngle, double tiltAngle, int[] shadingElevation, int[] shadingOpacity ) {
2627
this.latitude = latitude;
2728
this.longitude = longitude;
2829
this.cellsMaxPower = cellsMaxPower;
@@ -35,10 +36,11 @@ public SolarPowerPlant(double latitude, double longitude, double cellsMaxPower,
3536
this.tiltAngle = tiltAngle;
3637
this.shadingElevation = shadingElevation;
3738
this.shadingOpacity = shadingOpacity;
39+
this.cellsTempCoeff = cellsTempCoeff / 100;
3840

3941
}
4042

41-
public float getPower(double solarPowerNormal, double solarPowerDiffuse, long epochTimeSeconds) {
43+
public float getPower(double solarPowerNormal, double solarPowerDiffuse, long epochTimeSeconds, float ambientTemperature) {
4244
Instant i = Instant.ofEpochSecond(epochTimeSeconds); //currentTimeMillis is in GMT
4345
ZonedDateTime dateTime = ZonedDateTime.ofInstant(i, ZoneId.of("GMT"));
4446

@@ -70,10 +72,23 @@ public float getPower(double solarPowerNormal, double solarPowerDiffuse, long ep
7072
}
7173
}
7274
}
73-
double dcPower = (solarPowerNormal * efficiency + solarPowerDiffuse * diffuseEfficiency )* cellsEfficiency * cellsArea;
75+
76+
float totalRadiationOnCell = (float) (solarPowerNormal * efficiency + solarPowerDiffuse * diffuseEfficiency); //flat plate equivalent of the solar irradiance
77+
float cellTemperature = calcCellTemperature(ambientTemperature,totalRadiationOnCell);
78+
79+
double dcPower = totalRadiationOnCell * cellsEfficiency * (1+(cellTemperature - 25)*cellsTempCoeff) * cellsArea;
7480

7581
double acPower = Math.min(dcPower * inverterEfficiency, inverterPowerLimit);
7682

7783
return (float) acPower;
7884
}
85+
86+
public static float calcCellTemperature(float ambientTemperature, float totalIrradiance){
87+
//models from here: https://www.scielo.br/j/babt/a/FBq5Pmm4gSFqsfh3V8MxfGN/ Photovoltaic Cell Temperature Estimation for a Grid-Connect Photovoltaic Systems in Curitiba
88+
//float cellTemperature = 30.006f + 0.0175f*(totalIrradiance-300f)+1.14f*(ambientTemperature-25f); //Lasnier and Ang Lasnier, F.; Ang, T. G. Photovoltaic engineering handbook, 1st ed.; IOP Publishing LTD: Lasnier, France, 1990; pp. 258.
89+
//float cellTemperature = ambientTemperature + 0.028f*totalIrradiance-1f; //Schott Schott, T. Operation temperatures of PV modules. Photovoltaic solar energy conference 1985, pp. 392-396.
90+
float cellTemperature = ambientTemperature + 0.0342f*totalIrradiance; //Ross model: https://www.researchgate.net/publication/275438802_Thermal_effects_of_the_extended_holographic_regions_for_holographic_planar_concentrator
91+
//assuming "not so well cooled" : 0.0342
92+
return cellTemperature;
93+
}
7994
}

app/src/main/java/org/woheller69/weather/activities/ManageLocationsActivity.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ private void editCityToWatch(CityToWatch city) {
187187
EditText editCellsMaxPower = (EditText) dialogView.findViewById(R.id.EditLocation_Cell_Max_Power);
188188
EditText editCellsArea = (EditText) dialogView.findViewById(R.id.EditLocation_Cells_Area);
189189
EditText editCellsEfficiency = (EditText) dialogView.findViewById(R.id.EditLocation_Cell_Efficiency);
190+
EditText editCellsTempCoeff = (EditText) dialogView.findViewById(R.id.EditLocation_Cell_Temp_Coeff);
190191
EditText editDiffuseEfficiency = (EditText) dialogView.findViewById(R.id.EditLocation_Diffuse_Efficiency);
191192
EditText editInverterPowerLimit = (EditText) dialogView.findViewById(R.id.EditLocation_Inverter_Power_Limit);
192193
EditText editInverterEfficiency = (EditText) dialogView.findViewById(R.id.EditLocation_Inverter_Efficiency);
@@ -204,6 +205,8 @@ private void editCityToWatch(CityToWatch city) {
204205
editCellsArea.setText(Float.toString(city.getCellsArea()));
205206
editCellsEfficiency.setText(Float.toString(city.getCellsEfficiency()));
206207
editCellsEfficiency.setFilters(new InputFilter[]{ new InputFilterMinMax(0, 100)});
208+
editCellsTempCoeff.setText(Float.toString(city.getCellsTempCoeff()));
209+
editCellsTempCoeff.setFilters(new InputFilter[]{ new InputFilterMinMax(-100, 100)});
207210
editDiffuseEfficiency.setText(Float.toString(city.getDiffuseEfficiency()));
208211
editDiffuseEfficiency.setFilters(new InputFilter[]{ new InputFilterMinMax(0, 100)});
209212
editInverterPowerLimit.setText(Float.toString(city.getInverterPowerLimit()));
@@ -237,6 +240,7 @@ public void afterTextChanged(Editable editable) {
237240
Float.parseFloat(editCellsMaxPower.getText().toString().isEmpty() ? "0" : editCellsMaxPower.getText().toString()),
238241
Float.parseFloat(editCellsArea.getText().toString().isEmpty() ? "0" : editCellsArea.getText().toString()),
239242
Float.parseFloat(editCellsEfficiency.getText().toString().isEmpty() ? "0" : editCellsEfficiency.getText().toString()),
243+
Float.parseFloat(editCellsTempCoeff.getText().toString().isEmpty() ? "0" : editCellsTempCoeff.getText().toString()),
240244
Float.parseFloat(editDiffuseEfficiency.getText().toString().isEmpty() ? "0" : editDiffuseEfficiency.getText().toString()),
241245
Float.parseFloat(editInverterPowerLimit.getText().toString().isEmpty() ? "0" : editInverterPowerLimit.getText().toString()),
242246
Float.parseFloat(editInverterEfficiency.getText().toString().isEmpty() ? "0" : editInverterEfficiency.getText().toString()),

app/src/main/java/org/woheller69/weather/database/CityToWatch.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class CityToWatch {
1717
private float cellsMaxPower;
1818
private float cellsArea;
1919
private float cellsEfficiency;
20+
private float cellsTempCoeff;
2021
private float diffuseEfficiency;
2122
private float inverterPowerLimit;
2223
private float inverterEfficiency;
@@ -36,14 +37,15 @@ public CityToWatch(int rank, int id, int cityId, float lon, float lat, String ci
3637
this.id = id;
3738
this.cityId = cityId;
3839
this.cityName = cityName;
39-
this.cellsMaxPower=650;
40-
this.cellsArea=3.18f;
41-
this.cellsEfficiency=19.3f;
42-
this.diffuseEfficiency=40;
43-
this.inverterPowerLimit =600;
44-
this.inverterEfficiency =95;
45-
this.azimuthAngle=170;
46-
this.tiltAngle =90;
40+
this.cellsMaxPower = 650;
41+
this.cellsArea = 3.18f;
42+
this.cellsEfficiency = 19.3f;
43+
this.cellsTempCoeff = -0.4f;
44+
this.diffuseEfficiency = 40;
45+
this.inverterPowerLimit = 600;
46+
this.inverterEfficiency = 95;
47+
this.azimuthAngle = 170;
48+
this.tiltAngle = 90;
4749

4850
}
4951

@@ -182,4 +184,12 @@ public String getShadingElevationString() {
182184
public String getShadingOpacityString() {
183185
return Arrays.toString(shadingOpacity).replaceAll("\\[|\\]|\\s", "");
184186
}
187+
188+
public float getCellsTempCoeff() {
189+
return cellsTempCoeff;
190+
}
191+
192+
public void setCellsTempCoeff(float cellsTempCoeff) {
193+
this.cellsTempCoeff = cellsTempCoeff;
194+
}
185195
}

app/src/main/java/org/woheller69/weather/database/SQLiteHelper.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
*/
2121
public class SQLiteHelper extends SQLiteOpenHelper {
2222

23-
private static final int DATABASE_VERSION = 1;
23+
private static final int DATABASE_VERSION = 2;
2424
private Context context;
2525

2626
private List<City> allCities = new ArrayList<>();
@@ -53,6 +53,7 @@ public class SQLiteHelper extends SQLiteOpenHelper {
5353
private static final String CITIES_TO_WATCH_TILT_ANGLE = "tilt_angle";
5454
private static final String CITIES_TO_WATCH_SHADING_ELEVATION = "shading_elevation";
5555
private static final String CITIES_TO_WATCH_SHADING_OPACITY = "shading_opacity";
56+
private static final String CITIES_TO_WATCH_CELLS_TEMP_COEFF = "cells_temp_coeff";
5657

5758
//Names of columns in TABLE_FORECAST
5859
private static final String FORECAST_ID = "forecast_id";
@@ -135,7 +136,8 @@ public class SQLiteHelper extends SQLiteOpenHelper {
135136
CITIES_TO_WATCH_AZIMUTH_ANGLE + " REAL NOT NULL," +
136137
CITIES_TO_WATCH_TILT_ANGLE + " REAL NOT NULL," +
137138
CITIES_TO_WATCH_SHADING_ELEVATION + " VARCHAR(255) NOT NULL," +
138-
CITIES_TO_WATCH_SHADING_OPACITY + " VARCHAR(255) NOT NULL)";
139+
CITIES_TO_WATCH_SHADING_OPACITY + " VARCHAR(255) NOT NULL," +
140+
CITIES_TO_WATCH_CELLS_TEMP_COEFF + " REAL NOT NULL)";
139141

140142
public static SQLiteHelper getInstance(Context context) {
141143
if (instance == null && context != null) {
@@ -160,6 +162,12 @@ public void onCreate(SQLiteDatabase db) {
160162

161163
@Override
162164
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
165+
switch(oldVersion) {
166+
case 1:
167+
db.execSQL("ALTER TABLE "+TABLE_CITIES_TO_WATCH+" ADD COLUMN "+CITIES_TO_WATCH_CELLS_TEMP_COEFF+" REAL DEFAULT 0");
168+
// we want both updates, so no break statement here...
169+
}
170+
163171
}
164172

165173

@@ -185,6 +193,7 @@ public synchronized long addCityToWatch(CityToWatch city) {
185193
values.put(CITIES_TO_WATCH_TILT_ANGLE,city.getTiltAngle());
186194
values.put(CITIES_TO_WATCH_SHADING_ELEVATION,city.getShadingElevationString());
187195
values.put(CITIES_TO_WATCH_SHADING_OPACITY,city.getShadingOpacityString());
196+
values.put(CITIES_TO_WATCH_CELLS_TEMP_COEFF,city.getCellsTempCoeff());
188197

189198
long id=database.insert(TABLE_CITIES_TO_WATCH, null, values);
190199

@@ -218,6 +227,7 @@ public synchronized CityToWatch getCityToWatch(int id) {
218227
", " + CITIES_TO_WATCH_TILT_ANGLE +
219228
", " + CITIES_TO_WATCH_SHADING_ELEVATION +
220229
", " + CITIES_TO_WATCH_SHADING_OPACITY +
230+
", " + CITIES_TO_WATCH_CELLS_TEMP_COEFF +
221231
", " + CITIES_TO_WATCH_COLUMN_RANK +
222232
" FROM " + TABLE_CITIES_TO_WATCH +
223233
" WHERE " + CITIES_TO_WATCH_CITY_ID + " = ?", arguments);
@@ -240,7 +250,8 @@ public synchronized CityToWatch getCityToWatch(int id) {
240250
cityToWatch.setTiltAngle(Float.parseFloat(cursor.getString(12)));
241251
cityToWatch.setShadingElevation(cursor.getString(13));
242252
cityToWatch.setShadingOpacity(cursor.getString(14));
243-
cityToWatch.setRank(Integer.parseInt(cursor.getString(15)));
253+
cityToWatch.setCellsTempCoeff(Float.parseFloat(cursor.getString(15)));
254+
cityToWatch.setRank(Integer.parseInt(cursor.getString(16)));
244255

245256
cursor.close();
246257
}
@@ -271,6 +282,7 @@ public synchronized List<CityToWatch> getAllCitiesToWatch() {
271282
", " + CITIES_TO_WATCH_TILT_ANGLE +
272283
", " + CITIES_TO_WATCH_SHADING_ELEVATION +
273284
", " + CITIES_TO_WATCH_SHADING_OPACITY +
285+
", " + CITIES_TO_WATCH_CELLS_TEMP_COEFF +
274286
", " + CITIES_TO_WATCH_COLUMN_RANK +
275287
" FROM " + TABLE_CITIES_TO_WATCH
276288
, new String[]{});
@@ -295,7 +307,8 @@ public synchronized List<CityToWatch> getAllCitiesToWatch() {
295307
cityToWatch.setTiltAngle(Float.parseFloat(cursor.getString(12)));
296308
cityToWatch.setShadingElevation(cursor.getString(13));
297309
cityToWatch.setShadingOpacity(cursor.getString(14));
298-
cityToWatch.setRank(Integer.parseInt(cursor.getString(15)));
310+
cityToWatch.setCellsTempCoeff(Float.parseFloat(cursor.getString(15)));
311+
cityToWatch.setRank(Integer.parseInt(cursor.getString(16)));
299312

300313
cityToWatchList.add(cityToWatch);
301314
} while (cursor.moveToNext());
@@ -325,6 +338,7 @@ public synchronized void updateCityToWatch(CityToWatch cityToWatch) {
325338
values.put(CITIES_TO_WATCH_TILT_ANGLE,cityToWatch.getTiltAngle());
326339
values.put(CITIES_TO_WATCH_SHADING_ELEVATION,cityToWatch.getShadingElevationString());
327340
values.put(CITIES_TO_WATCH_SHADING_OPACITY,cityToWatch.getShadingOpacityString());
341+
values.put(CITIES_TO_WATCH_CELLS_TEMP_COEFF,cityToWatch.getCellsTempCoeff());
328342

329343
database.update(TABLE_CITIES_TO_WATCH, values, CITIES_TO_WATCH_ID + " = ?",
330344
new String[]{String.valueOf(cityToWatch.getId())});

app/src/main/java/org/woheller69/weather/ui/Help/InputFilterMinMax.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,40 @@
55

66
public class InputFilterMinMax implements InputFilter {
77

8-
private int min, max;
8+
private float min, max;
99

10-
public InputFilterMinMax(int min, int max) {
10+
public InputFilterMinMax(float min, float max) {
1111
this.min = min;
1212
this.max = max;
1313
}
1414

1515

1616
@Override
1717
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
18-
String oldString = dest.toString();
19-
String insertString = source.toString();
20-
String newString = new StringBuilder(oldString).insert(dstart,insertString).toString();
21-
float input = Float.parseFloat(newString);
22-
if (isInRange(min, max, input))
23-
return null;
24-
else
25-
return "";
18+
try {
19+
String oldString = dest.toString();
20+
String insertString = source.toString();
21+
String newString = oldString.substring(0, dstart) + oldString.substring(dend);
22+
newString = newString.substring(0, dstart) + insertString + newString.substring(dstart);
23+
float input = Float.parseFloat(newString);
24+
25+
if (isInRange(min, max, input)) {
26+
return null;
27+
} else {
28+
if (source.equals("") && dest.toString().length() != 1) {
29+
//backspace was clicked, do not accept that change, unless user is deleting the last char
30+
return dest.subSequence(dstart, dend);
31+
} else {
32+
return "";
33+
}
34+
}
35+
} catch (NumberFormatException e) {
36+
e.printStackTrace();
37+
}
38+
return "";
2639
}
2740

28-
private boolean isInRange(int a, int b, float c) {
41+
private boolean isInRange(float a, float b, float c) {
2942
return b > a ? c >= a && c <= b : c >= b && c <= a;
3043
}
3144

app/src/main/java/org/woheller69/weather/ui/RecycleList/ItemViewHolder.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class ItemViewHolder extends RecyclerView.ViewHolder {
2323
public TextView cellsMaxPower;
2424
public TextView cellsArea;
2525
public TextView cellsEfficiency;
26+
public TextView cellsTempCoeff;
2627
public TextView diffuseEfficiency;
2728
public TextView inverterPowerLimit;
2829
public TextView inverterEfficiency;
@@ -41,6 +42,7 @@ public ItemViewHolder(View itemView) {
4142
this.cellsMaxPower = (TextView) itemView.findViewById(R.id.city_cells_max_power);
4243
this.cellsArea = (TextView) itemView.findViewById(R.id.city_cells_area);
4344
this.cellsEfficiency = (TextView) itemView.findViewById(R.id.city_cells_efficiency);
45+
this.cellsTempCoeff = (TextView) itemView.findViewById(R.id.city_cells_temp_coeff);
4446
this.diffuseEfficiency = (TextView) itemView.findViewById(R.id.city_diffuse_efficiency);
4547
this.inverterPowerLimit = (TextView) itemView.findViewById(R.id.city_inverter_power_limit);
4648
this.inverterEfficiency = (TextView) itemView.findViewById(R.id.city_inverter_efficiency);

app/src/main/java/org/woheller69/weather/ui/RecycleList/RecyclerOverviewListAdapter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public void onBindViewHolder(ItemViewHolder holder, int position) {
6363
holder.tiltAngle.setText(context.getString(R.string.edit_location_hint_tilt) +": "+ cities.get(position).getTiltAngle());
6464
holder.cellsMaxPower.setText(context.getString(R.string.edit_location_hint_cells_max_power) +": "+ cities.get(position).getCellsMaxPower());
6565
holder.cellsEfficiency.setText(context.getString(R.string.edit_location_hint_cells_efficiency) +": "+ cities.get(position).getCellsEfficiency());
66+
holder.cellsTempCoeff.setText(context.getString(R.string.edit_location_hint_cells_temp_coeff) +": "+ cities.get(position).getCellsTempCoeff());
6667
holder.cellsArea.setText(context.getString(R.string.edit_location_hint_cells_area) +": "+ cities.get(position).getCellsArea());
6768
holder.diffuseEfficiency.setText(context.getString(R.string.edit_location_hint_diffuse_efficiency) +": "+ cities.get(position).getDiffuseEfficiency());
6869
holder.inverterPowerLimit.setText(context.getString(R.string.edit_location_hint_inverter_power_limit) +": "+ cities.get(position).getInverterPowerLimit());
@@ -114,7 +115,7 @@ public void onItemMove(int fromPosition, int toPosition) {
114115
public CityToWatch getCitytoWatch(int position){
115116
return cities.get(position);
116117
}
117-
public void updateCity(CityToWatch cityToWatch, String cityName, float latitude, float longitude, float azimuth, float tilt, float cellsMaxPower, float cellsArea, float cellsEfficiency, float diffuseEfficiency, float inverterPowerLimit, float inverterEfficiency, int[] shadingElevation, int[] shadingOpacity) {
118+
public void updateCity(CityToWatch cityToWatch, String cityName, float latitude, float longitude, float azimuth, float tilt, float cellsMaxPower, float cellsArea, float cellsEfficiency, float cellsTempCoeff, float diffuseEfficiency, float inverterPowerLimit, float inverterEfficiency, int[] shadingElevation, int[] shadingOpacity) {
118119
cityToWatch.setCityName(cityName);
119120
cityToWatch.setLatitude(latitude);
120121
cityToWatch.setLongitude(longitude);
@@ -123,6 +124,7 @@ public void updateCity(CityToWatch cityToWatch, String cityName, float latitude,
123124
cityToWatch.setCellsMaxPower(cellsMaxPower);
124125
cityToWatch.setCellsArea(cellsArea);
125126
cityToWatch.setCellsEfficiency(cellsEfficiency);
127+
cityToWatch.setCellsTempCoeff(cellsTempCoeff);
126128
cityToWatch.setDiffuseEfficiency(diffuseEfficiency);
127129
cityToWatch.setInverterPowerLimit(inverterPowerLimit);
128130
cityToWatch.setInverterEfficiency(inverterEfficiency);

0 commit comments

Comments
 (0)