Logarex LK13BE606739 erfahrungen

Hallo zusammen

Ich habe vor mit Arduino eine Nulleinspeisung zu realisieren.

Dabei bin ich auf einen schnellen Sendeintervall der Logarex IR Schnittstelle angewiesen am besten akt. Leistung alle Sekunde.

Projekte gibt es hier schon einige, mir fehlt vorerst die grundlegende Info in welchen Zeitintervall die IR Schnittstelle die Daten sendet, diese Info habe ich auch vom Netzbetreiber nicht bekommen.

Vielleicht kann mir jemand auskunft dazu geben.

Ich hab jetzt erst nach x mal lesen verstanden, was Du da eigentlich hast.
Du willst SML lesen.
Ja nu.
Gibt es hier genĂŒgend AnsĂ€tze.
Was willst Du auslesen?

So wie ich das verstehe will er die Leistung auslesen ,um damit Verbraucher anzuschalten, damit die selbst generierte Leistung aus der PV Anlage nicht zum Haus hinaus fließt.
GrĂŒĂŸe Uwe

Achso...
Ok, das wĂ€re dann 2.8.x fĂŒr den Einschaltpunkt und 1.8.x fĂŒr den Ausschaltpunkt :slight_smile:

Danke fĂŒr eure schnellen Antworten

Sorry dass ich mich missverstĂ€ndlich ausgedrĂŒckt habe. Richtig ich will SML lesen.

Bevor ich in das Projekt einsteige ist mir wichtig ob jemand zum Logarex Sendeintervall der ja vom Hersteller festgelegt wurde etwas sagen kann, evtl. hat jemand den gleichen ZĂ€hler.

Zum ausregeln ist die aktuelle Leistung der wichtigste Parameter.
Wenn der allerdings alle 30 oder 60 Sekunden daherkommt wird eine Überschussregelung eher ungĂŒnstig werden.
Gruß Tinber

Nein.
Das Senderintervall ist von der Norm festgelegt.
Es ist aber vollkommen egal in welchem Intervall die Daten gesendet werden.

Wichtig ist, zu wissen wie der Aufbau der Daten ist.
Auch das steht in der Norm.
Danach wird ein Stream bestehend aus mindestens 3 Nachrichten, der Startnachricht, der Werteliste und der Endnachricht ĂŒbergeben und den musst Du auswerten.

Haben wir hier schon mehrfach gemacht.
Es gibt verschiedene AnsÀtze.
Die meissten sind speziell fĂŒr die jeweilige Nutzung entwickelt worden und mĂŒssen nicht in anderen Projekten funktionieren.
Da wird zum grossen Teil auf den entsprechenden Wert geparst und dann ĂŒbernommen. Mit allen Risiken die sich daraus ergeben.

Dann gibt es sowas wie volkszÀhler, die den gesamten Stream zwischenpuffern, was meisst auch vollkommen i.O. ist, aber aufgrund der unbestimmten LÀnge des Streams auch in die Hose gehen kann.

Ich selbst verfolge einen anderen Ansatz, der sich an die Norm hÀlt und zerlege die Nachrichten. Da nur deren LÀnge in der Norm festgelegt ist, kann ich die auch sicher zwischenspeichern, solange ich einen entsprechenden Speicher vorhalte.

Auf was fĂŒr einem Controller lĂ€sst Du das den laufen?

Mit der Norm habe ich mich vor lÀngerer zeit beschÀftigt und meine da herausgelesen zu haben das der Sendeintervall zwischen 1 und 60 Sekunden liegen kann. Darum erst mal Vorsicht.

Auslesen wollte ich eigentlich mit dem Hichi Lesekopf TTL auf den Mega2560 (LeihgerÀt).
Ist der Hichi nicht identisch mit VolkszĂ€hler gibt’s bei EBAY?

Leider ist der ZÀhler im Keller da werde ich sicher viel Freizeit auf der Treppe verbringen bis das Ding lÀuft.

Nein.
Das Sendeintervall ist nach Abschluss der letzten Sendung auf maximal 120 2 Sekunden festgelegt. Ab 0 ist also alles möglich :slight_smile:

Das ist gut.
Da kannst Du HardwareSerial benutzen, das ist eindeutig stabiler als Softwareserial.

Nein.
Einmal runtergehen mit dem Laptop und an den ZĂ€hler mit dem Kopf.
Sicherstellen, dass Du immer einen vollstÀndigen Stream bekommst.
Wenn das geht, den Kopf dauerhaft befestigen.

Und dann nur noch einmal fĂŒr den Endcode - fertig.

Also nach der Norm könnten es auch 120 Sekunden sein, das ist die UnwÀgbarkeit mit der ich nicht unbedingt starten wollte.

Einmal runtergehen 

Wie bekomme ich den Stream ? mit Serial Monitor Ausgabe?
Ok das erleichtert den Anfang schon mal.

Warum nicht?
Du bist doch nicht drauf angewiesen zu einem festen Zeitpunkt zu warten!
Das macht der Code von ganz alleine.

Ich muss mal was nachschauen...

Da ich nur den Überschuss ausregeln will ist es wichtig das die Leistungsdaten die vom ZĂ€hler kommen (Bezug/ Einspeisung) nicht zu alt sind sonst wird die Sache schnell kontraproduktiv.

Wir sprechen hier von 2 Sekunden!
(Die RealitÀt liegt bei etwa 400ms zwischen Ende letztem und Anfang nÀchstem Stream)

Ich ĂŒberleg grade, ob ich hier weitermache.
ErklĂ€r mal, was Du da fĂŒr eine Anwendung hast, die jenseits der Schaltzeiten fĂŒr abschaltbare Lasten sein soll.

Nein.
Das Sendeintervall ist nach Abschluss der letzten Sendung auf maximal 120 Sekunden festgelegt. Ab 0 ist also alles möglich :slight_smile:
Ich habe dich so verstanden das auch 120 Sekunden möglich sind. 2 Sekunden sind natĂŒrlich kein Thema.
Ich will den ĂŒberschuss mit E-Heizkörper in den Boiler bringen
mit Triaksteuerung kann der Controller da schnell reagieren.

Oh sorry, da hab ich mich vertan.
Nein, es sind 2 Sekunden.

Ok. Ich hab irgendwo in meinen Breiten einen Code, den ich mal fĂŒr einen MEGA aufbereitet hatte... Ich suche mal. Und wenn nciht, dann zumindest zu morgen, weil das Backup finde ich vermutlich eher :slight_smile:

Noch ne Zwischenfrage: Wie gut kannst Du mit Code umgehen? Erst seit ein paar Stunden dabei oder kannst ggfls. auch selbst kurzfristig was Ă€ndern, wenn man Dir nen Anstoß gibt?

Hab mal was grösereres mit C-Controll gemacht,
das schwierige ist immer sich in das was nicht selbstgemacht ist hineinzudenken :grinning:
Wird sicher gehen. Danke

Ich such Dir mal was zu morgen zusammen. Dann abend einmal in den Keller :wink:

Ich hab noch einen ganz kurzen Sketch.
Der wirft nur 500 bytes aus, von dem was der ZÀhler hergibt und ein paar Zeiten dazu - dann gibts ne kurze Pause damit Du das auch auf dem Display siehst und dann wartet der wieder auf den nÀchsten Stream.

// #define SSERIAL

#ifdef SSERIAL
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
#else
#define mySerial Serial1
#endif

enum class FILESTATE {START, CHOICE, END};
FILESTATE filestate = FILESTATE::START;

const uint32_t pauseTime = 1000;
const uint16_t l = 500;
uint16_t v[l] = {0};
uint16_t idx;
uint32_t lastmillis;
byte myByte;

void setup()
{
  Serial.begin(115200);
  mySerial.begin(9600);
  Serial.println(F("\r\nStart...\r\n"));
  lastmillis = millis();
}

void  loop()
{
  sml();
}
//
void sml()
{
  if (mySerial.available())
  {
    uint32_t myMillis = millis();
    myByte = mySerial.read();
    Serial.print("0x");
    if (myByte < 0x10)
    { Serial.print(0); }
    Serial.print(myByte, HEX);
    Serial.print(", ");
    if (idx && (idx + 1) % 10 == 0)
    { Serial.println(); }
    v[idx] = myMillis - lastmillis;
    lastmillis = myMillis;
    check();
    idx++;
  }
}
//
void check()
{
  switch (filestate)
  {
    case FILESTATE::START:
      if (idx == 4)
      {
        filestate = FILESTATE::CHOICE;
      }
      else if (myByte != 0x1B)
      {
        Serial.println();
        idx = 0;
      }
      break;
    case FILESTATE::CHOICE:
      if (idx == 8)
      {
        filestate = FILESTATE::END;
      }
      else if (myByte != 0x01)
      {
        Serial.println();
        idx = 0;
        filestate = FILESTATE::START;
      }
      break;
    case FILESTATE::END:
      if (idx == l - 1)
      {
        Serial.println(F("\r\n\r\n\r\n"));
        for (uint16_t b = 0; b < l; b++)
        {
          if (v[b] < 10)
          { Serial.print(' '); }
          if (v[b] < 100)
          { Serial.print(' '); }
          if (v[b] < 1000)
          { Serial.print(' '); }
          Serial.print(v[b]);
          Serial.print(", ");
          if (b && (b + 1) % 10 == 0)
          { Serial.println(); }
        }
        idx = 0;
        filestate = FILESTATE::START;
        Serial.println(F("\r\n\r\n\r\n"));
        delay(pauseTime);
      }
      break;
  }
}

Da Du einen MEGA benutzt, stecke an Serial1 Deinen Lesekopf.
Achte drauf, dass der Serielle Monitor mit 115200 eingestellt ist.

Noch ein Nachtrag: Der Sketch funktioniert 100% - ist bereits von mehreren eingesetzt worden.
Wichtig ist, dass die SML-Startsequenz erkannt wird. Sonst hat auch eine Verarbeitung keinen Sinn :wink:
Wenn Du den am laufen hast und Daten bekommst, dann kannst Du das delay() am Ende rausnehmen und bekommst evtl. einen Eindruck, wie groß die Pause ungefĂ€hr ist.

Wow bin ganz schön geflasht :grinning:
Was du da hast ist echt der Wahnsinn.

Habe noch keinen Lesekopf zum testen.

Der Kurzsketch lÀuft soweit mit "Start" Meldung.
Der SML_BaseforNano Sketch ist soweit zusammengestrickt und geladen, bekomme beim Start aber keine Meldung. Geschwindigkeit im SerMon steht auf 115200Baud.

Kann es am Printout liegen?

void setup()
{
  Serial1.begin(115200);
  //readIn.begin(9600); 
  delay(500);
  Printout << (F("\r\nStart...\r\n")) << endl;
  initBuf();
}

Muss fĂŒr heute schluss machen, wenn du bei gelegenheit drĂŒberschauen könntest?
Danke

Eigentlich nicht - muss ich nochmal drĂŒber schaun.

Wenn Du Kopf hast, machen wir weiter.

Ach hier:

Das ist falsch.
Ich schau mal, wie das im Orignal ist. Bis dahin warte ich mit Dir auf den Kopf :slight_smile: