7 Commits

21 changed files with 192 additions and 242 deletions

2
.idea/compiler.xml generated
View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="CompilerConfiguration"> <component name="CompilerConfiguration">
<bytecodeTargetLevel target="17" /> <bytecodeTargetLevel target="21" />
</component> </component>
</project> </project>

2
.idea/gradle.xml generated
View File

@@ -4,6 +4,7 @@
<component name="GradleSettings"> <component name="GradleSettings">
<option name="linkedExternalProjectsSettings"> <option name="linkedExternalProjectsSettings">
<GradleProjectSettings> <GradleProjectSettings>
<option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" /> <option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules"> <option name="modules">
@@ -12,7 +13,6 @@
<option value="$PROJECT_DIR$/app" /> <option value="$PROJECT_DIR$/app" />
</set> </set>
</option> </option>
<option name="resolveExternalAnnotations" value="false" />
</GradleProjectSettings> </GradleProjectSettings>
</option> </option>
</component> </component>

2
.idea/misc.xml generated
View File

@@ -1,6 +1,6 @@
<project version="4"> <project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" /> <output url="file://$PROJECT_DIR$/build/classes" />
</component> </component>
<component name="ProjectType"> <component name="ProjectType">

View File

@@ -1,3 +1,5 @@
# Haussteuerung-Android # Haussteuerung-Android
This is the Android App for Haussteuerung. This is the Android App for Haussteuerung.
<img src="./assets/Haussteuerung.jpg" width="400" height="850">

View File

@@ -12,7 +12,7 @@ android {
minSdk 26 minSdk 26
targetSdk 34 targetSdk 34
versionCode 1 versionCode 1
versionName "25.1006.1" versionName "25.1018.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }

Binary file not shown.

View File

@@ -12,7 +12,7 @@
"filters": [], "filters": [],
"attributes": [], "attributes": [],
"versionCode": 1, "versionCode": 1,
"versionName": "25.1002.1", "versionName": "25.1018.1",
"outputFile": "app-release.apk" "outputFile": "app-release.apk"
} }
], ],

View File

@@ -111,11 +111,7 @@ public class FragmentHeizkoerper extends Fragment {
} }
picker.setDisplayedValues(values); picker.setDisplayedValues(values);
builder.setPositiveButton(android.R.string.ok, (dialog, id) -> { builder.setPositiveButton(android.R.string.ok, (dialog, id) -> {
if (values[picker.getValue()].equals("on") || values[picker.getValue()].equals("off")) { button.setText(values[picker.getValue()]);
button.setText(values[picker.getValue()]);
} else {
button.setText(values[picker.getValue()]);
}
Log.d("SollTempGrossraum", "Solltemp" + roomSollTemp + ", Button " + button.getText()); Log.d("SollTempGrossraum", "Solltemp" + roomSollTemp + ", Button " + button.getText());
if (!roomSollTemp.contentEquals(button.getText())) { if (!roomSollTemp.contentEquals(button.getText())) {
@@ -144,7 +140,7 @@ public class FragmentHeizkoerper extends Fragment {
btn_HK_Bad = view.findViewById(R.id.btn_HK_Bad); btn_HK_Bad = view.findViewById(R.id.btn_HK_Bad);
btn_HK_Florian = view.findViewById(R.id.btn_HK_Florian); btn_HK_Florian = view.findViewById(R.id.btn_HK_Florian);
btn_HK_Stefan = view.findViewById(R.id.btn_HK_Stefan); btn_HK_Stefan = view.findViewById(R.id.btn_HK_Stefan);
btn_HK_Dachboden = view.findViewById(R.id.btn_HK_Dachboden); // btn_HK_Dachboden = view.findViewById(R.id.btn_HK_Dachboden);
Log.d("SollTempGrossraum", sollTempHKGrossraum); Log.d("SollTempGrossraum", sollTempHKGrossraum);
Log.d("SollTempDoris", sollTempHKDoris); Log.d("SollTempDoris", sollTempHKDoris);
@@ -167,7 +163,7 @@ public class FragmentHeizkoerper extends Fragment {
btn_HK_Bad.setText(sollTempHKBad); btn_HK_Bad.setText(sollTempHKBad);
btn_HK_Florian.setText(sollTempHKFlorian); btn_HK_Florian.setText(sollTempHKFlorian);
btn_HK_Stefan.setText(sollTempHKStefan); btn_HK_Stefan.setText(sollTempHKStefan);
btn_HK_Dachboden.setText(sollTempHKDachboden); // btn_HK_Dachboden.setText(sollTempHKDachboden);
btn_HK_Grossraum.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Grossraum, sollTempHKGrossraum, "Grossraum", switch_HK_Grossraum)); btn_HK_Grossraum.setOnClickListener(v -> showNumberPickerDialog(btn_HK_Grossraum, sollTempHKGrossraum, "Grossraum", switch_HK_Grossraum));
@@ -188,7 +184,7 @@ public class FragmentHeizkoerper extends Fragment {
btn_HK_Stefan.setOnClickListener(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(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() { private void handleTextViews() {
@@ -214,7 +210,7 @@ public class FragmentHeizkoerper extends Fragment {
switch_HK_Bad = view.findViewById(R.id.switch_HK_Bad); switch_HK_Bad = view.findViewById(R.id.switch_HK_Bad);
switch_HK_Florian = view.findViewById(R.id.switch_HK_Florian); switch_HK_Florian = view.findViewById(R.id.switch_HK_Florian);
switch_HK_Stefan = view.findViewById(R.id.switch_HK_Stefan); switch_HK_Stefan = view.findViewById(R.id.switch_HK_Stefan);
switch_HK_Dachboden = view.findViewById(R.id.switch_HK_Dachboden); // switch_HK_Dachboden = view.findViewById(R.id.switch_HK_Dachboden);
if (modeHKGrossraum.equals("manual")) { if (modeHKGrossraum.equals("manual")) {
switch_HK_Grossraum.setChecked(false); switch_HK_Grossraum.setChecked(false);
@@ -288,13 +284,13 @@ public class FragmentHeizkoerper extends Fragment {
switch_HK_Stefan.setText(R.string.auto); switch_HK_Stefan.setText(R.string.auto);
} }
if (modeHKDachboden.equals("manual")) { // if (modeHKDachboden.equals("manual")) {
switch_HK_Dachboden.setChecked(false); // switch_HK_Dachboden.setChecked(false);
switch_HK_Dachboden.setText(R.string.man); // switch_HK_Dachboden.setText(R.string.man);
} else { // } else {
switch_HK_Dachboden.setChecked(true); // switch_HK_Dachboden.setChecked(true);
switch_HK_Dachboden.setText(R.string.auto); // switch_HK_Dachboden.setText(R.string.auto);
} // }
switch_HK_Grossraum.setOnClickListener(v -> { switch_HK_Grossraum.setOnClickListener(v -> {
if (switch_HK_Grossraum.isChecked()) { if (switch_HK_Grossraum.isChecked()) {
@@ -404,17 +400,17 @@ public class FragmentHeizkoerper extends Fragment {
} }
}); });
switch_HK_Dachboden.setOnClickListener(v -> { // switch_HK_Dachboden.setOnClickListener(v -> {
if (switch_HK_Dachboden.isChecked()) { // if (switch_HK_Dachboden.isChecked()) {
Log.d("Mode" + modeHKDachboden, "Mode auto"); // Log.d("Mode" + modeHKDachboden, "Mode auto");
switch_HK_Dachboden.setText(R.string.auto); // switch_HK_Dachboden.setText(R.string.auto);
MqttClient.publish("fhem/Heizung/MAX_Dachboden/set/mode", "auto", 2, false); // MqttClient.publish("fhem/Heizung/MAX_Dachboden/set/mode", "auto", 2, false);
} else if (!switch_HK_Dachboden.isChecked()) { // } else if (!switch_HK_Dachboden.isChecked()) {
Log.d("Mode" + modeHKDachboden, "Mode manual"); // Log.d("Mode" + modeHKDachboden, "Mode manual");
switch_HK_Dachboden.setText(R.string.man); // switch_HK_Dachboden.setText(R.string.man);
MqttClient.publish("fhem/Heizung/MAX_Dachboden/set/mode", "manual", 2, false); // MqttClient.publish("fhem/Heizung/MAX_Dachboden/set/mode", "manual", 2, false);
} // }
}); // });
} }
private void setTextColor(TextView tv, String temp) { private void setTextColor(TextView tv, String temp) {

View File

@@ -70,10 +70,8 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
ID = "haussteuerung-android-" + Build.MODEL + "-" + androidId; ID = "haussteuerung-android-" + Build.MODEL + "-" + androidId;
Log.d("ID", ID); Log.d("ID", ID);
int permissionState = 0; int permissionState;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { permissionState = ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS);
permissionState = ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS);
}
// If the permission is not granted, request it. // If the permission is not granted, request it.
if (permissionState == PackageManager.PERMISSION_DENIED) { if (permissionState == PackageManager.PERMISSION_DENIED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.POST_NOTIFICATIONS}, 1); ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.POST_NOTIFICATIONS}, 1);

View File

@@ -124,7 +124,7 @@ public class MqttClient {
try { try {
client.connect(mqttConnectOptions); client.connect(mqttConnectOptions);
subscribe("stat/Haussteuerung/#"); subscribe("stat/Haussteuerung/#");
subscribe("fhem/temp/#"); // subscribe("fhem/temp/#");
subscribe("fhem/Heizung/#"); subscribe("fhem/Heizung/#");
subscribe("tele/sonoff153/#"); subscribe("tele/sonoff153/#");
subscribe("growatt/#"); subscribe("growatt/#");
@@ -226,11 +226,11 @@ public class MqttClient {
} }
if (topic.equals("fhem/temp/Temp_Boiler_oben")) { if (topic.equals("stat/Haussteuerung/Temperatur/Temp_Boiler_oben")) {
FragmentWW.tempBoilerOben = message.toString(); FragmentWW.tempBoilerOben = message.toString();
} }
if (topic.equals("fhem/temp/Temp_Boiler_unten")) { if (topic.equals("stat/Haussteuerung/Temperatur/Temp_Boiler_unten")) {
FragmentWW.tempBoilerUnten = message.toString(); FragmentWW.tempBoilerUnten = message.toString();
} }
@@ -243,7 +243,7 @@ public class MqttClient {
FragmentHeizkoerper.sollTempHKGrossraum = message.toString(); FragmentHeizkoerper.sollTempHKGrossraum = message.toString();
} }
if (topic.equals("fhem/temp/Temp_Grossraum")) { if (topic.equals("stat/Haussteuerung/Temperatur/Temp_Wohnzimmer")) {
FragmentHeizkoerper.istTempHKGrossraum = message.toString(); FragmentHeizkoerper.istTempHKGrossraum = message.toString();
} }
@@ -256,7 +256,7 @@ public class MqttClient {
FragmentHeizkoerper.sollTempHKDoris = message.toString(); FragmentHeizkoerper.sollTempHKDoris = message.toString();
} }
if (topic.equals("fhem/temp/Temp_Doris")) { if (topic.equals("stat/Haussteuerung/Temperatur/Temp_Doris")) {
FragmentHeizkoerper.istTempHKDoris = message.toString(); FragmentHeizkoerper.istTempHKDoris = message.toString();
} }
@@ -269,7 +269,7 @@ public class MqttClient {
FragmentHeizkoerper.sollTempHKDorisBad = message.toString(); FragmentHeizkoerper.sollTempHKDorisBad = message.toString();
} }
if (topic.equals("fhem/temp/Temp_DorisBad")) { if (topic.equals("stat/Haussteuerung/Temperatur/Temp_Doris_Bad")) {
FragmentHeizkoerper.istTempHKDorisBad = message.toString(); FragmentHeizkoerper.istTempHKDorisBad = message.toString();
} }
@@ -282,7 +282,7 @@ public class MqttClient {
FragmentHeizkoerper.sollTempHKArbeitszimmer = message.toString(); FragmentHeizkoerper.sollTempHKArbeitszimmer = message.toString();
} }
if (topic.equals("fhem/temp/Temp_Arbeitszimmer")) { if (topic.equals("stat/Haussteuerung/Temperatur/Temp_Arbeitszimmer")) {
FragmentHeizkoerper.istTempHKArbeitszimmer = message.toString(); FragmentHeizkoerper.istTempHKArbeitszimmer = message.toString();
} }
@@ -321,21 +321,20 @@ public class MqttClient {
FragmentHeizkoerper.sollTempHKBad = message.toString(); FragmentHeizkoerper.sollTempHKBad = message.toString();
} }
if (topic.equals("fhem/temp/Temp_Bad")) { if (topic.equals("stat/Haussteuerung/Temperatur/Temp_Bad")) {
FragmentHeizkoerper.istTempHKBad = message.toString(); FragmentHeizkoerper.istTempHKBad = message.toString();
} }
// Florian // Florian
if (topic.equals("fhem/Heizung/MAX_Florian/Mode")) { if (topic.equals("fhem/Heizung/MAX_Florian/Mode")) {
FragmentHeizkoerper.modeHKFlorian = message.toString(); FragmentHeizkoerper.modeHKFlorian = message.toString();
} }
if (topic.equals("fhem/Heizung/MAX_Florian/Solltemperatur")) { if (topic.equals("fhem/Heizung/MAX_Florian/Solltemperatur")) {
FragmentHeizkoerper.sollTempHKFlorian = message.toString(); FragmentHeizkoerper.sollTempHKFlorian = message.toString();
} }
if (topic.equals("fhem/temp/Temp_Flo")) { if (topic.equals("stat/Haussteuerung/Temperatur/Temp_Florian")) {
FragmentHeizkoerper.istTempHKFlorian = message.toString(); FragmentHeizkoerper.istTempHKFlorian = message.toString();
} }
@@ -349,7 +348,7 @@ public class MqttClient {
Log.d("SollTempStefan", message.toString()); Log.d("SollTempStefan", message.toString());
} }
if (topic.equals("fhem/temp/Temp_Stefan")) { if (topic.equals("stat/Haussteuerung/Temperatur/Temp_Stefan")) {
FragmentHeizkoerper.istTempHKStefan = message.toString(); FragmentHeizkoerper.istTempHKStefan = message.toString();
Log.d("IstTempStefan", message.toString()); Log.d("IstTempStefan", message.toString());
} }
@@ -363,7 +362,7 @@ public class MqttClient {
FragmentHeizkoerper.sollTempHKDachboden = message.toString(); FragmentHeizkoerper.sollTempHKDachboden = message.toString();
} }
if (topic.equals("fhem/temp/Temp_Dachboden")) { if (topic.equals("stat/Haussteuerung/Temperatur/Temp_Dachboden")) {
FragmentHeizkoerper.istTempHKDachboden = message.toString(); FragmentHeizkoerper.istTempHKDachboden = message.toString();
} }
} }

View File

@@ -5,6 +5,7 @@ import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.widget.Button; import android.widget.Button;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.RadioButton;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
@@ -13,7 +14,6 @@ import androidx.appcompat.content.res.AppCompatResources;
import androidx.lifecycle.ProcessLifecycleOwner; import androidx.lifecycle.ProcessLifecycleOwner;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.haussteuerung.helper.Blutdruck;
import com.haussteuerung.helper.Temperatur; import com.haussteuerung.helper.Temperatur;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -22,15 +22,8 @@ import java.time.format.DateTimeFormatter;
import java.util.Locale; import java.util.Locale;
public class activityDoris extends AppCompatActivity { public class activityDoris extends AppCompatActivity {
Button buttonSend, zeitBlutdruck, zeitFiebertemp;
int hourBlutdruck = 0, minuteBlutdruck = 0, hourFiebertemp = 0, minuteFiebertemp = 0;
static String werteBlutdruck = "";
TextView textSYS, textDIA, textFiebertemp;
LocalDateTime datetime = LocalDateTime.now();
DateTimeFormatter dateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formattedDate = datetime.format(dateTimeFormat);
Gson gson = new Gson();
String msg;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@@ -44,44 +37,49 @@ public class activityDoris extends AppCompatActivity {
setContentView(R.layout.activity_doris); setContentView(R.layout.activity_doris);
setTitle("Haussteuerung - Doris"); setTitle("Haussteuerung - Doris");
buttonSend = findViewById(R.id.buttonSend); LocalDateTime datetime = LocalDateTime.now();
DateTimeFormatter dateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// Blutdruck --------------------------------------- // Tablette + Essen -------------------------------
zeitBlutdruck = findViewById(R.id.zeitBlutdruck); Button buttonTablette = findViewById(R.id.buttonTablette);
CheckBox checkBlutdruck = findViewById(R.id.checkBlutdruck); Button buttonSendEssen = findViewById(R.id.buttonSendEssen);
textSYS = findViewById(R.id.textSYS); RadioButton doris_fruehstueck = findViewById(R.id.doris_fruehstueck);
textDIA = findViewById(R.id.textDIA); RadioButton doris_mittagessen = findViewById(R.id.doris_mittagessen);
TextView tv_SYS = findViewById(R.id.tvSYS); RadioButton doris_abendessen = findViewById(R.id.doris_abendessen);
TextView tv_DIA = findViewById(R.id.tvDIA); RadioButton doris_snack = findViewById(R.id.doris_snack);
hourBlutdruck = datetime.getHour();
minuteBlutdruck = datetime.getMinute();
zeitBlutdruck.setText(String.format(Locale.getDefault(), "%02d:%02d", datetime.getHour(), datetime.getMinute()));
zeitBlutdruck.setOnClickListener(v -> timePickerDialog(zeitBlutdruck));
checkBlutdruck.setOnClickListener(view -> { buttonTablette.setOnClickListener(view -> {
if (checkBlutdruck.isChecked()) { MqttClient.publish("cmnd/Haussteuerung/Doris/Tabletten", "Tablette");
zeitBlutdruck.setEnabled(true); Toast.makeText(activityDoris.this, "Tablette genommen. Gespeichert!", Toast.LENGTH_LONG).show();
tv_SYS.setEnabled(true); });
tv_DIA.setEnabled(true);
textSYS.setEnabled(true); buttonSendEssen.setOnClickListener(view -> {
textDIA.setEnabled(true); if (doris_fruehstueck.isChecked()) {
MqttClient.publish("cmnd/Haussteuerung/Doris/Tabletten", "Frühstück");
Toast.makeText(activityDoris.this, "Frühstück. Gespeichert!", Toast.LENGTH_LONG).show();
} else if (doris_mittagessen.isChecked()) {
MqttClient.publish("cmnd/Haussteuerung/Doris/Tabletten", "Mittagessen");
Toast.makeText(activityDoris.this, "Mittagessen. Gespeichert!", Toast.LENGTH_LONG).show();
} else if (doris_abendessen.isChecked()) {
MqttClient.publish("cmnd/Haussteuerung/Doris/Tabletten", "Abendessen");
Toast.makeText(activityDoris.this, "Abendessen. Gespeichert!", Toast.LENGTH_LONG).show();
} else if (doris_snack.isChecked()) {
MqttClient.publish("cmnd/Haussteuerung/Doris/Tabletten", "Snack");
Toast.makeText(activityDoris.this, "Snack. Gespeichert!", Toast.LENGTH_LONG).show();
} else { } else {
zeitBlutdruck.setEnabled(false); Toast.makeText(activityDoris.this, "Bitte eine Mahlzeit auswählen.", Toast.LENGTH_LONG).show();
tv_SYS.setEnabled(false);
tv_DIA.setEnabled(false);
textSYS.setEnabled(false);
textDIA.setEnabled(false);
} }
}); });
// Fiebertemperatur -------------------------------- // Fiebertemperatur --------------------------------
zeitFiebertemp = findViewById(R.id.zeitFiebertemp); Button zeitFiebertemp = findViewById(R.id.zeitFiebertemp);
CheckBox checkFiebertemp = findViewById(R.id.checkFiebertemp); CheckBox checkFiebertemp = findViewById(R.id.checkFiebertemp);
TextView tvFiebertemp = findViewById(R.id.tvFiebertemp); TextView tvFiebertemp = findViewById(R.id.tvFiebertemp);
textFiebertemp = findViewById(R.id.textFiebertemp); TextView textFiebertemp = findViewById(R.id.textFiebertemp);
hourFiebertemp = datetime.getHour();
minuteFiebertemp = datetime.getMinute(); int hourFiebertemp = datetime.getHour();
int minuteFiebertemp = datetime.getMinute();
zeitFiebertemp.setText(String.format(Locale.getDefault(), "%02d:%02d", datetime.getHour(), datetime.getMinute())); zeitFiebertemp.setText(String.format(Locale.getDefault(), "%02d:%02d", datetime.getHour(), datetime.getMinute()));
zeitFiebertemp.setOnClickListener(v -> timePickerDialog(zeitFiebertemp)); zeitFiebertemp.setOnClickListener(v -> timePickerDialog(zeitFiebertemp));
@@ -98,21 +96,8 @@ public class activityDoris extends AppCompatActivity {
}); });
// Send-Button ------------------------------------- // Send-Button -------------------------------------
Button buttonSend = findViewById(R.id.buttonSend);
buttonSend.setOnClickListener(view -> { buttonSend.setOnClickListener(view -> {
boolean setBlutdruck = false;
if (checkBlutdruck.isChecked() && (textSYS.getText().length() == 0 || textDIA.getText().length() == 0)) {
Toast.makeText(activityDoris.this, "Bitte alle Blutdruck-Werte ausfüllen!", Toast.LENGTH_LONG).show();
} else if (checkBlutdruck.isChecked() && (textSYS.getText().length() > 0 || textDIA.getText().length() > 0)) {
String hour = Integer.toString(hourBlutdruck);
String minute = Integer.toString(minuteBlutdruck);
String sys = textSYS.getText().toString();
String dia = textDIA.getText().toString();
msg = gson.toJson(new Blutdruck(MainActivity.ID, formattedDate + " " + hour + ":" + minute + ":00", sys, dia));
MqttClient.publish("cmnd/Haussteuerung/Doris/Blutdruck", msg);
setBlutdruck = true;
}
boolean setFiebertemp = false; boolean setFiebertemp = false;
if (checkFiebertemp.isChecked() && (textFiebertemp.getText().length() == 0)) { if (checkFiebertemp.isChecked() && (textFiebertemp.getText().length() == 0)) {
Toast.makeText(activityDoris.this, "Bitte einen Temperaturwert eingeben!", Toast.LENGTH_LONG).show(); Toast.makeText(activityDoris.this, "Bitte einen Temperaturwert eingeben!", Toast.LENGTH_LONG).show();
@@ -121,12 +106,15 @@ public class activityDoris extends AppCompatActivity {
String hour = Integer.toString(hourFiebertemp); String hour = Integer.toString(hourFiebertemp);
String minute = Integer.toString(minuteFiebertemp); String minute = Integer.toString(minuteFiebertemp);
String fiebertemp = textFiebertemp.getText().toString(); String fiebertemp = textFiebertemp.getText().toString();
msg = gson.toJson(new Temperatur(MainActivity.ID, formattedDate + " " + hour + ":" + minute + ":00", fiebertemp));
Gson gson = new Gson();
String msg = gson.toJson(new Temperatur(MainActivity.ID, formattedDate + " " + hour + ":" + minute + ":00", fiebertemp));
MqttClient.publish("cmnd/Haussteuerung/Doris/Temperatur", msg); MqttClient.publish("cmnd/Haussteuerung/Doris/Temperatur", msg);
Log.d("Doris", msg);
setFiebertemp = true; setFiebertemp = true;
} }
if (setBlutdruck || setFiebertemp) { if (setFiebertemp) {
finish(); finish();
} }
}); });

View File

@@ -43,7 +43,7 @@ public class activityGlocke extends AppCompatActivity {
Intent i = getIntent(); Intent i = getIntent();
Bitmap bitmap; Bitmap bitmap;
if ((i.getExtras() != null) && (i.hasExtra("TimeFB"))) { if ((i.getExtras() != null) && (i.hasExtra("TimeFB"))) {
bitmap = loadBitmapFromMediaStore(getApplicationContext(), i.getStringExtra("Time") + ".jpg"); bitmap = loadBitmapFromMediaStore(getApplicationContext(), i.getStringExtra("TimeFB") + ".jpg");
} else { } else {
bitmap = loadBitmapFromMediaStore(getApplicationContext(), "cam.jpg"); bitmap = loadBitmapFromMediaStore(getApplicationContext(), "cam.jpg");
} }

View File

@@ -1,21 +0,0 @@
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

@@ -23,105 +23,87 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="match_parent">
<CheckBox <RadioGroup
android:id="@+id/checkBlutdruck" android:id="@+id/radiogroupEssen"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="90dp" android:layout_height="195dp"
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:layout_marginTop="10dp" android:layout_marginTop="7dp"
android:text="@string/blutdruck" android:text="@string/blutdruck"
android:textColor="@color/black" android:textColor="@color/black"
android:textSize="23sp" android:textSize="23sp"
app:layout_constraintEnd_toStartOf="@+id/zeitBlutdruck" app:layout_constraintEnd_toStartOf="@+id/buttonTablette"
app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent">
<RadioButton
android:id="@+id/doris_fruehstueck"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="@string/fruehstueck"
android:textSize="20sp" />
<RadioButton
android:id="@+id/doris_mittagessen"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="0dp"
android:text="@string/mittagessen"
android:textSize="20sp" />
<RadioButton
android:id="@+id/doris_abendessen"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="0dp"
android:text="@string/abendessen"
android:textSize="20sp" />
<RadioButton
android:id="@+id/doris_snack"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="0dp"
android:text="@string/snack"
android:textSize="20sp" />
</RadioGroup>
<androidx.appcompat.widget.AppCompatButton <androidx.appcompat.widget.AppCompatButton
android:id="@+id/zeitBlutdruck" android:id="@+id/buttonTablette"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="90dp" android:layout_height="80dp"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_marginEnd="20dp" android:layout_marginEnd="20dp"
android:background="@drawable/button_ww" android:background="@drawable/button_text_color"
android:enabled="false" android:enabled="true"
android:text="Tablette"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="30sp" android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/checkBlutdruck" app:layout_constraintStart_toEndOf="@+id/radiogroupEssen"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:ignore="DuplicateSpeakableTextCheck,SpeakableTextPresentCheck" /> tools:ignore="DuplicateSpeakableTextCheck,SpeakableTextPresentCheck" />
<TextView <androidx.appcompat.widget.AppCompatButton
android:id="@+id/tvSYS" android:id="@+id/buttonSendEssen"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="35dp"
android:enabled="false"
android:gravity="center"
android:text="@string/sys"
android:textColor="@color/black"
android:textSize="28sp"
app:layout_constraintEnd_toStartOf="@+id/textSYS"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/checkBlutdruck" />
<EditText
android:id="@+id/textSYS"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="80dp" android:layout_height="80dp"
android:layout_marginTop="25dp"
android:autofillHints="120"
android:backgroundTint="@color/dark_grey"
android:ems="10"
android:enabled="false"
android:hint="@string/_120"
android:inputType="phone"
android:textColor="@color/black"
android:textColorHint="@color/dark_grey"
android:textSize="30sp"
android:visibility="visible"
app:layout_constraintEnd_toStartOf="@+id/tvDIA"
app:layout_constraintStart_toEndOf="@+id/tvSYS"
app:layout_constraintTop_toBottomOf="@+id/checkBlutdruck"
tools:ignore="TextContrastCheck,DuplicateSpeakableTextCheck" />
<TextView
android:id="@+id/tvDIA"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="35dp"
android:enabled="false"
android:gravity="center"
android:text="@string/dia"
android:textColor="@color/black"
android:textSize="28sp"
app:layout_constraintEnd_toStartOf="@+id/textDIA"
app:layout_constraintStart_toEndOf="@+id/textSYS"
app:layout_constraintTop_toBottomOf="@+id/checkBlutdruck" />
<EditText
android:id="@+id/textDIA"
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_marginTop="25dp"
android:layout_marginEnd="20dp" android:layout_marginEnd="20dp"
android:autofillHints="80" android:background="@drawable/button_text_color"
android:backgroundTint="@color/dark_grey" android:enabled="true"
android:ems="10" android:textColor="@color/white"
android:enabled="false" android:text="@string/absenden"
android:hint="@string/_80" android:textSize="20sp"
android:inputType="phone" app:layout_constraintBottom_toBottomOf="parent"
android:textColor="@color/black"
android:textColorHint="@color/dark_grey"
android:textSize="30sp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tvDIA" app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintTop_toBottomOf="@+id/zeitBlutdruck" app:layout_constraintStart_toEndOf="@+id/radiogroupEssen"
tools:ignore="TextContrastCheck" /> app:layout_constraintTop_toBottomOf="@+id/buttonTablette"
tools:ignore="DuplicateSpeakableTextCheck,SpeakableTextPresentCheck" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>

View File

@@ -871,42 +871,44 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_HK_Dachboden" /> app:layout_constraintTop_toBottomOf="@id/tv_HK_Dachboden" />
<androidx.appcompat.widget.SwitchCompat <!-- <androidx.appcompat.widget.SwitchCompat-->
android:id="@+id/switch_HK_Dachboden" <!-- android:id="@+id/switch_HK_Dachboden"-->
android:layout_width="0dp" <!-- android:layout_width="0dp"-->
android:layout_height="50dp" <!-- android:layout_height="50dp"-->
android:layout_marginTop="35dp" <!-- android:layout_marginTop="35dp"-->
android:layout_marginEnd="10dp" <!-- android:layout_marginEnd="10dp"-->
android:gravity="center|end" <!-- android:gravity="center|end"-->
android:paddingTop="5dp" <!-- android:paddingTop="5dp"-->
android:paddingStart="0dp" <!-- android:paddingStart="0dp"-->
android:paddingEnd="12dp" <!-- android:paddingEnd="12dp"-->
android:text="@string/man" <!-- android:enabled="false"-->
android:theme="@style/Switch.TrackTint" <!-- android:text="@string/man"-->
android:textColor="@color/black" <!-- android:theme="@style/Switch.TrackTint"-->
android:textSize="16sp" <!-- android:textColor="@color/black"-->
app:layout_constraintEnd_toStartOf="@+id/btn_HK_Dachboden" <!-- android:textSize="16sp"-->
app:layout_constraintStart_toEndOf="@id/tv_temp_Dachboden" <!-- app:layout_constraintEnd_toStartOf="@+id/btn_HK_Dachboden"-->
app:layout_constraintTop_toTopOf="parent" <!-- app:layout_constraintStart_toEndOf="@id/tv_temp_Dachboden"-->
app:showText="false" /> <!-- app:layout_constraintTop_toTopOf="parent"-->
<!-- app:showText="false" />-->
<androidx.appcompat.widget.AppCompatButton <!-- <androidx.appcompat.widget.AppCompatButton-->
android:id="@+id/btn_HK_Dachboden" <!-- android:id="@+id/btn_HK_Dachboden"-->
android:layout_width="0dp" <!-- android:layout_width="0dp"-->
android:layout_height="78dp" <!-- android:layout_height="78dp"-->
android:layout_marginStart="0dp" <!-- android:layout_marginStart="0dp"-->
android:layout_marginTop="4dp" <!-- android:layout_marginTop="4dp"-->
android:layout_marginEnd="5dp" <!-- android:layout_marginEnd="5dp"-->
android:background="@drawable/button_text_color" <!-- android:background="@drawable/button_text_color"-->
android:tag="Lamp1" <!-- android:tag="Lamp1"-->
android:text="@string/temp_tv" <!-- android:text="@string/temp_tv"-->
android:textAllCaps="false" <!-- android:enabled="false"-->
android:textColor="#FFFFFF" <!-- android:textAllCaps="false"-->
android:textSize="24sp" <!-- android:textColor="#FFFFFF"-->
app:layout_constraintEnd_toEndOf="parent" <!-- android:textSize="24sp"-->
app:layout_constraintStart_toEndOf="@+id/switch_HK_Dachboden" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintTop_toTopOf="parent" <!-- app:layout_constraintStart_toEndOf="@+id/switch_HK_Dachboden"-->
tools:ignore="TextContrastCheck" /> <!-- app:layout_constraintTop_toTopOf="parent"-->
<!-- tools:ignore="TextContrastCheck" />-->
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -101,7 +101,7 @@
<string name="boiler_nunten">Boiler\nUnten</string> <string name="boiler_nunten">Boiler\nUnten</string>
<string name="_38">38°</string> <string name="_38">38°</string>
<string name="_44">44°</string> <string name="_44">44°</string>
<string name="version">Version 25.1006.1</string> <string name="version">Version 25.1011.1</string>
<string name="frueh">Früh</string> <string name="frueh">Früh</string>
<string name="plus2h">+2h</string> <string name="plus2h">+2h</string>
<string name="nacht">Nacht</string> <string name="nacht">Nacht</string>
@@ -148,4 +148,8 @@
<string name="growatt_ein">Growatt ein.</string> <string name="growatt_ein">Growatt ein.</string>
<string name="growatt_aus">Growatt aus.</string> <string name="growatt_aus">Growatt aus.</string>
<string name="pc_flo">PC Flo</string> <string name="pc_flo">PC Flo</string>
<string name="fruehstueck">Frühstück</string>
<string name="mittagessen">Mittagessen</string>
<string name="abendessen">Abendessen</string>
<string name="snack">Snack</string>
</resources> </resources>

BIN
assets/Haussteuerung.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

@@ -1,5 +1,5 @@
[versions] [versions]
agp = "8.3.2" agp = "8.13.0"
junit = "4.13.2" junit = "4.13.2"
junitVersion = "1.3.0" junitVersion = "1.3.0"
espressoCore = "3.7.0" espressoCore = "3.7.0"

View File

@@ -1,6 +1,6 @@
#Fri Apr 19 12:54:48 CEST 2024 #Fri Apr 19 12:54:48 CEST 2024
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists