Files
Haussteuerung-Android/app/src/main/java/com/haussteuerung/FragmentHeizkoerper.java

474 lines
22 KiB
Java

package com.haussteuerung;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import androidx.appcompat.widget.SwitchCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ProcessLifecycleOwner;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.NumberPicker;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;
public class FragmentHeizkoerper extends Fragment {
private Button btn_HK_Grossraum, btn_HK_Doris, btn_HK_Doris_Bad, btn_HK_Arbeitszimmer, btn_HK_Vorraum,
btn_HK_WCEG, btn_HK_Bad, btn_HK_Florian, btn_HK_Stefan, btn_HK_Dachboden;
private TextView tv_temp_Grossraum, tv_temp_Doris, tv_temp_Doris_Bad, tv_temp_Arbeitszimmer, tv_temp_Vorraum,
tv_temp_WCEG, tv_temp_Bad, tv_temp_Florian, tv_temp_Stefan, tv_temp_Dachboden;
private SwitchCompat switch_HK_Grossraum, switch_HK_Doris, switch_HK_Doris_Bad, switch_HK_Arbeitszimmer, switch_HK_Vorraum,
switch_HK_WCEG, switch_HK_Bad, switch_HK_Florian, switch_HK_Stefan, switch_HK_Dachboden;
public static String modeHKGrossraum = "", modeHKDoris = "", modeHKDorisBad = "", modeHKArbeitszimmer = "",
modeHKVorraum = "", modeHKWCEG = "", modeHKBad = "", modeHKFlorian = "", modeHKStefan = "", modeHKDachboden = "";
public static String istTempHKGrossraum = "", istTempHKDoris = "", istTempHKDorisBad = "", istTempHKArbeitszimmer = "",
istTempHKVorraum = "", istTempHKWCEG = "", istTempHKBad = "", istTempHKFlorian = "", istTempHKStefan = "", istTempHKDachboden = "";
public static String sollTempHKGrossraum = "", sollTempHKDoris = "", sollTempHKDorisBad = "", sollTempHKArbeitszimmer = "",
sollTempHKVorraum = "", sollTempHKWCEG = "", sollTempHKBad = "", sollTempHKFlorian = "", sollTempHKStefan = "", sollTempHKDachboden = "";
final Handler myHandler = new Handler();
final Timer myTimer = new Timer();
TimerTask myTask;
Context context;
View view;
public FragmentHeizkoerper() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleTracker());
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_heizkoerper, container, false);
requireActivity().setTitle("Haussteuerung - Heizkörper");
handleButtons();
handleTextViews();
handleSwitches();
context = getContext();
return view;
}
// Runnable method
final Runnable myRunnable = new Runnable() {
public void run() {
Log.d("Heizkoerper", "OK");
tv_temp_Grossraum.setText(istTempHKGrossraum);
setTextColor(tv_temp_Grossraum, istTempHKGrossraum);
tv_temp_Doris.setText(istTempHKDoris);
setTextColor(tv_temp_Doris, istTempHKDoris);
tv_temp_Doris_Bad.setText(istTempHKDorisBad);
setTextColor(tv_temp_Doris_Bad, istTempHKDorisBad);
tv_temp_Arbeitszimmer.setText(istTempHKArbeitszimmer);
setTextColor(tv_temp_Arbeitszimmer, istTempHKArbeitszimmer);
tv_temp_Vorraum.setText(istTempHKVorraum);
setTextColor(tv_temp_Vorraum, istTempHKVorraum);
tv_temp_WCEG.setText(istTempHKWCEG);
setTextColor(tv_temp_WCEG, istTempHKWCEG);
tv_temp_Bad.setText(istTempHKBad);
setTextColor(tv_temp_Bad, istTempHKBad);
tv_temp_Florian.setText(istTempHKFlorian);
setTextColor(tv_temp_Florian, istTempHKFlorian);
tv_temp_Stefan.setText(istTempHKStefan);
setTextColor(tv_temp_Stefan, istTempHKStefan);
tv_temp_Dachboden.setText(istTempHKDachboden);
setTextColor(tv_temp_Dachboden, istTempHKDachboden);
}
};
private void showNumberPickerDialog(Button button, String roomSollTemp, String room, SwitchCompat switchCompat) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
final View view = this.getLayoutInflater().inflate(R.layout.layout_numberpicker, null);
builder.setView(view);
final NumberPicker picker = view.findViewById(R.id.picker);
String[] values = {"off", "12.0", "12.5", "13.0", "13.5", "14.0", "14.5", "15.0", "15.5", "16.0", "16.5", "17.0", "17.5", "18.0",
"18.5", "19.0", "19.5", "20.0", "20.5", "21.0", "21.5", "22.0", "22.5", "23.0", "23.5", "24.0", "24.5", "25.0",
"25.5", "26.0", "26.5", "27.0", "27.5", "28.0", "28.5", "29.0", "29.5", "30.0", "on"};
int ml = values.length;
picker.setWrapSelectorWheel(false);
picker.setMinValue(0);
picker.setMaxValue(ml - 1);
for (int y = 0; y < values.length; y++) {
if (values[y].equals(button.getText().toString())) {
picker.setValue(y);
}
}
picker.setDisplayedValues(values);
builder.setPositiveButton(android.R.string.ok, (dialog, id) -> {
button.setText(values[picker.getValue()]);
Log.d("SollTempGrossraum", "Solltemp" + roomSollTemp + ", Button " + button.getText());
if (!roomSollTemp.contentEquals(button.getText())) {
if (switchCompat.isChecked()) {
Log.d("SollTemp" + room, "Temp zu Auto+Temp geändert");
MqttClient.publish("fhem/Heizung/MAX_" + room + "/set/temp", "auto " + button.getText().toString(), 2, false);
} else {
Log.d("SollTemp" + room, "Temp geändert");
MqttClient.publish("fhem/Heizung/MAX_" + room + "/set/temp", button.getText().toString(), 2, false);
}
} else {
Log.d("SollTemp" + room, "Temp gleich");
}
})
.setNegativeButton(android.R.string.cancel, (dialog, id) -> builder.create().cancel());
builder.create().show();
}
private void handleButtons() {
btn_HK_Grossraum = view.findViewById(R.id.btn_HK_Grossraum);
btn_HK_Doris = view.findViewById(R.id.btn_HK_Doris);
btn_HK_Doris_Bad = view.findViewById(R.id.btn_HK_Doris_Bad);
btn_HK_Arbeitszimmer = view.findViewById(R.id.btn_HK_Arbeitszimmer);
btn_HK_Vorraum = view.findViewById(R.id.btn_HK_Vorraum);
btn_HK_WCEG = view.findViewById(R.id.btn_HK_WCEG);
btn_HK_Bad = view.findViewById(R.id.btn_HK_Bad);
btn_HK_Florian = view.findViewById(R.id.btn_HK_Florian);
btn_HK_Stefan = view.findViewById(R.id.btn_HK_Stefan);
// btn_HK_Dachboden = view.findViewById(R.id.btn_HK_Dachboden);
Log.d("SollTempGrossraum", sollTempHKGrossraum);
Log.d("SollTempDoris", sollTempHKDoris);
Log.d("SollTempDorisBad", sollTempHKDorisBad);
Log.d("SollTempArbeitszimmer", sollTempHKArbeitszimmer);
Log.d("SollTempVorraum", sollTempHKVorraum);
Log.d("SollTempWCEG", sollTempHKWCEG);
Log.d("SollTempBad", sollTempHKBad);
Log.d("SollTempFlorian", sollTempHKFlorian);
Log.d("SollTempStefan", sollTempHKStefan);
Log.d("SollTempDachboden", sollTempHKDachboden);
btn_HK_Grossraum.setText(sollTempHKGrossraum);
btn_HK_Doris.setText(sollTempHKDoris);
btn_HK_Doris_Bad.setText(sollTempHKDorisBad);
btn_HK_Arbeitszimmer.setText(sollTempHKArbeitszimmer);
btn_HK_Vorraum.setText(sollTempHKVorraum);
btn_HK_WCEG.setText(sollTempHKWCEG);
btn_HK_Bad.setText(sollTempHKBad);
btn_HK_Florian.setText(sollTempHKFlorian);
btn_HK_Stefan.setText(sollTempHKStefan);
// btn_HK_Dachboden.setText(sollTempHKDachboden);
btn_HK_Grossraum.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Grossraum, sollTempHKGrossraum, "Grossraum", switch_HK_Grossraum));
btn_HK_Doris.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Doris, sollTempHKDoris, "Doris_klein", switch_HK_Doris));
btn_HK_Doris_Bad.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Doris_Bad, sollTempHKDorisBad, "Doris_Bad", switch_HK_Doris_Bad));
btn_HK_Arbeitszimmer.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Arbeitszimmer, sollTempHKArbeitszimmer, "Arbeitszimmer", switch_HK_Arbeitszimmer));
btn_HK_Vorraum.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Vorraum, sollTempHKVorraum, "Vorraum", switch_HK_Vorraum));
btn_HK_WCEG.setOnClickListener(v -> showNumberPickerDialog(btn_HK_WCEG, sollTempHKWCEG, "WC", switch_HK_WCEG));
btn_HK_Bad.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Bad, sollTempHKBad, "Bad", switch_HK_Bad));
btn_HK_Florian.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Florian, sollTempHKFlorian, "Florian", switch_HK_Florian));
btn_HK_Stefan.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Stefan, sollTempHKStefan, "Stefan", switch_HK_Stefan));
// btn_HK_Dachboden.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Dachboden, sollTempHKDachboden, "Dachboden", switch_HK_Dachboden));
}
private void handleTextViews() {
tv_temp_Grossraum = view.findViewById(R.id.tv_temp_Grossraum);
tv_temp_Doris = view.findViewById(R.id.tv_temp_Doris);
tv_temp_Doris_Bad = view.findViewById(R.id.tv_temp_Doris_Bad);
tv_temp_Arbeitszimmer = view.findViewById(R.id.tv_temp_Arbeitszimmer);
tv_temp_Vorraum = view.findViewById(R.id.tv_temp_Vorraum);
tv_temp_WCEG = view.findViewById(R.id.tv_temp_WCEG);
tv_temp_Bad = view.findViewById(R.id.tv_temp_Bad);
tv_temp_Florian = view.findViewById(R.id.tv_temp_Florian);
tv_temp_Stefan = view.findViewById(R.id.tv_temp_Stefan);
tv_temp_Dachboden = view.findViewById(R.id.tv_temp_Dachboden);
}
private void handleSwitches() {
switch_HK_Grossraum = view.findViewById(R.id.switch_HK_Grossraum);
switch_HK_Doris = view.findViewById(R.id.switch_HK_Doris);
switch_HK_Doris_Bad = view.findViewById(R.id.switch_HK_Doris_Bad);
switch_HK_Arbeitszimmer = view.findViewById(R.id.switch_HK_Arbeitszimmer);
switch_HK_Vorraum = view.findViewById(R.id.switch_HK_Vorraum);
switch_HK_WCEG = view.findViewById(R.id.switch_HK_WCEG);
switch_HK_Bad = view.findViewById(R.id.switch_HK_Bad);
switch_HK_Florian = view.findViewById(R.id.switch_HK_Florian);
switch_HK_Stefan = view.findViewById(R.id.switch_HK_Stefan);
// switch_HK_Dachboden = view.findViewById(R.id.switch_HK_Dachboden);
if (modeHKGrossraum.equals("manual")) {
switch_HK_Grossraum.setChecked(false);
switch_HK_Grossraum.setText(R.string.man);
} else {
switch_HK_Grossraum.setChecked(true);
switch_HK_Grossraum.setText(R.string.auto);
}
if (modeHKDoris.equals("manual")) {
switch_HK_Doris.setChecked(false);
switch_HK_Doris.setText(R.string.man);
} else {
switch_HK_Doris.setChecked(true);
switch_HK_Doris.setText(R.string.auto);
}
if (modeHKDorisBad.equals("manual")) {
switch_HK_Doris_Bad.setChecked(false);
switch_HK_Doris_Bad.setText(R.string.man);
} else {
switch_HK_Doris_Bad.setChecked(true);
switch_HK_Doris_Bad.setText(R.string.auto);
}
if (modeHKArbeitszimmer.equals("manual")) {
switch_HK_Arbeitszimmer.setChecked(false);
switch_HK_Arbeitszimmer.setText(R.string.man);
} else {
switch_HK_Arbeitszimmer.setChecked(true);
switch_HK_Arbeitszimmer.setText(R.string.auto);
}
if (modeHKVorraum.equals("manual")) {
switch_HK_Vorraum.setChecked(false);
switch_HK_Vorraum.setText(R.string.man);
} else {
switch_HK_Vorraum.setChecked(true);
switch_HK_Vorraum.setText(R.string.auto);
}
if (modeHKWCEG.equals("manual")) {
switch_HK_WCEG.setChecked(false);
switch_HK_WCEG.setText(R.string.man);
} else {
switch_HK_WCEG.setChecked(true);
switch_HK_WCEG.setText(R.string.auto);
}
if (modeHKBad.equals("manual")) {
switch_HK_Bad.setChecked(false);
switch_HK_Bad.setText(R.string.man);
} else {
switch_HK_Bad.setChecked(true);
switch_HK_Bad.setText(R.string.auto);
}
if (modeHKFlorian.equals("manual")) {
switch_HK_Florian.setChecked(false);
switch_HK_Florian.setText(R.string.man);
} else {
switch_HK_Florian.setChecked(true);
switch_HK_Florian.setText(R.string.auto);
}
if (modeHKStefan.equals("manual")) {
switch_HK_Stefan.setChecked(false);
switch_HK_Stefan.setText(R.string.man);
} else {
switch_HK_Stefan.setChecked(true);
switch_HK_Stefan.setText(R.string.auto);
}
// if (modeHKDachboden.equals("manual")) {
// switch_HK_Dachboden.setChecked(false);
// switch_HK_Dachboden.setText(R.string.man);
// } else {
// switch_HK_Dachboden.setChecked(true);
// switch_HK_Dachboden.setText(R.string.auto);
// }
switch_HK_Grossraum.setOnClickListener(v -> {
if (switch_HK_Grossraum.isChecked()) {
Log.d("Mode" + modeHKGrossraum, "Mode geändert");
switch_HK_Grossraum.setText(R.string.auto);
MqttClient.publish("fhem/Heizung/MAX_Grossraum/set/mode", "auto", 2, false);
} else if (!switch_HK_Grossraum.isChecked()) {
Log.d("Mode" + modeHKGrossraum, "Mode geändert");
switch_HK_Grossraum.setText(R.string.man);
MqttClient.publish("fhem/Heizung/MAX_Grossraum/set/mode", "manual", 2, false);
}
});
switch_HK_Doris.setOnClickListener(v -> {
if (switch_HK_Doris.isChecked()) {
Log.d("Mode" + modeHKDoris, "Mode geändert");
switch_HK_Doris.setText(R.string.auto);
MqttClient.publish("fhem/Heizung/MAX_Doris_klein/set/mode", "auto", 2, false);
} else if (!switch_HK_Doris.isChecked()) {
Log.d("Mode" + modeHKDoris, "Mode geändert");
switch_HK_Doris.setText(R.string.man);
MqttClient.publish("fhem/Heizung/MAX_Doris_klein/set/mode", "manual", 2, false);
}
});
switch_HK_Doris_Bad.setOnClickListener(v -> {
if (switch_HK_Doris_Bad.isChecked()) {
Log.d("Mode" + modeHKDorisBad, "Mode auto");
switch_HK_Doris_Bad.setText(R.string.auto);
MqttClient.publish("fhem/Heizung/MAX_Doris_Bad/set/mode", "auto", 2, false);
} else if (!switch_HK_Doris_Bad.isChecked()) {
Log.d("Mode" + modeHKDorisBad, "Mode manual");
switch_HK_Doris_Bad.setText(R.string.man);
MqttClient.publish("fhem/Heizung/MAX_Doris_Bad/set/mode", "manual", 2, false);
}
});
switch_HK_Arbeitszimmer.setOnClickListener(v -> {
if (switch_HK_Arbeitszimmer.isChecked()) {
Log.d("Mode" + modeHKArbeitszimmer, "Mode auto");
switch_HK_Arbeitszimmer.setText(R.string.auto);
MqttClient.publish("fhem/Heizung/MAX_Arbeitszimmer/set/mode", "auto", 2, false);
} else if (!switch_HK_Arbeitszimmer.isChecked()) {
Log.d("Mode" + modeHKArbeitszimmer, "Mode manual");
switch_HK_Arbeitszimmer.setText(R.string.man);
MqttClient.publish("fhem/Heizung/MAX_Arbeitszimmer/set/mode", "manual", 2, false);
}
});
switch_HK_Vorraum.setOnClickListener(v -> {
if (switch_HK_Vorraum.isChecked()) {
Log.d("Mode" + modeHKVorraum, "Mode auto");
switch_HK_Vorraum.setText(R.string.auto);
MqttClient.publish("fhem/Heizung/MAX_Vorraum/set/mode", "auto", 2, false);
} else if (!switch_HK_Vorraum.isChecked()) {
Log.d("Mode" + modeHKVorraum, "Mode manual");
switch_HK_Vorraum.setText(R.string.man);
MqttClient.publish("fhem/Heizung/MAX_Vorraum/set/mode", "manual", 2, false);
}
});
switch_HK_WCEG.setOnClickListener(v -> {
if (switch_HK_WCEG.isChecked()) {
Log.d("Mode" + modeHKWCEG, "Mode auto");
switch_HK_WCEG.setText(R.string.auto);
MqttClient.publish("fhem/Heizung/MAX_WC/set/mode", "auto", 2, false);
} else if (!switch_HK_WCEG.isChecked()) {
Log.d("Mode" + modeHKWCEG, "Mode manual");
switch_HK_WCEG.setText(R.string.man);
MqttClient.publish("fhem/Heizung/MAX_WC/set/mode", "manual", 2, false);
}
});
switch_HK_Bad.setOnClickListener(v -> {
if (switch_HK_Bad.isChecked()) {
Log.d("Mode" + modeHKBad, "Mode auto");
switch_HK_Bad.setText(R.string.auto);
MqttClient.publish("fhem/Heizung/MAX_Bad/set/mode", "auto", 2, false);
} else if (!switch_HK_Bad.isChecked()) {
Log.d("Mode" + modeHKBad, "Mode manual");
switch_HK_Bad.setText(R.string.man);
MqttClient.publish("fhem/Heizung/MAX_Bad/set/mode", "manual", 2, false);
}
});
switch_HK_Florian.setOnClickListener(v -> {
if (switch_HK_Florian.isChecked()) {
Log.d("Mode" + modeHKFlorian, "Mode geändert");
switch_HK_Florian.setText(R.string.auto);
MqttClient.publish("fhem/Heizung/MAX_Florian/set/mode", "auto", 2, false);
} else if (!switch_HK_Florian.isChecked()) {
Log.d("Mode" + modeHKFlorian, "Mode geändert");
switch_HK_Florian.setText(R.string.man);
MqttClient.publish("fhem/Heizung/MAX_Florian/set/mode", "manual", 2, false);
}
});
switch_HK_Stefan.setOnClickListener(v -> {
if (switch_HK_Stefan.isChecked()) {
Log.d("Mode" + modeHKStefan, "Mode auto");
switch_HK_Stefan.setText(R.string.auto);
MqttClient.publish("fhem/Heizung/MAX_Stefan/set/mode", "auto", 2, false);
} else if (!switch_HK_Stefan.isChecked()) {
Log.d("Mode" + modeHKStefan, "Mode manual");
switch_HK_Stefan.setText(R.string.man);
MqttClient.publish("fhem/Heizung/MAX_Stefan/set/mode", "manual", 2, false);
}
});
// switch_HK_Dachboden.setOnClickListener(v -> {
// if (switch_HK_Dachboden.isChecked()) {
// Log.d("Mode" + modeHKDachboden, "Mode auto");
// switch_HK_Dachboden.setText(R.string.auto);
// MqttClient.publish("fhem/Heizung/MAX_Dachboden/set/mode", "auto", 2, false);
// } else if (!switch_HK_Dachboden.isChecked()) {
// Log.d("Mode" + modeHKDachboden, "Mode manual");
// switch_HK_Dachboden.setText(R.string.man);
// MqttClient.publish("fhem/Heizung/MAX_Dachboden/set/mode", "manual", 2, false);
// }
// });
}
private void setTextColor(TextView tv, String temp) {
if (!temp.isEmpty()) {
double tempDouble = Double.parseDouble(temp);
if (tempDouble >= 25) {
tv.setTextColor(ContextCompat.getColor(context, R.color.twoFive));
}
if (tempDouble >= 24 && tempDouble < 25) {
tv.setTextColor(ContextCompat.getColor(context, R.color.twoFour));
}
if (tempDouble >= 23 && tempDouble < 24) {
tv.setTextColor(ContextCompat.getColor(context, R.color.twoThree));
}
if (tempDouble >= 22 && tempDouble < 23) {
tv.setTextColor(ContextCompat.getColor(context, R.color.twoTwo));
}
if (tempDouble >= 21 && tempDouble < 22) {
tv.setTextColor(ContextCompat.getColor(context, R.color.twoOne));
}
if (tempDouble >= 20 && tempDouble < 21) {
tv.setTextColor(ContextCompat.getColor(context, R.color.twoZero));
}
if (tempDouble >= 19 && tempDouble < 20) {
tv.setTextColor(ContextCompat.getColor(context, R.color.oneNine));
}
if (tempDouble < 19) {
tv.setTextColor(ContextCompat.getColor(context, R.color.oneEight));
}
} else {
Log.d("Temp", "String Temp in FragmentHeizkörper is empty.");
}
}
@Override
public void onResume() {
super.onResume();
myTask = new TimerTask() {
public void run() {
myHandler.post(myRunnable); // updateUI method
}
};
myTimer.schedule(myTask, 0, 1000);
}
@Override
public void onStop() {
super.onStop();
myTask.cancel();
}
@Override
public void onPause() {
super.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
}
}