Systemvariablen auf CCU2 von NodeMCU

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Thomas76
Beiträge: 23
Registriert: 04.04.2014, 11:32

Re: Systemvariablen auf CCU2 von NodeMCU

Beitrag von Thomas76 » 11.05.2019, 08:55

Guten Morgen!

Wie es im Moment aussieht, habe ich des Rätsels Lösung gefunden. Nach jeder Übertragung an die CCU2 sende ich eine Leerzeile. Habe den Testaufbau jetzt knapp eine Woche in Betrieb und es sieht sehr gut aus.
Danke für die Hilfe und Tipps die mir immer wieder neue Denkanstöße gegeben haben!

Mal sehen was für Probleme bis zum Ende des Projektes noch auftreten....
Danke und Gruß
Thomas

Code: Alles auswählen

#include <Wire.h>
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include "TSIC.h"

#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme; // I2C
TSIC TemperaturSensor(D3);
const byte Windsensorpin = D4;
unsigned long delayTime;

// Variablen für Temperaturmessung mit TSIC306
uint16_t temperature = 0;
float Temperatur_C = 0;

// Variablen für Windmessung
volatile boolean TX20IncomingData = false;
unsigned char chk;
unsigned char sa,sb,sd,se;
unsigned int sc,sf, pin;
unsigned int Himmelsrichtung;
String tx20RawDataS = "";
String Windrichtung_Gartensensor;

ESP8266WiFiMulti WiFiMulti;
WiFiClient client;
HTTPClient http;
int httpCode = http.GET();

const char* ssid="XXXXXXXX";
const char* password = "YYYYYYYY";

const char* HomematicIP = "192.168.0.11";

void setup() {
 Serial.begin(115200);
  delay(50);
  Serial.println();
  Serial.print("Wifi verbindet zu ");
  Serial.println( ssid );
  WiFi.begin(ssid,password);
  Serial.println();
  Serial.print("Verbinde");

  while( WiFi.status() != WL_CONNECTED ){
      delay(500);
      Serial.print(".");
  }
  Serial.println();
  Serial.println("Wifi Verbunden!");
  Serial.print("NodeMCU IP Addresse : ");
  Serial.println(WiFi.localIP() );
  Serial.println();

   if (client.connect(HomematicIP, 80)) {
     Serial.println("Connected to Homematic!");
     Serial.println();
 } else {
     Serial.println("Connection to Homematic failed");
     Serial.println();
 }
 bool status;
  status = bme.begin();
}

void loop() {
 
 Uebertragung();

}

void TemperaturmessungTSIC306() {

  if (TemperaturSensor.getTemperature(&temperature)) {
          Temperatur_C = TemperaturSensor.calc_Celsius(&temperature);
    //      Serial.print("Temperatur: ");
    //      Serial.println(Temperatur_C, 1);
    //      Serial.println();
  }
}

void Uebertragung() {


        float BME280Luftdruck = (bme.readPressure() / 100.0F);
        String urlBME280Luftdruck = "http://" + String(HomematicIP) + ":80/x.exe?ret=dom.GetObject(\"BME280_Luftdruck\").State(" + BME280Luftdruck + ")";
            Serial.println(urlBME280Luftdruck);
            http.begin(urlBME280Luftdruck);
            httpCode = http.GET();
            Serial.println("httpcode = " + String(httpCode));

    delay(500);

            String Leerzeile ="/n";
            http.begin(Leerzeile);
            httpCode = http.GET();

    delay(500);

        float BME280Temperatur = (bme.readTemperature());
        String urlBME280Temperatur = "http://" + String(HomematicIP) + ":80/x.exe?ret=dom.GetObject(\"BME280_Temperatur\").State(" + BME280Temperatur + ")";
            Serial.println(urlBME280Temperatur);
            http.begin(urlBME280Temperatur);
            httpCode = http.GET();
            Serial.println("httpcode = " + String(httpCode));

   delay(500);

            Leerzeile ="/n";
            http.begin(Leerzeile);
            httpCode = http.GET();

   delay(500);

        float BME280Luftfeuchtigkeit = (bme.readHumidity());
        String urlBME280Luftfeuchtigkeit = "http://" + String(HomematicIP) + ":80/x.exe?ret=dom.GetObject(\"BME280_Luftfeuchtigkeit\").State(" + BME280Luftfeuchtigkeit + ")";
            Serial.println(urlBME280Luftfeuchtigkeit);
            http.begin(urlBME280Luftfeuchtigkeit);
            httpCode = http.GET();
            Serial.println("httpcode = " + String(httpCode));

   delay(500);

            Leerzeile ="/n";
            http.begin(Leerzeile);
            httpCode = http.GET();

   delay(500);

        float BME280HoeheueberNull =(bme.readAltitude(SEALEVELPRESSURE_HPA));
        String urlBME280HoeheueberNull = "http://" + String(HomematicIP) + ":80/x.exe?ret=dom.GetObject(\"BME280_Hoehe_ueber_Null\").State(" + BME280HoeheueberNull + ")";
            Serial.println(urlBME280HoeheueberNull);
            http.begin(urlBME280HoeheueberNull);
            httpCode = http.GET();
            Serial.println("httpcode = " + String(httpCode));

   delay(500);
   
            Leerzeile ="/n";
            http.begin(Leerzeile);
            httpCode = http.GET();
            
   delay(500);
   
        TemperaturmessungTSIC306();
        String urlTSIC306 = "http://" + String(HomematicIP) + ":80/x.exe?ret=dom.GetObject(\"Temperatur_Gartensensor_TSIC306\").State(" + Temperatur_C + ")";
            Serial.println(urlTSIC306);
            http.begin(urlTSIC306);
            httpCode = http.GET();
            Serial.println("httpcode = " + String(httpCode));
            
   delay(500);

            Leerzeile ="/n";
            http.begin(Leerzeile);
            httpCode = http.GET();

   delay(500);

          String urlWindgeschwindigkeit = "http://" + String(HomematicIP) + ":80/x.exe?ret=dom.GetObject(\"Windgeschwindigkeit_Gartensensor\").State(" + sc + ")";
            Serial.println(urlWindgeschwindigkeit);
            http.begin(urlWindgeschwindigkeit);
            httpCode = http.GET();
            Serial.println("httpcode = " + String(httpCode));

    delay(500);

            Leerzeile ="/n";
            http.begin(Leerzeile);
            httpCode = http.GET();

    delay(500);

          String urlWindrichtung = "http://" + String(HomematicIP) + ":80/x.exe?ret=dom.GetObject(\"Windrichtung_Gartensensor\").State(" + Himmelsrichtung + ")";
            Serial.println(urlWindrichtung);
            http.begin(urlWindrichtung);
            httpCode = http.GET();
            Serial.println("httpcode = " + String(httpCode));

    delay(500);

            Leerzeile ="/n";
            http.begin(Leerzeile);
            httpCode = http.GET();


   delay(3*60*1000);
}


void isTX20Rising() {
  if (!TX20IncomingData) {
    TX20IncomingData = true;
  }  
}

void Windmessung() {

   if (TX20IncomingData) {
    char a[90];
    boolean validData = readTX20();
    Serial.println(tx20RawDataS);
    sprintf(a, "ID: %d\t%d\n", sa, B00100);
    Serial.write (a);
    sprintf(a, "Wind direction: %d\t%d\n", sb, se);
    Serial.write (a);
    sprintf(a, "Wind speed: %d\t%d\n", sc, sf);
    Serial.write (a);
    sprintf(a, "Checksum: %d\t%d\n", sd, chk);
    Serial.write (a);
 //   Windrichtung();
    if (validData){      
      Serial.println(" :) OK :) OK :) OK :) OK");
    } else {
      Serial.println(" !!! ERROR !!! ERROR !!!");
    }
    Serial.println("");
  }
}


boolean readTX20() {
    int bitcount=0;
    
    sa=sb=sd=se=0;
    sc=0;sf=0;
    tx20RawDataS = "";

    for (bitcount=41; bitcount>0; bitcount--) {
      pin = (digitalRead(Windsensorpin));
      if (!pin) {
        tx20RawDataS += "1";      
      } else {
        tx20RawDataS += "0";      
      }
      if ((bitcount==41-4) || (bitcount==41-8) || (bitcount==41-20)  || (bitcount==41-24)  || (bitcount==41-28)) {
        tx20RawDataS += " ";
      }      
      if (bitcount > 41-5){
        // start, inverted
        sa = (sa<<1)|(pin^1);
      } else
      if (bitcount > 41-5-4){
        // wind dir, inverted
        sb = sb>>1 | ((pin^1)<<3);
      } else
      if (bitcount > 41-5-4-12){
        // windspeed, inverted
        sc = sc>>1 | ((pin^1)<<11);
      } else
      if (bitcount > 41-5-4-12-4){
        // checksum, inverted
        sd = sd>>1 | ((pin^1)<<3);
      } else 
      if (bitcount > 41-5-4-12-4-4){
        // wind dir
        se = se>>1 | (pin<<3);
      } else {
        // windspeed
        sf = sf>>1 | (pin<<11);
      } 
          
      delayMicroseconds(1220);    
    }
    chk= ( sb + (sc&0xf) + ((sc>>4)&0xf) + ((sc>>8)&0xf) );chk&=0xf;
    delayMicroseconds(2000);  // just in case
    TX20IncomingData = false;  

    if (sa==4 && sb==se && sc==sf && sd==chk){      
      return true;
    } else {
      return false;      
    }
}

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“