Skip to content

Commit

Permalink
Program migration from V2.1.4 -> 1.999_fix3
Browse files Browse the repository at this point in the history
Program migration from V2.1.4 -> 1.999_fix3
  • Loading branch information
DieWaldfee authored Sep 28, 2024
1 parent 77d39cb commit 5354080
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 67 deletions.
118 changes: 51 additions & 67 deletions ESP32DevKitV4/Heizstabsteuerung.ino
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <LiquidCrystal_I2C.h>
#include <EmonLib.h> // Auswertung der SCT013-Sensoren
#include <esp_task_wdt.h>
#include "secrets.h"

#define LED_ERROR 23
#define LED_OK 19
Expand Down Expand Up @@ -108,18 +109,9 @@ byte fanIcon[8] = {
};

// Definition der Zugangsdaten WiFi
//const char* ssid = "MS_Baunatal_Keller";
//const char* password = "akp265DfTG7%";
#define HOSTNAME "ESP32_Heizstabsteuerung"
const char* ssid = "Your SSID";
const char* password = "YourPassword";
WiFiClient myWiFiClient;

//Definition der Zugangsdaten MQTT
#define MQTT_SERVER "Your MQTT Broker IP"
#define MQTT_PORT 1883
#define MQTT_USER "Your MQTT User"
#define MQTT_PASSWORD "Your MQTT Password"
#define MQTT_CLIENTID "ESP32_Heizstabsteuerung" //Name muss eineindeutig auf dem MQTT-Broker sein!
#define MQTT_KEEPALIVE 90
#define MQTT_SOCKETTIMEOUT 30
Expand Down Expand Up @@ -184,7 +176,7 @@ static TaskHandle_t hintegrity;
static TaskHandle_t hMQTTwatchdog;

//Queue-Definition für Stromüberwachung
#define QUEUEDEPTH 10 // Tiefe der Queue - 10 Schaltvorgänge einer Phase für 5s
#define QUEUEDEPTH 30 // Tiefe der Queue - 30 Schaltvorgänge einer Phase für 5s
#define QUEUEMAXWAITTIME 3 // Wartezeit für das Senden in eine Queue - danach Error!
typedef struct { // Struktur der Queue-Daten
TickType_t ticktime; //gewünchte TickTime der Phasenprüfung
Expand All @@ -194,9 +186,9 @@ static QueueHandle_t amp1Queue; //Queue-Handler für Statuschecks der Pha
static QueueHandle_t amp2Queue; //Queue-Handler für Statuschecks der Phase 2
static QueueHandle_t amp3Queue; //Queue-Handler für Statuschecks der Phase 3
static bool DataPack = true; // Datenpaket für die folgenden freeXQueue
static QueueHandle_t free1Queue; //Queue-Handler - wenn leer, dann Integritätscheck Phase 1 durchführbar
static QueueHandle_t free2Queue; //Queue-Handler - wenn leer, dann Integritätscheck Phase 2 durchführbar
static QueueHandle_t free3Queue; //Queue-Handler - wenn leer, dann Integritätscheck Phase 3 durchführbar
static QueueHandle_t free1Queue; //Queue-Handler - wenn leer, dann Integritätscheck Phase 1 durchführbar
static QueueHandle_t free2Queue; //Queue-Handler - wenn leer, dann Integritätscheck Phase 2 durchführbar
static QueueHandle_t free3Queue; //Queue-Handler - wenn leer, dann Integritätscheck Phase 3 durchführbar

//erforderliche Funtions-Prototypen
void panicStop(void);
Expand Down Expand Up @@ -399,7 +391,7 @@ static void checkPhase1 (void *args){
//korrekte Zeit zur Überprüfung
error = 0;

// -----------------------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------
// bei schnellen Schaltungen kann die Queue mehr als ein Element enthalten.
rc = uxQueueMessagesWaiting (amp1Queue);
if (debug > 2) Serial.print("Anzahl von Queue-Objekten Phase 1: ");
Expand Down Expand Up @@ -455,22 +447,21 @@ static void checkPhase1 (void *args){
lastError = "Phasenfehler Phase 1. Falscher Schaltzustand!";
panicStop();
}
// ------------------------------------------------------------------------
//Prüfung auf Überschreitung des PhasenLimit Phase 1
if (amp > plimit) {
if (debug) Serial.print("Phasenlimit auf Phase 1: Sollzustand: ");
if (debug) Serial.print(plimit);
if (debug) Serial.print(" A; gemessen: ");
if (debug) Serial.print(amp);
if (debug) Serial.println(" A!");
lastError = "Phasenfehler Phase 1. Strom über dem Limit!";
panicStop();
}
// Freigabe der Queue für Phase 1
rc = xQueueReset (free1Queue);
assert(rc == pdPASS);
}

//--------------------------------------------------------------------------------------------------------------------
//Prüfung auf Überschreitung des PhasenLimit Phase 1
if (amp > plimit) {
if (debug) Serial.print("Phasenlimit auf Phase 1: Sollzustand: ");
if (debug) Serial.print(plimit);
if (debug) Serial.print(" A; gemessen: ");
if (debug) Serial.print(amp);
if (debug) Serial.println(" A!");
lastError = "Phasenfehler Phase 1. Strom über dem Limit!";
panicStop();
}
}
}
//Phasencheck Phase 2-Task
Expand Down Expand Up @@ -590,21 +581,20 @@ static void checkPhase2 (void *args){
lastError = "Phasenfehler Phase 2. Falscher Schaltzustand!";
panicStop();
}
//Prüfung auf Überschreitung des PhasenLimit Phase 2
if (amp > plimit) {
if (debug) Serial.print("Phasenlimit auf Phase 2: Sollzustand: ");
if (debug) Serial.print(plimit);
if (debug) Serial.print(" A; gemessen: ");
if (debug) Serial.print(amp);
if (debug) Serial.println(" A!");
lastError = "Phasenfehler Phase 2. Strom über dem Limit!";
panicStop();
}
// Freigabe der Queue für Phase 2
rc = xQueueReset (free2Queue);
assert(rc == pdPASS);
}

//Prüfung auf Überschreitung des PhasenLimit Phase 2
if (amp > plimit) {
if (debug) Serial.print("Phasenlimit auf Phase 2: Sollzustand: ");
if (debug) Serial.print(plimit);
if (debug) Serial.print(" A; gemessen: ");
if (debug) Serial.print(amp);
if (debug) Serial.println(" A!");
lastError = "Phasenfehler Phase 2. Strom über dem Limit!";
panicStop();
}
}
}
//Phasencheck Phase 3-Task
Expand Down Expand Up @@ -724,21 +714,20 @@ static void checkPhase3 (void *args){
lastError = "Phasenfehler Phase 3. Falscher Schaltzustand!";
panicStop();
}
//Prüfung auf Überschreitung des PhasenLimit Phase 3
if (amp > plimit) {
if (debug) Serial.print("Phasenlimit auf Phase 3: Sollzustand: ");
if (debug) Serial.print(plimit);
if (debug) Serial.print(" A; gemessen: ");
if (debug) Serial.print(amp);
if (debug) Serial.println(" A!");
lastError = "Phasenfehler Phase 3. Strom über dem Limit!";
panicStop();
}
// Freigabe der Queue für Phase 3
rc = xQueueReset (free3Queue);
assert(rc == pdPASS);
}

//Prüfung auf Überschreitung des PhasenLimit Phase 3
if (amp > plimit) {
if (debug) Serial.print("Phasenlimit auf Phase 3: Sollzustand: ");
if (debug) Serial.print(plimit);
if (debug) Serial.print(" A; gemessen: ");
if (debug) Serial.print(amp);
if (debug) Serial.println(" A!");
lastError = "Phasenfehler Phase 3. Strom über dem Limit!";
panicStop();
}
}
}

Expand Down Expand Up @@ -1508,6 +1497,9 @@ static void MQTTwatchdog (void *args){
//ticktime initialisieren
ticktime = xTaskGetTickCount();

er = esp_task_wdt_add(NULL); // Task zur Überwachung hinzugefügt
assert(er == ESP_OK);

for (;;){ // Dauerschleife des Tasks
// Watchdog zurücksetzen
esp_task_wdt_reset();
Expand Down Expand Up @@ -1541,14 +1533,17 @@ static void integrityCheck (void *args){
//ticktime initialisieren
ticktime = xTaskGetTickCount();

er = esp_task_wdt_add(NULL); // Task zur Überwachung hinzugefügt
assert(er == ESP_OK);

for (;;){ // Dauerschleife des Tasks
// Watchdog zurücksetzen
esp_task_wdt_reset();
err = 0;
//Lesen des Zustands
if (debug > 1) Serial.print("TickTime: ");
if (debug > 1) Serial.print(ticktime);
if (debug > 1) Serial.println(" | integrityCheck-Task prüft die Konsistenz der Daten");
if (debug > 1) Serial.println(" | IntegrityCheck-Task prüft die Konsistenz der Daten");
while (uxQueueMessagesWaiting (free1Queue) + uxQueueMessagesWaiting (free2Queue) + uxQueueMessagesWaiting (free3Queue) != 0) {
// die Schleife wird erst überwunden, wenn die drei Queues leer sind und damit alle Schaltvorgänge abgeschlossen und geprüft sind.
// größerer Zeitverzug nur bei vielen, schnellen Schaltungen zu erwarten.
Expand Down Expand Up @@ -1656,6 +1651,9 @@ static void getAmpFromSensor (void *args){
//ticktime initialisieren
ticktime = xTaskGetTickCount();

er = esp_task_wdt_add(NULL); // Task zur Überwachung hinzugefügt
assert(er == ESP_OK);

for (;;){ // Dauerschleife des Tasks
// Watchdog zurücksetzen
esp_task_wdt_reset();
Expand Down Expand Up @@ -1963,6 +1961,9 @@ static void getTempFromSensor (void *args){
//ticktime initialisieren
ticktime = xTaskGetTickCount();

er = esp_task_wdt_add(NULL); // Task zur Überwachung hinzugefügt
assert(er == ESP_OK);

for (;;){ // Dauerschleife des Tasks
// Watchdog zurücksetzen
esp_task_wdt_reset();
Expand Down Expand Up @@ -2236,23 +2237,10 @@ void setup() {
pinMode(FAN0, OUTPUT);
digitalWrite(FAN0, HIGH); //angeschlossenes SolidStade Relais schaltet auf LOW
fanOn = 0;
//LCD Info
// Initialisiere LCD:
lcd.init();
lcd.backlight();
//Startnachricht auf LCD ausgeben
lcd.setCursor(0, 0);
lcd.print("Starte Steuerung");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.createChar(0, okCheck); // Sonderzeichen 0 einführen
lcd.createChar(1, grad); // Sonderzeichen 1 einführen
lcd.createChar(2, connIcon); // Sonderzeichen 2 einführen
lcd.createChar(3, fanIcon); // Sonderzeichen 3 einführen
//WiFi-Setup
int i = 0;
lcd.setCursor(0, 1);
lcd.print("starte WiFi...");
lcd.print("starte WiFi... ");
Serial.print("Verbindungsaufbau zu ");
Serial.print(ssid);
WiFi.setHostname(HOSTNAME);
Expand Down Expand Up @@ -2374,7 +2362,6 @@ void setup() {
app_cpu); //CPU_ID
assert(rc == pdPASS);
er = esp_task_wdt_status(hintegrity); // Check, ob der Task schon überwacht wird
assert(er == ESP_ERR_NOT_FOUND);
if (er == ESP_ERR_NOT_FOUND) {
er = esp_task_wdt_add(hintegrity); // Task zur Überwachung hinzugefügt
assert(er == ESP_OK);
Expand All @@ -2390,7 +2377,6 @@ void setup() {
app_cpu); //CPU_ID
assert(rc == pdPASS);
er = esp_task_wdt_status(htempSensor); // Check, ob der Task schon überwacht wird
assert(er == ESP_ERR_NOT_FOUND);
if (er == ESP_ERR_NOT_FOUND) {
er = esp_task_wdt_add(htempSensor); // Task zur Überwachung hinzugefügt
assert(er == ESP_OK);
Expand All @@ -2406,7 +2392,6 @@ void setup() {
app_cpu); //CPU_ID
assert(rc == pdPASS);
er = esp_task_wdt_status(hampSensor); // Check, ob der Task schon überwacht wird
assert(er == ESP_ERR_NOT_FOUND);
if (er == ESP_ERR_NOT_FOUND) {
er = esp_task_wdt_add(hampSensor); // Task zur Überwachung hinzugefügt
assert(er == ESP_OK);
Expand All @@ -2422,7 +2407,6 @@ void setup() {
app_cpu); //CPU_ID
assert(rc == pdPASS);
er = esp_task_wdt_status(hMQTTwatchdog); // Check, ob der Task schon überwacht wird
assert(er == ESP_ERR_NOT_FOUND);
if (er == ESP_ERR_NOT_FOUND) {
er = esp_task_wdt_add(hMQTTwatchdog); // Task zur Überwachung hinzugefügt
assert(er == ESP_OK);
Expand Down
18 changes: 18 additions & 0 deletions ESP32DevKitV4/secrets.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// secrets.h

#ifndef SECRETS_H
#define SECRETS_H

// Definition der Zugangsdaten WiFi
#define HOSTNAME "ESP32_Heizstabsteuerung"
const char* ssid = "YourSSID";
const char* password = "YourPassword";

//Definition der Zugangsdaten MQTT
#define MQTT_SERVER "x.x.x.x Your IP"
#define MQTT_PORT 1883
#define MQTT_USER "Your MQTT User"
#define MQTT_PASSWORD "Your MQTT Password"

#endif // SECRETS_H

0 comments on commit 5354080

Please sign in to comment.