Hallo zusammen, das sind meine ersten gehversuche mit der Softwareprogrammierung generell, bitte habt rücksicht.
Ich habe ein fertiges Sketch auf einem D1 Mini welches 10 DS18B20 ausliest und an meine Homematiczentrale sendet. Nun möchte ich das Sketch auf 11 Sensoren und später auch auf 14 erweitern. Ich habe schon alles probiert aber leider verstehe ich die mechanismen dahinter nicht. Könnt ihr mir tips geben was ich anpassen muss?
#include <OneWire.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <Umlaute.h>
// DS18S20 Temperaturchip i/o
OneWire ds(D1); // an pin D1
//Hier die Adressen von den Sensoren eingeben
#define HKV_EG_VL "28 FF 90 4F A4 16 4 CA"
#define HKV_EG_RL "28 FF 88 86 A4 16 4 22"
#define HK_EG_1 "28 FF 5D 87 A4 16 4 21"
#define HK_EG_2 "28 FF 9C 4D A4 16 4 EC"
#define HK_EG_3 "28 FF DC 4F A4 16 4 2"
#define HK_EG_4 "28 FF 2 50 A4 16 4 5C"
#define HK_EG_5 "28 FF 16 3B A4 16 4 3B"
#define HK_EG_6 "28 FF 76 AD A4 16 5 9C"
#define HK_EG_7 "28 FF 5C 86 A4 16 4 63"
#define HK_EG_8 "28 FF 50 AD A4 16 5 F8"
#define HK_EG_9 "28 FF 43 31 A4 16 4 67"
//#define HK_EG_10 ""
//#define HK_EG_11 ""
//#define HK_EG_12 ""
#define SENSOR1 HKV_EG_VL
#define SENSOR2 HKV_EG_RL
#define SENSOR3 HK_EG_1
#define SENSOR4 HK_EG_2
#define SENSOR5 HK_EG_3
#define SENSOR6 HK_EG_4
#define SENSOR7 HK_EG_5
#define SENSOR8 HK_EG_6
#define SENSOR9 HK_EG_7
#define SENSOR10 HK_EG_8
#define SENSOR11 HK_EG_9
//#define SENSOR12 HK_EG_10
//#define SENSOR13 HK_EG_11
//#define SENSOR14 HK_EG_12
// Einstellungen für Messungen und Meldungen
#define ZEITINTERVALL_MESSUNGEN 10 //Abfragezyklus der Sensoren in Sekunden
#define ZEITINTERVALL_MELDUNGEN 60 //Sendeintervall an die Homematic in Sekunden
#define DELTA_TEMPERATURSCHWELLWERT 1 //Temperaturdifferenz zum senden an die Homematic in °C
// ******* Netzwerkeinstellungen, bitte anpassen! *******
const char* ssid = "Skynet"; // SSID des vorhandenen WLANs
const char* password = ""; // Passwort für das vorhandene WLAN
IPAddress gateway(192, 168, 1, 1); // IP-Adresse des WLAN-Gateways
IPAddress subnet(255, 255, 255, 0); // Subnetzmaske
IPAddress ip(192, 168, 1, 8); // feste IP-Adresse für den WeMos
const char* host = "192.168.1.5"; // IP-Adresse der CCU
ESP8266WebServer server(80); // Webserver initialisieren auf Port 80
// convert String object from UTF8 String to Extended ASCII
void MeldeWert(char* Sensor, float Temp)
{
String strSensor;
if (Contains(Sensor, "Sensor1")) strSensor = "HKV_EG_VL";
if (Contains(Sensor, "Sensor2")) strSensor = "HKV_EG_RL";
if (Contains(Sensor, "Sensor3")) strSensor = "HK_EG_1";
if (Contains(Sensor, "Sensor4")) strSensor = "HK_EG_2";
if (Contains(Sensor, "Sensor5")) strSensor = "HK_EG_3";
if (Contains(Sensor, "Sensor6")) strSensor = "HK_EG_4";
if (Contains(Sensor, "Sensor7")) strSensor = "HK_EG_5";
if (Contains(Sensor, "Sensor8")) strSensor = "HK_EG_6";
if (Contains(Sensor, "Sensor9")) strSensor = "HK_EG_7";
if (Contains(Sensor, "Sensor10")) strSensor = "HK_EG_8";
if (Contains(Sensor, "Sensor11")) strSensor = "HK_EG_9";
//if (Contains(Sensor, "Sensor12")) strSensor = "HK_EG_10";
//if (Contains(Sensor, "Sensor13")) strSensor = "HK_EG_11";
//if (Contains(Sensor, "Sensor14")) strSensor = "HK_EG_12";
strSensor = utf8ascii(strSensor);
Serial.println("StrSensor: " + strSensor + " und " + "Sensor: " + Sensor);
String meldung = "";
WiFiClient client; // Webclient initialisieren
if (!client.connect(host, 8181)) { // mit dem CCU-Port 8181 verbinden
Serial.println(" Fehler: Verbindung zur CCU konnte nicht aufgebaut werden");
delay(50);
return;
}
meldung = meldung + "GET /eriwan.exe?befehl=dom.GetObject('" + strSensor + "').State('" + Temp + "')";
client.println(meldung); // Daten an CCU melden
}
char ConnectString[255] = "";
String Antwort = "";
unsigned long deltaMessungSekunden = ZEITINTERVALL_MESSUNGEN; //Zeitintervall (Sekunden) nach dem eine Messung erfolgt
unsigned long deltaMeldungSekunden = ZEITINTERVALL_MELDUNGEN; // Zeitintervall (Sekunden) nach dem eine CCU-Meldung erfolgt (0 bedeutet nie)
unsigned long jetztMillis = 0;
unsigned long deltaMessungMillis = deltaMessungSekunden * 1000, letzteMessungMillis = 0;
unsigned long deltaMeldungMillis = deltaMeldungSekunden * 1000, letzteMeldungMillis = 0;
String antwort = "", meldung = "";
float deltaTemp = DELTA_TEMPERATURSCHWELLWERT; // Temperaturaenderung (*C) bei der eine CCU-Meldung erfolgt (0 bedeutet nie)
float temp = 0, tempCCU = 0;
float NewTemp[10] = { -255, -255, -255, -255, -255, -255, -255, -255, -255, -255};
float OldTemp[10] = { -255, -255, -255, -255, -255, -255, -255, -255, -255, -255};
String zeitstempel()
{ // Betriebszeit als Stunde:Minute:Sekunde
char stempel[11];
int lfdStunden = millis() / 3600000;
int lfdMinuten = millis() / 60000 - lfdStunden * 60;
int lfdSekunden = millis() / 1000 - lfdStunden * 3600 - lfdMinuten * 60;
sprintf (stempel, "%03d:%02d:%02d", lfdStunden, lfdMinuten, lfdSekunden);
return stempel;
}
void WLANVerbindung()
{
// WLAN-Verbindung herstellen
WiFi.config(ip, gateway, subnet); // auskommentieren, falls eine dynamische IP bezogen werden soll
WiFi.begin(ssid, password);
Serial.print("Verbindungsaufbau");
Serial.println(" erfolgreich!");
Serial.println("");
Serial.print("Verbunden mit: ");
Serial.println(ssid);
Serial.print("Signalstaerke: ");
int rssi = WiFi.RSSI();
Serial.print(rssi);
Serial.println(" dBm");
Serial.print("IP-Adresse: ");
Serial.println(WiFi.localIP());
Serial.println("");
sprintf(ConnectString, "
Verbunden mit: %s
Signalstaerke: %d dBm
", ssid, rssi);
server.on("/", Hauptseite);
// HTTP-Server starten
server.begin();
}
void setup(void)
{
// inputs/outputs initialisieren
// seriellen port starten
Serial.begin(9600);
//ListSensors();
WLANVerbindung();
}
bool Contains(String s, String search)
{
int max = s.length() - search.length();
for (int i = 0; i <= max; i++) {
if (s.substring(i) == search) return true; // or i
}
return false; //or -1
}