Last active
April 24, 2024 19:11
-
-
Save TransFlash/9e62871de7f51957d23a6af2c4deac16 to your computer and use it in GitHub Desktop.
24.04.2024 lauffähige Version mit einem Kanal
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.wb.poolsteuerung; | |
import androidx.appcompat.app.AppCompatActivity; | |
import android.content.Intent; | |
import android.content.SharedPreferences; | |
import android.graphics.Color; | |
import android.os.AsyncTask; | |
import android.os.CountDownTimer; | |
import android.os.Handler; | |
import android.util.Log; | |
import android.view.Menu; | |
import android.view.MenuItem; | |
import android.os.Bundle; | |
import android.view.View; | |
import android.widget.Button; | |
import android.widget.TextView; | |
import android.widget.Toast; | |
import org.json.JSONObject; | |
import java.io.BufferedReader; | |
import java.io.InputStreamReader; | |
import java.net.HttpURLConnection; | |
import java.net.URL; | |
public class MainActivity extends AppCompatActivity { | |
boolean Umwaelzpumpe_Relais_Ein; | |
boolean Verzoegerungszeit_abgelaufen; | |
boolean Freigabe_Waermepumpe; | |
private String IP_Adresse_Umwaelzpumpe; | |
private String IP_Adresse_Waermepumpe; | |
private static final String HTTP = "http://"; | |
private static final String Shelly_plus_1pm_Status = "/rpc/Shelly.GetStatus"; | |
private static final String Shelly_plus_1pm_Ein = "/relay/0?turn=on"; | |
private static final String Shelly_plus_1pm_Aus = "/relay/0?turn=off"; | |
private static final String Shelly_plus_1pm_Ein_Aus = "/relay/0?turn="; | |
private TextView ipAdresseUmwaelzpumpe_TV; | |
private TextView UmwaelzpumpeEin_TV; | |
private TextView UmwaelzpumpeSpannung_TV; | |
private TextView UmwaelzpumpeStrom_TV; | |
private TextView UmwaelzpumpeRelaisTemperatur_TV; | |
private TextView seconds_remaining_to_start_Waermepumpe_TV; | |
private TextView Verzoegerungszeit_Waermepumpe_Ein_TV; | |
Button Umwaelzpumpe_Button; | |
// Handler für wiederholten Aufruf der Methode Waermepumpe_Status() | |
private Handler handler_Umwaelzpumpe_Status = new Handler(); | |
private int delay_Umwaelzpumpe_Status = 10000; // 10 Sekunden in Millisekunden | |
public int seconds_remaining_to_start_Waermepumpe; | |
public long Verzoegerungszeit_Waermepumpe_Ein = 5000; // nachdem die Umwälzpumpe n Sekunden läuft die Wärmepumpe starten | |
// Start Shared Preferences öffnen und Werte Datei PoolSteuerungDaten auslesen | |
@Override | |
protected void onResume() { | |
super.onResume(); | |
//Laden der abgespeicherten Parameter bei Aufruf der MainActivity | |
SharedPreferences sharedPreferences = getSharedPreferences("PoolSteuerungDaten", MODE_PRIVATE); | |
IP_Adresse_Umwaelzpumpe = sharedPreferences.getString("IP_Adresse_Umwaelzpumpe", ""); | |
// Ende Shared Preferences öffnen und Werte Datei PoolSteuerungDaten auslesen | |
// Log-Eintrag hinzufügen | |
Log.d("MainActivity", "IP-Adresse aus Shared Preferences: " + IP_Adresse_Umwaelzpumpe); | |
// Start Anzeigen der Daten aus PoolSteuerungDaten | |
ipAdresseUmwaelzpumpe_TV.setText("IP-Adresse Umwälzpumpe: " + (IP_Adresse_Umwaelzpumpe)); | |
// Ende anzeigen der Daten aus PoolSteuerungDaten | |
// Aufruf Methode für die Abfrage der Shelly-Daten-Wärmepumpe | |
Waermepumpe_Status(); | |
// Start zyklische Abfrage nur wenn Umwaelzpumpe_Relais_Ein true ist | |
if (Umwaelzpumpe_Relais_Ein) { | |
startRepeatingTask(); | |
} | |
// Aufruf handler_Umwälzpumpe_Status, Abfrage Status Umwälzpumpe nach Einschalten Umwälzpumpe | |
//startRepeatingTask(); | |
Verzoegerungszeit_Waermepumpe_Ein_TV.setText("Verzögerungszeit Wärmepumpe Ein: " + Verzoegerungszeit_Waermepumpe_Ein / 1000 + " Sek"); | |
//if (Freigabe_Waermepumpe == true) { | |
seconds_remaining_to_start_Waermepumpe_TV.setTextColor(Color.GREEN); | |
seconds_remaining_to_start_Waermepumpe_TV.setText("Freigabe Wärmepumpe: JA"); | |
//} | |
} | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
// Zeige den Zurück-Pfeil in der ActionBar an | |
getSupportActionBar().setDisplayHomeAsUpEnabled(true); | |
Umwaelzpumpe_Button = findViewById(R.id.buttonUmwaelzpumpeEin); | |
ipAdresseUmwaelzpumpe_TV = findViewById(R.id.ipAdresseUmwaelzpumpe_TV); | |
UmwaelzpumpeEin_TV = findViewById(R.id.UmwaelzpumpeEin_TV); | |
UmwaelzpumpeSpannung_TV = findViewById(R.id.UmwaelzpumpeSpannung_TV); | |
UmwaelzpumpeStrom_TV = findViewById(R.id.UmwaelzpumpeStrom_TV); | |
UmwaelzpumpeRelaisTemperatur_TV = findViewById(R.id.UmwaelzpumpeRelaisTemperatur_TV); | |
seconds_remaining_to_start_Waermepumpe_TV = findViewById(R.id.seconds_remaining_to_start_Waermepumpe_TV); | |
Verzoegerungszeit_Waermepumpe_Ein_TV = findViewById(R.id.Verzoegerungszeit_Waermepumpe_Ein_TV); | |
// Start Button Umwälzpumpe Ein/Aus | |
Umwaelzpumpe_Button.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View v) { | |
if (Umwaelzpumpe_Button.getText().toString().equals("Umwälzpumpe Einschalten")) { | |
Umwaelzpumpe_Button.setText("Umwälzpumpe Ausschalten"); | |
Umwaelzpumpe_Button.setBackground(getResources().getDrawable(R.drawable.button_rounded_green)); | |
toggleUmwaelzpumpe(); | |
// Start the CountDownTimer | |
countDownTimer.start(); | |
} else { | |
Umwaelzpumpe_Button.setText("Umwälzpumpe Einschalten"); | |
Umwaelzpumpe_Button.setBackground(getResources().getDrawable(R.drawable.button_rounded_gray)); | |
toggleUmwaelzpumpe(); | |
countDownTimer.cancel(); | |
} | |
// Aufruf Methode für die Abfrage der Shelly-Daten-Wärmepumpe | |
Waermepumpe_Status(); | |
} | |
}); // Ende Button Umwälzpumpe Ein/Aus | |
} // Ende onCreate | |
// Start Icon in der Toolbar Programm Ende | |
@Override | |
public boolean onCreateOptionsMenu(Menu menu) { | |
getMenuInflater().inflate(R.menu.menu_main, menu); | |
return true; | |
} // Ende Icon in der Toolbar Programm Ende | |
// Start Menu (drei Punkte) | |
@Override | |
public boolean onOptionsItemSelected(MenuItem item) { | |
int id = item.getItemId(); | |
if (id == R.id.action_back) { | |
// Hier kannst du die Aktion für den Zurück-Pfeil behandeln | |
onBackPressed(); // Beispiel: Gehe zur vorherigen Aktivität | |
return true; | |
} | |
if (id == R.id.action_einstellungen) { | |
// Hier kannst du die Aktion für die Einstellungen behandeln | |
Intent intent = new Intent(this, EinstellungenActivity.class); | |
startActivity(intent); | |
return true; | |
} | |
if (id == R.id.action_info) { | |
// Hier kannst du die Aktion für die Einstellungen behandeln | |
Intent intent = new Intent(this, InfoActivity.class); | |
startActivity(intent); | |
return true; | |
} | |
return super.onOptionsItemSelected(item); | |
} // Ende Menu (drei Punkte) | |
// Start Abfrage Wärmepumpe Status | |
private void Waermepumpe_Status() { | |
// Hier fügst du den Code für die Abfrage der Shelly-Daten ein | |
//String currentIpAddress = HTTP + IP_Adresse_Umwaelzpumpe + Shelly_plus_1pm_Status; | |
new FetchShellyData().execute(); // starte die Asynchrone Task mit der aktuellen Adresse | |
//new FetchShellyData().execute(); // Starte die Asynchrone Task | |
} // Ende Abfrage Wärmepumpe Status | |
// Start Abfrage Status Shelly's | |
public class FetchShellyData extends AsyncTask<Void, Void, String> { | |
private static final String TAG = "FetchShellyData"; | |
//private static final String URL_STRING = "http://192.168.178.46/rpc/Shelly.GetStatus"; | |
private String URL_STRING = HTTP + IP_Adresse_Umwaelzpumpe + Shelly_plus_1pm_Status; | |
@Override | |
protected String doInBackground(Void... voids) { | |
try { | |
URL url = new URL(URL_STRING); | |
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); | |
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); | |
StringBuilder stringBuilder = new StringBuilder(); | |
String line; | |
while ((line = reader.readLine()) != null) { | |
stringBuilder.append(line).append("\n"); | |
} | |
reader.close(); | |
return stringBuilder.toString(); | |
} catch (Exception e) { | |
Log.e(TAG, "Error in doInBackground: " + e.getMessage()); | |
e.printStackTrace(); // Hinzugefügt: Zeigen Sie die Fehlermeldung im Log an | |
return null; | |
} | |
} | |
@Override | |
protected void onPostExecute(String result) { | |
Log.d(TAG, "onPostExecute called"); | |
super.onPostExecute(result); | |
if (result != null) { | |
try { | |
JSONObject jsonResult = new JSONObject(result); | |
// Auslesen der Werte aus der JSON-Datei | |
JSONObject switchData = jsonResult.getJSONObject("switch:0"); | |
String output = switchData.getString("output"); | |
Umwaelzpumpe_Relais_Ein = Boolean.parseBoolean(output); | |
String voltage = switchData.getString("voltage"); | |
String current = switchData.getString("current"); | |
String temperatureC = switchData.getJSONObject("temperature").getString("tC"); | |
UmwaelzpumpeEin_TV.setText("Umwälzpumpe Relais: " + (output.equals("true") ? "Ein" : "Aus")); | |
UmwaelzpumpeSpannung_TV.setText("Umwälzpumpe Spannung: " + voltage + " V"); | |
UmwaelzpumpeStrom_TV.setText("Umwälzpumpe Strom: " + current + " A"); | |
UmwaelzpumpeRelaisTemperatur_TV.setText("Umwälzpumpe Relais-Temperatur: " + temperatureC + " °C"); | |
// Loggen der Werte | |
Log.d(TAG, "Output: " + output); | |
Log.d(TAG, "Voltage: " + voltage); | |
Log.d(TAG, "Current: " + current); | |
Log.d(TAG, "Temperature (°C): " + temperatureC); | |
/* | |
// Hier die Überprüfung und Aktualisierung des Buttons | |
if (output.equals("true")) { | |
Umwaelzpumpe_Button.setText("Umwälzpumpe Ausschalten"); | |
Umwaelzpumpe_Button.setBackground(getResources().getDrawable(R.drawable.button_rounded_green)); | |
} else { | |
Umwaelzpumpe_Button.setText("Umwälzpumpe Einschalten"); | |
Umwaelzpumpe_Button.setBackground(getResources().getDrawable(R.drawable.button_rounded_gray)); | |
} | |
*/ | |
// Hier die Überprüfung und Aktualisierung des Buttons | |
if (Umwaelzpumpe_Relais_Ein) { | |
Umwaelzpumpe_Button.setText("Umwälzpumpe Ausschalten"); | |
Umwaelzpumpe_Button.setBackground(getResources().getDrawable(R.drawable.button_rounded_green)); | |
//seconds_remaining_to_start_Waermepumpe_TV.setTextColor(Color.GREEN); | |
//seconds_remaining_to_start_Waermepumpe_TV.setText("Freigabe Wärmepumpe: JA"); | |
} else { | |
Umwaelzpumpe_Button.setText("Umwälzpumpe Einschalten"); | |
Umwaelzpumpe_Button.setBackground(getResources().getDrawable(R.drawable.button_rounded_gray)); | |
seconds_remaining_to_start_Waermepumpe_TV.setTextColor(Color.BLUE); | |
seconds_remaining_to_start_Waermepumpe_TV.setText("Freigabe Wärmepumpe: NEIN"); | |
} | |
} catch (Exception e) { | |
Log.e(TAG, "Error: " + e.getMessage()); | |
// Toast anzeigen | |
runOnUiThread(new Runnable() { | |
@Override | |
public void run() { | |
Toast.makeText(MainActivity.this, "Keine Verbindung zum Shelly IP überprüfen und APP neu starten!.", Toast.LENGTH_SHORT).show(); | |
} | |
}); | |
} | |
} else { | |
// Keine Verbindung zum Shelly | |
Log.e(TAG, "Keine Verbindung zum Shelly."); // Hinzugefügt: Log-Eintrag für Debugging | |
// Hier einen Toast auf dem UI-Thread anzeigen | |
runOnUiThread(new Runnable() { | |
@Override | |
public void run() { | |
Toast.makeText(MainActivity.this, "Keine Verbindung zum Shelly IP überprüfen und APP neu starten!.", Toast.LENGTH_SHORT).show(); | |
} | |
}); | |
} | |
} | |
} // Ende Abfrage Status Shelly's | |
// Start toggle Button Umwälzpumpe | |
private void toggleUmwaelzpumpe() { | |
Log.d("Methode toggleUmwälzpumpe ausgeführt", "toggle Umwaelzpumpe durchlaufen"); | |
// Log-Eintrag hinzufügen | |
Log.d("MainActivity", "toggleUmwaelzpumpe IP-Adresse aus Shared Preferences: " + IP_Adresse_Umwaelzpumpe); | |
if (Umwaelzpumpe_Button != null) { | |
// Überprüfen, ob die Umwälzpumpe ein- oder ausgeschaltet werden soll | |
String command = Umwaelzpumpe_Button.getText().toString().equals("Umwälzpumpe Einschalten") ? "off" : "on"; | |
String toggleURL = HTTP + IP_Adresse_Umwaelzpumpe + "/relay/0?turn=" + command; | |
new ShellyControlTask().execute(toggleURL); | |
} | |
} // Ende toggle Button Umwälzpumpe | |
// Start Ein- / Ausschalten Shelly Umwälzpumpe | |
public class ShellyControlTask extends AsyncTask<String, Void, Void> { | |
@Override | |
protected Void doInBackground(String... urls) { | |
try { | |
URL url = new URL(urls[0]); | |
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); | |
connection.setRequestMethod("GET"); | |
connection.connect(); | |
int responseCode = connection.getResponseCode(); | |
if (responseCode == HttpURLConnection.HTTP_OK) { | |
// Erfolgreich eingeschaltet/ausgeschaltet | |
Log.d("ShellyControl", "Erfolgreich"); | |
} else { | |
// Fehler beim Einschalten/Ausschalten | |
Log.e("ShellyControl", "Fehler beim Einschalten/Ausschalten. Response Code: " + responseCode); | |
} | |
} catch (Exception e) { | |
Log.e("ShellyControl", "Fehler: " + e.getMessage()); | |
Toast.makeText(getApplicationContext(), "Keine Verbindung zum Shelly überprüfe die IP.", Toast.LENGTH_SHORT).show(); | |
} | |
return null; | |
} | |
} // Ende Ein- / Ausschalten Shelly Umwälzpumpe | |
// Start Status Abfrage zyklisch Umwälzpumpe | |
@Override | |
protected void onPause() { | |
super.onPause(); | |
stopRepeatingTask(); | |
} | |
private Runnable mStatusChecker = new Runnable() { | |
@Override | |
public void run() { | |
try { | |
if (Umwaelzpumpe_Relais_Ein) { | |
Waermepumpe_Status(); // Führe die Methode aus | |
handler_Umwaelzpumpe_Status.postDelayed(this, delay_Umwaelzpumpe_Status); // Wiederhole den Aufruf in 10 Sekunden | |
Toast.makeText(getApplicationContext(), "Umwälzpumpe Status-Abfrage zyklisch", Toast.LENGTH_SHORT).show(); | |
} | |
} catch(Exception e) { | |
// Handle Exception | |
// handler_Umwaelzpumpe_Status.postDelayed(mStatusChecker, delay_Umwaelzpumpe_Status); | |
} | |
} | |
}; | |
void startRepeatingTask() { | |
mStatusChecker.run(); | |
} | |
// Stop Status Abfrage zyklisch Umwälzpumpe | |
void stopRepeatingTask() { | |
handler_Umwaelzpumpe_Status.removeCallbacks(mStatusChecker); | |
} | |
// Stop Status Abfrage zyklisch Umwälzpumpe | |
// Start Shelly Wärmepumpe verzögert einschalten | |
// Create a new CountDownTimer object with a delay time of 5000 milliseconds and an interval of 1000 milliseconds | |
CountDownTimer countDownTimer = new CountDownTimer(Verzoegerungszeit_Waermepumpe_Ein, 1000) { | |
@Override | |
public void onTick(long millisUntilFinished) { | |
// Update the UI with the remaining time | |
seconds_remaining_to_start_Waermepumpe = (int) millisUntilFinished / 1000; | |
// Update the TextView with the remaining time | |
seconds_remaining_to_start_Waermepumpe_TV.setTextColor(Color.RED); | |
seconds_remaining_to_start_Waermepumpe_TV.setText("Verbleibende Zeit bis Freigabe Wärmepumpe: " + seconds_remaining_to_start_Waermepumpe + " Sek"); | |
Verzoegerungszeit_Waermepumpe_Ein_TV.setText("Verzögerungszeit Wärmepumpe Ein: " + Verzoegerungszeit_Waermepumpe_Ein / 1000 + " Sek"); | |
// Abfrage ob Verzögerungszeit Wärmepumpe abgelaufen ist | |
if (seconds_remaining_to_start_Waermepumpe == 0) { | |
seconds_remaining_to_start_Waermepumpe_TV.setTextColor(Color.GREEN); | |
seconds_remaining_to_start_Waermepumpe_TV.setText("Freigabe Wärmepumpe: JA"); | |
Verzoegerungszeit_abgelaufen = true; | |
} | |
//if (Verzoegerungszeit_abgelaufen && Umwaelzpumpe_Relais_Ein ) { | |
// Freigabe_Waermepumpe = true; | |
// } | |
} | |
@Override | |
public void onFinish() { | |
// The delay has finished, execute the desired action here | |
//new Shelly_Ein_02().execute(); | |
//new ShellyTask_02().execute(); | |
//Verzoegerungszeit_abgelaufen = true; | |
//Verzoegerungszeit_Ein_Waermepumpe = 0; | |
//buttonTurnOn_02.setBackground(getResources().getDrawable(R.drawable.button_rounded_green)); | |
//buttonTurnOn_02.setBackgroundColor(Color.GREEN); | |
//textViewLifeBit.setText("LifeBit: " + "77"); | |
//textViewVerzoegerungszeit_Waermepumpe_Ein.setText("Verzögerungszeit Wärmepumpe Ein: " + 0 + " Sek"); | |
//textViewseconds_remaining_to_start_Waermepumpe.setTextColor(Color.LTGRAY); | |
//textViewseconds_remaining_to_start_Waermepumpe.setText("Remaining time: " + seconds_remaining_to_start_Waermepumpe + " Sek"); | |
} | |
}; | |
// Ende Shelly Wärmepumpe verzögert einschalten | |
} // Ende MainActivity |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment