volkszaehler / vzlogger

Logging utility for various meters & sensors
http://wiki.volkszaehler.org/software/controller/vzlogger
GNU General Public License v3.0
145 stars 123 forks source link

dlms with arduino #156

Closed Totte1210 closed 9 years ago

Totte1210 commented 9 years ago

Hello,

has anyone ported code for arduino to read dlms protocol, yet?

I would like to use IR-TTL to read my Landis Gyr ZMD120.

Your help will be appreciated!

best regards

Thorsten

mbehr1 commented 9 years ago

which kind of arduino? running linux or some 8bit/atmel version?

Am 17.04.2015 um 19:31 schrieb Totte1210 notifications@github.com:

Hello,

has anyone ported code for arduino to read dlms protocol, yet?

I would like to use IR-TTL to read my Landis Gyr ZMD120.

Your help will be appreciated!

best regards

Thorsten

— Reply to this email directly or view it on GitHub https://github.com/volkszaehler/vzlogger/issues/156.

Gruß

Matthias

Totte1210 commented 9 years ago

Es ist ein Arduino Nano, also Atmel 8bit.

Gruß

Thorsten

mbehr1 commented 9 years ago

Hi,

der hat max. 2KB RAM? Das wird mehr als eng. Warum nimmst du nicht einen RPI Model A+ (~25€), das wäre deutlich einfacher.

Am 17.04.2015 um 22:56 schrieb Totte1210 notifications@github.com:

Es ist ein Arduino Nano, also Atmel 8bit.

Gruß

Thorsten

— Reply to this email directly or view it on GitHub https://github.com/volkszaehler/vzlogger/issues/156#issuecomment-94073707.

Gruß

Matthias

Totte1210 commented 9 years ago

Hallo Matthias,

habe aktuell nur nen Arudino Nano rumliegen. Besorge mir jetzt wohl aber noch nen zweiten Pi. Habe es dennoch geschafft den Landis erfolgreich auszulesen:

Mein Code ist folgender:

include

define irRxPin 7

define irTxPin 6

SoftwareSerial ir = SoftwareSerial(irRxPin,irTxPin); // RX, TX const unsigned int _requestIrData = 5000; unsigned long _lastRequestIrData = 0;

void RequestMeterData(unsigned long currentMillis){ if (currentMillis - _lastRequestIrData > _requestIrData){ // save the last time you requested ir data _lastRequestIrData = currentMillis;

Serial.println("Requesting IR-data...");

ir.print("/?!\r\n");

} } void ReceiveMeterData(){ if (ir.available()){ Serial.print("Response: "); char response = ir.read(); // convert 8N1 to 7E1 response &= 0x7F; Serial.println(response); } } void setup() { ir.begin(300); ir.listen(); Serial.begin(57600); } void loop() { unsigned long timeMillis = millis(); RequestMeterData(timeMillis); ReceiveMeterData(); }

mbehr1 commented 9 years ago

Ja das auslesen ist so kein Problem. Aber was machst du mit den Daten dann? Wenn du die in Datenbank auf Webserver,… packen willst, brauchst du http/mysql,… Lib und dann wird es mit 2kb eng.

Am 18.04.2015 um 10:10 schrieb Totte1210 notifications@github.com:

Hallo Matthias,

habe aktuell nur nen Arudino Nano rumliegen. Besorge mir jetzt wohl aber noch nen zweiten Pi. Habe es dennoch geschafft den Landis erfolgreich auszulesen:

Mein Code ist folgender:

include

define irRxPin 7

define irTxPin 6

SoftwareSerial ir = SoftwareSerial(irRxPin,irTxPin); // RX, TX const unsigned int _requestIrData = 5000; unsigned long _lastRequestIrData = 0;

void RequestMeterData(unsigned long currentMillis){ if (currentMillis - _lastRequestIrData > _requestIrData){ // save the last time you requested ir data _lastRequestIrData = currentMillis;

Serial.println("Requesting IR-data...");

ir.print("/?!\r\n"); } } void ReceiveMeterData(){ if (ir.available()){ Serial.print("Response: "); char response = ir.read(); // convert 8N1 to 7E1 response &= 0x7F; Serial.println(response); } } void setup() { ir.begin(300); ir.listen(); Serial.begin(57600); } void loop() { unsigned long timeMillis = millis(); RequestMeterData(timeMillis); ReceiveMeterData(); }

— Reply to this email directly or view it on GitHub https://github.com/volkszaehler/vzlogger/issues/156#issuecomment-94142665.

Gruß

Matthias

Totte1210 commented 9 years ago

Ich habe den Datenstrom jetzt erstmal auf einen Float Wert nur für den aktuellen Zählerstand reduziert. Ich muss mal schauen, ob ich mir ein Ethernetshield besorge, um dann per Webserver den aktuellen Wert meiner FHEM Installation bereitzustellen, oder ob ich nicht direkt einen Pi auf Hutschiene in den Schaltschrank setzte. Ist wahrscheinlich die beste Lösung. Vielen Dank auf jeden Fall.

beste Grüße

Thorsten

justinotherguy commented 9 years ago

Hi, wie Matthias schon schreibt: was ist Dein Ziel? Wenn Du da keine Schnittstelle am Arduino hast - wo sollen die Daten hingehen? Wenn Du eine hast: für die YPort-Funktion ("seriell to (W)LAN") reicht der Arduino mit seinen 2 KB allemal; dann kannst Du das Parsen auf ner Linux-Box machen (vzlogger). Den Parser auf dem Arduino zu schreiben halte ich auch für vertane Zeit (wenngleich eine spannende Aufgabe und eine tolle Idee). Ich habe damals nicht die Arduino-Umgebung, sondern Ethersex (http://www.ethersex.de/) auf einem ATmega-Board (http://www.pollin.de/shop/dt/NjI5OTgxOTk-/Bausaetze_Module/Entwicklerboards/AVR_NET_IO_Fertigmodul.html) verwendet; das kommt schon mit der LAN-Schnittstelle daher. Halte uns auf dem Laufenden :-) Gruß, J.

Totte1210 commented 9 years ago

Hallo Justin, ich habe mich nun wie folgt festgelegt:

Somit habe ich eine Datenerfassung und Bereitstellung für wenig Geld (nano+Ethernet bei *Bay für <15€) und sehr kleinem Stromverbrauch.

justinotherguy commented 9 years ago

Hi, das klingt gut - ich würde einem HTTP-Client auf dem Arduino eher trauen als einem HTTP-Server (ja, ich weiß - das kann der auch - trotzdem). Ich würde eher den Arduino den Web-Server auf dem FHEM ansprechen lassen. Abgesehen davon: das Parsen musst Du dann immer noch selbst übernehmen. Ich fänd's toll, wenn Du Dein Ergebnis dokumentierst (in unserem Wiki?) und den Code als PR für unser Repo bereit stellst. toi-toi-toi :-) Gruß, J. P.S.: können wir den issue hier schließen?

Totte1210 commented 9 years ago

Hi,

Danke für den Tipp. Ich denke nach dem kommenden Wochenende bin ich weiter und schlauer. Ich halte euch auf dem Laufenden und werde dokumentieren, wenn alles getestet ist.

Den Issue kannst du gerne schließen.

Beste Grüße

Thorsten