ltron ACE3000 Typ 260 Stromzähler D0 UND S0

  • Moin,


    ich habe zwei ltron ACE3000 Typ 260 Stromzähler.
    Bisher habe ich gelernt, dass diese über die IR Schnittstelle D0 oder S0 Daten ausgeben können.


    Soweit ich das verstanden habe, sind:
    D0 Daten die Zählerstände aus dem Zähler (hier mit einer Auflösung von 0,1kWh).
    S0 Daten Impulse pro Stromverbrauch (hier 1000 Impulse/kWh).


    Bisher habe ich gelernt, dass man entweder D0 oder S0 Daten auslesen kann.


    Allerdings habe ich beobachtet, dass wenn man die D0 Daten ausließt auch immer wieder mal S0 Impulse mit eingelesen werden.


    Somit müsste es doch möglich sein, beide Daten gleichzeitig auszulesen.


    Die Idee ist am Anfang jeden Tages 1x den Zählerstand (D0 Daten) auszulesen, damit der absolute Zählerstand stimmt.
    Und auf diesen Zählerstand dann mit den S0 Daten die höhere Auflösung aufzuaddieren.
    Am Ende des Tagen kann man dann nochmal die aufaddierte Summe mit dem nochmal ausgelesenen Zählerstand (D0 Daten) vergleichen und eine mögliche Abweichung bestimmen (...und mitloggen).
    Am nächsten Tag geht das Spiel wieder von vorne los.


    Was bringts?
    Korrekte Zählerstände UND hohe Auflösung von 1Wh.


    Ist das möglich?


    Lieben Gruß,
    Chris

  • Das Problem ist das über S0 nicht unterschieden wird ob Bezug oder Einspeisung ausgegeben wird. Also die Summe aus beidem...



    Jarnsen

    Hardware: RPi 3

  • Zitat von themanfrommoon

    Das ist mir ziemlich egal, weil ich nix einspeise. Ich beziehe nur Strom.


    Heisst das, das es grundsätzlich geht?


    Warum hast du dann einen 2 Richtungszähler?? Ob es so geht weiß ich nicht... ich denke aber da gehen Impulse verloren in der Zeit wo die D0 Abfrage ist... Teste doch einfach mal... Ich würde die D0 Abfrage irgendwann gegen 0300 oder so machen...


    Jarnsen

    Hardware: RPi 3

  • Hat glaub noch keiner Versucht.


    Sicher ist jedenfalls: Durch den Wechsel auf d0 gehen dir schon prinzipbedingt Impulse verloren. Du beseitigst das Problem nicht, du machst es schlimmer.



    mfg JAU

    No Shift - No Service

  • Zitat

    Warum hast du dann einen 2 Richtungszähler??


    Hab ich nicht.
    Den ltron ACE3000 gibt es in verschiedenen Varianten.
    Ich habe einen 260-C20D-R1-A für das Haus und einen 260-C20D-R2-A für die Wärmepumpe.
    Laut Typenschlüssel ist der 260-C20D-R1-A
    3-Phasen 4-Leiter-Zähler
    Mode 2: Simulation des Ferrariszähler mit Rücklaufsperre
    Genauigkeitsklasse 2
    Direkter Anschluss bis 100A
    Eintarif-Zählwerk
    Impulsausgang gemäss S0 für gewichtete Energieimpulse
    Der 260-C20D-R1-A ist identisch dazu mit dem einen Unterschied, dass er ein Doppeltarif-Zählwerk hat für Haupt- und Nebentarif der Wärmepumpe.
    Letztendlich also zwei stinknormale Ein-Richtung-Zähler.


    Zitat

    Ich würde die D0 Abfrage irgendwann gegen 0300 oder so machen.


    Genau so hatte ich mir das auch gedacht! Da is am wenigsten los ;)


    Zitat

    Sicher ist jedenfalls: Durch den Wechsel auf d0 gehen dir schon prinzipbedingt Impulse verloren.


    Wieso wechseln?
    Ich frage um 3:00h den absoluten Zählerstand ab (D0 Daten) und speichere sie in einer Variable.
    Dann werden auf diesen Startwert in der Variable die S0 Impulse aufaddiert, bis zum nächsten Tag um 3:00h.
    Dann frage ich wieder den absoluten Zählerstand ab (D0 Daten) und vergleiche sie mit dem gespeicherten Wert in der Variable.
    Die Differenz daraus ist der maximale Fehler pro Tag.
    Danach überschreibe ich die Variable wieder mit dem soeben neu ausgelesenen Wert (D0 Wert).
    Interessant ist nun wie groß der Fehler pro Tag ist. Ich vermute allerdings der ist so klein, dass er irrelevant ist.
    Dadurch erhält man immer korrekte Zählerstände UND hohe Auflösung von 1Wh UND die Fehlergröße ist bekannt.


    Das funktioniert natürlich leider nur bei Ein-Richtungs-Zählern.


    Zitat

    Du beseitigst das Problem nicht, du machst es schlimmer.


    Wieso schlimmer?
    Es existiert dann überhaupt kein Problem mehr, weil die Variable täglich neu justiert wird.


    Zitat

    Teste doch einfach mal...


    Dafür muss ich wohl erst mal Linux lernen. Und weil ich dafür keine Zeit habe wird das wohl leider nix. In Basic, Turbo Pascal oder Visual Basic hätte ich das schnell zusammengeschrieben, aber da fehlt dann wieder die Kompatibilität :(


    Lieben Gruß,
    Chris

  • Zitat von themanfrommoon

    Letztendlich also zwei stinknormale Ein-Richtung-Zähler.


    Der Zweitarif unterscheidet am S0 natürlich auch nicht zwischen Tarif 1 und 2. Wobei ich das auch für vernachlässigbar halte wenn man die Zeiten kennt. Stimmt halt die Umrechnung des VZ auf € nicht.


    Zitat von themanfrommoon

    Wieso wechseln?


    Weil du beides aus der selben Schnittstelle bekommst.


    Zitat von themanfrommoon

    Wieso schlimmer?


    Während der Zähler d0 abschickt kannst du keine Impulse lesen. Du verbaust dir damit prinzipiell die Möglichkeit einer genauen, lückenlosen S0-Auswertung.


    Zitat von themanfrommoon

    Ich frage um 3:00h den absoluten Zählerstand ab (D0 Daten) und speichere sie in einer Variable.
    Dann werden auf diesen Startwert in der Variable die S0 Impulse aufaddiert, bis zum nächsten Tag um 3:00h.


    Im Hinblick auf die bestehende Struktur des VZ sind dazu ein paar Verrenkungen nötig.
    Beachte das Zählerstände ein anderer Kanal mit einer anderen Werten ist, als ein Kanal mit Impulsen. Wirf am besten mal einen Blick in die Tabelle data der Datenbank und vergleichst, dann siehst du wahrscheinlich was ich meine.


    Du wirst auch den vzlogger-Dienst beenden müssen. Kannst mal versuchen ihn, mit d0-Konfig, im Vordergrund auszuführen. Soweit ich mich erinnere läuft er dann nur einmal durch. Die Funktion ist im Laufe der Entwicklung allerdings ins Hintertreffen geraten, kann gut sein das es nicht mehr richtig funktioniert.


    Zitat von themanfrommoon

    Und weil ich dafür keine Zeit habe wird das wohl leider nix.


    Zum Glück nicht mein Problem.



    mfg JAU

    No Shift - No Service

  • Zitat

    Wirf am besten mal einen Blick in die Tabelle data der Datenbank und vergleichst, dann siehst du wahrscheinlich was ich meine.


    Hab ich gemacht, war mir aber auch vorher klar wie das hinterlegt sein muss.


    Im Channel 28 steht zum Bleistift:
    Value = 7998.7 (das sind kWh)


    Diese Abfrage soll pro Tag nur 1x um 3:00h Nachts erfolgen und den Wert in eine Variable (NICHT in die Datenbank!) schreiben.
    Nun liest der Lesekopf S0 Impulse.
    Die Auflösung des Zählers bei S0 Impulsen liegt bei 1000 Impulsen / kWh.
    Dies entspricht 1 Impuls / Wh.
    Bei jedem S0 Impuls wird also 1 Wh (= 0,001 kWh) zu der Variable addiert.
    7998.7 + 0,001 = 7998.7001
    Dieser Wert wird nun die die Datenbank geschrieben.
    In der Datenbank landen also folgende Werte:
    7998.7
    7998.7001
    7998.7002
    7998.7003
    7998.7004
    7998.7005
    ..
    ..
    ..
    ..
    ..
    bis meinetwegen 8005.5472 am darauffolgenden Tag um 3:00h


    Es stehen in der Datenbank also nur Zählerstände und keine S0 Impulse!
    Aber mit einer Auflösung von 1 Wh anstatt wie vorher mit 100 Wh. (Genauigkeit ver100-facht!!!)


    Man kann es jetzt dabei belassen, oder man schaut mal nach wie groß der Fehler war, ob man unterwegs vielleicht irgendwo S0 Impulse verpasst hat.
    Dazu ließt man nun wieder den Zählerstand um 3:00h aus und vergleicht ihn mit der aufaddierten Variable.
    Nun hat man das Problem, das die eine Variable (Ausgelesener Zählerstand D0 Daten um 3:00h) eine Genauigkeit von 100Wh und die andere Variable (mit S0 Impulsen aufaddierte Variable) eine Genauigkeit von 1Wh hat.
    Entweder man begnügt sich mit einer Auflösung des Fehlers von 100Wh, oder man geht noch ausgefuchster an die Sache ran:
    Man beobachtet nach 3:00h, wann der Zählerstand um 0,1kWh hochzählt.
    Dann hat man nämlich genau den Moment erwischt, wann der Zählerstand quasi von z.B. 7998.699 auf 7998.700 hochzählt.


    Da wir davon ausgehen, dass möglicherweise S0 Impulse verloren gehen, wird dieses Spiel jeden Tag neu gestartet, in dem die Variable, die hochgezählt wird um 3:00h mit dem aktuell ausgelesenen Zählerstand (D0 Daten) überschrieben wird.


    Kann mir jemand einen Tipp geben wie, bzw. wo im Code die ausgelesenen Daten ausgewertet werden und die Variable in die Datenbank geschrieben werden? Das würde ich mir gerne mal anschauen. Wo finde ich das?


    Danke und lieben Gruß,
    Chris

  • Zitat von themanfrommoon


    Hab ich gemacht,
    [...]
    Im Channel 28 steht zum Bleistift:
    Value = 7998.7 (das sind kWh)


    Das ist dann wohl ein Kanal vom Typ El. Energie (Zählerstände)



    Nein. In einem Kanal vom Typ El. Energie (Impulse) werden nur die Impulse gespeichert. Wie auch in den Kanälen für deine Wasserzähler.
    Die Bewertung wieviel kWh das sind erfolgt immer erst in der Middleware anhand der Auflösung (sowohl bei Impulsen als auch bei Zählerständen) die du in den Kanaldaten hinterlegt hast.


    Deswegen sagte ich ja: Du musst dich verbiegen.


    Bei der Struktur des VZ brauchst du 2 Kanäle: einen für den Zählerstand, einen für die Impulse. Du kannst, wenn der Zählerstand gelesen wurde, den selben Zeitraum für den Impulskanal abfragen und die Werte vergleichen. Den Fehler im Impulskanal kannst du korrigieren indem du zusätzliche Impulse hinzufügst.
    Mit dem (zwangsläufigen) Darstellungsfehler für die Korrektur wirst du dann vermutlich leben müssen.


    Zitat

    Kann mir jemand einen Tipp geben wie, bzw. wo im Code die ausgelesenen Daten ausgewertet werden und die Variable in die Datenbank geschrieben werden? Das würde ich mir gerne mal anschauen. Wo finde ich das?


    Ich glaub da wirst du unter volkszaehler.org/lib/Interpreter am ehesten fündig.



    mfg JAU

    No Shift - No Service

  • Zitat

    Das ist dann wohl ein Kanal vom Typ El. Energie (Zählerstände)


    Ja!

    Zitat

    In einem Kanal vom Typ El. Energie (Impulse) werden nur die Impulse gespeichert. Wie auch in den Kanälen für deine Wasserzähler.
    Die Bewertung wieviel kWh das sind erfolgt immer erst in der Middleware anhand der Auflösung (sowohl bei Impulsen als auch bei Zählerständen) die du in den Kanaldaten hinterlegt hast.


    Nein! Falsch verstanden!
    Ich will in die Datenbank nur einen Kanal schreiben, und zwar einen mit Zählerständen. So wie weiter oben beschrieben.
    Ich will mit einer Variablen arbeiten, die im Speicher liegt (nicht in der Datenbank).
    Immer wenn ein S0 Impuls kommt, wird diese Variable aufaddiert.
    Und dann wird die Variable als Zählerstand in die Datenbank geschrieben.
    Wenn also vom Stromzähler ein S0 Impuls kommt, wird die Variable hochgezählt und ein Zählerstand wird in die Datenbank geschrieben.


    Lieben Gruß,
    Chris