Bugfix for Camera photo not being displayed in the app.

This commit is contained in:
2025-10-06 20:42:34 +02:00
parent 7fa666bcd4
commit 567b279030
32 changed files with 741 additions and 1976 deletions

View File

@@ -12,7 +12,7 @@ android {
minSdk 26
targetSdk 34
versionCode 1
versionName "25.531.1"
versionName "25.1006.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -44,4 +44,6 @@ dependencies {
implementation libs.google.services
implementation libs.touchImageView
implementation libs.gson
implementation libs.lifecycle.process
implementation libs.lifecycle.runtime
}

View File

@@ -26,18 +26,6 @@
android:theme="@style/Theme.Haussteuerung"
tools:targetApi="31"
android:usesCleartextTraffic="true">
<activity
android:name=".activityChristmas"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name=".noConnection"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name=".FileDownload"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name=".activitySky"
android:exported="false"

View File

@@ -0,0 +1,27 @@
package com.haussteuerung;
import android.util.Log;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
public class AppLifecycleTracker implements LifecycleObserver {
private static boolean isAppInForeground = false;
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onEnterForeground() {
isAppInForeground = true;
Log.d("AppLifecycle", "App ist im Vordergrund");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onEnterBackground() {
isAppInForeground = false;
Log.d("AppLifecycle", "App ist im Hintergrund");
}
public static boolean isAppInForeground() {
return isAppInForeground;
}
}

View File

@@ -1,125 +0,0 @@
package com.haussteuerung;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.content.FileProvider;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import com.google.firebase.encoders.json.BuildConfig;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
public class FileDownload extends AppCompatActivity {
static String f1 = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/Haussteuerung_Flo.apk";
static File apk = new File(f1);
static boolean downloadFinished = false;
TextView txt_status;
Button button_Install;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_download);
// Ändern der Statusbar-Farbe
androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setBackgroundDrawable(AppCompatResources.getDrawable(getApplicationContext(), R.drawable.gradient_titlebar));
button_Install = findViewById(R.id.button_Install);
TextView txt_changelog = findViewById(R.id.txt_changelog);
txt_status = findViewById(R.id.txt_status);
downloadFile();
button_Install.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
installAPK();
}
});
}
Uri uriFromFile(Context context, File file) {
return FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file);
}
void installAPK() {
if (apk.exists()) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uriFromFile(getApplicationContext(), apk), "application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
try {
getApplicationContext().startActivity(intent);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
Log.e("TAG", "Error in opening the file!");
}
} else {
Toast.makeText(getApplicationContext(), "installing", Toast.LENGTH_LONG).show();
}
}
public void downloadFile() {
if (apk.exists()) {
apk.delete();
}
String url = "http://www.klebl.info/download/Haussteuerung_Flo.apk";
Log.d("Foto", url);
Thread gfgThread = new Thread(() -> {
try {
InputStream in = null;
try {
in = new URL(url).openStream();
String text = "Verbindung zum Server erfolgreich. Download wird durchgeführt.";
txt_status.setText(text);
Log.d("APK", "Verbindung zum Server erfolgreich. Download wird durchgeführt.");
} catch (IOException e) {
String text = "Verbindungsfehler.";
txt_status.setText(text);
Log.d("APK", "Verbindungsfehler.");
}
try {
Files.copy(in, Paths.get(f1), StandardCopyOption.REPLACE_EXISTING);
downloadFinished = true;
button_Install.setBackgroundResource(R.drawable.alarm_false);
String text = "Download erfolgreich. Zum Installieren drücken!";
txt_status.setText(text);
Log.d("APK", "Download und Speichern erfolgreich.");
} catch (IOException e) {
String text = "Download fehlgeschlagen.";
txt_status.setText(text);
Log.d("APK", "Download fehlgeschlagen.");
}
} catch (Exception e) {
e.printStackTrace();
}
});
gfgThread.start();
}
}

View File

@@ -8,6 +8,7 @@ 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;
@@ -48,6 +49,8 @@ public class FragmentHeizkoerper extends Fragment {
@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");
@@ -58,14 +61,13 @@ public class FragmentHeizkoerper extends Fragment {
context = getContext();
return view;
}
// Runnable method
final Runnable myRunnable = new Runnable() {
public void run() {
Log.d("Heizkoerper","OK");
Log.d("Heizkoerper", "OK");
tv_temp_Grossraum.setText(istTempHKGrossraum);
setTextColor(tv_temp_Grossraum, istTempHKGrossraum);
@@ -94,57 +96,41 @@ public class FragmentHeizkoerper extends Fragment {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
final View view = this.getLayoutInflater().inflate(R.layout.layout_numberpicker, null);
builder.setView(view);
//builder.setTitle();
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"};
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++) {
// Log.d("NumberPicker", values[y]);
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, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// Log.d("NumberPicker", String.valueOf(picker.getValue()));
// Log.d("NumberPicker", values[picker.getValue()]);
builder.setPositiveButton(android.R.string.ok, (dialog, id) -> {
if (values[picker.getValue()].equals("on") || values[picker.getValue()].equals("off")) {
button.setText(values[picker.getValue()]);
} else {
button.setText(values[picker.getValue()]);
}
if (values[picker.getValue()].equals("on") || values[picker.getValue()].equals("off")) {
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 {
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", button.getText().toString(), 2, false);
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);
MqttClient.publish("fhem/Heizung/MAX_" + room + "/set/temp", button.getText().toString(), 2, false);
}
} else {
Log.d("SollTemp" + room, "Temp gleich");
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, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
builder.create().cancel();
}
});
.setNegativeButton(android.R.string.cancel, (dialog, id) -> builder.create().cancel());
builder.create().show();
}
@@ -184,75 +170,25 @@ public class FragmentHeizkoerper extends Fragment {
btn_HK_Dachboden.setText(sollTempHKDachboden);
btn_HK_Grossraum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNumberPickerDialog(btn_HK_Grossraum, sollTempHKGrossraum, "Grossraum", switch_HK_Grossraum);
}
});
btn_HK_Grossraum.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Grossraum, sollTempHKGrossraum, "Grossraum", switch_HK_Grossraum));
btn_HK_Doris.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNumberPickerDialog(btn_HK_Doris, sollTempHKDoris, "Doris_klein", switch_HK_Doris);
}
});
btn_HK_Doris.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Doris, sollTempHKDoris, "Doris_klein", switch_HK_Doris));
btn_HK_Doris_Bad.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNumberPickerDialog(btn_HK_Doris_Bad, sollTempHKDorisBad, "Doris_Bad", switch_HK_Doris_Bad);
}
});
btn_HK_Doris_Bad.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Doris_Bad, sollTempHKDorisBad, "Doris_Bad", switch_HK_Doris_Bad));
btn_HK_Arbeitszimmer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNumberPickerDialog(btn_HK_Arbeitszimmer, sollTempHKArbeitszimmer, "Arbeitszimmer", switch_HK_Arbeitszimmer);
}
});
btn_HK_Arbeitszimmer.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Arbeitszimmer, sollTempHKArbeitszimmer, "Arbeitszimmer", switch_HK_Arbeitszimmer));
btn_HK_Vorraum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNumberPickerDialog(btn_HK_Vorraum, sollTempHKVorraum, "Vorraum", switch_HK_Vorraum);
}
});
btn_HK_Vorraum.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Vorraum, sollTempHKVorraum, "Vorraum", switch_HK_Vorraum));
btn_HK_WCEG.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNumberPickerDialog(btn_HK_WCEG, sollTempHKWCEG, "WC", switch_HK_WCEG);
}
});
btn_HK_WCEG.setOnClickListener(v -> showNumberPickerDialog(btn_HK_WCEG, sollTempHKWCEG, "WC", switch_HK_WCEG));
btn_HK_Bad.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNumberPickerDialog(btn_HK_Bad, sollTempHKBad, "Bad", switch_HK_Bad);
}
});
btn_HK_Bad.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Bad, sollTempHKBad, "Bad", switch_HK_Bad));
btn_HK_Florian.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNumberPickerDialog(btn_HK_Florian, sollTempHKFlorian, "Florian", switch_HK_Florian);
}
});
btn_HK_Florian.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Florian, sollTempHKFlorian, "Florian", switch_HK_Florian));
btn_HK_Stefan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNumberPickerDialog(btn_HK_Stefan, sollTempHKStefan, "Stefan", switch_HK_Stefan);
}
});
btn_HK_Stefan.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Stefan, sollTempHKStefan, "Stefan", switch_HK_Stefan));
btn_HK_Dachboden.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNumberPickerDialog(btn_HK_Dachboden, sollTempHKDachboden, "Dachboden", switch_HK_Dachboden);
}
});
btn_HK_Dachboden.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Dachboden, sollTempHKDachboden, "Dachboden", switch_HK_Dachboden));
}
private void handleTextViews() {
@@ -360,179 +296,129 @@ public class FragmentHeizkoerper extends Fragment {
switch_HK_Dachboden.setText(R.string.auto);
}
switch_HK_Grossraum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View 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_" + room + "/set/Temp", button.getText().toString(), 2, false);
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_" + room + "/set/Temp", button.getText().toString(), 2, false);
MqttClient.publish("fhem/Heizung/MAX_Grossraum/set/mode", "manual", 2, false);
}
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(new View.OnClickListener() {
@Override
public void onClick(View 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_" + room + "/set/Temp", button.getText().toString(), 2, false);
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_" + room + "/set/Temp", button.getText().toString(), 2, false);
MqttClient.publish("fhem/Heizung/MAX_Doris_klein/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(new View.OnClickListener() {
@Override
public void onClick(View 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_" + room + "/set/Temp", button.getText().toString(), 2, false);
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_" + room + "/set/Temp", button.getText().toString(), 2, false);
MqttClient.publish("fhem/Heizung/MAX_Doris_Bad/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(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (switch_HK_Arbeitszimmer.isChecked()) {
Log.d("Mode" + modeHKArbeitszimmer, "Mode auto");
switch_HK_Arbeitszimmer.setText(R.string.auto);
//MqttClient.publish("fhem/Heizung/MAX_" + room + "/set/Temp", button.getText().toString(), 2, false);
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_" + room + "/set/Temp", button.getText().toString(), 2, false);
MqttClient.publish("fhem/Heizung/MAX_Arbeitszimmer/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(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (switch_HK_Vorraum.isChecked()) {
Log.d("Mode" + modeHKVorraum, "Mode auto");
switch_HK_Vorraum.setText(R.string.auto);
//MqttClient.publish("fhem/Heizung/MAX_" + room + "/set/Temp", button.getText().toString(), 2, false);
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_" + room + "/set/Temp", button.getText().toString(), 2, false);
MqttClient.publish("fhem/Heizung/MAX_Vorraum/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(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (switch_HK_WCEG.isChecked()) {
Log.d("Mode" + modeHKWCEG, "Mode auto");
switch_HK_WCEG.setText(R.string.auto);
//MqttClient.publish("fhem/Heizung/MAX_" + room + "/set/Temp", button.getText().toString(), 2, false);
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_" + room + "/set/Temp", button.getText().toString(), 2, false);
MqttClient.publish("fhem/Heizung/MAX_WC/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(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (switch_HK_Bad.isChecked()) {
Log.d("Mode" + modeHKBad, "Mode auto");
switch_HK_Bad.setText(R.string.auto);
//MqttClient.publish("fhem/Heizung/MAX_" + room + "/set/Temp", button.getText().toString(), 2, false);
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_" + room + "/set/Temp", button.getText().toString(), 2, false);
MqttClient.publish("fhem/Heizung/MAX_Bad/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(new View.OnClickListener() {
@Override
public void onClick(View 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_" + room + "/set/Temp", button.getText().toString(), 2, false);
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_" + room + "/set/Temp", button.getText().toString(), 2, false);
MqttClient.publish("fhem/Heizung/MAX_Florian/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(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (switch_HK_Stefan.isChecked()) {
Log.d("Mode" + modeHKStefan, "Mode auto");
switch_HK_Stefan.setText(R.string.auto);
//MqttClient.publish("fhem/Heizung/MAX_" + room + "/set/Temp", button.getText().toString(), 2, false);
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_" + room + "/set/Temp", button.getText().toString(), 2, false);
MqttClient.publish("fhem/Heizung/MAX_Stefan/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(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (switch_HK_Dachboden.isChecked()) {
Log.d("Mode" + modeHKDachboden, "Mode auto");
switch_HK_Dachboden.setText(R.string.auto);
//MqttClient.publish("fhem/Heizung/MAX_" + room + "/set/Temp", button.getText().toString(), 2, false);
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_" + room + "/set/Temp", button.getText().toString(), 2, false);
MqttClient.publish("fhem/Heizung/MAX_Dachboden/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.equals("")) {
if (!temp.isEmpty()) {
double tempDouble = Double.parseDouble(temp);
if (tempDouble >= 25) {
tv.setTextColor(ContextCompat.getColor(context, R.color.twoFive));
@@ -571,26 +457,22 @@ public class FragmentHeizkoerper extends Fragment {
myHandler.post(myRunnable); // updateUI method
}
};
myTimer.schedule(myTask,0,1000); // TimerTask, delay, period
Log.d("State", "on Resume");
myTimer.schedule(myTask, 0, 1000);
}
@Override
public void onStop() {
super.onStop();
myTask.cancel();
Log.d("State", "on Stop");
}
@Override
public void onPause() {
super.onPause();
Log.d("State", "on Pause");
}
@Override
public void onDestroy() {
super.onDestroy();
// myTimer.cancel();
}
}

View File

@@ -7,6 +7,7 @@ import android.os.Bundle;
import androidx.appcompat.widget.SwitchCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ProcessLifecycleOwner;
import android.view.LayoutInflater;
import android.view.View;
@@ -37,131 +38,80 @@ public class FragmentHeizung extends Fragment {
@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_heizung, container, false);
requireActivity().setTitle("Haussteuerung - Heizung");
// handleSwitch();
// handleButtons();
// handleCheckBoxes();
// sendValues();
return view;
}
public void sendValues() {
Button btn_HzSend = view.findViewById(R.id.btn_HzSend);
btn_HzSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String msgHzZeit1 = "{" +
"\"DeviceID\":\"" + MainActivity.ID + "\"," +
"\"CheckHZ1\":" + "\"" + check_hzZeit1.isChecked() + "\"," +
"\"SilentModeHZ1\":" + "\"" + switch_silentModeHz1.isChecked() + "\"," +
"\"ZeitHZ1\": " + "\"" + btn_hzZeit1.getText().toString() + "\"," +
"\"ZeitHZ2\": " + "\"" + btn_hzZeit2.getText().toString() + "\"," +
"\"TempHZ1\":" + btn_hzVL1.getText().toString() + "," +
"\"CheckHZ2\":" + "\"" + check_hzZeit2.isChecked() + "\"," +
"\"SilentModeHZ2\":" + "\"" + switch_silentModeHz2.isChecked() + "\"," +
"\"ZeitHZ3\": " + "\"" + btn_hzZeit3.getText().toString() + "\"," +
"\"ZeitHZ4\": " + "\"" + btn_hzZeit4.getText().toString() + "\"," +
"\"TempHZ2\":" + btn_hzVL2.getText().toString() + "," +
"\"CheckHZ3\":" + "\"" + check_hzZeit3.isChecked() + "\"," +
"\"SilentModeHZ3\":" + "\"" + switch_silentModeHz3.isChecked() + "\"," +
"\"ZeitHZ5\": " + "\"" + btn_hzZeit5.getText().toString() + "\"," +
"\"ZeitHZ6\": " + "\"" + btn_hzZeit6.getText().toString() + "\"," +
"\"TempHZ3\": " + btn_hzVL3.getText() +
"}";
btn_HzSend.setOnClickListener(v -> {
String msgHzZeit1 = "{" +
"\"DeviceID\":\"" + MainActivity.ID + "\"," +
"\"CheckHZ1\":" + "\"" + check_hzZeit1.isChecked() + "\"," +
"\"SilentModeHZ1\":" + "\"" + switch_silentModeHz1.isChecked() + "\"," +
"\"ZeitHZ1\": " + "\"" + btn_hzZeit1.getText().toString() + "\"," +
"\"ZeitHZ2\": " + "\"" + btn_hzZeit2.getText().toString() + "\"," +
"\"TempHZ1\":" + btn_hzVL1.getText().toString() + "," +
"\"CheckHZ2\":" + "\"" + check_hzZeit2.isChecked() + "\"," +
"\"SilentModeHZ2\":" + "\"" + switch_silentModeHz2.isChecked() + "\"," +
"\"ZeitHZ3\": " + "\"" + btn_hzZeit3.getText().toString() + "\"," +
"\"ZeitHZ4\": " + "\"" + btn_hzZeit4.getText().toString() + "\"," +
"\"TempHZ2\":" + btn_hzVL2.getText().toString() + "," +
"\"CheckHZ3\":" + "\"" + check_hzZeit3.isChecked() + "\"," +
"\"SilentModeHZ3\":" + "\"" + switch_silentModeHz3.isChecked() + "\"," +
"\"ZeitHZ5\": " + "\"" + btn_hzZeit5.getText().toString() + "\"," +
"\"ZeitHZ6\": " + "\"" + btn_hzZeit6.getText().toString() + "\"," +
"\"TempHZ3\": " + btn_hzVL3.getText() +
"}";
MqttClient.publish("stat/Haussteuerung/LWP/Heizung", msgHzZeit1, 2, true);
MqttClient.publish("cmnd/Haussteuerung/LWP/Heizung", "{\"DeviceID\":\"" + MainActivity.ID + "\"}", 2, false);
requireActivity().onBackPressed();
}
MqttClient.publish("stat/Haussteuerung/LWP/Heizung", msgHzZeit1, 2, true);
MqttClient.publish("cmnd/Haussteuerung/LWP/Heizung", "{\"DeviceID\":\"" + MainActivity.ID + "\"}", 2, false);
requireActivity().onBackPressed();
});
}
public void handleButtons() {
btn_hzZeit1 = view.findViewById(R.id.btn_hzZeit1);
btn_hzZeit1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog(btn_hzZeit1);
}
});
btn_hzZeit1.setOnClickListener(v -> timePickerDialog(btn_hzZeit1));
btn_hzZeit1.setText(hzZeit1Mqtt.substring(0,5));
btn_hzZeit2 = view.findViewById(R.id.btn_hzZeit2);
btn_hzZeit2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog(btn_hzZeit2);
}
});
btn_hzZeit2.setOnClickListener(v -> timePickerDialog(btn_hzZeit2));
btn_hzZeit2.setText(hzZeit2Mqtt.substring(0,5));
btn_hzZeit3 = view.findViewById(R.id.btn_hzZeit3);
btn_hzZeit3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog(btn_hzZeit3);
}
});
btn_hzZeit3.setOnClickListener(v -> timePickerDialog(btn_hzZeit3));
btn_hzZeit3.setText(hzZeit3Mqtt.substring(0,5));
btn_hzZeit4 = view.findViewById(R.id.btn_hzZeit4);
btn_hzZeit4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog(btn_hzZeit4);
}
});
btn_hzZeit4.setOnClickListener(v -> timePickerDialog(btn_hzZeit4));
btn_hzZeit4.setText(hzZeit4Mqtt.substring(0,5));
btn_hzZeit5 = view.findViewById(R.id.btn_hzZeit5);
btn_hzZeit5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog(btn_hzZeit5);
}
});
btn_hzZeit5.setOnClickListener(v -> timePickerDialog(btn_hzZeit5));
btn_hzZeit5.setText(hzZeit5Mqtt.substring(0,5));
btn_hzZeit6 = view.findViewById(R.id.btn_hzZeit6);
btn_hzZeit6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog(btn_hzZeit6);
}
});
btn_hzZeit6.setOnClickListener(v -> timePickerDialog(btn_hzZeit6));
btn_hzZeit6.setText(hzZeit6Mqtt.substring(0,5));
btn_hzVL1 = view.findViewById(R.id.btn_hzVL1);
btn_hzVL2 = view.findViewById(R.id.btn_hzVL2);
btn_hzVL3 = view.findViewById(R.id.btn_hzVL3);
btn_hzVL1.setText(String.valueOf(tempHz1));
btn_hzVL1.setOnClickListener(v -> showNumberPickerDialog(btn_hzVL1));
btn_hzVL2 = view.findViewById(R.id.btn_hzVL2);
btn_hzVL2.setText(String.valueOf(tempHz2));
btn_hzVL2.setOnClickListener(v -> showNumberPickerDialog(btn_hzVL2));
btn_hzVL3 = view.findViewById(R.id.btn_hzVL3);
btn_hzVL3.setText(String.valueOf(tempHz3));
btn_hzVL1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNumberPickerDialog(btn_hzVL1);
}
});
btn_hzVL2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNumberPickerDialog(btn_hzVL2);
}
});
btn_hzVL3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNumberPickerDialog(btn_hzVL3);
}
});
btn_hzVL3.setOnClickListener(v -> showNumberPickerDialog(btn_hzVL3));
}
public void handleCheckBoxes() {
@@ -184,20 +134,17 @@ public class FragmentHeizung extends Fragment {
btn_hzZeit2.setEnabled(false);
btn_hzVL1.setEnabled(false);
}
check_hzZeit1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (check_hzZeit1.isChecked()) {
switch_silentModeHz1.setEnabled(true);
btn_hzZeit1.setEnabled(true);
btn_hzZeit2.setEnabled(true);
btn_hzVL1.setEnabled(true);
} else {
switch_silentModeHz1.setEnabled(false);
btn_hzZeit1.setEnabled(false);
btn_hzZeit2.setEnabled(false);
btn_hzVL1.setEnabled(false);
}
check_hzZeit1.setOnClickListener(v -> {
if (check_hzZeit1.isChecked()) {
switch_silentModeHz1.setEnabled(true);
btn_hzZeit1.setEnabled(true);
btn_hzZeit2.setEnabled(true);
btn_hzVL1.setEnabled(true);
} else {
switch_silentModeHz1.setEnabled(false);
btn_hzZeit1.setEnabled(false);
btn_hzZeit2.setEnabled(false);
btn_hzVL1.setEnabled(false);
}
});
@@ -212,20 +159,17 @@ public class FragmentHeizung extends Fragment {
btn_hzZeit4.setEnabled(false);
btn_hzVL2.setEnabled(false);
}
check_hzZeit2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (check_hzZeit2.isChecked()) {
switch_silentModeHz2.setEnabled(true);
btn_hzZeit3.setEnabled(true);
btn_hzZeit4.setEnabled(true);
btn_hzVL2.setEnabled(true);
} else {
switch_silentModeHz2.setEnabled(false);
btn_hzZeit3.setEnabled(false);
btn_hzZeit4.setEnabled(false);
btn_hzVL2.setEnabled(false);
}
check_hzZeit2.setOnClickListener(v -> {
if (check_hzZeit2.isChecked()) {
switch_silentModeHz2.setEnabled(true);
btn_hzZeit3.setEnabled(true);
btn_hzZeit4.setEnabled(true);
btn_hzVL2.setEnabled(true);
} else {
switch_silentModeHz2.setEnabled(false);
btn_hzZeit3.setEnabled(false);
btn_hzZeit4.setEnabled(false);
btn_hzVL2.setEnabled(false);
}
});
@@ -240,20 +184,17 @@ public class FragmentHeizung extends Fragment {
btn_hzZeit6.setEnabled(false);
btn_hzVL3.setEnabled(false);
}
check_hzZeit3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (check_hzZeit3.isChecked()) {
switch_silentModeHz3.setEnabled(true);
btn_hzZeit5.setEnabled(true);
btn_hzZeit6.setEnabled(true);
btn_hzVL3.setEnabled(true);
} else {
switch_silentModeHz3.setEnabled(false);
btn_hzZeit5.setEnabled(false);
btn_hzZeit6.setEnabled(false);
btn_hzVL3.setEnabled(false);
}
check_hzZeit3.setOnClickListener(v -> {
if (check_hzZeit3.isChecked()) {
switch_silentModeHz3.setEnabled(true);
btn_hzZeit5.setEnabled(true);
btn_hzZeit6.setEnabled(true);
btn_hzVL3.setEnabled(true);
} else {
switch_silentModeHz3.setEnabled(false);
btn_hzZeit5.setEnabled(false);
btn_hzZeit6.setEnabled(false);
btn_hzVL3.setEnabled(false);
}
});
}
@@ -281,26 +222,15 @@ public class FragmentHeizung extends Fragment {
picker.setMinValue(0);
picker.setMaxValue(ml - 1);
for(int y=0; y<values.length; y++) {
// Log.d("NumberPicker", values[y]);
if (values[y].equals(button.getText().toString())) {
picker.setValue(y);
}
}
picker.setDisplayedValues(values);
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// Log.d("NumberPicker", String.valueOf(picker.getValue()));
// Log.d("NumberPicker", values[picker.getValue()]);
button.setText(values[picker.getValue()]);
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
builder.create().cancel();
}
});
builder.setPositiveButton(android.R.string.ok, (dialog, id) -> {
button.setText(values[picker.getValue()]);
})
.setNegativeButton(android.R.string.cancel, (dialog, id) -> builder.create().cancel());
builder.create().show();
}
@@ -308,12 +238,7 @@ public class FragmentHeizung extends Fragment {
LocalTime localTime = LocalTime.parse(button.getText());
int hour = localTime.getHour();
int minute = localTime.getMinute();
TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
button.setText(String.format(Locale.getDefault(), "%02d:%02d", selectedHour, selectedMinute));
}
};
TimePickerDialog.OnTimeSetListener onTimeSetListener = (timePicker, selectedHour, selectedMinute) -> button.setText(String.format(Locale.getDefault(), "%02d:%02d", selectedHour, selectedMinute));
TimePickerDialog timePickerDialog = new TimePickerDialog(getContext(), onTimeSetListener, hour, minute, true);
timePickerDialog.show();
}

View File

@@ -5,6 +5,7 @@ import android.os.Bundle;
import androidx.appcompat.widget.SwitchCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ProcessLifecycleOwner;
import android.os.Handler;
import android.util.Log;
@@ -45,6 +46,8 @@ public class FragmentWW extends Fragment {
@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_ww, container, false);
requireActivity().setTitle("Haussteuerung - Warmwasser");
@@ -52,13 +55,6 @@ public class FragmentWW extends Fragment {
tv_boilerObenVal = view.findViewById(R.id.tv_boilerObenVal);
tv_boilerUntenVal = view.findViewById(R.id.tv_boilerUntenVal);
// handleSwitch();
// handleTextViews();
// handleButtons();
// handleCheckBoxes();
// handleSeekBars();
// sendValues();
return view;
}
@@ -75,31 +71,28 @@ public class FragmentWW extends Fragment {
public void sendValues() {
Button btn_WwSend = view.findViewById(R.id.btn_HzSend);
btn_WwSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String msgWwZeit1 = "{" +
"\"DeviceID\":\"" + MainActivity.ID + "\"," +
"\"CheckWW1\":" + "\"" + check_wwZeit1.isChecked() + "\"," +
"\"SilentModeWW1\": " + "\"" + switch_silentModeWw1.isChecked() + "\"," +
"\"ZeitWW1\": " + "\"" + btn_wwZeit1.getText().toString() + "\"," +
"\"ZeitWW2\": " + "\"" + btn_wwZeit2.getText().toString() + "\"," +
"\"CheckWW2\":" + "\"" + check_wwZeit2.isChecked() + "\"," +
"\"SilentModeWW2\": " + "\"" + switch_silentModeWw2.isChecked() + "\"," +
"\"ZeitWW3\": " + "\"" + btn_wwZeit3.getText().toString() + "\"," +
"\"ZeitWW4\": " + "\"" + btn_wwZeit4.getText().toString() + "\"," +
"\"CheckWW3\":" + "\"" + check_wwZeit3.isChecked() + "\"," +
"\"SilentModeWW3\": " + "\"" + switch_silentModeWw3.isChecked() + "\"," +
"\"ZeitWW5\": " + "\"" + btn_wwZeit5.getText().toString() + "\"," +
"\"ZeitWW6\": " + "\"" + btn_wwZeit6.getText().toString() + "\"," +
"\"TempWW1\": " + tv_WwMinVal.getText() + "," +
"\"TempWW2\": " + tv_WwMaxVal.getText() +
"}";
btn_WwSend.setOnClickListener(v -> {
String msgWwZeit1 = "{" +
"\"DeviceID\":\"" + MainActivity.ID + "\"," +
"\"CheckWW1\":" + "\"" + check_wwZeit1.isChecked() + "\"," +
"\"SilentModeWW1\": " + "\"" + switch_silentModeWw1.isChecked() + "\"," +
"\"ZeitWW1\": " + "\"" + btn_wwZeit1.getText().toString() + "\"," +
"\"ZeitWW2\": " + "\"" + btn_wwZeit2.getText().toString() + "\"," +
"\"CheckWW2\":" + "\"" + check_wwZeit2.isChecked() + "\"," +
"\"SilentModeWW2\": " + "\"" + switch_silentModeWw2.isChecked() + "\"," +
"\"ZeitWW3\": " + "\"" + btn_wwZeit3.getText().toString() + "\"," +
"\"ZeitWW4\": " + "\"" + btn_wwZeit4.getText().toString() + "\"," +
"\"CheckWW3\":" + "\"" + check_wwZeit3.isChecked() + "\"," +
"\"SilentModeWW3\": " + "\"" + switch_silentModeWw3.isChecked() + "\"," +
"\"ZeitWW5\": " + "\"" + btn_wwZeit5.getText().toString() + "\"," +
"\"ZeitWW6\": " + "\"" + btn_wwZeit6.getText().toString() + "\"," +
"\"TempWW1\": " + tv_WwMinVal.getText() + "," +
"\"TempWW2\": " + tv_WwMaxVal.getText() +
"}";
MqttClient.publish("stat/Haussteuerung/LWP/Warmwasser", msgWwZeit1, 2, true);
MqttClient.publish("cmnd/Haussteuerung/LWP/Warmwasser", "{\"DeviceID\":\"" + MainActivity.ID + "\"}", 2, false);
requireActivity().onBackPressed();
}
MqttClient.publish("stat/Haussteuerung/LWP/Warmwasser", msgWwZeit1, 2, true);
MqttClient.publish("cmnd/Haussteuerung/LWP/Warmwasser", "{\"DeviceID\":\"" + MainActivity.ID + "\"}", 2, false);
requireActivity().onBackPressed();
});
}
@@ -115,57 +108,27 @@ public class FragmentWW extends Fragment {
public void handleButtons() {
btn_wwZeit1 = view.findViewById(R.id.btn_wwZeit1);
btn_wwZeit1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog(btn_wwZeit1);
}
});
btn_wwZeit1.setOnClickListener(v -> timePickerDialog(btn_wwZeit1));
btn_wwZeit1.setText(wwZeit1Mqtt.substring(0, 5));
btn_wwZeit2 = view.findViewById(R.id.btn_wwZeit2);
btn_wwZeit2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog(btn_wwZeit2);
}
});
btn_wwZeit2.setOnClickListener(v -> timePickerDialog(btn_wwZeit2));
btn_wwZeit2.setText(wwZeit2Mqtt.substring(0, 5));
btn_wwZeit3 = view.findViewById(R.id.btn_wwZeit3);
btn_wwZeit3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog(btn_wwZeit3);
}
});
btn_wwZeit3.setOnClickListener(v -> timePickerDialog(btn_wwZeit3));
btn_wwZeit3.setText(wwZeit3Mqtt.substring(0, 5));
btn_wwZeit4 = view.findViewById(R.id.btn_wwZeit4);
btn_wwZeit4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog(btn_wwZeit4);
}
});
btn_wwZeit4.setOnClickListener(v -> timePickerDialog(btn_wwZeit4));
btn_wwZeit4.setText(wwZeit4Mqtt.substring(0, 5));
btn_wwZeit5 = view.findViewById(R.id.btn_wwZeit5);
btn_wwZeit5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog(btn_wwZeit5);
}
});
btn_wwZeit5.setOnClickListener(v -> timePickerDialog(btn_wwZeit5));
btn_wwZeit5.setText(wwZeit5Mqtt.substring(0, 5));
btn_wwZeit6 = view.findViewById(R.id.btn_wwZeit6);
btn_wwZeit6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog(btn_wwZeit6);
}
});
btn_wwZeit6.setOnClickListener(v -> timePickerDialog(btn_wwZeit6));
btn_wwZeit6.setText(wwZeit6Mqtt.substring(0, 5));
}
@@ -187,18 +150,15 @@ public class FragmentWW extends Fragment {
btn_wwZeit1.setEnabled(false);
btn_wwZeit2.setEnabled(false);
}
check_wwZeit1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (check_wwZeit1.isChecked()) {
switch_silentModeWw1.setEnabled(true);
btn_wwZeit1.setEnabled(true);
btn_wwZeit2.setEnabled(true);
} else {
switch_silentModeWw1.setEnabled(false);
btn_wwZeit1.setEnabled(false);
btn_wwZeit2.setEnabled(false);
}
check_wwZeit1.setOnClickListener(v -> {
if (check_wwZeit1.isChecked()) {
switch_silentModeWw1.setEnabled(true);
btn_wwZeit1.setEnabled(true);
btn_wwZeit2.setEnabled(true);
} else {
switch_silentModeWw1.setEnabled(false);
btn_wwZeit1.setEnabled(false);
btn_wwZeit2.setEnabled(false);
}
});
@@ -211,18 +171,15 @@ public class FragmentWW extends Fragment {
btn_wwZeit3.setEnabled(false);
btn_wwZeit4.setEnabled(false);
}
check_wwZeit2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (check_wwZeit2.isChecked()) {
switch_silentModeWw2.setEnabled(true);
btn_wwZeit3.setEnabled(true);
btn_wwZeit4.setEnabled(true);
} else {
switch_silentModeWw2.setEnabled(false);
btn_wwZeit3.setEnabled(false);
btn_wwZeit4.setEnabled(false);
}
check_wwZeit2.setOnClickListener(v -> {
if (check_wwZeit2.isChecked()) {
switch_silentModeWw2.setEnabled(true);
btn_wwZeit3.setEnabled(true);
btn_wwZeit4.setEnabled(true);
} else {
switch_silentModeWw2.setEnabled(false);
btn_wwZeit3.setEnabled(false);
btn_wwZeit4.setEnabled(false);
}
});
@@ -235,18 +192,15 @@ public class FragmentWW extends Fragment {
btn_wwZeit5.setEnabled(false);
btn_wwZeit6.setEnabled(false);
}
check_wwZeit3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (check_wwZeit3.isChecked()) {
switch_silentModeWw3.setEnabled(true);
btn_wwZeit5.setEnabled(true);
btn_wwZeit6.setEnabled(true);
} else {
switch_silentModeWw3.setEnabled(false);
btn_wwZeit5.setEnabled(false);
btn_wwZeit6.setEnabled(false);
}
check_wwZeit3.setOnClickListener(v -> {
if (check_wwZeit3.isChecked()) {
switch_silentModeWw3.setEnabled(true);
btn_wwZeit5.setEnabled(true);
btn_wwZeit6.setEnabled(true);
} else {
switch_silentModeWw3.setEnabled(false);
btn_wwZeit5.setEnabled(false);
btn_wwZeit6.setEnabled(false);
}
});
}
@@ -304,12 +258,7 @@ public class FragmentWW extends Fragment {
int hour = localTime.getHour();
int minute = localTime.getMinute();
int hourWwZeit = 0, minuteWwZeit = 0;
TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
button.setText(String.format(Locale.getDefault(), "%02d:%02d", selectedHour, selectedMinute));
}
};
TimePickerDialog.OnTimeSetListener onTimeSetListener = (timePicker, selectedHour, selectedMinute) -> button.setText(String.format(Locale.getDefault(), "%02d:%02d", selectedHour, selectedMinute));
TimePickerDialog timePickerDialog = new TimePickerDialog(getContext(), onTimeSetListener, hourWwZeit, minuteWwZeit, true);
timePickerDialog.updateTime(hour, minute);
timePickerDialog.show();
@@ -330,13 +279,12 @@ public class FragmentWW extends Fragment {
myHandler.post(myRunnable); // updateUI method
}
};
myTimer.schedule(myTask, 0, 1000); // TimerTask, delay, period
myTimer.schedule(myTask, 0, 1000);
}
@Override
public void onStop() {
super.onStop();
myTask.cancel();
Log.d("State", "on Stop");
}
}

View File

@@ -1,7 +1,5 @@
package com.haussteuerung;
import static android.os.Build.VERSION.SDK_INT;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
@@ -12,7 +10,6 @@ import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Environment;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
@@ -22,22 +19,22 @@ import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.ProcessLifecycleOwner;
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.gson.Gson;
import com.haussteuerung.helper.Licht;
import org.eclipse.paho.client.mqttv3.MqttException;
import java.io.File;
import java.util.Objects;
import java.util.Timer;
import java.util.TimerTask;
@@ -47,56 +44,39 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
private TextView tv_mqtt;
private Button buttonAlarm;
public static String ID = "";
public static boolean pausedMainActivity = true;
public static boolean alarmStatus = false, wm1Status = false, wm2Status = false;
private Context mContext;
Timer myTimer = new Timer();
Gson gson = new Gson();
String msg;
@RequiresApi(api = Build.VERSION_CODES.TIRAMISU)
@SuppressLint("HardwareIds")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleTracker());
mContext = this;
pausedMainActivity = false;
Log.d("MainActivityPause", "onCreate true");
// Ändern der Statusbar-Farbe
androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setBackgroundDrawable(AppCompatResources.getDrawable(getApplicationContext(), R.drawable.gradient_titlebar));
setContentView(R.layout.activity_main);
ID = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);
String androidId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);
ID = "haussteuerung-android-" + Build.MODEL + "-" + androidId;
Log.d("ID", ID);
int permissionState = ContextCompat.checkSelfPermission(this, android.Manifest.permission.POST_NOTIFICATIONS);
int permissionState = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
permissionState = ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS);
}
// If the permission is not granted, request it.
if (permissionState == PackageManager.PERMISSION_DENIED) {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.POST_NOTIFICATIONS}, 1);
}
// Abfrage am Gerät, ob Speicher verwendet werden darf
if (SDK_INT >= Build.VERSION_CODES.R) {
Log.d("Permission", "" + SDK_INT);
if (!Environment.isExternalStorageManager()) {
ActivityCompat.requestPermissions(this,
new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.MANAGE_EXTERNAL_STORAGE}, 1);//permission request code is just an int
File file = new File(Environment.getExternalStorageDirectory().getPath() + "/Pictures/Haussteuerung/");
if (!file.exists()) {
file.mkdir();
}
}
} else {
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.POST_NOTIFICATIONS}, 1);
}
FirebaseMessaging.getInstance().subscribeToTopic("general");
@@ -108,10 +88,6 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
} catch (Exception e) {
Log.d("MQTT", "Verbindung fehlgeschlagen");
}
// Log.d("MQTT", String.valueOf(MqttClient.connSuccess));
// if (!MqttClient.connSuccess) {
// MqttClient.connect();
// }
// Instanzieren der Buttons und TextViews
ImageView imageViewHaus = findViewById(R.id.imageViewHaus);
@@ -135,53 +111,34 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
buttonDorisLicht.setOnClickListener(this);
imageViewHaus.setOnClickListener(this);
imageViewHaus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
alertDialogHaus();
}
imageViewHaus.setOnClickListener(view -> alertDialogHaus());
imageViewHaus.setOnLongClickListener(view -> {
alertDialogVersion();
return true;
});
imageViewHaus.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
alertDialogVersion();
return true;
}
});
buttonAlarm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("Alarm", String.valueOf(alarmStatus));
if (alarmStatus) {
// Alarm ein, also ausschalten
MqttClient.publish("cmnd/Haussteuerung/Alarm", "{\"DeviceID\":\"" + ID + "\",\"Name\":\"Alarm\",\"Zustand\":\"true\"}");
} else {
// Alarm aus, also einschalten
alertDialogAlarm();
}
buttonAlarm.setOnClickListener(view -> {
Log.d("Alarm", String.valueOf(alarmStatus));
if (alarmStatus) {
// Alarm ein, also ausschalten
MqttClient.publish("cmnd/Haussteuerung/Alarm", "{\"DeviceID\":\"" + ID + "\",\"Name\":\"Alarm\",\"Zustand\":\"true\"}");
} else {
// Alarm aus, also einschalten
alertDialogAlarm();
}
});
Intent i = getIntent();
if (i.getExtras() != null) {
if (i.getExtras() != null && i.hasExtra("Time")) {
Log.d("GlockeZeit", i.getStringExtra("Time"));
}
if ((i.getExtras() != null) && (i.hasExtra("Time"))) {
Intent iGlocke = new Intent(MainActivity.this, activityGlocke.class);
iGlocke.putExtra("TimeFB", i.getStringExtra("Time"));
Log.d("GlockeZeit", i.getStringExtra("Time"));
Log.d("GlockeZeit", Objects.requireNonNull(i.getStringExtra("Time")));
startActivity(iGlocke);
}
if ((i.getExtras() != null) && (i.hasExtra("Sky"))) {
Intent iSky = new Intent(MainActivity.this, activitySky.class);
Log.d("Sky", i.getStringExtra("Sky"));
startActivity(iSky);
}
if ((i.getExtras() != null) && (i.hasExtra("Other"))) {
Log.d("Other", i.getStringExtra("Other"));
Log.d("Other", Objects.requireNonNull(i.getStringExtra("Other")));
alertDialogNotification(i.getStringExtra("Other"));
}
}
@@ -277,27 +234,21 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
alertDialog.setCustomTitle(textView);
AlertDialog alert = alertDialog.create();
alert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Objects.requireNonNull(alert.getWindow()).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Button buttonGarage, buttonSchiebetor;
buttonGarage = customLayout.findViewById(R.id.buttonAlarmJa);
buttonSchiebetor = customLayout.findViewById(R.id.buttonAlarmNein);
buttonGarage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
msg = gson.toJson(new Licht(MainActivity.ID, "Garagentor", "Lamp12"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
alert.cancel();
}
buttonGarage.setOnClickListener(view -> {
msg = gson.toJson(new Licht(MainActivity.ID, "Garagentor", "Lamp12"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
alert.cancel();
});
buttonSchiebetor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
msg = gson.toJson(new Licht(MainActivity.ID, "Schiebetor", "Lamp31"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);Toast.makeText(mContext, "Schiebetor außer Betrieb", Toast.LENGTH_LONG).show();
alert.cancel();
}
buttonSchiebetor.setOnClickListener(view -> {
msg = gson.toJson(new Licht(MainActivity.ID, "Schiebetor", "Lamp31"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
alert.cancel();
});
alert.show();
}
@@ -318,48 +269,36 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
alertDialog.setCustomTitle(textView);
AlertDialog alert = alertDialog.create();
alert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Objects.requireNonNull(alert.getWindow()).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Button buttonAlarmJa, buttonAlarmNein;
buttonAlarmJa = customLayout.findViewById(R.id.buttonAlarmJa);
buttonAlarmNein = customLayout.findViewById(R.id.buttonAlarmNein);
buttonAlarmJa.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (MqttClient.tv_Zustand1.equals("zu") &&
MqttClient.tv_Zustand2.equals("zu") &&
MqttClient.tv_Zustand3.equals("zu") &&
MqttClient.tv_Zustand4.equals("zu") &&
MqttClient.tv_Zustand5.equals("zu") &&
MqttClient.tv_Zustand6.equals("zu") &&
MqttClient.tv_Zustand7.equals("zu") &&
MqttClient.tv_Zustand9.equals("zu") &&
MqttClient.tv_Zustand10.equals("zu") &&
MqttClient.tv_Zustand11.equals("zu") &&
MqttClient.tv_Zustand12.equals("zu") &&
MqttClient.tv_Zustand13.equals("zu") &&
MqttClient.tv_Zustand14.equals("zu") //&&
//MqttClient.tv_Zustand15.equals("zu") &&
//MqttClient.tv_Zustand16.equals("zu") &&
//MqttClient.tv_Zustand17.equals("zu") &&
//MqttClient.tv_Zustand18.equals("zu")
) {
MqttClient.publish("cmnd/Haussteuerung/Alarm", "{\"DeviceID\":\"" + ID + "\",\"Name\":\"Alarm\",\"Zustand\":\"false\"}");
alert.cancel();
} else {
Toast.makeText(mContext, "Bitte offene Fenster/Türen schließen!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, activityHaus.class);
startActivity(intent);
}
buttonAlarmJa.setOnClickListener(view -> {
if (MqttClient.tv_Zustand1.equals("zu") &&
MqttClient.tv_Zustand2.equals("zu") &&
MqttClient.tv_Zustand3.equals("zu") &&
MqttClient.tv_Zustand4.equals("zu") &&
MqttClient.tv_Zustand5.equals("zu") &&
MqttClient.tv_Zustand6.equals("zu") &&
MqttClient.tv_Zustand7.equals("zu") &&
MqttClient.tv_Zustand9.equals("zu") &&
MqttClient.tv_Zustand10.equals("zu") &&
MqttClient.tv_Zustand11.equals("zu") &&
MqttClient.tv_Zustand12.equals("zu") &&
MqttClient.tv_Zustand13.equals("zu") &&
MqttClient.tv_Zustand14.equals("zu")
) {
MqttClient.publish("cmnd/Haussteuerung/Alarm", "{\"DeviceID\":\"" + ID + "\",\"Name\":\"Alarm\",\"Zustand\":\"false\"}");
alert.cancel();
} else {
Toast.makeText(mContext, "Bitte offene Fenster/Türen schließen!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, activityHaus.class);
startActivity(intent);
}
});
buttonAlarmNein.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
alert.cancel();
}
});
buttonAlarmNein.setOnClickListener(view -> alert.cancel());
alert.show();
}
@@ -379,7 +318,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
alertDialog.setCustomTitle(textView);
AlertDialog alert = alertDialog.create();
alert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Objects.requireNonNull(alert.getWindow()).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
alert.show();
}
@@ -401,7 +340,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
alertDialog.setCustomTitle(textView);
AlertDialog alert = alertDialog.create();
alert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Objects.requireNonNull(alert.getWindow()).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
TextView textView_adConent, textView_adTimer;
textView_adConent = customLayout.findViewById(R.id.tv_adcontent);
@@ -430,9 +369,6 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
@Override
protected void onPause() {
super.onPause();
pausedMainActivity = true;
Log.d("MainActivityPause", "onPause true");
// Log.d("1MQTT onPause", String.valueOf(MqttClient.connSuccess));
myTimer.cancel();
Log.d("TimerMainActivity", "Canceled");
}
@@ -440,33 +376,22 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
@Override
protected void onStop() {
super.onStop();
pausedMainActivity = true;
Log.d("MainActivityPause", "onStop true");
// Log.d("1MQTT onStop", String.valueOf(MqttClient.connSuccess));
// myTimer.cancel();
// Log.d("TimerMainActivity", "Canceled");
}
@Override
protected void onStart() {
super.onStart();
Log.d("MainActivityPause", "onStart true");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("MainActivityPause", "onRestart true");
}
@Override
protected void onResume() {
super.onResume();
Log.d("MainActivityPause", "onResume true");
Log.d("1MQTT onResume", String.valueOf(MqttClient.client.isConnected()));
pausedMainActivity = false;
buttonAlarm.setBackgroundResource(R.drawable.gradient_pressed);
@@ -486,7 +411,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
MqttClient.client.reconnect();
Log.d("1MQTT onResume", "Try to reconnect client");
} catch (MqttException e) {
e.printStackTrace();
Log.d("1MQTT onResume", "Try to reconnect client failed: " + e);
}
}
}
@@ -494,11 +419,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
@Override
protected void onDestroy() {
super.onDestroy();
pausedMainActivity = true;
// myTimer.cancel();
Log.d("MainActivityPause", "onDestroy true");
MqttClient.disconnect();
// Log.d("1MQTT onDestroy", String.valueOf(MqttClient.connSuccess));
finishAffinity();
}
}

View File

@@ -4,10 +4,11 @@ import static java.nio.charset.StandardCharsets.UTF_8;
import android.util.Log;
import androidx.annotation.NonNull;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.eclipse.paho.android.service.MqttAndroidClient;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
@@ -15,15 +16,12 @@ import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;
import javax.net.ssl.SSLSocketFactory;
public class MqttClient {
static org.eclipse.paho.client.mqttv3.MqttClient client = null;
static boolean connSuccess = false;
static String logContent = "";
static String tv_Zustand1 = "", tv_Zustand2 = "", tv_Zustand3 = "", tv_Zustand4 = "", tv_Zustand5 = "", tv_Zustand6 = "";
static String tv_Zustand7 = "", tv_Zustand8 = "", tv_Zustand9 = "", tv_Zustand10 = "", tv_Zustand11 = "", tv_Zustand12 = "";
@@ -39,25 +37,9 @@ public class MqttClient {
@Override
public void connectionLost(Throwable cause) {
Log.d("MQTT connloss", "client lost connection " + cause);
Log.d("MQTT connloss", cause.getMessage());
Log.d("MQTT connloss", Objects.requireNonNull(cause.getMessage()));
Log.d("MQTT connless", String.valueOf(client.getDebug()));
Log.d("MQTT connloss", String.valueOf(MqttClient.client.isConnected()));
// MainActivity.tv_mqtt.setTextColor(Color.RED);
// if (!MqttClient.client.isConnected()) {
// try {
// client.reconnect();
// client.subscribe("stat/Haussteuerung/#");
// client.subscribe("fhem/temp/#");
// client.subscribe("fhem/Heizung/#");
// } catch (MqttException e) {
// e.printStackTrace();
// }
// }
// Log.d("MQTT connloss2", String.valueOf(MqttClient.client.isConnected()));
// disconnect();
// Log.d("MQTT connloss", "client disconnected after connection lost");
// connect();
}
@Override
@@ -66,12 +48,8 @@ public class MqttClient {
if (topic.equals("stat/Haussteuerung/Alarm")) {
JsonObject jsonObject = JsonParser.parseString(message.toString()).getAsJsonObject();
if (jsonObject.get("Zustand").getAsString().equals("true")) {
// MainActivity.buttonAlarm.setText(R.string.alarm_ein);
// MainActivity.buttonAlarm.setBackgroundResource(R.drawable.alarm_true);
MainActivity.alarmStatus = true;
} else if (jsonObject.get("Zustand").getAsString().equals("false")) {
// MainActivity.buttonAlarm.setText(R.string.alarm_aus);
// MainActivity.buttonAlarm.setBackgroundResource(R.drawable.alarm_false);
MainActivity.alarmStatus = false;
}
}
@@ -79,10 +57,8 @@ public class MqttClient {
if (topic.equals("stat/Haussteuerung/Waschmaschine/WM1")) {
JsonObject jsonObject = JsonParser.parseString(message.toString()).getAsJsonObject();
if (jsonObject.get("Zustand").getAsString().equals("ein")) {
// MainActivity.tv_WM1.setText(R.string.wm1_laeuft);
MainActivity.wm1Status = true;
} else if (jsonObject.get("Zustand").getAsString().equals("aus")) {
// MainActivity.tv_WM1.setText(R.string.wm1_aus);
MainActivity.wm1Status = false;
}
}
@@ -90,10 +66,8 @@ public class MqttClient {
if (topic.equals("stat/Haussteuerung/Waschmaschine/WM2")) {
JsonObject jsonObject = JsonParser.parseString(message.toString()).getAsJsonObject();
if (jsonObject.get("Zustand").getAsString().equals("ein")) {
// MainActivity.tv_WM2.setText(R.string.wm2_laeuft);
MainActivity.wm2Status = true;
} else if (jsonObject.get("Zustand").getAsString().equals("aus")) {
// MainActivity.tv_WM2.setText(R.string.wm2_aus);
MainActivity.wm2Status = false;
}
}
@@ -133,14 +107,6 @@ public class MqttClient {
activityLicht.checkedGlocke = jsonObject.get("Checkbox").getAsBoolean();
}
// WEIHNACHTSBELEUCHTUNG
if (topic.equals("tele/sonoff153/STATE")) {
JsonObject jsonObject = JsonParser.parseString(message.toString()).getAsJsonObject();
activityChristmas.power = jsonObject.get("POWER").getAsString();
activityChristmas.hsbColorArray = new ArrayList<>(Arrays.asList(jsonObject.get("HSBColor").getAsString().split(",")));
}
// WEIHNACHTSBELEUCHTUNG
handleLWP(topic, message);
fensterZustaende(topic, message);
@@ -152,8 +118,24 @@ public class MqttClient {
}
});
} catch (MqttException e) {
e.printStackTrace();
Log.d("MQTTLOG", "Connect failed: " + e);
}
MqttConnectOptions mqttConnectOptions = getMqttConnectOptions();
try {
client.connect(mqttConnectOptions);
subscribe("stat/Haussteuerung/#");
subscribe("fhem/temp/#");
subscribe("fhem/Heizung/#");
subscribe("tele/sonoff153/#");
subscribe("growatt/#");
Log.d("MQTTLOG", "client connected");
} catch (MqttException e) {
Log.d("MQTTLOG", "connection failed " + e.getMessage());
}
}
@NonNull
private static MqttConnectOptions getMqttConnectOptions() {
MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
mqttConnectOptions.setUserName("steve");
mqttConnectOptions.setPassword("Florian1".toCharArray());
@@ -161,58 +143,33 @@ public class MqttClient {
mqttConnectOptions.setCleanSession(false);
mqttConnectOptions.setKeepAliveInterval(15);
mqttConnectOptions.setConnectionTimeout(30);
mqttConnectOptions.setSocketFactory(SSLSocketFactory.getDefault()); // using the default socket factory
try {
client.connect(mqttConnectOptions);
// connSuccess = true;
subscribe("stat/Haussteuerung/#");
subscribe("fhem/temp/#");
subscribe("fhem/Heizung/#");
subscribe("tele/sonoff153/#");
subscribe("growatt/#");
Log.d("MQTTLOG", "client connected");
// MainActivity.tv_mqtt.setTextColor(Color.parseColor("#64DD17"));
} catch (MqttException e) {
e.printStackTrace();
// connSuccess = false;
Log.d("MQTTLOG", "connection failed " + e.getMessage());
// MainActivity.tv_mqtt.setTextColor(Color.RED);
}
mqttConnectOptions.setSocketFactory(SSLSocketFactory.getDefault());
return mqttConnectOptions;
}
public static void subscribe(String topic) {
try {
// if (!client.isConnected()) {
// client.reconnect();
// }
client.subscribe(topic);
} catch (MqttException e) {
e.printStackTrace();
Log.d("MQTTLOG", "Subscribing failed: " + e);
}
}
public static void publish(String topic, String message) {
try {
// if (!client.isConnected()) {
// client.reconnect();
// }
client.publish(topic, message.getBytes(UTF_8),2, false);
client.publish(topic, message.getBytes(UTF_8), 2, false);
Log.d("MQTTLOG", "Message" + message + "published.");
} catch (MqttException e) {
e.printStackTrace();
Log.d("MQTTLOG", "Publish failed: " + e);
}
}
public static void publish(String topic, String message, int qos, boolean retained) {
try {
// if (!client.isConnected()) {
// client.reconnect();
// }
client.publish(topic, message.getBytes(UTF_8), qos, retained);
Log.d("MQTTLOG", "Message" + message + "published.");
} catch (MqttException e) {
e.printStackTrace();
Log.d("MQTTLOG", "Publish failed: " + e);
}
}
@@ -220,9 +177,8 @@ public class MqttClient {
try {
client.disconnect();
} catch (MqttException e) {
e.printStackTrace();
Log.d("MQTTLOG", "Disconnect failed: " + e);
}
// MainActivity.tv_mqtt.setTextColor(Color.RED);
}
private static void handleLWP(String topic, MqttMessage message) {

View File

@@ -5,61 +5,57 @@ import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Map;
import java.util.Objects;
import java.util.Random;
@SuppressLint("MissingFirebaseInstanceTokenRefresh")
public class MyFirebaseMessagingService extends FirebaseMessagingService {
String url = "";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
Log.d("Firebase", remoteMessage.getFrom() + ", " + remoteMessage.getData().get("content"));
// Wenn eine Activity geöffnet ist oder die FB-Nachricht nicht "Es hat gel" enthält, eine Toastbox zeigen, ansonsten eine Notification senden
if (((!MainActivity.pausedMainActivity)
|| (!activityDoris.pausedDoris)
|| (!activityDorisLicht.pausedDorisLicht)
|| (!activityGlocke.pausedGlocke)
|| (!activityHaus.pausedHaus)
|| (!activityLicht.pausedLicht)
|| (!activityLog.pausedLog)
|| (!activitySky.pausedSky)
|| (!activityLWP.pausedLWP))
&& (!Objects.requireNonNull(remoteMessage.getData().get("content")).contains("Es hat gel"))) {
if (AppLifecycleTracker.isAppInForeground()) {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(() -> Toast.makeText(getApplicationContext(), remoteMessage.getData().get("content"), Toast.LENGTH_LONG).show());
} else {
if (Objects.requireNonNull(remoteMessage.getData().get("content")).contains("Es hat gel")) {
downloadFile(remoteMessage);
url = "https://www.klebl.info/cam/" + Objects.requireNonNull(remoteMessage.getData().get("content")).substring(28, 43) + ".jpg";
deleteImageFromMediaStore(getApplicationContext(), "cam.jpg");
downloadImageToGallery(getApplicationContext(), url, "cam.jpg");
downloadImageToGallery(getApplicationContext(), url, Objects.requireNonNull(remoteMessage.getData().get("content")).substring(28, 43) + ".jpg");
try {
Thread.sleep(700);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
Log.d("onMessageReceived - Firebase", "1sec timer failed");
}
sendNotification(remoteMessage);
@@ -71,55 +67,39 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService {
}
}
public void downloadImageToGallery(Context context, String imageUrl, String filename) {
new Thread(() -> {
try {
InputStream inputStream = new URL(imageUrl).openStream();
public void downloadFile(RemoteMessage remoteMessage) {
File fileCam = new File(Environment.getExternalStorageDirectory().getPath() + "/Pictures/Haussteuerung/");
if (!fileCam.exists()) {
fileCam.mkdir();
}
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DISPLAY_NAME, filename);
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES);
if (Objects.requireNonNull(remoteMessage.getData().get("content")).contains("Es hat gel")) {
Log.d("Foto", remoteMessage.getData().get("content"));
String url = "https://www.klebl.info/cam/" + Objects.requireNonNull(remoteMessage.getData().get("content")).substring(28, 43) + ".jpg";
Log.d("Foto", url);
String f1 = Environment.getExternalStorageDirectory().getPath() + "/Pictures/Haussteuerung/" + Objects.requireNonNull(remoteMessage.getData().get("content")).substring(28, 43) + ".jpg";
String f2 = Environment.getExternalStorageDirectory().getPath() + "/Pictures/Haussteuerung/cam.jpg";
Handler handler = new Handler(Looper.getMainLooper());
handler.post(() -> {
Thread gfgThread = new Thread(() -> {
try {
InputStream in = null;
try {
in = new URL(url).openStream();
Log.d("Foto", "Verbindung zum Server erfolgreich. Download wird durchgeführt.");
} catch (IOException e) {
// Wenn kein Foto gemacht wurde, hat das Foto 0kb, daher 404 error.
Log.d("Foto", "Verbindungsfehler. Foto am Server prüfen.");
}
try {
Files.copy(in, Paths.get(f1), StandardCopyOption.REPLACE_EXISTING);
Log.d("Foto", "Foto 1 Download");
Thread.sleep(200);
Files.copy(Paths.get(f1), Paths.get(f2), StandardCopyOption.REPLACE_EXISTING);
Log.d("Foto", "Foto 2 Download");
Log.d("Foto", "Download und Speichern erfolgreich.");
} catch (IOException e) {
Log.d("Foto", "Download fehlgeschlagen.");
}
} catch (Exception e) {
e.printStackTrace();
Uri uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
if (uri != null) {
OutputStream outputStream = context.getContentResolver().openOutputStream(uri);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
Objects.requireNonNull(outputStream).write(buffer, 0, bytesRead);
}
});
gfgThread.start();
Objects.requireNonNull(outputStream).close();
inputStream.close();
}
} catch (Exception e) {
Log.d("downloadImageToGallery - Firebase", "Downloading camera picture failed");
}
}).start();
}
// MediaScanner starten um das Foto in die Gallery zu bringen
MediaScannerConnection.scanFile(getApplicationContext(), new String[]{f1},
new String[]{"image/jpg"}, null);
MediaScannerConnection.scanFile(getApplicationContext(), new String[]{f2},
new String[]{"image/jpg"}, null);
});
}
public void deleteImageFromMediaStore(Context context, String filename) {
Uri collection = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.Images.Media.DISPLAY_NAME + "=?";
String[] selectionArgs = new String[]{filename};
context.getContentResolver().delete(collection, selection, selectionArgs);
}
public void sendNotification(RemoteMessage remoteMessage) {
@@ -146,30 +126,14 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService {
Intent intent1 = new Intent(this, MainActivity.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
Log.d("GlockeFirebase", Objects.requireNonNull(remoteMessage.getData().get("content")).substring(28, 43));
// intent1.putExtra("Glocke", "Glocke");
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent1.putExtra("Glocke", "Glocke");
intent1.putExtra("Time", Objects.requireNonNull(remoteMessage.getData().get("content")).substring(28, 43));
Log.d("GlockeFirebase", Objects.requireNonNull(remoteMessage.getData().get("content")).substring(28, 43));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
intent1.setIdentifier(Objects.requireNonNull(remoteMessage.getData().get("content")).substring(28, 43));
}
pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0 /* Request code */, intent1, PendingIntent.FLAG_IMMUTABLE);
} else if (Objects.requireNonNull(remoteMessage.getData().get("content")).contains("Sky")) {
NOTIFICATION_CHANNEL_ID = "Sky";
Intent intent2 = new Intent(this, MainActivity.class);
intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent2.putExtra("Sky", "Sky");
pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent2, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
} else if (Objects.requireNonNull(remoteMessage.getData().get("content")).contains("Update")) {
NOTIFICATION_CHANNEL_ID = "Update";
Intent intent3 = new Intent(this, FileDownload.class);
intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent3, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent1, PendingIntent.FLAG_IMMUTABLE);
} else if (Objects.requireNonNull(remoteMessage.getData().get("content")).contains("Waschmaschine")) {
NOTIFICATION_CHANNEL_ID = "Waschmaschine";
@@ -179,11 +143,11 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService {
Intent intent4 = new Intent(this, MainActivity.class);
intent4.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent4.putExtra("Other", remoteMessage.getData().get("content"));
Log.d("OtherFirebase", Objects.requireNonNull(remoteMessage.getData().get("content")));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
intent4.setIdentifier(remoteMessage.getData().get("content"));
}
Log.d("OtherFirebase", Objects.requireNonNull(remoteMessage.getData().get("content")));
pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0 /* Request code */, intent4, PendingIntent.FLAG_IMMUTABLE);
pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent4, PendingIntent.FLAG_IMMUTABLE);
}
String description = "Haussteuerung - " + NOTIFICATION_CHANNEL_ID;
@@ -193,7 +157,6 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService {
channel.setShowBadge(true);
channel.canShowBadge();
channel.enableLights(true);
channel.setLightColor(getResources().getColor(R.color.gradient_blue));
channel.enableVibration(true);
channel.setVibrationPattern(new long[]{100, 200, 300, 400, 500});
@@ -201,7 +164,16 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService {
Random notification_id = new Random();
NotificationCompat.Builder notificationBuilder = null;
Bitmap bitmap = null;
try {
InputStream in = new URL(url).openStream();
bitmap = BitmapFactory.decodeStream(in);
in.close();
} catch (Exception e) {
Log.d("sendNotification - Firebase", "Loading bitmap cam.jpg from MediaStore failed");
}
NotificationCompat.Builder notificationBuilder;
if (Objects.requireNonNull(remoteMessage.getData().get("content")).contains("Es hat gel")) {
notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
.setDefaults(Notification.DEFAULT_ALL)
@@ -210,9 +182,7 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService {
.setContentText(content)
.setAutoCancel(true)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.haus_icon))
.setLights(getResources().getColor(R.color.gradient_blue), 1000, 300)
.setStyle(new NotificationCompat.BigPictureStyle()
.bigPicture(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath() + "/Pictures/Haussteuerung/" + Objects.requireNonNull(remoteMessage.getData().get("content")).substring(28, 43) + ".jpg")))
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(bitmap))
.setSmallIcon(R.drawable.haus_icon);
} else {
notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
@@ -222,13 +192,10 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService {
.setContentText(content)
.setAutoCancel(true)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.haus_icon))
.setLights(getResources().getColor(R.color.gradient_blue), 1000, 300)
.setSmallIcon(R.drawable.haus_icon);
}
Log.d("num", String.valueOf(notification_id.nextInt(1000)));
assert notificationManager != null;
notificationManager.notify(notification_id.nextInt(1000), notificationBuilder.build());
}
}

View File

@@ -1,283 +0,0 @@
package com.haussteuerung;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.NumberPicker;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import java.util.ArrayList;
public class activityChristmas extends AppCompatActivity {
static String power = "OFF";
private String hsbColorMqtt = "";
static ArrayList<String> hsbColorArray;
private Button buttonPower;
private Button buttonColor1, buttonColor2,
buttonColor3, buttonColor4,
buttonColor5,buttonColor6,
buttonColor7, buttonColor8;
private NumberPicker picker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Ändern der Statusbar-Farbe
androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setBackgroundDrawable(AppCompatResources.getDrawable(getApplicationContext(), R.drawable.gradient_titlebar));
setContentView(R.layout.activity_christmas);
setTitle("Haussteuerung - Christmas");
Log.d("HSBColor0", hsbColorArray.get(0));
Log.d("HSBColor1", hsbColorArray.get(1));
Log.d("HSBColor2", hsbColorArray.get(2));
buttonPower = findViewById(R.id.buttonPower);
buttonColor1 = findViewById(R.id.buttonColor1);
buttonColor2 = findViewById(R.id.buttonColor2);
buttonColor3 = findViewById(R.id.buttonColor3);
buttonColor4 = findViewById(R.id.buttonColor4);
buttonColor5 = findViewById(R.id.buttonColor5);
buttonColor6 = findViewById(R.id.buttonColor6);
buttonColor7 = findViewById(R.id.buttonColor7);
buttonColor8 = findViewById(R.id.buttonColor8);
picker = findViewById(R.id.picker);
handleButton();
handleNumberPicker();
}
private void handleButton() {
if (power.equals("ON")) {
buttonPower.setText(R.string.on);
} else if (power.equals("OFF")) {
buttonPower.setText(R.string.off);
}
buttonColor1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setHSBColor("10");
Log.d("HSBColorRed", hsbColorMqtt);
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
});
buttonColor2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setHSBColor("50");
Log.d("HSBColorYellow", hsbColorMqtt);
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
});
buttonColor3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setHSBColor("100");
Log.d("HSBColorGreen", hsbColorMqtt);
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
});
buttonColor4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setHSBColor("150");
Log.d("HSBColorLightBlue", hsbColorMqtt);
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
});
buttonColor5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setHSBColor("200");
Log.d("HSBColorBlue", hsbColorMqtt);
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
});
buttonColor6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setHSBColor("250");
Log.d("HSBColorPurple", hsbColorMqtt);
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
});
buttonColor7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setHSBColor("300");
Log.d("HSBColorWhite", hsbColorMqtt);
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
});
buttonColor8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setHSBColor("350");
Log.d("HSBColorChanging", hsbColorMqtt);
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
});
buttonPower.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String hsbColorMqtt = hsbColorArray.get(0) + "," + hsbColorArray.get(1) + "," + hsbColorArray.get(2);
if (buttonPower.getText().equals("ON")) {
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"OFF\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/POWER", "0");
buttonPower.setText(R.string.off);
} else if (buttonPower.getText().equals("OFF")) {
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"ON\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/POWER", "1");
buttonPower.setText(R.string.on);
}
}
});
}
private void handleNumberPicker() {
String[] values = {"Bright (Steady On)","Gradually (Slow Fade)","Star (Sequential)","Flower (In Waves)",
"Marquee (Chasing / Flash)","Fireworks (Twinkle / Flash)","Meteor","Stream"};
picker.setWrapSelectorWheel(false);
picker.setMinValue(0);
picker.setMaxValue(values.length - 1);
if (Integer.parseInt(hsbColorArray.get(2)) >= 0 && Integer.parseInt(hsbColorArray.get(2)) <= 12) {
picker.setValue(0);
}
if (Integer.parseInt(hsbColorArray.get(2)) >= 13 && Integer.parseInt(hsbColorArray.get(2)) <= 24) {
picker.setValue(1);
}
if (Integer.parseInt(hsbColorArray.get(2)) >= 25 && Integer.parseInt(hsbColorArray.get(2)) <= 37) {
picker.setValue(2);
}
if (Integer.parseInt(hsbColorArray.get(2)) >= 38 && Integer.parseInt(hsbColorArray.get(2)) <= 49) {
picker.setValue(3);
}
if (Integer.parseInt(hsbColorArray.get(2)) >= 50 && Integer.parseInt(hsbColorArray.get(2)) <= 62) {
picker.setValue(4);
}
if (Integer.parseInt(hsbColorArray.get(2)) >= 63 && Integer.parseInt(hsbColorArray.get(2)) <= 74) {
picker.setValue(5);
}
if (Integer.parseInt(hsbColorArray.get(2)) >= 75 && Integer.parseInt(hsbColorArray.get(2)) <= 87) {
picker.setValue(6);
}
if (Integer.parseInt(hsbColorArray.get(2)) >= 88 && Integer.parseInt(hsbColorArray.get(2)) <= 100) {
picker.setValue(7);
}
picker.setDisplayedValues(values);
picker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker numberPicker, int i, int i1) {
if (numberPicker.getValue() == 0) {
String hsbColorMqtt = hsbColorArray.get(0) + ",100,10";
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
if (numberPicker.getValue() == 1) {
String hsbColorMqtt = hsbColorArray.get(0) + ",100,20";
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
if (numberPicker.getValue() == 2) {
String hsbColorMqtt = hsbColorArray.get(0) + ",100,30";
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
if (numberPicker.getValue() == 3) {
String hsbColorMqtt = hsbColorArray.get(0) + ",100,40";
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
if (numberPicker.getValue() == 4) {
String hsbColorMqtt = hsbColorArray.get(0) + ",100,50";
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
if (numberPicker.getValue() == 5) {
String hsbColorMqtt = hsbColorArray.get(0) + ",100,70";
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
if (numberPicker.getValue() == 6) {
String hsbColorMqtt = hsbColorArray.get(0) + ",100,80";
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
if (numberPicker.getValue() == 7) {
String hsbColorMqtt = hsbColorArray.get(0) + ",100,90";
MqttClient.publish("tele/sonoff153/STATE", "{\"POWER\":\"" + buttonPower.getText() +"\",\"HSBColor\":\""+ hsbColorMqtt + "\"}", 2, true);
MqttClient.publish("cmnd/sonoff153/HSBColor", hsbColorMqtt);
}
Log.d("NumberPicker", String.valueOf(numberPicker.getValue()));
}
});
}
private void setHSBColor(String color) {
if (picker.getValue() == 0) {
hsbColorMqtt = color + ",100,10";
}
if (picker.getValue() == 1) {
hsbColorMqtt = color + ",100,20";
}
if (picker.getValue() == 2) {
hsbColorMqtt = color + ",100,30";
}
if (picker.getValue() == 3) {
hsbColorMqtt = color + ",100,40";
}
if (picker.getValue() == 4) {
hsbColorMqtt = color + ",100,50";
}
if (picker.getValue() == 5) {
hsbColorMqtt = color + ",100,70";
}
if (picker.getValue() == 6) {
hsbColorMqtt = color + ",100,80";
}
if (picker.getValue() == 7) {
hsbColorMqtt = color + ",100,90";
}
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
}
}

View File

@@ -3,22 +3,18 @@ package com.haussteuerung;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.ProcessLifecycleOwner;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import com.haussteuerung.helper.Blutdruck;
import com.haussteuerung.helper.Temperatur;
import java.time.LocalDateTime;
import java.time.LocalTime;
@@ -29,25 +25,22 @@ public class activityDoris extends AppCompatActivity {
Button buttonSend, zeitBlutdruck, zeitFiebertemp;
int hourBlutdruck = 0, minuteBlutdruck = 0, hourFiebertemp = 0, minuteFiebertemp = 0;
static String werteBlutdruck = "";
static String wertFiebertemp = "";
TextView textSYS, textDIA, textFiebertemp;
LocalDateTime datetime = LocalDateTime.now();
DateTimeFormatter dateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formattedDate = datetime.format(dateTimeFormat);
public static boolean pausedDoris = true;
Gson gson = new Gson();
String msg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleTracker());
androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setBackgroundDrawable(AppCompatResources.getDrawable(getApplicationContext(), R.color.black));
pausedDoris = false;
setContentView(R.layout.activity_doris);
setTitle("Haussteuerung - Doris");
@@ -63,13 +56,7 @@ public class activityDoris extends AppCompatActivity {
hourBlutdruck = datetime.getHour();
minuteBlutdruck = datetime.getMinute();
zeitBlutdruck.setText(String.format(Locale.getDefault(), "%02d:%02d", datetime.getHour(), datetime.getMinute()));
zeitBlutdruck.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog(zeitBlutdruck);
}
});
zeitBlutdruck.setOnClickListener(v -> timePickerDialog(zeitBlutdruck));
checkBlutdruck.setOnClickListener(view -> {
if (checkBlutdruck.isChecked()) {
@@ -96,13 +83,7 @@ public class activityDoris extends AppCompatActivity {
hourFiebertemp = datetime.getHour();
minuteFiebertemp = datetime.getMinute();
zeitFiebertemp.setText(String.format(Locale.getDefault(), "%02d:%02d", datetime.getHour(), datetime.getMinute()));
zeitFiebertemp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog(zeitFiebertemp);
}
});
zeitFiebertemp.setOnClickListener(v -> timePickerDialog(zeitFiebertemp));
checkFiebertemp.setOnClickListener(view -> {
if (checkFiebertemp.isChecked()) {
@@ -127,9 +108,8 @@ public class activityDoris extends AppCompatActivity {
String minute = Integer.toString(minuteBlutdruck);
String sys = textSYS.getText().toString();
String dia = textDIA.getText().toString();
werteBlutdruck = "{\"DeviceID\":\"" + MainActivity.ID + "\", \"Datum\":" + "\"" + formattedDate + " " + hour + ":" + minute + ":00" + "\"," + "\"SYS\":" + "\"" + sys + "\"," + "\"DIA\":" + "\"" + dia + "\"}";
Log.d("Doris", werteBlutdruck);
MqttClient.publish("cmnd/Haussteuerung/Doris/Blutdruck", werteBlutdruck);
msg = gson.toJson(new Blutdruck(MainActivity.ID, formattedDate + " " + hour + ":" + minute + ":00", sys, dia));
MqttClient.publish("cmnd/Haussteuerung/Doris/Blutdruck", msg);
setBlutdruck = true;
}
@@ -143,9 +123,7 @@ public class activityDoris extends AppCompatActivity {
String fiebertemp = textFiebertemp.getText().toString();
msg = gson.toJson(new Temperatur(MainActivity.ID, formattedDate + " " + hour + ":" + minute + ":00", fiebertemp));
MqttClient.publish("cmnd/Haussteuerung/Doris/Temperatur", msg);
// wertFiebertemp = "{\"DeviceID\":\"" + MainActivity.ID + "\", \"Datum\":" + "\"" + formattedDate + " " + hour + ":" + minute + ":00" + "\"," + "\"Temperatur\": " + "\"" + fiebertemp + "\"}";
Log.d("Doris", msg);
// MqttClient.publish("cmnd/Haussteuerung/Doris/Temperatur", wertFiebertemp);
setFiebertemp = true;
}
if (setBlutdruck || setFiebertemp) {
@@ -158,12 +136,7 @@ public class activityDoris extends AppCompatActivity {
LocalTime localTime = LocalTime.parse(button.getText());
int hour = localTime.getHour();
int minute = localTime.getMinute();
TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
button.setText(String.format(Locale.getDefault(), "%02d:%02d", selectedHour, selectedMinute));
}
};
TimePickerDialog.OnTimeSetListener onTimeSetListener = (timePicker, selectedHour, selectedMinute) -> button.setText(String.format(Locale.getDefault(), "%02d:%02d", selectedHour, selectedMinute));
TimePickerDialog timePickerDialog = new TimePickerDialog(this, onTimeSetListener, hour, minute, true);
timePickerDialog.show();
}
@@ -171,34 +144,16 @@ public class activityDoris extends AppCompatActivity {
@Override
protected void onPause() {
super.onPause();
pausedDoris = true;
}
@Override
protected void onResume() {
super.onResume();
pausedDoris = false;
}
@Override
protected void onStop() {
super.onStop();
pausedDoris = true;
}
}
class Temperatur {
@SerializedName("DeviceID")
private final String deviceId;
@SerializedName("Datum")
private final String datum;
@SerializedName("Temperatur")
private final String temperatur;
public Temperatur(String deviceId, String datum, String temperatur) {
this.deviceId = deviceId;
this.datum = datum;
this.temperatur = temperatur;
}
}

View File

@@ -1,37 +1,38 @@
package com.haussteuerung;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.ProcessLifecycleOwner;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import com.haussteuerung.helper.Licht;
import com.haussteuerung.helper.Rollo;
import java.util.HashMap;
import java.util.Map;
public class activityDorisLicht extends AppCompatActivity implements View.OnClickListener {
// Position 0 = unten
// Position 100 = oben
public static boolean pausedDorisLicht = true;
private final Map<Integer, Rollo> rolloMap = new HashMap<>();
Gson gson = new Gson();
String msg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleTracker());
androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setBackgroundDrawable(AppCompatResources.getDrawable(getApplicationContext(), R.color.black));
pausedDorisLicht = false;
setContentView(R.layout.activity_doris_licht);
setTitle("Haussteuerung - Doris Licht");
@@ -75,179 +76,73 @@ public class activityDorisLicht extends AppCompatActivity implements View.OnClic
buttonRollo13.setOnClickListener(this);
buttonRollo14.setOnClickListener(this);
buttonRollo15.setOnClickListener(this);
initRolloMap(MainActivity.ID);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.buttonDeckenlampe:
msg = gson.toJson(new Licht(MainActivity.ID, "Doris Deckenlampe", "Lamp21"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
// String msg1 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Doris Deckenlampe" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"power" + "\",\"Message\":\"2\"}";
// MqttClient.publish("cmnd/Haussteuerung/Licht", msg1);
break;
int id = v.getId();
String msg;
if (id == R.id.buttonDeckenlampe) {
msg = gson.toJson(new Licht(MainActivity.ID, "Doris Deckenlampe", "Lamp21"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
} else if (id == R.id.buttonStehlampe) {
msg = gson.toJson(new Licht(MainActivity.ID, "Doris Stehlampe", "Lamp22"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
} else if (id == R.id.buttonDeckenlampeBad) {
msg = gson.toJson(new Licht(MainActivity.ID, "Doris Bad Deckenlampe", "Lamp23"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
} else if (id == R.id.buttonWandlampeBad) {
msg = gson.toJson(new Licht(MainActivity.ID, "Doris Bad Wandlampe", "Lamp24"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
}
case R.id.buttonStehlampe:
msg = gson.toJson(new Licht(MainActivity.ID, "Doris Stehlampe", "Lamp22"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
// String msg2 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Doris Stehlampe" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"power" + "\",\"Message\":\"2\"}";
// MqttClient.publish("cmnd/Haussteuerung/Licht", msg2);
break;
case R.id.buttonDeckenlampeBad:
msg = gson.toJson(new Licht(MainActivity.ID, "Doris Bad Deckenlampe", "Lamp23"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
// String msg3 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Doris Bad Deckenlampe" + "\",\"Device\":\"" + "sonoff177" + "\",\"Power\":\"power1" + "\",\"Message\":\"2\"}";
// MqttClient.publish("cmnd/Haussteuerung/Licht", msg3);
break;
case R.id.buttonWandlampeBad:
msg = gson.toJson(new Licht(MainActivity.ID, "Doris Bad Wandlampe", "Lamp24"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
// String msg4 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Doris Bad Wandlampe" + "\",\"Device\":\"" + "sonoff177" + "\",\"Power\":\"power2" + "\",\"Message\":\"2\"}";
// MqttClient.publish("cmnd/Haussteuerung/Licht", msg4);
break;
case R.id.buttonRollo1:
msg = gson.toJson(new Rollo(MainActivity.ID, "Alle Rollo", "Rollo1", 100));
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
// String msg5 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Alle Rollo" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"SHUTTERPOSITION" + "\",\"Message\":\"100\"}";
// MqttClient.publish("cmnd/Haussteuerung/Rollo", msg5);
break;
case R.id.buttonRollo2:
msg = gson.toJson(new Rollo(MainActivity.ID, "Alle Rollo", "Rollo1", 50));
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
// String msg6 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Alle Rollo" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"SHUTTERPOSITION" + "\",\"Message\":\"50\"}";
// MqttClient.publish("cmnd/Haussteuerung/Rollo", msg6);
break;
case R.id.buttonRollo3:
msg = gson.toJson(new Rollo(MainActivity.ID, "Alle Rollo", "Rollo1", 0));
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
// String msg7 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Alle Rollo" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"SHUTTERPOSITION" + "\",\"Message\":\"0\"}";
// MqttClient.publish("cmnd/Haussteuerung/Rollo", msg7);
break;
case R.id.buttonRollo4:
msg = gson.toJson(new Rollo(MainActivity.ID, "Terrasse Rollo", "sonoff171", 100));
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
// String msg8 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Terrasse Rollo" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"SHUTTERPOSITION" + "\",\"Message\":\"100\"}";
// MqttClient.publish("cmnd/Haussteuerung/Rollo", msg8);
break;
case R.id.buttonRollo5:
msg = gson.toJson(new Rollo(MainActivity.ID, "Terrasse Rollo", "sonoff171", 50));
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
// String msg9 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Terrasse Rollo" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"SHUTTERPOSITION" + "\",\"Message\":\"50\"}";
// MqttClient.publish("cmnd/Haussteuerung/Rollo", msg9);
break;
case R.id.buttonRollo6:
msg = gson.toJson(new Rollo(MainActivity.ID, "Terrasse Rollo", "sonoff171", 0));
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
// String msg10 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Terrasse Rollo" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"SHUTTERPOSITION" + "\",\"Message\":\"0\"}";
// MqttClient.publish("cmnd/Haussteuerung/Rollo", msg10);
break;
case R.id.buttonRollo7:
msg = gson.toJson(new Rollo(MainActivity.ID, "Rollo Fenster links", "sonoff172", 100));
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
// String msg11 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Rollo Fenster links" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"SHUTTERPOSITION" + "\",\"Message\":\"100\"}";
// MqttClient.publish("cmnd/Haussteuerung/Rollo", msg11);
break;
case R.id.buttonRollo8:
msg = gson.toJson(new Rollo(MainActivity.ID, "Rollo Fenster links", "sonoff172", 50));
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
// String msg12 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Rollo Fenster links" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"SHUTTERPOSITION" + "\",\"Message\":\"50\"}";
// MqttClient.publish("cmnd/Haussteuerung/Rollo", msg12);
break;
case R.id.buttonRollo9:
msg = gson.toJson(new Rollo(MainActivity.ID, "Rollo Fenster links", "sonoff172", 0));
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
// String msg13 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Rollo Fenster links" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"SHUTTERPOSITION" + "\",\"Message\":\"0\"}";
// MqttClient.publish("cmnd/Haussteuerung/Rollo", msg13);
break;
case R.id.buttonRollo10:
msg = gson.toJson(new Rollo(MainActivity.ID, "Rollo Fenster rechts", "sonoff173", 100));
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
// String msg14 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Rollo Fenster rechts" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"SHUTTERPOSITION" + "\",\"Message\":\"100\"}";
// MqttClient.publish("cmnd/Haussteuerung/Rollo", msg14);
break;
case R.id.buttonRollo11:
msg = gson.toJson(new Rollo(MainActivity.ID, "Rollo Fenster rechts", "sonoff173", 50));
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
// String msg15 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Rollo Fenster rechts" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"SHUTTERPOSITION" + "\",\"Message\":\"50\"}";
// MqttClient.publish("cmnd/Haussteuerung/Rollo", msg15);
break;
case R.id.buttonRollo12:
msg = gson.toJson(new Rollo(MainActivity.ID, "Rollo Fenster rechts", "sonoff173", 0));
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
// String msg16 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Rollo Fenster rechts" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"SHUTTERPOSITION" + "\",\"Message\":\"0\"}";
// MqttClient.publish("cmnd/Haussteuerung/Rollo", msg16);
break;
case R.id.buttonRollo13:
msg = gson.toJson(new Rollo(MainActivity.ID, "Bad Rollo", "sonoff174", 100));
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
// String msg17 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Bad Rollo" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"SHUTTERPOSITION" + "\",\"Message\":\"100\"}";
// MqttClient.publish("cmnd/Haussteuerung/Rollo", msg17);
break;
case R.id.buttonRollo14:
msg = gson.toJson(new Rollo(MainActivity.ID, "Bad Rollo", "sonoff174", 50));
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
// String msg18 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Bad Rollo" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"SHUTTERPOSITION" + "\",\"Message\":\"50\"}";
// MqttClient.publish("cmnd/Haussteuerung/Rollo", msg18);
break;
case R.id.buttonRollo15:
msg = gson.toJson(new Rollo(MainActivity.ID, "Bad Rollo", "sonoff174", 0));
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
// String msg19 = "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Bad Rollo" + "\",\"Device\":\"" + v.getTag().toString() + "\",\"Power\":\"SHUTTERPOSITION" + "\",\"Message\":\"0\"}";
// MqttClient.publish("cmnd/Haussteuerung/Rollo", msg19);
break;
Rollo rollo = rolloMap.get(id);
if (rollo != null) {
msg = gson.toJson(rollo);
MqttClient.publish("cmnd/Haussteuerung/Rollo", msg);
} else {
Log.w("RolloControl", "Unknown button: " + id);
}
}
private void initRolloMap(String androidId) {
rolloMap.put(R.id.buttonRollo1, new Rollo(androidId, "Alle Rollo", "Rollo1", 100));
rolloMap.put(R.id.buttonRollo2, new Rollo(androidId, "Alle Rollo", "Rollo1", 50));
rolloMap.put(R.id.buttonRollo3, new Rollo(androidId, "Alle Rollo", "Rollo1", 0));
rolloMap.put(R.id.buttonRollo4, new Rollo(androidId, "Terrasse Rollo", "sonoff171", 100));
rolloMap.put(R.id.buttonRollo5, new Rollo(androidId, "Terrasse Rollo", "sonoff171", 50));
rolloMap.put(R.id.buttonRollo6, new Rollo(androidId, "Terrasse Rollo", "sonoff171", 0));
rolloMap.put(R.id.buttonRollo7, new Rollo(androidId, "Rollo Fenster links", "sonoff172", 100));
rolloMap.put(R.id.buttonRollo8, new Rollo(androidId, "Rollo Fenster links", "sonoff172", 50));
rolloMap.put(R.id.buttonRollo9, new Rollo(androidId, "Rollo Fenster links", "sonoff172", 0));
rolloMap.put(R.id.buttonRollo10, new Rollo(androidId, "Rollo Fenster rechts", "sonoff173", 100));
rolloMap.put(R.id.buttonRollo11, new Rollo(androidId, "Rollo Fenster rechts", "sonoff173", 50));
rolloMap.put(R.id.buttonRollo12, new Rollo(androidId, "Rollo Fenster rechts", "sonoff173", 0));
rolloMap.put(R.id.buttonRollo13, new Rollo(androidId, "Bad Rollo", "sonoff174", 100));
rolloMap.put(R.id.buttonRollo14, new Rollo(androidId, "Bad Rollo", "sonoff174", 50));
rolloMap.put(R.id.buttonRollo15, new Rollo(androidId, "Bad Rollo", "sonoff174", 0));
}
@Override
protected void onPause() {
super.onPause();
pausedDorisLicht = true;
}
@Override
protected void onResume() {
super.onResume();
pausedDorisLicht = false;
}
@Override
protected void onStop() {
super.onStop();
pausedDorisLicht = true;
}
}
class Rollo {
@SerializedName("DeviceID")
private final String deviceId;
@SerializedName("Name")
private final String name;
@SerializedName("Device")
private final String device;
@SerializedName("Shutterposition")
private final int shutterposition;
public Rollo(String deviceId, String name, String device, int shutterposition) {
this.deviceId = deviceId;
this.name = name;
this.device = device;
this.shutterposition = shutterposition;
}
}

View File

@@ -1,67 +1,55 @@
package com.haussteuerung;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.Button;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.ProcessLifecycleOwner;
import com.google.gson.Gson;
import com.haussteuerung.helper.Licht;
import com.ortiz.touchview.TouchImageView;
import java.io.File;
import java.io.IOException;
public class activityGlocke extends AppCompatActivity {
public static boolean pausedGlocke = true;
Gson gson = new Gson();
String msg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleTracker());
androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setBackgroundDrawable(AppCompatResources.getDrawable(getApplicationContext(), R.color.black));
pausedGlocke = false;
setContentView(R.layout.activity_glocke);
setTitle("Haussteuerung - Glocke");
TouchImageView fotoGlocke = findViewById(R.id.fotoGlocke);
Intent i = getIntent();
File file = new File(Environment.getExternalStorageDirectory().getPath() + "/Pictures/Haussteuerung/cam.jpg");
if (i.getExtras() != null) {
if (i.getExtras() != null && i.hasExtra("TimeFB")) {
file = new File(Environment.getExternalStorageDirectory().getPath() + "/Pictures/Haussteuerung/" + i.getStringExtra("TimeFB") + ".jpg");
Log.d("ZeitGlocke", i.getStringExtra("TimeFB"));
} else {
file = new File(Environment.getExternalStorageDirectory().getPath() + "/Pictures/Haussteuerung/cam.jpg");
}
Bitmap bitmap;
if ((i.getExtras() != null) && (i.hasExtra("TimeFB"))) {
bitmap = loadBitmapFromMediaStore(getApplicationContext(), i.getStringExtra("Time") + ".jpg");
} else {
bitmap = loadBitmapFromMediaStore(getApplicationContext(), "cam.jpg");
}
if(file.exists()){
Bitmap myBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
Log.d("ImageView", file.getAbsolutePath());
fotoGlocke.setImageBitmap(myBitmap);
Log.d("Foto", "ImageView erfolgreich");
} else {
Log.d("Foto", "ImageView fehlgeschlagen");
Toast.makeText(this, "Laden des Fotos fehlgeschlagen", Toast.LENGTH_LONG).show();
if (bitmap != null) {
fotoGlocke.setImageBitmap(bitmap);
}
Button buttonGlockeDoors = findViewById(R.id.buttonGlockeDoors);
@@ -81,21 +69,40 @@ public class activityGlocke extends AppCompatActivity {
});
}
public Bitmap loadBitmapFromMediaStore(Context context, String filename) {
Uri collection = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = new String[]{MediaStore.Images.Media._ID};
String selection = MediaStore.Images.Media.DISPLAY_NAME + "=?";
String[] selectionArgs = new String[]{filename};
Cursor cursor = context.getContentResolver().query(collection, projection, selection, selectionArgs, null);
if (cursor != null && cursor.moveToFirst()) {
int idColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
long id = cursor.getLong(idColumn);
cursor.close();
Uri imageUri = ContentUris.withAppendedId(collection, id);
try {
return BitmapFactory.decodeStream(context.getContentResolver().openInputStream(imageUri));
} catch (IOException e) {
Log.d("loadBitmapFromMediaStore - activityGlocke", "Loading bitmap cam.jpg from MediaStore failed");
}
}
return null;
}
@Override
protected void onPause() {
super.onPause();
pausedGlocke = true;
}
@Override
protected void onResume() {
super.onResume();
pausedGlocke = false;
}
@Override
protected void onStop() {
super.onStop();
pausedGlocke = true;
}
}

View File

@@ -5,19 +5,14 @@ import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.ProcessLifecycleOwner;
import java.util.Timer;
import java.util.TimerTask;
public class activityHaus extends AppCompatActivity {
public static boolean pausedHaus = true;
private TextView tv_Zustand1;
private TextView tv_Zustand2;
private TextView tv_Zustand3;
@@ -43,13 +38,12 @@ public class activityHaus extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleTracker());
androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setBackgroundDrawable(AppCompatResources.getDrawable(getApplicationContext(), R.color.black));
pausedHaus = false;
setContentView(R.layout.activity_haus);
setTitle("Haussteuerung - Hausansicht");
@@ -215,14 +209,12 @@ public class activityHaus extends AppCompatActivity {
@Override
protected void onPause() {
super.onPause();
pausedHaus = true;
myTimer.cancel();
}
@Override
protected void onResume() {
super.onResume();
pausedHaus = false;
TimerTask myTask = new TimerTask() {
public void run() {
myHandler.post(myRunnable); // updateUI method
@@ -234,7 +226,6 @@ public class activityHaus extends AppCompatActivity {
@Override
protected void onStop() {
super.onStop();
pausedHaus = true;
myTimer.cancel();
}
}

View File

@@ -1,35 +1,29 @@
package com.haussteuerung;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.ProcessLifecycleOwner;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.navigation.NavigationBarView;
public class activityLWP extends AppCompatActivity implements NavigationBarView.OnItemSelectedListener {
public static boolean pausedLWP = true;
BottomNavigationView bottomNavigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleTracker());
// Ändern der Statusbar-Farbe
androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setBackgroundDrawable(AppCompatResources.getDrawable(getApplicationContext(), R.drawable.gradient_titlebar));
pausedLWP = false;
setContentView(R.layout.activity_lwp);
setTitle("Haussteuerung - Wärmepumpe");
@@ -64,23 +58,15 @@ public class activityLWP extends AppCompatActivity implements NavigationBarView.
@Override
protected void onPause() {
super.onPause();
pausedLWP = true;
Log.d("LWPActivityPause", "true");
}
@Override
protected void onResume() {
super.onResume();
pausedLWP = false;
Log.d("LWPActivityPause", "false");
}
@Override
protected void onStop() {
super.onStop();
pausedLWP = true;
Log.d("LWPActivityPause", "true");
}
}

View File

@@ -8,19 +8,20 @@ import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.ProcessLifecycleOwner;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import com.haussteuerung.helper.Checkboxen;
import com.haussteuerung.helper.Licht;
import java.util.HashMap;
import java.util.Map;
public class activityLicht extends AppCompatActivity implements View.OnClickListener {
public static boolean pausedLicht = true;
private final Map<Integer, Licht> lichtMap = new HashMap<>();
private CheckBox checkWM1, checkWM2, checkWM3, checkWM4;
public static String nameTom = "";
public static String nameFlo = "";
@@ -36,16 +37,17 @@ public class activityLicht extends AppCompatActivity implements View.OnClickList
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleTracker());
androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setBackgroundDrawable(AppCompatResources.getDrawable(getApplicationContext(), R.color.black));
pausedLicht = false;
setContentView(R.layout.activity_licht);
setTitle("Haussteuerung - Licht");
initLichtMap(MainActivity.ID);
Button buttonLicht1 = findViewById(R.id.buttonLicht1);
Button buttonLicht2 = findViewById(R.id.buttonLicht2);
Button buttonLicht3 = findViewById(R.id.buttonLicht3);
@@ -74,46 +76,42 @@ public class activityLicht extends AppCompatActivity implements View.OnClickList
checkWM1.setChecked(checkedTom);
checkWM1.setOnClickListener(view -> {
if (checkWM1.isChecked()) {
// msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMTom", true));
MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Tom", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"WMTom\"" + ",\"Checkbox\":\"true\"}");
msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMTom", true));
MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Tom", msg);
} else {
// msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMTom", false));
MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Tom", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"WMTom\"" + ",\"Checkbox\":\"false\"}");
msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMTom", false));
MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Tom", msg);
}
// MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Tom", msg);
});
checkWM2.setChecked(checkedFlo);
checkWM2.setOnClickListener(view -> {
if (checkWM2.isChecked()) {
// msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMFlo", true));
MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Flo", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"WMFlo\"" + ",\"Checkbox\":\"true\"}");
msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMFlo", true));
MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Flo", msg);
} else {
// msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMFlo", false));
MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Flo", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"WMFlo\"" + ",\"Checkbox\":\"false\"}");
msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMFlo", false));
MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Flo", msg);
}
// MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Flo", msg);
});
checkWM3.setChecked(checkedStefan);
checkWM3.setOnClickListener(view -> {
if (checkWM3.isChecked()) {
// msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMStefan", true));
MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Stefan", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"WMStefan\"" + ",\"Checkbox\":\"true\"}");
msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMStefan", true));
MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Stefan", msg);
} else {
// msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMStefan", false));
MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Stefan", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"WMStefan\"" + ",\"Checkbox\":\"false\"}");
msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMStefan", false));
MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Stefan", msg);
}
// MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Stefan", msg);
});
checkWM4.setChecked(checkedGlocke);
checkWM4.setOnClickListener(view -> {
if (checkWM4.isChecked()) {
// msg = gson.toJson(new Checkboxen(MainActivity.ID, "Glocke", true));
MqttClient.publish("cmnd/Haussteuerung/Glocke", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Glocke\"" + ",\"Checkbox\":\"true\"}");
msg = gson.toJson(new Checkboxen(MainActivity.ID, "Glocke", true));
MqttClient.publish("cmnd/Haussteuerung/Glocke", msg);
} else {
// msg = gson.toJson(new Checkboxen(MainActivity.ID, "Glocke", false));
MqttClient.publish("cmnd/Haussteuerung/Glocke", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Glocke\"" + ",\"Checkbox\":\"false\"}");
msg = gson.toJson(new Checkboxen(MainActivity.ID, "Glocke", false));
MqttClient.publish("cmnd/Haussteuerung/Glocke", msg);
}
// MqttClient.publish("cmnd/Haussteuerung/Glocke", msg);
});
buttonLicht1.setOnClickListener(this);
@@ -141,125 +139,62 @@ public class activityLicht extends AppCompatActivity implements View.OnClickList
@SuppressLint("NonConstantResourceId")
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.buttonLicht1:
msg = gson.toJson(new Licht(MainActivity.ID, "Licht Tom Zimmer", "Lamp01"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht2:
msg = gson.toJson(new Licht(MainActivity.ID, "Licht Wohnzimmer", "Lamp02"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht3:
msg = gson.toJson(new Licht(MainActivity.ID, "Stehlampe WZ", "Lamp03"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht4:
msg = gson.toJson(new Licht(MainActivity.ID, "Licht Esszimmer", "Lamp04"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht5:
msg = gson.toJson(new Licht(MainActivity.ID, "Licht Küche", "Lamp05"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht6:
msg = gson.toJson(new Licht(MainActivity.ID, "Licht Gang", "Lamp06"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht7:
msg = gson.toJson(new Licht(MainActivity.ID, "Licht Stiegenhaus", "Lamp07"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht8:
msg = gson.toJson(new Licht(MainActivity.ID, "Licht Obergeschoss", "Lamp08"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht9:
msg = gson.toJson(new Licht(MainActivity.ID, "Licht Schlafzimmer", "Lamp09"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht10:
msg = gson.toJson(new Licht(MainActivity.ID, "Gartentor", "Lamp10"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht11:
msg = gson.toJson(new Licht(MainActivity.ID, "Eingangstuer", "Lamp11"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht12:
msg = gson.toJson(new Licht(MainActivity.ID, "Garagentor", "Lamp12"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht13:
msg = gson.toJson(new Licht(MainActivity.ID, "Nachtkastl Tom", "Lamp13"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht14:
msg = gson.toJson(new Licht(MainActivity.ID, "Licht Obergeschoss", "Lamp14"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht15:
msg = gson.toJson(new Licht(MainActivity.ID, "Licht Obergeschoss", "Lamp15"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht16:
msg = gson.toJson(new Licht(MainActivity.ID, "vuDuoSZ", "Lamp16"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht17:
msg = gson.toJson(new Licht(MainActivity.ID, "Zirkulationspumpe", "Lamp17"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht18:
msg = gson.toJson(new Licht(MainActivity.ID, "PCFlo", "Lamp18"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
case R.id.buttonLicht19:
Intent iSky = new Intent(activityLicht.this, activitySky.class);
startActivity(iSky);
break;
case R.id.buttonLicht20:
msg = gson.toJson(new Licht(MainActivity.ID, "Licht Flo", "Lamp20"));
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
break;
int id = v.getId();
String msg;
Licht licht = lichtMap.get(id);
if (licht != null) {
msg = gson.toJson(licht);
MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
} else {
Log.w("LichtControl", "Unknown button: " + id);
}
if (id == R.id.buttonLicht19) {
Intent iSky = new Intent(activityLicht.this, activitySky.class);
startActivity(iSky);
}
}
private void initLichtMap(String androidId) {
lichtMap.put(R.id.buttonLicht1, new Licht(androidId, "Licht Tom Zimmer", "Lamp01"));
lichtMap.put(R.id.buttonLicht2, new Licht(androidId, "Licht Wohnzimmer", "Lamp02"));
lichtMap.put(R.id.buttonLicht3, new Licht(androidId, "Stehlampe WZ", "Lamp03"));
lichtMap.put(R.id.buttonLicht4, new Licht(androidId, "Licht Esszimmer", "Lamp04"));
lichtMap.put(R.id.buttonLicht5, new Licht(androidId, "Licht Küche", "Lamp05"));
lichtMap.put(R.id.buttonLicht6, new Licht(androidId, "Licht Gang", "Lamp06"));
lichtMap.put(R.id.buttonLicht7, new Licht(androidId, "Licht Stiegenhaus", "Lamp07"));
lichtMap.put(R.id.buttonLicht8, new Licht(androidId, "Licht Obergeschoss", "Lamp08"));
lichtMap.put(R.id.buttonLicht9, new Licht(androidId, "Licht Schlafzimmer", "Lamp09"));
lichtMap.put(R.id.buttonLicht10, new Licht(androidId, "Gartentor", "Lamp10"));
lichtMap.put(R.id.buttonLicht11, new Licht(androidId, "Eingangstuer", "Lamp11"));
lichtMap.put(R.id.buttonLicht12, new Licht(androidId, "Garagentor", "Lamp12"));
lichtMap.put(R.id.buttonLicht13, new Licht(androidId, "Nachtkastl Tom", "Lamp13"));
lichtMap.put(R.id.buttonLicht14, new Licht(androidId, "vuDuoWZ", "Lamp14"));
lichtMap.put(R.id.buttonLicht15, new Licht(androidId, "Glocke", "Lamp15"));
lichtMap.put(R.id.buttonLicht16, new Licht(androidId, "vuDuoSZ", "Lamp16"));
lichtMap.put(R.id.buttonLicht17, new Licht(androidId, "Zirkulationspumpe", "Lamp17"));
lichtMap.put(R.id.buttonLicht18, new Licht(androidId, "PC Flo", "Lamp18"));
lichtMap.put(R.id.buttonLicht20, new Licht(androidId, "Nachtkastl Flo", "Lamp20"));
}
@Override
protected void onPause() {
super.onPause();
pausedLicht = true;
Log.d("LichtActivityPause", "true");
}
@Override
protected void onResume() {
super.onResume();
pausedLicht = false;
Log.d("LichtActivityPause", "false");
}
@Override
protected void onStop() {
super.onStop();
pausedLicht = true;
Log.d("LichtActivityPause", "true");
}
}
class Checkboxen {
@SerializedName("DeviceID")
private final String deviceId;
@SerializedName("Name")
private final String name;
@SerializedName("Checkbox")
private final boolean checkbox;
public Checkboxen(String deviceId, String name, boolean checkbox) {
this.deviceId = deviceId;
this.name = name;
this.checkbox = checkbox;
}
}

View File

@@ -4,19 +4,14 @@ import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.ProcessLifecycleOwner;
import java.util.Timer;
import java.util.TimerTask;
public class activityLog extends AppCompatActivity {
public static boolean pausedLog = true;
private TextView textLog;
final Handler myHandler = new Handler();
final Timer myTimer = new Timer();
@@ -24,13 +19,12 @@ public class activityLog extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleTracker());
androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setBackgroundDrawable(AppCompatResources.getDrawable(getApplicationContext(), R.color.black));
pausedLog = false;
setContentView(R.layout.activity_log);
setTitle("Haussteuerung - Log");
@@ -47,14 +41,12 @@ public class activityLog extends AppCompatActivity {
@Override
protected void onPause() {
super.onPause();
pausedLog = true;
myTimer.cancel();
}
@Override
protected void onResume() {
super.onResume();
pausedLog = false;
TimerTask myTask = new TimerTask() {
public void run() {
myHandler.post(myRunnable); // updateUI method
@@ -66,7 +58,6 @@ public class activityLog extends AppCompatActivity {
@Override
protected void onStop() {
super.onStop();
pausedLog = true;
myTimer.cancel();
}
}

View File

@@ -17,6 +17,7 @@ import androidx.core.view.WindowInsetsCompat;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import com.haussteuerung.helper.Sky;
import java.time.LocalTime;
import java.util.Locale;
@@ -25,8 +26,8 @@ public class activitySky extends AppCompatActivity {
private Button buttonSkyZeit;
private CheckBox checkSky;
public static String zeitSky = "", zeitSkyMqtt = "";
public static boolean isChecked = false, pausedSky = true;
public static String zeitSkyMqtt = "";
public static boolean isChecked = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -36,8 +37,6 @@ public class activitySky extends AppCompatActivity {
assert actionBar != null;
actionBar.setBackgroundDrawable(AppCompatResources.getDrawable(getApplicationContext(), R.color.black));
pausedSky = false;
setContentView(R.layout.activity_sky);
setTitle("Haussteuerung - Sky");
@@ -48,27 +47,19 @@ public class activitySky extends AppCompatActivity {
buttonSkyZeit.setText(zeitSkyMqtt);
checkSky.setChecked(isChecked);
buttonSkyZeit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog(buttonSkyZeit);
}
});
buttonSkyZeit.setOnClickListener(v -> timePickerDialog(buttonSkyZeit));
buttonSkySend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Gson gson = new Gson();
String msg;
if (checkSky.isChecked()) {
msg = gson.toJson(new Sky(MainActivity.ID, buttonSkyZeit.getText().toString(), true));
MqttClient.publish("cmnd/Haussteuerung/Sky", msg);
} else if (!checkSky.isChecked()) {
msg = gson.toJson(new Sky(MainActivity.ID, buttonSkyZeit.getText().toString(), false));
MqttClient.publish("cmnd/Haussteuerung/Sky", msg);
}
finish();
buttonSkySend.setOnClickListener(view -> {
Gson gson = new Gson();
String msg;
if (checkSky.isChecked()) {
msg = gson.toJson(new Sky(MainActivity.ID, buttonSkyZeit.getText().toString(), true));
MqttClient.publish("cmnd/Haussteuerung/Sky", msg);
} else if (!checkSky.isChecked()) {
msg = gson.toJson(new Sky(MainActivity.ID, buttonSkyZeit.getText().toString(), false));
MqttClient.publish("cmnd/Haussteuerung/Sky", msg);
}
finish();
});
Log.d("ActivitySky","Created");
@@ -76,12 +67,7 @@ public class activitySky extends AppCompatActivity {
LocalTime localTime = LocalTime.parse(button.getText());
int hour = localTime.getHour();
int minute = localTime.getMinute();
TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
button.setText(String.format(Locale.getDefault(), "%02d:%02d", selectedHour, selectedMinute));
}
};
TimePickerDialog.OnTimeSetListener onTimeSetListener = (timePicker, selectedHour, selectedMinute) -> button.setText(String.format(Locale.getDefault(), "%02d:%02d", selectedHour, selectedMinute));
TimePickerDialog timePickerDialog = new TimePickerDialog(this, onTimeSetListener, hour, minute, true);
timePickerDialog.show();
}
@@ -89,39 +75,18 @@ public class activitySky extends AppCompatActivity {
@Override
protected void onPause() {
super.onPause();
pausedSky = true;
// Log.d("TimerSkyActivity", "Canceled");
Log.d("ActivitySky","Paused");
}
@Override
protected void onResume() {
super.onResume();
pausedSky = false;
buttonSkyZeit.setText(zeitSkyMqtt);
checkSky.setChecked(isChecked);
Log.d("ActivitySky","Resumed");
}
@Override
protected void onStop() {
super.onStop();
pausedSky = true;
Log.d("ActivitySky","Stopped");
}
}
class Sky {
@SerializedName("DeviceID")
private final String deviceId;
@SerializedName("Datum")
private final String datum;
@SerializedName("CheckboxSky")
private final boolean checkboxSky;
public Sky(String deviceId, String datum, boolean checkboxSky) {
this.deviceId = deviceId;
this.datum = datum;
this.checkboxSky = checkboxSky;
}
}

View File

@@ -0,0 +1,21 @@
package com.haussteuerung.helper;
import com.google.gson.annotations.SerializedName;
public class Blutdruck {
@SerializedName("DeviceID")
private final String deviceId;
@SerializedName("Datum")
private final String datum;
@SerializedName("SYS")
private final String sys;
@SerializedName("DIA")
private final String dia;
public Blutdruck(String deviceId, String datum, String sys, String dia) {
this.deviceId = deviceId;
this.datum = datum;
this.sys = sys;
this.dia = dia;
}
}

View File

@@ -0,0 +1,18 @@
package com.haussteuerung.helper;
import com.google.gson.annotations.SerializedName;
public class Checkboxen {
@SerializedName("DeviceID")
private final String deviceId;
@SerializedName("Name")
private final String name;
@SerializedName("Checkbox")
private final boolean checkbox;
public Checkboxen(String deviceId, String name, boolean checkbox) {
this.deviceId = deviceId;
this.name = name;
this.checkbox = checkbox;
}
}

View File

@@ -1,4 +1,4 @@
package com.haussteuerung;
package com.haussteuerung.helper;
import com.google.gson.annotations.SerializedName;

View File

@@ -0,0 +1,21 @@
package com.haussteuerung.helper;
import com.google.gson.annotations.SerializedName;
public class Rollo {
@SerializedName("DeviceID")
private final String deviceId;
@SerializedName("Name")
private final String name;
@SerializedName("Device")
private final String device;
@SerializedName("Shutterposition")
private final int shutterposition;
public Rollo(String deviceId, String name, String device, int shutterposition) {
this.deviceId = deviceId;
this.name = name;
this.device = device;
this.shutterposition = shutterposition;
}
}

View File

@@ -0,0 +1,18 @@
package com.haussteuerung.helper;
import com.google.gson.annotations.SerializedName;
public class Sky {
@SerializedName("DeviceID")
private final String deviceId;
@SerializedName("Datum")
private final String datum;
@SerializedName("CheckboxSky")
private final boolean checkboxSky;
public Sky(String deviceId, String datum, boolean checkboxSky) {
this.deviceId = deviceId;
this.datum = datum;
this.checkboxSky = checkboxSky;
}
}

View File

@@ -0,0 +1,19 @@
package com.haussteuerung.helper;
import com.google.gson.annotations.SerializedName;
public class Temperatur {
@SerializedName("DeviceID")
private final String deviceId;
@SerializedName("Datum")
private final String datum;
@SerializedName("Temperatur")
private final String temperatur;
public Temperatur(String deviceId, String datum, String temperatur) {
this.deviceId = deviceId;
this.datum = datum;
this.temperatur = temperatur;
}
}

View File

@@ -1,24 +0,0 @@
package com.haussteuerung;
import android.os.Bundle;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
public class noConnection extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_no_connection);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activityChristmas), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
}
}

View File

@@ -1,134 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activityChristmas"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
tools:context=".activityChristmas">
<NumberPicker
android:id="@+id/picker"
android:layout_width="0dp"
android:layout_height="350dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:theme="@style/NumberPickerChristmas"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/buttonColor1"
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="5dp"
android:background="@drawable/christmas_red"
app:layout_constraintEnd_toStartOf="@+id/buttonColor2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/picker"
tools:ignore="SpeakableTextPresentCheck" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/buttonColor2"
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="5dp"
android:background="@drawable/christmas_yellow"
app:layout_constraintEnd_toStartOf="@+id/buttonColor3"
app:layout_constraintStart_toEndOf="@+id/buttonColor1"
app:layout_constraintTop_toBottomOf="@+id/picker"
tools:ignore="SpeakableTextPresentCheck" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/buttonColor3"
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="5dp"
android:background="@drawable/christmas_green"
app:layout_constraintEnd_toStartOf="@+id/buttonColor4"
app:layout_constraintStart_toEndOf="@+id/buttonColor2"
app:layout_constraintTop_toBottomOf="@+id/picker"
tools:ignore="SpeakableTextPresentCheck" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/buttonColor4"
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:background="@drawable/christmas_lightblue"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/buttonColor3"
app:layout_constraintTop_toBottomOf="@+id/picker"
tools:ignore="SpeakableTextPresentCheck" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/buttonColor5"
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="5dp"
android:background="@drawable/christmas_blue"
app:layout_constraintEnd_toStartOf="@+id/buttonColor6"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/buttonColor1"
tools:ignore="SpeakableTextPresentCheck" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/buttonColor6"
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="5dp"
android:background="@drawable/christmas_purple"
app:layout_constraintEnd_toStartOf="@+id/buttonColor7"
app:layout_constraintStart_toEndOf="@+id/buttonColor5"
app:layout_constraintTop_toBottomOf="@+id/buttonColor2"
tools:ignore="SpeakableTextPresentCheck" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/buttonColor7"
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="5dp"
android:background="@drawable/christmas_white"
app:layout_constraintEnd_toStartOf="@+id/buttonColor8"
app:layout_constraintStart_toEndOf="@+id/buttonColor6"
app:layout_constraintTop_toBottomOf="@+id/buttonColor3"
tools:ignore="SpeakableTextPresentCheck" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/buttonColor8"
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:background="@drawable/christmas_changing"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/buttonColor7"
app:layout_constraintTop_toBottomOf="@+id/buttonColor4" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/buttonPower"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginStart="50dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="50dp"
android:text="@string/ein_aus"
android:background="@drawable/button_text_color"
android:textColor="@color/white"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/buttonColor5" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,53 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fileDownload"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
tools:context=".FileDownload">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button_Install"
android:layout_width="0dp"
android:layout_height="100dp"
android:layout_marginStart="80dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="80dp"
android:background="@drawable/alarm_true"
android:text="@string/install"
android:textColor="#FFFFFF"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/txt_changelog"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="30dp"
android:layout_marginEnd="30dp"
android:layout_marginBottom="290dp"
android:textColor="#FFFFFF"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txt_status" />
<TextView
android:id="@+id/txt_status"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="20dp"
android:textColor="#FFFFFF"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button_Install" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,58 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activityChristmas"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".noConnection">
<ImageView
android:id="@+id/imageView"
android:layout_width="0dp"
android:layout_height="266dp"
android:layout_marginStart="72dp"
android:layout_marginTop="40dp"
android:layout_marginEnd="73dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/warning" />
<TextView
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_marginStart="80dp"
android:layout_marginTop="36dp"
android:layout_marginEnd="80dp"
android:text="Keine Verbindung zum MQTT-Broker!"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView" />
<TextView
android:id="@+id/textView5"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_marginStart="70dp"
android:layout_marginTop="13dp"
android:layout_marginEnd="70dp"
android:text="Bitte Systemadministrator kontaktieren!"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
<Button
android:id="@+id/buttonNoConn"
android:layout_width="0dp"
android:layout_height="75dp"
android:layout_marginStart="119dp"
android:layout_marginTop="25dp"
android:layout_marginEnd="120dp"
android:text="Problem melden"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView5" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -101,7 +101,7 @@
<string name="boiler_nunten">Boiler\nUnten</string>
<string name="_38">38°</string>
<string name="_44">44°</string>
<string name="version">Version 25.531.1</string>
<string name="version">Version 25.1006.1</string>
<string name="frueh">Früh</string>
<string name="plus2h">+2h</string>
<string name="nacht">Nacht</string>

View File

@@ -15,6 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
android.enableJetifier=true
# Enables namespacing of each library's R class so that its R class includes only the
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library

View File

@@ -1,18 +1,19 @@
[versions]
agp = "8.3.2"
junit = "4.13.2"
junitVersion = "1.1.5"
espressoCore = "3.5.1"
appcompat = "1.6.1"
junitVersion = "1.3.0"
espressoCore = "3.7.0"
appcompat = "1.7.1"
material = "1.11.0"
pahoMqttv3 = "1.2.5"
pahoMqttService = "1.1.1"
googleServices = "4.4.1"
firebaseMessaging = "23.4.1"
googleServices = "4.4.3"
firebaseMessaging = "25.0.1"
touchImageView = "3.2.0"
gson = "2.10.1"
activity = "1.9.0"
constraintlayout = "2.1.4"
constraintlayout = "2.2.1"
lifecycleRuntime = "2.9.4"
[libraries]
junit = { group = "junit", name = "junit", version.ref = "junit" }
@@ -28,6 +29,8 @@ touchImageView = { group = "com.github.MikeOrtiz", name = "TouchImageView", vers
gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" }
activity = { group = "androidx.activity", name = "activity", version.ref = "activity" }
constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
lifecycle-process = { module = "androidx.lifecycle:lifecycle-process", version.ref = "lifecycleRuntime" }
lifecycle-runtime = { module = "androidx.lifecycle:lifecycle-runtime", version.ref = "lifecycleRuntime" }
[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }