1-wire kostengünstig an Homematic

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

g60vx
Beiträge: 170
Registriert: 16.04.2015, 21:48
Hat sich bedankt: 12 Mal

Re: 1-wire kostengünstig an Homematic

Beitrag von g60vx » 02.10.2017, 16:01

dondaik hat geschrieben:das: // ist immer ein komentar
also ist das
//#define HK_EG_10
//#define HK_EG_11
//#define HK_EG_12

Richtig, die habe ich schon mal vorgesehen für den FBH im OG, insgesamt 14 Sensoren. Aber erstmal die im EG zum laufen kriegen von 10 auf 11 Sensoren, das schon mal schwierig genug.
hier schon mal zu entfernen .. dann weiter .. sonst ggf mal per TW und phone
Was ist TW und phone?

dondaik
Beiträge: 12925
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1599 Mal
Danksagung erhalten: 222 Mal

Re: 1-wire kostengünstig an Homematic

Beitrag von dondaik » 02.10.2017, 17:16

TeamViewer und Telefon :-)
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

dondaik
Beiträge: 12925
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1599 Mal
Danksagung erhalten: 222 Mal

Re: 1-wire kostengünstig an Homematic

Beitrag von dondaik » 02.10.2017, 18:18

ändere es gerade im blindflug - dann gibt es eine PN
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

g60vx
Beiträge: 170
Registriert: 16.04.2015, 21:48
Hat sich bedankt: 12 Mal

Re: 1-wire kostengünstig an Homematic

Beitrag von g60vx » 07.10.2017, 20:18

Guten Abend,

ich habe es mittlerweile hinbekommen. Aktuell werden 14 DS18B20 Sensoren erfasst und an Systemvariablen in der CCU übergeben. Stolperstein war das Char-Array Zeile 176 mit mehr als 10 Sensoren und 255 Zeichen lief der Sketch regelmäßig in einen freeze.

Leider kann ich keine Systemvariablen loggen, um sie grafisch auszuwerten?

Code: Alles auswählen

meldung =meldung +"GET /eriwan.exe?befehl=dom.GetObject('" + strSensor +"').State('" + Temp + "')";
  client.println(meldung); // Daten an CCU melden
Ich würde gerne die Werte an CUxD-Geräte senden (HMS 100 T od. Thermostat Device) ich habe allerdings nicht begriffen wie das funktionieren soll. Man müsste ja im Sketch die CUxD-Geräte definieren? Oder könnte man diese auch mit einem Counter der Seriennummer in einer Schleife übertragen?

dondaik
Beiträge: 12925
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1599 Mal
Danksagung erhalten: 222 Mal

Re: 1-wire kostengünstig an Homematic

Beitrag von dondaik » 07.10.2017, 22:12

kann man - wenn du den "Übertragungsstring" dann vor dem senden zusammensetzt und eine kleine pause nach dem senden ggf einträgst.
aber frage jetzt nicht wo hier die Beschreibung des "Weges" der Übertragung ist...
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

g60vx
Beiträge: 170
Registriert: 16.04.2015, 21:48
Hat sich bedankt: 12 Mal

Re: 1-wire kostengünstig an Homematic

Beitrag von g60vx » 14.10.2017, 23:11

Guten Abend ihr Bastler ;), ich wollte Vollzug melden. Ich habe es geschafft, dass mittlerweile insgesamt 14 DS18B20 Sensoren erfasst und ihre Werte an CUxD übergeben werden. Ein Hinweis an Arduino Neulinge, es ist nicht gerade der beste Sketch um in die Welt der Programierung einzutreten :lol:

Ich habe den Code nicht großartig verändert, nur an den Stellen komentiert die Einfluss auf die Anzahl der Sensoren haben. Auch habe ich auf die Benamung der 1-Wiresensoren verzichtet, da ich jedem Sensor ein CUxD Device zugeordnet habe. Anbei der Code, CUxD-Highchart und Ansicht in der CCU.

Code: Alles auswählen

#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 SENSOR1  "28 FF 47 32 A4 16 4 F0"  //EG_BKA_Temp_VL     //Dies sind nur Beispiele, Wichtig hier keine Umlaute verwenden
#define SENSOR2   "28 FF D 30 A4 16 4 A3"  //EG_BKA_Temp_RL
#define SENSOR3  "28 FF 41 4F A4 16 4 59"  //EG_BKA_Temp_1
#define SENSOR4  "28 FF B8 32 A4 16 4 39"  //EG_BKA_Temp_2
#define SENSOR5  "28 FF 50 4B A4 16 4 E6"  //EG_WP_Temp_VL
#define SENSOR6  "28 FF 2B 75 A4 16 4 A6"  //EG_WP_Temp_RL
#define SENSOR7  "28 FF 96 4B A4 16 4 58"  //EG_WP_Temp_Qout
#define SENSOR8  "28 FF 76 41 A4 16 4 99"  //EG_WP_Temp_Qin
#define SENSOR9  "28 FF D1 4C A4 16 4 66"  //EG_WP_Sole_Temp_1
#define SENSOR10 "28 FF 56 40 A4 16 4 EE"  //EG_WP_Sole_Temp_2
#define SENSOR11 "28 FF CE 42 A4 16 4 60"  //EG_WP_Sole_Temp_3
#define SENSOR12 "28 FF C3 72 A4 16 4 C4"  //EG_WP_Sole_Box

// 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 = "??????";                                        // 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, 10);                                      // 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 = "CUxD.CUX9002026:1.SET_TEMPERATURE";         //hier das CUxD Wrapper Device eintragen
  if (Contains(Sensor, "Sensor2")) strSensor = "CUxD.CUX9002027:1.SET_TEMPERATURE";
  if (Contains(Sensor, "Sensor3")) strSensor = "CUxD.CUX9002028:1.SET_TEMPERATURE";
  if (Contains(Sensor, "Sensor4")) strSensor = "CUxD.CUX9002029:1.SET_TEMPERATURE";
  if (Contains(Sensor, "Sensor5")) strSensor = "CUxD.CUX9002032:1.SET_TEMPERATURE";
  if (Contains(Sensor, "Sensor6")) strSensor = "CUxD.CUX9002033:1.SET_TEMPERATURE";
  if (Contains(Sensor, "Sensor7")) strSensor = "CUxD.CUX9002034:1.SET_TEMPERATURE";
  if (Contains(Sensor, "Sensor8")) strSensor = "CUxD.CUX9002035:1.SET_TEMPERATURE";
  if (Contains(Sensor, "Sensor9")) strSensor = "CUxD.CUX9002036:1.SET_TEMPERATURE";
  if (Contains(Sensor, "Sensor10")) strSensor = "CUxD.CUX9002037:1.SET_TEMPERATURE";
  if (Contains(Sensor, "Sensor11")) strSensor = "CUxD.CUX9002038:1.SET_TEMPERATURE";
  if (Contains(Sensor, "Sensor12")) strSensor = "CUxD.CUX9002039:1.SET_TEMPERATURE";
  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 + "')";
  meldung = meldung + " HTTP/1.1\r\n" + "Host: " + host + ":8181"  + "\r\n" +  "Connection: close\r\n\r\n";
  client.println(meldung); // Daten an CCU melden
  //Serial.println(meldung);                                                          //zum überprüfen was an die CCU gesendet wird
  //Serial.print("");
  
}




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[12] =  { -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255};     //hier auf die Anzahl der Sensoren anpassen
float OldTemp[12] = { -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255};      //hier auf die Anzahl der Sensoren anpassen


String zeitstempel()
{ // Betriebszeit als Stunde:Minute:Sekunde
  char stempel[12];                                                                                 //hier auf die Anzahl der Sensoren anpassen
  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, "</br></br>Verbunden mit: %s </br>Signalstaerke: %d dBm  </br></br>", 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
}



void ListSensors(void)
{
  int count = 0, i = 0;
  byte addr[8];
  float Temp = 0.0;

  char Adress[12][100] = {"", "", "", "", "", "", "", "", "", "", "", ""};      //hier auf die Anzahl der Sensoren anpassen
  while (ds.search(addr))
  {
    sprintf(Adress[count], "");
    for ( i = 0; i < 8; i++)
    {
      sprintf(Adress[count], "%s %X", Adress[count], addr[i]);
    }
    count++;
  }
  Antwort += "Gefundene Sensoren \n</br>";
  Serial.print("\nGefundene Sensoren\n");
  for (count = 0; count < 12; count++)                                          //hier auf die Anzahl der Sensoren anpassen
  {
    if (strcmp(Adress[count], ""))
    {
      Antwort += Adress[count];
      Serial.print(Adress[count]);
      Antwort += " Wert: ";
      Serial.print(" Wert: ");
      Temp = GetRoomTemperature(Adress[count], true);
      Antwort += Temp;
      Serial.print(Temp);
      Antwort += "\n</br>";
      Serial.print("\n");
    }
  }

  Antwort += "</br>";
  Serial.print("\n");
  Antwort += "Definierte Sensoren:\n</br>";
  Serial.print("Definierte Sensoren:\n");

  for (count = 0; count < 12; count++)                                          //hier auf die Anzahl der Sensoren anpassen
  {
    if (Contains(Adress[count], SENSOR1) && strcmp(Adress[count], "") && strcmp(SENSOR1, ""))
    {
      Antwort += "SENSOR1: ";
      Serial.print("SENSOR1: ");
      Antwort += Adress[count];
      Serial.print(Adress[count]);
      Antwort += " Wert: ";
      Serial.print(" Wert: ");
      Temp = GetRoomTemperature(Adress[count], true);
      Antwort += Temp;
      Serial.print(Temp);
      Antwort += "\n</br>";
      Serial.print("\n");
      //MeldeWert("Sensor1", Temp);

      OldTemp[0] = NewTemp[0];
      NewTemp[0] = Temp;
      if (OldTemp[0] == -255) OldTemp[0] = Temp;
    }
    else if (Contains(Adress[count], SENSOR2) && strcmp(Adress[count], "") && strcmp(SENSOR2, ""))
    {
      Antwort += "SENSOR2: ";
      Serial.print("SENSOR2: ");
      Antwort += Adress[count];
      Serial.print(Adress[count]);
      Antwort += " Wert: ";
      Serial.print(" Wert: ");
      Temp = GetRoomTemperature(Adress[count], true);
      Antwort += Temp;
      Serial.print(Temp);
      Antwort += "\n</br>";
      Serial.print("\n");
      //MeldeWert("Sensor2", Temp);
      OldTemp[1] = NewTemp[1];
      NewTemp[1] = Temp;
      if (OldTemp[1] == -255) OldTemp[1] = Temp;
    }
    else if (Contains(Adress[count], SENSOR3) && strcmp(Adress[count], "") && strcmp(SENSOR3, ""))
    {
      Antwort += "SENSOR3: ";
      Serial.print("SENSOR3: ");
      Antwort += Adress[count];
      Serial.print(Adress[count]);
      Antwort += " Wert: ";
      Serial.print(" Wert: ");
      Temp = GetRoomTemperature(Adress[count], true);
      Antwort += Temp;
      Serial.print(Temp);
      Antwort += "\n</br>";
      Serial.print("\n");
      //MeldeWert("Sensor3", Temp);
      OldTemp[2] = NewTemp[2];
      NewTemp[2] = Temp;
      if (OldTemp[2] == -255) OldTemp[2] = Temp;
    }
    else if (Contains(Adress[count], SENSOR4) && strcmp(Adress[count], "") && strcmp(SENSOR4, ""))
    {
      Antwort += "SENSOR4: ";
      Serial.print("SENSOR4: ");
      Antwort += Adress[count];
      Serial.print(Adress[count]);
      Antwort += " Wert: ";
      Serial.print(" Wert: ");
      Temp = GetRoomTemperature(Adress[count], true);
      Antwort += Temp;
      Serial.print(Temp);
      Antwort += "\n</br>";
      Serial.print("\n");
      //MeldeWert("Sensor4", Temp);
      OldTemp[3] = NewTemp[3];
      NewTemp[3] = Temp;
      if (OldTemp[3] == -255) OldTemp[3] = Temp;
    }
    else if (Contains(Adress[count], SENSOR5) && strcmp(Adress[count], "") && strcmp(SENSOR5, ""))
    {
      Antwort += "SENSOR5: ";
      Serial.print("SENSOR5: ");
      Antwort += Adress[count];
      Serial.print(Adress[count]);
      Antwort += " Wert: ";
      Serial.print(" Wert: ");
      Temp = GetRoomTemperature(Adress[count], true);
      Antwort += Temp;
      Serial.print(Temp);
      Antwort += "\n</br>";
      Serial.print("\n");
      //MeldeWert("Sensor5", Temp);
      OldTemp[4] = NewTemp[4];
      NewTemp[4] = Temp;
      if (OldTemp[4] == -255) OldTemp[4] = Temp;
    }
    else if (Contains(Adress[count], SENSOR6) && strcmp(Adress[count], "") && strcmp(SENSOR6, ""))
    {
      Antwort += "SENSOR6: ";
      Serial.print("SENSOR6: ");
      Antwort += Adress[count];
      Serial.print(Adress[count]);
      Antwort += " Wert: ";
      Serial.print(" Wert: ");
      Temp = GetRoomTemperature(Adress[count], true);
      Antwort += Temp;
      Serial.print(Temp);
      Antwort += "\n</br>";
      Serial.print("\n");
      //MeldeWert("Sensor6", Temp);
      OldTemp[5] = NewTemp[5];
      NewTemp[5] = Temp;
      if (OldTemp[5] == -255) OldTemp[5] = Temp;
    }
    else if (Contains(Adress[count], SENSOR7) && strcmp(Adress[count], "") && strcmp(SENSOR7, ""))
    {
      Antwort += "SENSOR7: ";
      Serial.print("SENSOR7: ");
      Antwort += Adress[count];
      Serial.print(Adress[count]);
      Antwort += " Wert: ";
      Serial.print(" Wert: ");
      Temp = GetRoomTemperature(Adress[count], true);
      Antwort += Temp;
      Serial.print(Temp);
      Antwort += "\n</br>";
      Serial.print("\n");
      //MeldeWert("Sensor7", Temp);
      OldTemp[6] = NewTemp[6];
      NewTemp[6] = Temp;
      if (OldTemp[6] == -255) OldTemp[6] = Temp;
    }
    else if (Contains(Adress[count], SENSOR8) && strcmp(Adress[count], "") && strcmp(SENSOR8, ""))
    {
      Antwort += "SENSOR8: ";
      Serial.print("SENSOR8: ");
      Antwort += Adress[count];
      Serial.print(Adress[count]);
      Antwort += " Wert: ";
      Serial.print(" Wert: ");
      Temp = GetRoomTemperature(Adress[count], true);
      Antwort += Temp;
      Serial.print(Temp);
      Antwort += "\n</br>";
      Serial.print("\n");
      //MeldeWert("Sensor8", Temp);
      OldTemp[7] = NewTemp[7];
      NewTemp[7] = Temp;
      if (OldTemp[7] == -255) OldTemp[7] = Temp;
    }
    else if (Contains(Adress[count], SENSOR9) && strcmp(Adress[count], "") && strcmp(SENSOR9, ""))
    {
      Antwort += "SENSOR9: ";
      Serial.print("SENSOR9: ");
      Antwort += Adress[count];
      Serial.print(Adress[count]);
      Antwort += " Wert: ";
      Serial.print(" Wert: ");
      Temp = GetRoomTemperature(Adress[count], true);
      Antwort += Temp;
      Serial.print(Temp);
      Antwort += "\n</br>";
      Serial.print("\n");
      //MeldeWert("Sensor9", Temp);
      OldTemp[8] = NewTemp[8];
      NewTemp[8] = Temp;
      if (OldTemp[8] == -255) OldTemp[8] = Temp;
    }
    else if (Contains(Adress[count], SENSOR10) && strcmp(Adress[count], "") && strcmp(SENSOR10, ""))
    {
      Antwort += "SENSOR10: ";
      Serial.print("SENSOR10: ");
      Antwort += Adress[count];
      Serial.print(Adress[count]);
      Antwort += " Wert: ";
      Serial.print(" Wert: ");
      Temp = GetRoomTemperature(Adress[count], true);
      Antwort += Temp;
      Serial.print(Temp);
      Antwort += "\n</br>";
      Serial.print("\n");
      //MeldeWert("Sensor10", Temp);
      OldTemp[9] = NewTemp[9];
      NewTemp[9] = Temp;
      if (OldTemp[9] == -255) OldTemp[9] = Temp;
    }   
    else if (Contains(Adress[count], SENSOR11) && strcmp(Adress[count], "") && strcmp(SENSOR11, ""))
    {
      Antwort += "SENSOR11: ";
      Serial.print("SENSOR11: ");
      Antwort += Adress[count];
      Serial.print(Adress[count]);
      Antwort += " Wert: ";
      Serial.print(" Wert: ");
      Temp = GetRoomTemperature(Adress[count], true);
      Antwort += Temp;
      Serial.print(Temp);
      Antwort += "\n</br>";
      Serial.print("\n");
      //MeldeWert("Sensor11", Temp);
      OldTemp[10] = NewTemp[10];
      NewTemp[10] = Temp;
      if (OldTemp[10] == -255) OldTemp[10] = Temp;
    }
    else if (Contains(Adress[count], SENSOR12) && strcmp(Adress[count], "") && strcmp(SENSOR12, ""))
    {
      Antwort += "SENSOR12: ";
      Serial.print("SENSOR12: ");
      Antwort += Adress[count];
      Serial.print(Adress[count]);
      Antwort += " Wert: ";
      Serial.print(" Wert: ");
      Temp = GetRoomTemperature(Adress[count], true);
      Antwort += Temp;
      Serial.print(Temp);
      Antwort += "\n</br>";
      Serial.print("\n");
      //MeldeWert("Sensor11", Temp);
      OldTemp[11] = NewTemp[11];
      NewTemp[11] = Temp;
      if (OldTemp[11] == -255) OldTemp[11] = Temp;
    }
  }

  Antwort += "</br>";
  Serial.print("\n");
  Antwort += "Nicht definierte Sensoren:\n</br>";
  Serial.print("Nicht definierte Sensoren:\n");

  for (count = 0; count < 12; count++)                          //hier auf die Anzahl der Sensoren anpassen
  {
    //Serial.print(Adress[count]);
    if (!(Contains(Adress[count], SENSOR1) && strcmp(SENSOR1, "")) &&
        !(Contains(Adress[count], SENSOR2) && strcmp(SENSOR2, "")) &&
        !(Contains(Adress[count], SENSOR3) && strcmp(SENSOR3, "")) &&
        !(Contains(Adress[count], SENSOR4) && strcmp(SENSOR4, "")) &&
        !(Contains(Adress[count], SENSOR5) && strcmp(SENSOR5, "")) &&
        !(Contains(Adress[count], SENSOR6) && strcmp(SENSOR6, "")) &&
        !(Contains(Adress[count], SENSOR7) && strcmp(SENSOR7, "")) &&
        !(Contains(Adress[count], SENSOR8) && strcmp(SENSOR8, "")) &&
        !(Contains(Adress[count], SENSOR9) && strcmp(SENSOR9, "")) &&
        !(Contains(Adress[count], SENSOR10) && strcmp(SENSOR10, "")) &&
        !(Contains(Adress[count], SENSOR11) && strcmp(SENSOR11, "")) &&
        !(Contains(Adress[count], SENSOR12) && strcmp(SENSOR12, "")))
    {
      if (strcmp(Adress[count], ""))
      {
        Antwort += Adress[count];
        Serial.print(Adress[count]);
        Antwort += " Wert: ";
        Serial.print(" Wert: ");
        Temp = GetRoomTemperature(Adress[count], true);
        Antwort += Temp;
        Serial.print(Temp);
        Antwort += "\n</br>";
        Serial.print("\n");
      }
    }
  }
  letzteMessungMillis = jetztMillis;
  ds.reset_search();
}

void Hauptseite()
{
  Antwort = "";

  Antwort += "<meta http-equiv='refresh' content='60'/>";
  ListSensors();
  Antwort += ConnectString;
  //Antwort += "</body></html>";

  server.send ( 300, "text/html", Antwort );
  delay(100);

  //server.send(300, "text/plain", Antwort);
  //delay(150);
}

float GetRoomTemperature(char adress[255], bool doreset)
{
  int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;
  byte i, present = 0, data[12], addr[8];
  char stradd[255];
  while (ds.search(addr))
  {
    sprintf(stradd, "");
    //Serial.print("\nR=");
    for ( i = 0; i < 8; i++)
    {
      sprintf(stradd, "%s %X", stradd, addr[i]);
    }
    ds.reset();
    ds.select(addr);
    ds.write(0x44, 1);        // start Konvertierung, mit power-on am Ende

    delay(50);     // 750ms sollten ausreichen
    // man sollte ein ds.depower() hier machen, aber ein reset tut das auch

    present = ds.reset();
    ds.select(addr);
    ds.write(0xBE);         // Wert lesen

    for ( i = 0; i < 9; i++)
    {
      // 9 bytes
      data[i] = ds.read();
    }

    if (Contains(stradd, adress))
    {
      LowByte = data[0];
      HighByte = data[1];
      TReading = (HighByte << 8) + LowByte;
      SignBit = TReading & 0x8000;  // test most sig bit

      if (SignBit) // negative
      {
        TReading = (TReading ^ 0xffff) + 1; // 2's comp
      }
      Tc_100 = (6 * TReading) + TReading / 4;    // mal (100 * 0.0625) oder 6.25
      /* Für DS18S20 folgendes verwenden Tc_100 = (TReading*100/2);    */
      Whole = Tc_100 / 100;  // Ganzzahlen und Brüche trennen
      Fract = Tc_100 % 100;

      if (SignBit) // negative Werte ermitteln
      {
        //Serial.print("-");
      }


      if (doreset)ds.reset_search();
      return (float)Whole + ((float)Fract / 100);
    }
  }
}
char Sensor[16];
void loop(void)
{
  server.handleClient(); // auf HTTP-Anfragen warten
  //Serial.println(zeitstempel());
  jetztMillis = millis();
  // neue Messung falls Zeitintervall erreicht
  if (jetztMillis - letzteMessungMillis > deltaMessungMillis)
  {
    ListSensors();
  }

  for (int c = 0; c < 12; c++)                                                      //hier auf die Anzahl der Sensoren anpassen
  {
    if (deltaTemp != 0 && abs(OldTemp[c] - NewTemp[c]) > deltaTemp)
    {
      Serial.print("Temperatur änderung bei Sensor: ");
      Serial.print(c + 1);
      Serial.print(" erreicht.");
      OldTemp[c] = NewTemp[c];
      sprintf(Sensor, "Sensor%d", c + 1);
      MeldeWert(Sensor, NewTemp[c]);
    }
  }

  // neue Meldung an die CCU falls Zeitintervall erreicht
  if (!deltaMeldungMillis == 0 && jetztMillis - letzteMeldungMillis > deltaMeldungMillis)
  {
    Serial.print(zeitstempel() + "  Zeitintervall erreicht: \n");
    letzteMeldungMillis = jetztMillis;
    //melde_CCU();

    for (int c = 0; c < 12; c++)                                                  //hier auf die Anzahl der Sensoren anpassen
    {
      sprintf(Sensor, "Sensor%d", c + 1);
      MeldeWert(Sensor, NewTemp[c]);
    }
  }
}
Ich habe insgesamt 39 Wrapperdevices angelegt, deren Datenpunkte werden von CUxD geloggt und können mit CUxD-Highchart visualisiert werden.Ich bin absolut begeistert was hier einige Leute enwickelt haben, vielen Dank.
Bild
Bild

dondaik
Beiträge: 12925
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1599 Mal
Danksagung erhalten: 222 Mal

Re: 1-wire kostengünstig an Homematic

Beitrag von dondaik » 15.10.2017, 07:00

na geht doch :-)
dann also auf zum nächsten projekt... der esp-virus ist ja scheinbar ausgebrochen.
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

Benutzeravatar
Nitram101
Beiträge: 76
Registriert: 20.02.2017, 18:00
Wohnort: Moormerland

Re: 1-wire kostengünstig an Homematic

Beitrag von Nitram101 » 01.05.2018, 19:53

Hallo g60vx,
ich bin über diese Anleitung gestoßen, da ich auch eine Wemon mini mit 6 DS18B20 am laufen habe, aber keine Verbindung zur CCU hatte.
Ich bekomme es aber einfach nicht hin, über den Universal wrapper device die Temperaturen in der CCU anzuzeigen.
Anlegen kann ich das device und wird auch auf der Webui angezeigt allerdings ist die Temp immer 0,0.
Hättest du einen Tip für mich was ich hier falsch mache.
Die Zuordnung der wrapper ID hatte ich in dem Wemos Programm entsprechend übernommen.
Ich bekomme mit dem Aufruf der Wemos IP die entsprechende Rückmeldung mit den richtigen Temperaturen.
Vielen Dank für eine Tip,
Martin

dondaik
Beiträge: 12925
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1599 Mal
Danksagung erhalten: 222 Mal

Re: 1-wire kostengünstig an Homematic

Beitrag von dondaik » 01.05.2018, 20:06

sind die zugangsdaten OK - ? das password nicht zu komplex? ssid - ggf mal komplett in großbuchstaben
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

Benutzeravatar
Nitram101
Beiträge: 76
Registriert: 20.02.2017, 18:00
Wohnort: Moormerland

Re: 1-wire kostengünstig an Homematic

Beitrag von Nitram101 » 01.05.2018, 20:53

Die Daten wie SID und Passwort müssten ja richtig sein, da ich über die IP die daten ja abrufen kann.
Martin

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“