Arduino über CUxD an CCU2 "anbinden"

Anbindung von FS20-Komponenten, ELV-Wetterstationen, EnOcean und DMX an HomeMatic

Moderator: Co-Administratoren

dondaik
Beiträge: 12886
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1584 Mal
Danksagung erhalten: 221 Mal

Re: Arduino über CUxD an CCU2 "anbinden"

Beitrag von dondaik » 28.12.2017, 15:12

wenn die prg.struktur richtig ist bekommen alle stellen die gleichen daten !!! einzig das thema "ausserhalb des messbereiches" muss man beachten !
also
- sub messen
- sub senden1
- sub senden 2
- sub anzeigen
....
-> es gibt nur einen messwert.

bei pollin gibt es jede menge passende netzteile für ca 2,50 euro - einen dicken C braucht der esp aber immer.
-------
!!! 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.

spiecky
Beiträge: 73
Registriert: 09.12.2017, 15:51

Re: Arduino über CUxD an CCU2 "anbinden"

Beitrag von spiecky » 28.12.2017, 17:49

Code: Alles auswählen

[code]
#include <ESP8266WiFi.h>              // Bibliothek fuers WLAN
#include <SPI.h>                      // Bibliothek fuers Display
#include <Wire.h>                     // Bibliothek fuers Display
#include <Adafruit_GFX.h>             // Bibliothek fuers Display
#include <Adafruit_SSD1306.h>         // Bibliothek fuers Display
#include <NewPing.h>                  // Bibliothek fuers Ultraschall

#define TRIGGER_PIN  14  // Ultraschall Trigger Pin ist D5
#define ECHO_PIN     12  // Ultraschall Echo Pin ist D6
#define MAX_DISTANCE 400 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance

unsigned long previousMillis = 0; // speichert wie viele Sekunden seit der letzten Änderung vergangen sind
unsigned long interval = 30000;    // Interval zwischen zwei Änderungen in Millisekunden

#define OLED_RESET LED_BUILTIN           //fuers Display
Adafruit_SSD1306 display(OLED_RESET);   //fuers Display

#define WIFI_SSID "XXXXXXXX"
#define WIFI_PASS "XXXXXXXXXXXX"

WiFiServer server(80);                  //WEB Server auf Port 80
byte HomematicIP[]  = { 192, 168, 178, 36 };            // Homematic IP-Adresse

void setup() {

  server.begin();                   //Startet HTTP Server
  Serial.begin(115200);             //Startet Serielle Ausgabe
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  //Startet Display auf Adresse 0x3C
  pinMode(16, OUTPUT);              // LED ist an Pin D0

//WIFI Setup
  
  WiFi.mode(WIFI_STA);
  Serial.printf("Verbindungs zu %s wird aufgebaut ", WIFI_SSID);
  WiFi.begin(WIFI_SSID, WIFI_PASS);

while (WiFi.status() != WL_CONNECTED) {
    
    Serial.print(">");
    delay(100);
  }
  Serial.println("");
  Serial.printf("Verbunden! SSID: %s, IP Adresse: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());

}


void loop() {

// Anzeige auf Display

  display.clearDisplay();
  display.setTextColor(WHITE);      // Textfarbe setzen
  display.setTextSize(1);           // Text anzeigen
  display.setCursor(0,0);         // Textstartposition einstellen 0,0 bedeutet erstes Zeichen in erster Zeile
  display.printf("IP: %s\n", WiFi.localIP().toString().c_str()); //Ausgabe IP auf Display
  
while (WiFi.status() != WL_CONNECTED) {
  display.setTextSize(1);           // Textgroesse setzen
  display.setCursor(0,10);         // Textstartposition einstellen
  display.print("Keine WLAN Verbindung");
  delay (5000);
}

  display.setTextSize(1);           // Textgroesse setzen
  display.setCursor(0,10);         // Textstartposition einstellen
  display.print("WLAN Signal ");
  display.print(WiFi.RSSI());       // gibt Signalstärke WiFi aus in db
  display.print("db");

  display.setTextSize(1);           // Textgroesse setzen
  display.setCursor(10,25);         // Textstartposition einstellen
  display.print("Abstand zum Deckel");
  display.setTextSize(3);           // Textgroesse setzen
  display.setCursor(20,40);         // Textstartposition einstellen
  display.print(sonar.ping_cm());       // gibt Ultraschalldistanz aus in cm
  display.print("cm");
  
  display.display();
  delay(500);                        //gibt an in welchem Zeitabstand in ms die Werte auf Diplay aktualisiert werden

// Alarm durch LED bei kleiner 50cm

if(sonar.ping_cm() <= 50)              // ab welchem Wert blinkt LED 
        {
       digitalWrite(16, HIGH);       // schaltet LED ein, wenn if zutrifft
       delay(1000);                   // 1 Sekunde warten
       digitalWrite(16, LOW);        // schaltet LED aus
       delay(1000);                   // 1 Sekunde warten
        }
       else
       {
       digitalWrite(16, LOW);        // schaltet LED aus, wenn if nicht zutrifft
       }   
       
      delay(1000);



// WEB Abfrage

// listen for incoming clients
  WiFiClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
//Ausgabe auf Website
            //client.print("WLAN Signalstaerke = ");
            //client.print(WiFi.RSSI());            // gibt Signalstärke WiFi aus in db
            //client.println("db");                 //durch printLN wird eine neue Zeile gemacht
            client.print("Distanz zum Tankdeckel vorne = ");  
            client.print(sonar.ping_cm());       // gibt Ultraschalldistanz aus in cm
            client.print("cm");
            client.println("<br />");      
            client.println("</html>");
            break;
        }
       }
    }
    // give the web browser time to receive the data
    delay(1);
   
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }

  
//Abstandsmeldung an CCU

if (millis() - previousMillis > interval) {                                                //wenn der oben angegebene Intervall abgelaufen ist, dann....
             previousMillis = millis();                                                    // aktuelle Zeit abspeichern

            if (client.connect(HomematicIP,80)) {                                          //wenn Verbindung zur CCU, dann.....
             Serial.println("Daten an CCU2 senden - Verbindung zum Server...");            //Textausgabe auf Terminalfenster - durch "ln" wird am Ende ein Absatz gemacht/neue Zeile/Enter
             Serial.print("sende Wert ");                                                 //Textausgabe auf Terminalfenster - ohne ln wird mit der nächsten Zeile (Sonarwert) weitergeschrieben
             Serial.println(sonar.ping_cm());                                             //Textausgabe auf Terminalfenster
             client.print("GET /config/xmlapi/statechange.cgi?ise_id=5656&new_value=");   //Befehl zum CCU Systemvariable ändern mit Sonarwert aus nächster Zeile
             client.print(sonar.ping_cm());                                               //ändert Wert in CCU Systemvariable 5656 auf Sonarwert
             client.println(" HTTP/1.0");
             client.println();
             Serial.println("...erfolgreich gesendet!");
            }                   
}
//else
//{
//Serial.println("nicht mit CCU2 Server verbunden");
//}

client.stop();
}


  

[/code]

Das ist der Code für meinen Ultraschallsensor. Ist wie gesagt wild zusammen kopiert (kann bestimmt einiges raus bzw anders) aaaaaaber....er funktioniert....halbwegs wenigstens ;-)
Wie gesagt, das Verrückte ist: Ich greife per Browser auf die Platine zu und er zeigt alle 5sek 106cm an. Wenn ich mir aber die Werte in der
CCU anschaue steht hier nur ab und zu mal 106cm. Meist eher 55cm, 66cm usw. Wenn ich den Laptop (das Ding ist im Keller) an der Platine zum Konfigurieren
dran habe und er dann auch seine Betriebsspannung über den Laptop bekommt, habe ich auch auf der CCU, im Serialmonitor und im Browser
die stabilen 106cm. Hatte ein extra Netzteil mit Mini Usb und ausreichend Leistung gekauft. Das hat auch ein ääähhhhh....wie heißt dat noch....
na kurz vorm Usb Stecker ist ein Zylinder (zum entstören?) im Kabel - ihr wisst schon was ich meine.

Verstehe wirklich nicht ganz warum das mit den Fehlmeldungen so ist, aber es muss ja was mit der Stromversorgung zu tun haben. Hatte nur
leider noch nicht so viel Zeit das näher zu untersuchen. Vielleicht sagt ja einer von Euch....ach...das hatte ich auch schon mal, das ist das und das ;-)

dondaik
Beiträge: 12886
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1584 Mal
Danksagung erhalten: 221 Mal

Re: Arduino über CUxD an CCU2 "anbinden"

Beitrag von dondaik » 28.12.2017, 18:13

muss weg aber das da zwei werte kommen ist glaube ich klar ..... der wert wird an 3(?) stellen gemessen :-) :-) - nicht an einer für alle ...später ggf mehr.
-------
!!! 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.

spiecky
Beiträge: 73
Registriert: 09.12.2017, 15:51

Re: Arduino über CUxD an CCU2 "anbinden"

Beitrag von spiecky » 28.12.2017, 20:25

aaaaahhhh.....wie gesagt - ich brauche immer nur ein paar Denkanstöße ;-)

Weil Du gesagt hast, dass 3mal gemessen wird, habe ich die Zeile float Abstand = sonar.ping_cm(); hinzugefügt und sonar.ping dann durch Abstand ersetzt
und siehe da......ES GEHT !!! :-)

Bis jetzt immer sauber die 106cm. Perfekt - vielen Dank für den Hinweis. Ich dachte das wäre egal.....das viele Messen hat den Sonar wohl durcheinander gebracht.

dondaik
Beiträge: 12886
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1584 Mal
Danksagung erhalten: 221 Mal

Re: Arduino über CUxD an CCU2 "anbinden"

Beitrag von dondaik » 29.12.2017, 00:12

OK, wenn es funktioniert ....
gemeint war aber das in einem unterprogramm eine variable mit dem messwert gefüllt wird und diese variable dann weiter genutzt wird ohne das das programm wieder aufgrufen wird - der aufruf erfolgt dann zum nächsten zeitintervall oder wann auch immer.....
-------
!!! 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.

spiecky
Beiträge: 73
Registriert: 09.12.2017, 15:51

Re: Arduino über CUxD an CCU2 "anbinden"

Beitrag von spiecky » 29.12.2017, 08:35

äh....wenn ich ehrlich bin, dachte ich, das ich das damit gemacht hätte hahahahaha......

dondaik
Beiträge: 12886
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1584 Mal
Danksagung erhalten: 221 Mal

Re: Arduino über CUxD an CCU2 "anbinden"

Beitrag von dondaik » 29.12.2017, 08:43

ok,
funzt - also alles gut.
-------
!!! 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.

Antworten

Zurück zu „CUxD“