ELV WDE1-2 direkt über VZ auslesen?

  • Hallo!


    Nachden sehr guten Erfahrungen mit VZ zur Erfassung und Auswertung des Stromverbrauchs versuche ich nun den nächsten Schritt.


    Ich habe mir von ELV den WDE1-2 und einen Außentemperatursensor gekauft. Das ganze lässt sich gut über USB anschließen und betreiben. Der Treiber ist ja schon im Kernel enthalten, daher gibt es da keine Probleme.


    Mit

    Code
    1. cat /dev/ttyUSB2


    bekomme ich folgendes Ergebnis:

    Code
    1. $1;1;;22,6;;;;;;;;38;;;;;;;;;;;;;0


    Da alles auf Kanal 1 voreingestellt ist und der Sensor noch in der Küche liegt, gehe ich von 22,6° als Temperaturergebnis aus. Gibt es jetzt einen einfachen Weg, diesen Wert in die VZ-Datenbank zu bekommen?

    ELV selbst empfiehlt das RRDtool zur Erfassung und Auswertung. Ich möchte aber keine zweite Datenbank und Auswertungsseite aufsetzen. Meine bisherigen google-Versuche haben mich bisher nur zu Perlscripten gebracht, die nicht wirklich auf diesen Empfänger und VZ absgestimmt sind.
    Hat hier jemand schon ein fertige Lösung?


    Meine anfänglichen Versuche, das Ganze so in den vzlogger.conf einzubauen waren leider nicht erfolgreich und führen dazu, dass auch die Stromerfassung nicht mehr läuft:


    VG C

  • Da bin ich leider nicht bewandert. Aber wenn das sonst nicht anders machbar ist, werde ich mich mal reintüfteln.


    Die Datenausgabe ist ja sauber: 25 Felder, die ersten 3 sind fest, dann 8 Kanäle für Temperatur und danach 8 für Luftfeuchte. Die Null markiert das Ende des Datensatzes. Daraus müsste sich ja fix was machen lassen. Bei mir ist ja nur der erste Kanal belegt.

  • Ich hab kürzlich im Wiki das Script veröffentlicht mit dem ich meine UVR1611 auslese.
    http://wiki.volkszaehler.org/h…s/heating_control/uvr1611


    Das was die ELV-Wetterstation da ausspuckt ist dem Telegram recht ähnlich. Statt : wird halt ; als Trenner verwendet.
    Man bräuchte das Script nur geringfügig ändern und hätte eine universelle Lösung. Wenn ich später (ev. WE) Zeit und Lust hab versuch ich mich mal dran.



    mfg JAU

    No Shift - No Service

  • JAU :


    Eigentlich muss man nur das anpassen

    Code
    1. uvr_daten=($(dl-aktuelle-datenx -i "$uvr_ip" -r "$uvr_dr" --rrd | sed 's/:/ /g') )


    in

    Code
    1. uvr_daten=($(cat /dev/ttyUSB2 | sed 's/;/ /g') )


    Dann sollte es funktionieren mit Deinem Skript.
    Kurze Frage noch dazu, gibt es einen Grund, warum Du explizit den Timestamp berechnest und angibst?
    Er nimmt doch sonst automatisch den aktuellen Zeitstempel....


    Stefan

  • Der vzclient braucht bei jedem Aufruf ein wenig bis die Rückmeldung von der Middleware da ist. Die übergebene Werte hätten dann nacheinander einen leicht aufsteigend versetzten Timestamp. Obwohl sie ja alle zum selben Zeitpunkt erfasst wurden.



    mfg JAU

    No Shift - No Service

  • Vielen Dank für die Tipps. Es klappt bei mir noch nicht mit der Datenerfassung. Ich vermute es liegt daran, dass der cat oder socat-Befehl kein Ende findet, also immer weiter neue Werte empfängt und ausgibt.
    Ich benutze

    Code
    1. socat /dev/ttyUSBPort3,b9600 STDOUT
    2. $1;1;;-4,5;;;;;;;;48;;;;;;;;;;;;;0


    da

    Code
    1. cat /dev/ttyUSBPort3


    aus irgendeinem Grund nicht funktioniert.


    Wie auch immer. Die eigentliche Frage ist ja vielleicht, wie ich nach der 0 in der Ausgabe den cat-Befehl beenden kann. Danach sollte es wohl laufen..

  • OK, also ich bekomme das mit irgendeiner socat-Option noch hin. Entweder timeout oder ich finde noch endlich die richtige Option zum Terminieren nach einer Ausgabe.


    Das bringt mich aber zum nächsten Problem: VZclient ist in /bin/ kopiert.
    Als url habe ich es mit localhost/demo/middleware.php in der vzclient.conf versucht, aber das läuft nicht. Wie finde ich die richtige url für die middleware? Ich habe die VZ raspbian-Komplettinstallation verwendet.


    Cheers!

  • Deine vzclient.conf müsst eigentlich so aussehen:

    Code
    1. [default]
    2. url:http://localhost/middleware.php


    Zitat von LumpiStefan
    Code
    1. uvr_daten=($(cat /dev/ttyUSB2 | sed 's/;/ /g') )


    Anwärter auf den useless cat-Award? :P :wink:


    Aber geht trotzdem nicht weil sed (wie cat) weitermacht bis das Dateiende erreicht ist. Kommt halt nie...


    Alternativvorschlag:

    Code
    1. timeout 5s sed 's/;/ /g' /dev/ttyUSB2


    Man muss aber noch aufpassen das man nicht aus versehen ein Telegram zerlegt bei dem der Anfang fehlt.
    Und mir jetzt nicht klar ist was es mit dem $ am Anfang auf sich hat. Im Array bekommt die 1. Variabel das Zeichen nämlich mit vorn angestellt.



    mfg JAU

    No Shift - No Service