Skip to content

Instantly share code, notes, and snippets.

@TransFlash
Last active April 24, 2024 19:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TransFlash/9e62871de7f51957d23a6af2c4deac16 to your computer and use it in GitHub Desktop.
Save TransFlash/9e62871de7f51957d23a6af2c4deac16 to your computer and use it in GitHub Desktop.
24.04.2024 lauffähige Version mit einem Kanal
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