Benachrichtigungen
Alles löschen

IR-Lesekopf ohne Tasmota auslesen plus Web-Client

14 Beiträge
6 Benutzer
3 Likes
727 Ansichten
(@hektor54)
Vorsichtiger Stromfühler
Beigetreten: Vor 6 Monaten
Beiträge: 10
Themenstarter  

1. Rohdaten betrachten (Teil1)

Es gibt zu diesem Thema bereits viele Beiträge im Netz. Die meisten beziehen sich auf eine fertige Tasmota-Lösung. Der Nachteil ist, dass man die Daten über MQTT nur alle 10 Sekunden erhält, was für die Regelung eines Wechselrichters wie z.B. Soyosource nicht wirklich funktioniert. Ziel ist es die Daten im Sekundentakt zu erhalten.

Zunächst lesen wir die Rohdaten des IR-Lesekopfes über ein TTL-USB Modul in Hterm oder Putty ein. Das TTL-USB Modul  ist ein AZDelivery UART-TTL USB Adapter mit CH340G. Der macht die wenigsten Probleme mit den COM-Treibern. Man kann natürlich auch ein USB zu TTL Serielles Adapterkabel verwenden. Die Boudrate muss bei meinem Zweirichtungszähler (Typ mMe4.0) auf 9600 eingestellt werden.

Hier nun der Komplette Datensatz. Die für uns wichtigen Sequenzen habe ich markiert.

Ich habe mir die Daten in einen Texteditor kopiert um sie dann so darzustellen, dass man einen Überblick bekommt. Daten wie Herstellerkennung, Zähler-ID usw. haben mich nicht interessiert.

Hilfreich ist auch diese Web-Seite ( https://tasmota.github.io/docs/Smart-Meter-Interface/#emh-ehzm-sml ).

Hier findet man schon mal die SML-Sequenzen für die Verbrauchsdatensätze der unterschiedlichen Zählertypen.

Start Datensatz

1B 1B 1B 1B 01 01 01 01 76 05 02 CC 9D 94 62 00 62 00 72 63 01 01 76 01 07 FF FF FF FF FF FF 05 00 EE DF 32 0B 0A 01 45 4D 48 00 00 BF AF 6E 72 62 01 65 00 EE E0 9E 62 01 63 36 2E 00 76 05 02 CC 9D 95 62 00 62 00 72 63 07 01 77 07 FF FF FF FF FF FF 0B 0A 01 45 4D 48 00 00 BF AF 6E 07 01 00 62 0A FF FF 72 62 01 65 00 EE E0 9E 78 77 07 01 00 60 32 01 01 01 01 01 01 04 45 4D 48 01 77 07 01 00 60 01 00 FF 01 01 01 01 0B 0A 01 45 4D 48 00 00 BF AF 6E 01

Datensatz Verbrauch                                                                                            Wert= 65277384 kWh

77 07 01 00 01 08 00 FF 64 1C 01 04 72 62 01 65 00 EE E0 9E 62 1E 52 FF 69 00 00 00 00 03 E4 0D C8 01

Datensatz Einspeisung                                                                                         Wert= 32638675 kWh

77 07 01 00 02 08 00 FF 01 72 62 01 65 00 EE E0 9E 62 1E 52 FF 69 00 00 00 00 32 63 86 75 01

Datensatz Phase 1                                                                            Wert= 105 Watt

77 07 01 00 24 07 00 FF 01 72 62 01 65 00 EE E0 9E 62 1B 52 00 55 00 00 00 0F 01

Datensatz Phase 2                                                                            Wert= 0 Watt

77 07 01 00 38 07 00 FF 01 72 62 01 65 00 EE E0 9E 62 1B 52 00 55 00 00 00 00 01

Datensatz Phase 3                                                                          Wert= -102 Watt

77 07 01 00 4C 07 00 FF 01 72 62 01 65 00 EE E0 9E 62 1B 52 00 55 00 00 00 9A 01

Aktueller Verbrauch                                                                       Wert= -3 Watt

77 07 01 00 10 07 00 FF 01 72 62 01 65 00 EE E0 9E 62 1B 52 00 55 00 00 FF FD 01  

01 01 63 27 31 00 76 05 02 CC 9D 96 62 00 62 00 72 63 02 01 71 01 63 1E 5C 00 00 00 1B

Ende Datensatz

1B 1B 1B 1A 02 57 B5 (Datensatzlänge= 360)

Die Daten vom Verbrauch und Einspeisung müssen durch 1000 dividiert werden.

Bei diesem Beispiel wird auf Phase1+2 verbraucht und auf Phase3 eingespeist. Bitte jetzt keine Diskussionen ob man das darf, ist nur ein Beispiel, um auch negative Werte anzuzeigen.

Teil 2: Code für ESP32


   
Zitat
 jay
(@jay)
Heroischer Stromgenerator
Beigetreten: Vor 2 Jahren
Beiträge: 1261
 

Veröffentlicht von: @hektor54

Bei diesem Beispiel wird auf Phase1+2 verbraucht und auf Phase3 eingespeist. Bitte jetzt keine Diskussionen ob man das darf,

Warum sollte man das nicht dürfen? Es ist ja technisch quasi garnicht anders möglich.

Veröffentlicht von: @hektor54

Ziel ist es die Daten im Sekundentakt zu erhalten.

Und das geht mit dem normalen sml Decoder nicht?


   
AntwortZitat
mager
(@mager)
Batterielecker
Beigetreten: Vor 2 Jahren
Beiträge: 273
 

Mach Dir keinen unnützen Sorgen; die Leistungsregelung hat eine gewisse Trägheit und Sekundentakt ist unnötig. Mein Hoymiles mag es nicht, wenn ich ihn im Sekundentakt mit neuen Werten füttere. Deswegen habe ich die Ziellast auf +20W gestellt statt auf +-0W; so habe ich keine unnötige Über-Einspeisung.


   
AntwortZitat
 John
(@john)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 78
 

Veröffentlicht von: @hektor54

Der Nachteil ist, dass man die Daten über MQTT nur alle 10 Sekunden erhält

Da liegst du falsch. Man kann das in Tasmota mit Scripting umsetzen, wie in folgendem Beispiel gezeigt:

 

>T

=>publish tele/%topic%/powerAV/value %1xpowerAV%

 Die Variable 'xpowerAV' beinhaltet den Wert. Die Zahl '1' davor, die Anzahl der Nachkommastellen.

 Ich verwendet das selbst, um Nulleinspeisung umzusetzen.

 

Hilfreich ist es auch die gleitende Mittelwertbildung zu nutzen.

Hierbei ist die Variable 'xpowerAV' wie folgt zu definieren,um etwa einen Mittelwert über die letzten 5 Werte zu erhalten.

>D

; average over xx savings
M:xpowerAV=0 5

 

John


   
Space reacted
AntwortZitat
(@hektor54)
Vorsichtiger Stromfühler
Beigetreten: Vor 6 Monaten
Beiträge: 10
Themenstarter  

Wenn du auf L1= 0kVA, L2= 3kVA und auf L3= -3kVA hast, beträgt die Schieflast 6kVA.

"In der Photovoltaik ist von Schieflast die Rede, wenn die Leistungsdifferenz zwischen den einzelnen Phasen, in die Wechselrichter ins Stromnetz einspeisen größer als 4,6 kVA ist". Oder interpretiere ich das falsch.

Bei unseren Lasten im Haushalt oder Eigenheim wird das der Energieversorger wohl kaum mitbekommen.

Beim Soyosource wird ein AC-Power-Meter mitgeliefert, diese Einheit übergibt an den Soyo aller 0,5sek die Leistungsdaten und der Soyo macht die Mittelwertbildung. Das mag beim Hoymiles wohl anders sein.

Ich weiß, viele Wege führen nach Rom. Mein Ziel war es eine Lösung ohne MQTT und Raspberry PI, sondern nur mit ESP32 umzusetzen. Zum Üben erstellte ich erst  eine Web-Seite die nicht mehr anzeigt als die Tasmota-Lösung.


   
AntwortZitat
 John
(@john)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 78
 

Veröffentlicht von: @hektor54

eine Lösung ohne MQTT

Du kannst anstelle von 'publish' auch 'http' verwenden, dann ist es auch ohne MQTT machbar.


   
AntwortZitat
(@hektor54)
Vorsichtiger Stromfühler
Beigetreten: Vor 6 Monaten
Beiträge: 10
Themenstarter  

 IR-Lesekopf in ESP32 einlesen und auf Web-Client ausgeben

Einleitend muss ich gestehen, dass ich von Haus aus kein Programmierer bin. Erst seit ca. einem Jahr beschäftig ich mich mit der Welt der Arduinos. Ich bin für konstruktive Kritik jederzeit offen. Vielleicht können wir es gemeinsam den Sketch verbessern.

Mir ist es z.B. nicht gelungen diesen Sketch auf einen D1 Mini Nodemcu with ESP8266-12F WLAN zum Laufen zu bringen. Vielleicht kann hier eine Lösung gefunden werden.

Ziel dieses Sketches war es die Daten zuverlässig einzulesen und in einem Web-Client darzustellen. Weiterhin werden die Daten an einer seriellen Schnittstelle (TX19) im Sekundentakt übergeben werden. Leider wird diese Zeit wenn der Web-Client die Daten anfordert nicht immer eingehalten. Kann man im Seriellen Monitor (Zeitstempel einschalten) sehen. Vielleicht hat hier noch einer eine Idee.

Spoiler
Code Teil1
// Anregungen: Film-Werk56  https://www.youtube.com/watch?v=IUkMOGQ0ZQs 
//                          https://randomnerdtutorials.com/esp32-web-server-arduino-ide/ 

// ESP32: AZDelivery ESP32S Dev Kit C V4 NodeMCU WLAN WiFi
// Board: ESP32 Wrover Kit (all Versions)
// IDE 2.2.1
// Zweirichtungszähler mMe4.0

#include <WiFi.h>
#include <Wire.h>
#include <stdlib.h>

const char* ssid = "meinNetz";
const char* password = "meineIP";

#define RX18 18  // Serieller Input optische Info-/MSB-Schnittstelle
#define TX19 19  // Serieller Output

int Led1 = 26;

unsigned char inByte = 0;                                   // Ir Data
unsigned char Data[300];                                    // Ir Data 16 Bit
unsigned char Value[5] = { 0x30, 0x30, 0x30, 0x30, 0x00 };  // Vorbelegung
unsigned char Z;                                            // fuer Umrechnung Hex/Dez
char Val[9];                                                // 8 Bytes + NULL

// Current time
unsigned long currentTime = millis();
// Previous time
unsigned long previousTime = 0;
// Define timeout time in milliseconds (example: 2000ms = 2s)
const long timeoutTime = 2000;

int Ph1;    // Phase1
int Ph2;    // Phase2
int Ph3;    // Phase3
int Ph4;    // Phase
int Power;  // aktueller Verbrauch EGG
float VBZ;  // Verbrauchszähler
float V18;  // Verbrauchszähler
float EBZ;  // Einspeisung
float V28;  // Einspeisung
int V180;   // Export TX19
int V280;   // Export TX19

volatile int Counter = 0;  // Pointer Ir Data Array

int SML = 0;     // SML Anzahl Startbytes
byte Start = 0;  // Warte auf Daten

WiFiServer server(80);
// Variable to store the HTTP request
String header;

void setup() {
  Serial.begin(115200);

  Serial1.begin(9600, SERIAL_8N1, RX18, TX19);  // RX18 IR-Lesekopf Eingang, TX19 Output

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
  }

  // Print local IP address and start web server
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.print("MAC: ");
  Serial.println(WiFi.macAddress());

  server.begin();

  pinMode(Led1, OUTPUT);     // Aktivitaets LED
  digitalWrite(Led1, HIGH);  // LED an

  Serial.println("");
  Serial.print("Version: ");                 // Daten werden gespeichert
  Serial.print(strrchr(__FILE__, '\\') + 1); // File-Name der .ino
  Serial.print(" ");
  Serial.print(__DATE__);                    // Datum des Ladens auf den ESP
  Serial.print(" ");
  (__TIME__);                                // Zeit des Ladens auf den ESP
  delay(1000);
}

// Convert Hex Byte to ASCII Character
char HexToChar(unsigned char ZZ) {
  if (ZZ == 00) return '0';
  if (ZZ == 01) return '1';
  if (ZZ == 02) return '2';
  if (ZZ == 03) return '3';
  if (ZZ == 04) return '4';
  if (ZZ == 05) return '5';
  if (ZZ == 06) return '6';
  if (ZZ == 07) return '7';
  if (ZZ == 0x8) return '8';
  if (ZZ == 0x9) return '9';
  if (ZZ == 0xA) return 'A';
  if (ZZ == 0xB) return 'B';
  if (ZZ == 0xC) return 'C';
  if (ZZ == 0xD) return 'D';
  if (ZZ == 0xE) return 'E';
  if (ZZ == 0xF) return 'F';
}

// Converting from Hex to Decimal long
int16_t hex2int(const char* hex) {
  uint16_t value;  // unsigned to avoid signed overflow
  for (value = 0; *hex; hex++) {
    value <<= 4;
    if (*hex >= '0' && *hex <= '9')
      value |= *hex - '0';
    else if (*hex >= 'A' && *hex <= 'F')
      value |= *hex - 'A' + 10;
    else if (*hex >= 'a' && *hex <= 'f')
      value |= *hex - 'a' + 10;
    else
      break;  // stop at first non-hex digit
  }
  return value;
}

// Weiter geht es in Code Teil2: void loop()...

Da man anscheinend pro Beitrag nur begrenzte Code-Sequenzen speichern kann, werde ich es in drei Beiträge aufteilen.

 

Diese r Beitrag wurde geändert Vor 5 Monaten 7 mal von Hektor54

   
AntwortZitat
(@hektor54)
Vorsichtiger Stromfühler
Beigetreten: Vor 6 Monaten
Beiträge: 10
Themenstarter  

Code Teil 2

Spoiler
Code Teil 2

void loop() {

// Einlesen der Daten
if (Serial1.available()) //IR Daten
{
digitalWrite(Led1, LOW);

inByte = Serial1.read();
if (inByte == 27) SML++;
else SML = 0; // Hex 1B 1B 1B 1B, SML Nachricht Start und Ende Sequenz
}
if (SML == 4) // SML Data
{
while (Counter < 300) {
if (Serial1.available()) {
inByte = Serial1.read();
Data[Counter++] = inByte; // SML Datensatz einlesen
}
}
Counter = 0;
}
if (SML == 4) // Datensatz empfangen
{
SML = 0; // Reset SML Data Block Flag
for (int x = 0; x < 300; x++) {
// Phase1 ----------------------------------------------------------------------
if (Data[x] == 36 && Data[x + 1] == 7 && Data[x + 2] == 00 && Data[x + 3] == 255) {
Value[0] = Data[x + 18];
Value[1] = Data[x + 19];
Value[2] = Data[x + 20];
Value[3] = Data[x + 21];

Z = Value[0] & 240;
Z = Z >> 4;
Val[0] = HexToChar(Z);
Z = Value[0] & 15;
Val[1] = HexToChar(Z);

Z = Value[1] & 240;
Z = Z >> 4;
Val[2] = HexToChar(Z);
Z = Value[1] & 15;
Val[3] = HexToChar(Z);

Z = Value[2] & 240;
Z = Z >> 4;
Val[4] = HexToChar(Z);
Z = Value[2] & 15;
Val[5] = HexToChar(Z);

Z = Value[3] & 240;
Z = Z >> 4;
Val[6] = HexToChar(Z);
Z = Value[3] & 15;
Val[7] = HexToChar(Z);

Val[8] = '\0';
Ph1 = (hex2int(Val));
}
// Phase2
if (Data[x] == 56 && Data[x + 1] == 7 && Data[x + 2] == 00 && Data[x + 3] == 255) {
Value[0] = Data[x + 18];
Value[1] = Data[x + 19];
Value[2] = Data[x + 20];
Value[3] = Data[x + 21];

Z = Value[0] & 240;
Z = Z >> 4;
Val[0] = HexToChar(Z);
Z = Value[0] & 15;
Val[1] = HexToChar(Z);

Z = Value[1] & 240;
Z = Z >> 4;
Val[2] = HexToChar(Z);
Z = Value[1] & 15;
Val[3] = HexToChar(Z);

Z = Value[2] & 240;
Z = Z >> 4;
Val[4] = HexToChar(Z);
Z = Value[2] & 15;
Val[5] = HexToChar(Z);

Z = Value[3] & 240;
Z = Z >> 4;
Val[6] = HexToChar(Z);
Z = Value[3] & 15;
Val[7] = HexToChar(Z);

Val[8] = '\0';
Ph2 = (hex2int(Val));
}
// Phase3
if (Data[x] == 76 && Data[x + 1] == 7 && Data[x + 2] == 00 && Data[x + 3] == 255) {
Value[0] = Data[x + 18];
Value[1] = Data[x + 19];
Value[2] = Data[x + 20];
Value[3] = Data[x + 21];

Z = Value[0] & 240;
Z = Z >> 4;
Val[0] = HexToChar(Z);
Z = Value[0] & 15;
Val[1] = HexToChar(Z);

Z = Value[1] & 240;
Z = Z >> 4;
Val[2] = HexToChar(Z);
Z = Value[1] & 15;
Val[3] = HexToChar(Z);

Z = Value[2] & 240;
Z = Z >> 4;
Val[4] = HexToChar(Z);
Z = Value[2] & 15;
Val[5] = HexToChar(Z);

Z = Value[3] & 240;
Z = Z >> 4;
Val[6] = HexToChar(Z);
Z = Value[3] & 15;
Val[7] = HexToChar(Z);

Val[8] = '\0';
Ph3 = (hex2int(Val));
}

// Verbrauchszähler --------------------------------------------------------------
if (Data[x] == 1 && Data[x + 1] == 8 && Data[x + 2] == 00 && Data[x + 3] == 255) {
Value[0] = Data[x + 25];
Value[1] = Data[x + 26];
Value[2] = Data[x + 27];
Value[3] = Data[x + 28];

Z = Value[0] & 240;
Z = Z >> 4;
Val[0] = HexToChar(Z);
Z = Value[0] & 15;
Val[1] = HexToChar(Z);

Z = Value[1] & 240;
Z = Z >> 4;
Val[2] = HexToChar(Z);
Z = Value[1] & 15;
Val[3] = HexToChar(Z);

Z = Value[2] & 240;
Z = Z >> 4;
Val[4] = HexToChar(Z);
Z = Value[2] & 15;
Val[5] = HexToChar(Z);

Z = Value[3] & 240;
Z = Z >> 4;
Val[6] = HexToChar(Z);
Z = Value[3] & 15;
Val[7] = HexToChar(Z);

Val[8] = '\0';
VBZ = (strtol(Val, NULL, 16)); // // Wert Verbrauchszähler
}
// Einspeisung -------------------------------------------------------------------
if (Data[x] == 2 && Data[x + 1] == 8 && Data[x + 2] == 00 && Data[x + 3] == 255) {
Value[0] = Data[x + 22];
Value[1] = Data[x + 23];
Value[2] = Data[x + 24];
Value[3] = Data[x + 25];

Z = Value[0] & 240;
Z = Z >> 4;
Val[0] = HexToChar(Z);
Z = Value[0] & 15;
Val[1] = HexToChar(Z);

Z = Value[1] & 240;
Z = Z >> 4;
Val[2] = HexToChar(Z);
Z = Value[1] & 15;
Val[3] = HexToChar(Z);

Z = Value[2] & 240;
Z = Z >> 4;
Val[4] = HexToChar(Z);
Z = Value[2] & 15;
Val[5] = HexToChar(Z);

Z = Value[3] & 240;
Z = Z >> 4;
Val[6] = HexToChar(Z);
Z = Value[3] & 15;
Val[7] = HexToChar(Z);

Val[8] = '\0';
EBZ = (strtol(Val, NULL, 16)); // Wert Einspeisezähler
}

V18 = VBZ / 10000;
V28 = EBZ / 10000;
}

Serial.print("Ph1 ");
Serial.print(Ph1);
Serial.print(" Ph2 ");
Serial.print(Ph2);
Serial.print(" Ph3 ");
Serial.print(Ph3);
Serial.print(" VBZ ");
Serial.print(V18); // Verbrauchszähler
Serial.print(" EBZ ");
Serial.println(V28); // Einspeisezähler

// Serial1 an TX19
char buffer[9];
sprintf(buffer, "%05d", int(Ph1));
Serial1.print(buffer);
Serial1.print(";");
sprintf(buffer, "%05d", int(Ph2));
Serial1.print(buffer);
Serial1.print(";");
sprintf(buffer, "%05d", int(Ph3));
Serial1.print(buffer);
Serial1.print(";");

V180 = round(VBZ / 100);
V280 = round(EBZ / 100);
sprintf(buffer, "%08d", int(V180));
Serial1.print(buffer);
Serial1.print(";");
sprintf(buffer, "%08d", int(V280));
Serial1.println(buffer);
}
digitalWrite(Led1, HIGH);
}

Diese r Beitrag wurde geändert Vor 5 Monaten 3 mal von Hektor54

   
AntwortZitat
(@hektor54)
Vorsichtiger Stromfühler
Beigetreten: Vor 6 Monaten
Beiträge: 10
Themenstarter  

Sulky

Diese r Beitrag wurde geändert Vor 5 Monaten von Hektor54

   
AntwortZitat
(@hektor54)
Vorsichtiger Stromfühler
Beigetreten: Vor 6 Monaten
Beiträge: 10
Themenstarter  

Ich hänge jetzt den kompletten Code als Datei an.

 


   
AntwortZitat
 d4t
(@d4t)
Vorsichtiger Stromfühler
Beigetreten: Vor 4 Monaten
Beiträge: 10
 

Hallo Hektor54,

ich hab dein Skript nur kurz angeschaut und ein Problem scheint mir das sequenzielle Abarbeiten des Webservers und der Seriellen Schnittstelle.
Wenn du noch Interesse hast kann ich dir ein paar Ideen geben, ich hab ähnliches vor dh. wenn du mittlerweile eine Andere Lösung hast wäre toll davon zu erfahren.

Ohne jetzt wirklich zu wissen was genau nicht funktioniert alles in einer Funktion und alles in der Loop, heißt halt in der Zeit in der der ESP einen Webrequest abarbeitet kann er nicht seriell lesen und umgekehrt.

Für mich stellt sich die Aufgabe wie folgt da:

1.) Einlesen des Sensors
2.) Interpretation der Daten
3.) Ausgabe der Daten über Webserver.

Ich würde nicht alles auf einmal machen sondern erst mit einem Skript beginnen was 1 & 2 abdeckt. Dh. kein WLAN, kein Webserver.

Erst wenn das funktioniert machen wir den Webserver asynchron dazu, dh. der Webserver läuft nicht in der loop.
Da kann ich dir die Tage mal Beispielcode schicken. Ich mach es immer so das die Webseite in einem String steht und
dann beim Webrequest immer "nur" die aktuellen Werte in den String geschrieben werden und der request beantwortet.

 

Grüße

d4t


   
AntwortZitat
 R300
(@r300)
Vorsichtiger Stromfühler
Beigetreten: Vor 9 Monaten
Beiträge: 47
 

Die Tasmota Software kann auch schneller auslesen. Kann man einfach über diese Scriptkonfiguration ändern. Ich meine man kann das Intervall auch auf "Echtzeit" ändern. Bei meinem Zähler war das dann sekündlich. Also er liefert den aktuellen Stromverbrauch sowieso nur sekündlich.

Beim Tasmota hast du dann ja auch ein Webinterface...

 

Ich bin aber auf esphome umgestiegen, weil das die Daten direkt an HomeAssistant schicken kann und ein anderer ESP32 bei mir dann direkt die Daten bekommt und den Soyosource Regeln kann.

Funktioniert auch sekündlich.

Hier ist meine esphome Config füe den Lesekopf (Habe ich statt der Tasmota Software geflasht).

https://github.com/kev300/HA_with_EspHome/blob/main/esp-home_config/stromzaehler.yaml


   
mager reacted
AntwortZitat
 R300
(@r300)
Vorsichtiger Stromfühler
Beigetreten: Vor 9 Monaten
Beiträge: 47
 

@mager Mein Soyosource reagiert in unter 500ms auf Laständerungen. Es macht schon Sinn die Regelung so schnell wie möglich zu machen. Vorausgesetzt man bekommt das Überschießen in den Griff und nutzt nicht einfach nur einen gleitenden Durchschnittswert. 😉


   
mager reacted
AntwortZitat
mager
(@mager)
Batterielecker
Beigetreten: Vor 2 Jahren
Beiträge: 273
 

Ah, sehr praktisch. Die Hoymiles HM-XXX mögen es wohl nicht, wenn über die Funkschnittstelle mehr als 1 Update/10sec kommt.


   
AntwortZitat
Teilen: