#include "WiFi.h" #include "esp_now.h" uint8_t broadcastAddress1[] = {0xC8, 0xC9, 0xA3, 0xCE, 0xAC, 0xA4}; //klimaanlage unten //uint8_t broadcastAddress2[] = {0xC8, 0xC9, 0xA3, 0xC9, 0x04, 0xF8}; //klimaanlage oben uint8_t broadcastAddress2[] = {0x08, 0xB6, 0x1F, 0x37, 0xD5, 0xE8}; //boilerheizung //uint8_t broadcastAddress3[] = {0x08, 0xB6, 0x1F, 0x37, 0xC8, 0x6C}; //zusatzverbraucher typedef struct struct_message{ int id; int einspeise_leistung; int mittelwert_oben_links; int mittelwert_unten_links; int mittelwert_oben_rechts; int mittelwert_unten_rechts; } struct_message; struct_message myData; esp_now_peer_info_t peerInfo; int id = 1234; bool i = 0; bool impuls = 0; unsigned long letzte_impuls_zeit = 0; unsigned long vorletzte_impuls_zeit = 0; long zeit_differenz = 32000; unsigned long aktuelle_zeit = 0; unsigned long sende_zeit = 0; const byte rote_led = 21; const byte gruene_led = 23; byte rot = 0; byte gruen = 0; byte sende_fehler = 0; int intervall = 10000; void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status_now){ Serial.print("\r\nLast Packet Send Status:\t"); //Serial.println(status_now); if(status_now == ESP_NOW_SEND_SUCCESS)Serial.println("erfolg"); else{ sende_fehler++; Serial.println("mist"); Serial.println(sende_fehler); } //Serial.println(status_now == ESP_NOW_SEND_SUCCESS ? "erfolg" : "mist"); } void setup() { Serial.begin(115200); Serial.println(); pinMode(34, INPUT); /* ledcSetup(1, 12000, 8); ledcSetup(2, 12000, 8); ledcAttachPin(rote_led, 1); ledcAttachPin(gruene_led, 2); */ ledcAttach(rote_led, 12000, 8); ledcAttach(gruene_led, 12000, 8); ledcWrite(1, 0); ledcWrite(2, 0); WiFi.mode(WIFI_STA); if(esp_now_init() != ESP_OK){ Serial.println("Fehler"); return; } //esp_now_register_send_cb(OnDataSent); esp_now_register_send_cb((esp_now_send_cb_t)OnDataSent); peerInfo.channel = 0; peerInfo.encrypt = false; memcpy(peerInfo.peer_addr, broadcastAddress1, 6); if(esp_now_add_peer(&peerInfo) != ESP_OK){ Serial.println("peer Fehler bei Adresse 1"); return; } memcpy(peerInfo.peer_addr, broadcastAddress2, 6); if (esp_now_add_peer(&peerInfo) != ESP_OK) { Serial.println("peer Fehler bei Adresse 2"); return; } } void loop() { aktuelle_zeit = millis(); if(analogRead(34) > 2800)i = 0; //2800 if(analogRead(34) < 500 && i == 0)i = 1; //1000 if(i == 1 && (aktuelle_zeit - letzte_impuls_zeit) > 150){ //maximale Einspeiseleistung ist 9,5kw bei 2000imp/kwh sind das minimal 190ms zwischen den impulsen impuls = 1; letzte_impuls_zeit = aktuelle_zeit; //Serial.println("i"); } if(impuls == 1){ zeit_differenz = letzte_impuls_zeit - vorletzte_impuls_zeit; vorletzte_impuls_zeit = letzte_impuls_zeit; impuls = 0; //Serial.println("impuls"); } if(zeit_differenz < (aktuelle_zeit - vorletzte_impuls_zeit))zeit_differenz = aktuelle_zeit - vorletzte_impuls_zeit; if(sende_fehler > 0)intervall = 1000; else intervall = 10000; if((aktuelle_zeit - sende_zeit) >= intervall){ if(zeit_differenz < 150)zeit_differenz = 150; //division durch null sicher ausschließen und entprellen long leistung = 1800000 / zeit_differenz; if(leistung < 0)leistung = 0; if(leistung > 9999)leistung = 9999; myData.einspeise_leistung = int(leistung); myData.id = id; if(myData.einspeise_leistung > 50){ gruen = 200; rot = 0; } else{ gruen = 0; rot = 200; } ledcWrite(rote_led, rot); ledcWrite(gruene_led, gruen); sende_zeit = aktuelle_zeit; myData.mittelwert_oben_links = 9999; myData.mittelwert_unten_links = 9999; myData.mittelwert_oben_rechts = 9999; myData.mittelwert_unten_rechts = 9999; sende_fehler = 0; /* WiFi.mode(WIFI_STA); if (esp_now_init() != ESP_OK) { Serial.println("Fehler"); return; }*/ esp_err_t result = esp_now_send(0, (uint8_t *) &myData, sizeof(myData)); if(result == ESP_OK)Serial.println("erfolgreich gesendet"); else Serial.println("fehler beim senden"); //WiFi.disconnect(true); Serial.println(""); Serial.print("zeitdifferenz: "); Serial.println(zeit_differenz); Serial.print("id:"); Serial.println(myData.id); Serial.print("einspeise_leistung: "); Serial.println(myData.einspeise_leistung); Serial.print("mittelwert_oben_links: "); Serial.println(myData.mittelwert_oben_links); Serial.print("mittelwert_unten_links: "); Serial.println(myData.mittelwert_unten_links); Serial.print("mittelwert_oben_rechts: "); Serial.println(myData.mittelwert_oben_rechts); Serial.print("mittelwert_unten_rechts: "); Serial.println(myData.mittelwert_unten_rechts); Serial.println(""); } }