Optická čtečka elektroměru 62056-21
Optická čtečka elektroměru 62056-21
Ahoj, mám elektroměr Logarex a zjistil jsem, že má možnost optického čtení stavu. Měl by komunikovat pomocí Ir přijímače a vysílače, kdy mu pošlu kód a on mi pošle odpověď se stavem. Má s tím někdo zkušenosti? Přečetl jsem desítky diskuzí a zdá se, že by to mělo mít relativně jednoduché řešení. Ale rád bych se pobavil a někým, kdo už to stavěl.
Takový čidlo se už prodává, ale dávat 3k opravdu nechci, plus je k tomu nutný paušál, který data sbírá a to je otrava a drahý.
Objednal jsem už Ir přijímače a vysílač, vytisknu si k tomu krabičku a pak to poslu do domácího asistenta přes mqtt. Napájet to budu ideálně baterií.
Takový čidlo se už prodává, ale dávat 3k opravdu nechci, plus je k tomu nutný paušál, který data sbírá a to je otrava a drahý.
Objednal jsem už Ir přijímače a vysílač, vytisknu si k tomu krabičku a pak to poslu do domácího asistenta přes mqtt. Napájet to budu ideálně baterií.
Re: Optická čtečka elektroměru 62056-21
Zatím mám weby, které by mohly pomoct.
https://www.forum.iobroker.net/topic/46 ... meter/1081
http://tunn.us/arduino/landisgyr.php
https://forum.arduino.cc/index.php?topic=119247.0
https://www.google.com/url?sa=t&source= ... 0227815153
Komunikace
Optische Kommunikation EN 62056-21, Push, 9600 Bd EN 62056-21, Push, 9600 Bd
RS 485 Kommunikation EN 62056-21, Pull, 9600 Bd EN 62056-21, Pull, 9600 Bd
Eigenbedarf des
Spannungskreises
< 1W und < 10VA
(EN62053-21, EN 50470-1
< 1W und < 10VA
(EN62053-21, EN 50470-1
Eigenbedarf des
Stromkreises
< 0,5VA
(EN 62053-21,EN 50470-1)
< 0,5VA
(EN 62053-21,EN 50470-1)
Pokud by ses do toho pustil, tak den vědět i ty. Příští týden mi přijdou rx a tx Infra 38, tak si začnu hrát.
https://www.forum.iobroker.net/topic/46 ... meter/1081
http://tunn.us/arduino/landisgyr.php
https://forum.arduino.cc/index.php?topic=119247.0
https://www.google.com/url?sa=t&source= ... 0227815153
Komunikace
Optische Kommunikation EN 62056-21, Push, 9600 Bd EN 62056-21, Push, 9600 Bd
RS 485 Kommunikation EN 62056-21, Pull, 9600 Bd EN 62056-21, Pull, 9600 Bd
Eigenbedarf des
Spannungskreises
< 1W und < 10VA
(EN62053-21, EN 50470-1
< 1W und < 10VA
(EN62053-21, EN 50470-1
Eigenbedarf des
Stromkreises
< 0,5VA
(EN 62053-21,EN 50470-1)
< 0,5VA
(EN 62053-21,EN 50470-1)
Pokud by ses do toho pustil, tak den vědět i ty. Příští týden mi přijdou rx a tx Infra 38, tak si začnu hrát.
Re: Optická čtečka elektroměru 62056-21
Tak, pokud si s tím budeš hrát, asi by šlo použít viz níže s tím, že namísto <ACK>"000"<CR><LF> použiješ <ACK>051<CR><LF>
Jen nevím, jak přeložit 051 do toho jejich IR kódu. Uměl by někdo poradit?
Jen nevím, jak přeložit 051 do toho jejich IR kódu. Uměl by někdo poradit?
Kód: Vybrat vše
// I have to use an Arduino Mega to use two different serial ports (one for usb to computer and one for the optical probe)
#include < SPI.h>
int irled = 5;
int phototransistor = A5;
bool query = 0;
void setup() {
pinMode(irled, OUTPUT);
Serial.begin(115200);
Serial1.begin(300); // Starting with 300 Bd
while (!Serial) {
;
}
Serial.print("Arduino reading Landis+Gyr E350:\r\n\n" );
}
void loop() {
if(query){
byte cmd[] = {0x2F,0x3F,0x21,0x0D,0x0A}; // query "/?!"+< 13>< 10>
Serial1.write(cmd,5);
}
if(query){
byte cmd[] = {0x06,0x30,0x30,0x30,0x0D,0x0A}; // < 06>"000"< 13>< 10> for energy data
Serial1.write(cmd,6);
}
if(Serial.available()){
int inByte = Serial.read();
Serial1.print(inByte, BYTE);
}
if(Serial1.available()){
a = Serial1.read() & 0x7F; // cheap way of converting from 8N1 to 7E1
char b = a; // convert serial byte to ASCII character
Serial.print(b);
}
}
Re: Optická čtečka elektroměru 62056-21
Tak finální verze by měla být, změnil jsem rychlost a předělal ACK z 000 na 051. Pokud by to nefungovalo, zkusím ACK 050 "{0x06,0x30,0x35,0x30,0x0D,0x0A}"
Kód: Vybrat vše
// I have to use an Arduino Mega to use two different serial ports (one for usb to computer and one for the optical probe)
#include < SPI.h>
int irled = 5;
int phototransistor = A5;
bool query = 0;
void setup() {
pinMode(irled, OUTPUT);
Serial.begin(115200);
Serial1.begin(9600); // Starting with 300 Bd
while (!Serial) {
;
}
Serial.print("Arduino reading Landis+Gyr E350:\r\n\n" );
}
void loop() {
if(query){
byte cmd[] = {0x2F,0x3F,0x21,0x0D,0x0A}; // query "/?!"+< 13>< 10>
Serial1.write(cmd,5);
}
if(query){
byte cmd[] = {0x06,0x30,0x35,0x31,0x0D,0x0A}; // < 06>051< 13>< 10> for energy data
Serial1.write(cmd,6);
}
if(Serial.available()){
int inByte = Serial.read();
Serial1.print(inByte, BYTE);
}
if(Serial1.available()){
a = Serial1.read() & 0x7F; // cheap way of converting from 8N1 to 7E1
char b = a; // convert serial byte to ASCII character
Serial.print(b);
}
}
Re: Optická čtečka elektroměru 62056-21
Tak jsme to zkusil nahrát do nodemcu, ale vyhodilo mi to chybu. Nejsem v tom úpně profík, mohl by mi to prosím někdo pomoct opravit? Je to ten kód o příspěvek víš.
Kód: Vybrat vše
opticky_sensor_elektromer:33:30: error: Klíčové slovo 'BYTE' není podporováno.
Od verze Arduino 1.0, klíčové slovo 'BYTE' přestalo být podporováno.
Užijte namísto toho funkci Serial.write()
Serial1.print(inByte, (BYTE));
^
opticky_sensor_elektromer:37:8: error: 'a' was not declared in this scope
a = Serial1.read() & 0x7F; // cheap way of converting from 8N1 to 7E1
^
exit status 1
Klíčové slovo 'BYTE' není podporováno.
Re: Optická čtečka elektroměru 62056-21
Zdravím, tento kód je, jak uvádí autor, pouze takový myšlenkový nástřel. Já to chápu asi takto:
Tímto musíme elektroměr probudit, ale s baudrate 300:
a pokud bude příjem ve tvaru:
dále nastavíme rychlost na 9600 a odešleme:
A čekáme na příjem dat. Mrkni na https://forum.mysensors.org/topic/9673/ ... ergy-meter
a nebo tady https://wiki.hal9k.dk/projects/kamstrup
Dohromady to nedám, nemám budík s IR.
Tímto musíme elektroměr probudit, ale s baudrate 300:
Kód: Vybrat vše
byte cmd[] = {0x2F,0x3F,0x21,0x0D,0x0A}; // query "/?!"+< 13>< 10>
Serial1.write(cmd,5);
Kód: Vybrat vše
/XXX5YYYYY<CR><LF> (XXX is the manufacturer ID; YYYYY is the meter ID; 5 is the new baudrate = 9600 bps)
Kód: Vybrat vše
byte cmd[] = {0x06,0x30,0x35,0x31,0x0D,0x0A}; // < 06>051< 13>< 10> for energy data
Serial1.write(cmd,6);
a nebo tady https://wiki.hal9k.dk/projects/kamstrup
Dohromady to nedám, nemám budík s IR.
Re: Optická čtečka elektroměru 62056-21
Zdravím, tomu rozumím. Nejdřív potřesení rukou a pak už konkrétní dotaz s rychlostí. To by snad nemělo být až takový problém, ale ten jeho kód je trochu zvláštní. Sice definuje A5, jako přijímač, ale už jej pak nikde nepoužívá. Z mých velmi malých zkušeností by to pak nemělo fungovat, nebo se mýlím? Zkompilovat a nahrát do desky to šlo, ale co to přesně bude dělat tak úplně nevím. Snad pozítří to vyzkouším s IR TX a RX.
Chlapík v tomto postu tvrdí, že data čte a má velice podobný kód, jako ten první. https://forum.arduino.cc/index.php?topi ... msg1242628
Chlapík v tomto postu tvrdí, že data čte a má velice podobný kód, jako ten první. https://forum.arduino.cc/index.php?topi ... msg1242628
Re: Optická čtečka elektroměru 62056-21
Tak se mi podařilo dopátrat k původnímu kódu na githubu, zkusím ho podrobněji prozkoumat, jestli mi to bude dávat smysl. https://github.com/infr/arduino/blob/ma ... is_gyr.ino
Kód: Vybrat vše
/*
Mode A (IEC 62056-21)
/ = 2FH or AFH
? = 3FH
! = 21H
CR = 0DH
LF = 0AH
Mode B(?) (DLMS/COSEM)
(https://github.com/gurux)
Could help:
https://github.com/securestate/termineter
http://www.build-electronic-circuits.com/arduino-remote-control/
https://github.com/z3t0/Arduino-IRremote
https://github.com/sigio/dsmr22-landis-gyr-interface
http://forum.arduino.cc/index.php?topic=119247.0
About the meter:
http://www.landisgyr.fi/webfoo/wp-content/uploads/2012/09/D000028193_E350_d_en11.pdf
About the optical sensor:
Has been used: http://www.seeedstudio.com/wiki/index.php?title=Photo_Reflective_Sensor
Will be used: http://www.bebek.fi/kauppa/lisatiedot.php?PHPSESSID=v0fdpcds4eupvfaf92rjq5ppu5&&tuote_id=15973
http://www.vishay.com/docs/83760/tcrt5000.pdf
*/
#include <SoftwareSerial.h>
int led = 7;
int del = 100;
SoftwareSerial softSerial(10, 11); // TX, RX
byte a;
void setup() {
pinMode(led, OUTPUT);
Serial.begin(115200);
while (!Serial) {
;
}
softSerial.begin(9600);
//softSerial.println("Hello, world?");
Serial.println("Data from port:");
}
void loop() {
digitalWrite(led, HIGH);
delayMicroseconds(del);
digitalWrite(led, LOW);
delayMicroseconds(del);
if(digitalRead(6)){
del = del + 10;
Serial.print("+");
Serial.println(del);
}
if(digitalRead(5)){
del = del - 10;
Serial.print("-");
Serial.println(del);
}
/*
softSerial.listen();
// while there is data coming in, read it
// and send to the hardware serial port:
while (softSerial.available() > 0) {
Serial.write(softSerial.read());
digitalWrite(led, HIGH);
}
delay(1000);
digitalWrite(led, LOW);
*/
/*
byte cmd[] = {0xAF,0x3F,0x21,0x8D,0x0A};
softSerial.write(cmd,5);
while (softSerial.available() > 0){
a = softSerial.read() & 0x7F; // cheap way of converting from 8N1 to 7E1
char b = a; // convert serial byte to ASCII character
Serial.print(b);
}
//Serial.println();
delay(100);
digitalWrite(TXpin, HIGH);
delay(100);
output = analogRead(RXpin);
if(output 1){
digitalWrite(led, HIGH);
Serial.println("BING!");
delay(1000);
Serial.println("");
}
Serial.println(output);
delay(100);
digitalWrite(led, LOW);
digitalWrite(TXpin, LOW);
delay(200);*/
Serial.println("Meter type");
byte cmd[] = {0xAF,0x3F,0x21,0x8D,0x0A}; // query the meter for data "/?!"+<13><10> (OR {0x2F,0x3F,0x21,0x0D,0x0A}??)
iskSer.write (cmd,5);
byte a;
while (iskSer.available() > 0){
a = iskSer.read() & 0x7F; // cheap way of converting from 8N1 to 7E1
char b = a; // convert serial byte to ASCII character
Serial.print(b);
}
Serial.println();
//<06>"000"<13><10> for energy data
//loop through every single byte in the buffer and convert it to readable characters
}
Re: Optická čtečka elektroměru 62056-21
Tak jsem zkusil už asi 10 nalezených kódů, ale ani jeden s lehkými úpravami nefunguje korektně. Nepomohl by mi prosím někdo pomoct se sestavením kódu? Myslím, že by to bylo užitečné pro spousty "bastlířů", kteří mají elektroměry EONu.
Mám:
IR vysílač a přijímač
https://www.laskarduino.cz/ir-infracerv ... khz-modul/
https://www.laskarduino.cz/robotdyn-ir- ... -ovladani/
Lolin NodeMCU 0.9
Potřebuji odeslat pravděpodobně přes IR 300 baud
Zpráva: 0x2F, 0x3F, 0x21,0x0D, 0x0A
Počkat na odpověď: Pravděpodobně typ elektroměru
Zpráva: 0x06,0x30,0x35,0x30,0x0D,0x0A
Počkat na odpověď: data z elektroměru
Nějaké základy bych dohromady dal, ale s IR žádné zkušenosti nemám.
Mám:
IR vysílač a přijímač
https://www.laskarduino.cz/ir-infracerv ... khz-modul/
https://www.laskarduino.cz/robotdyn-ir- ... -ovladani/
Lolin NodeMCU 0.9
Potřebuji odeslat pravděpodobně přes IR 300 baud
Zpráva: 0x2F, 0x3F, 0x21,0x0D, 0x0A
Počkat na odpověď: Pravděpodobně typ elektroměru
Zpráva: 0x06,0x30,0x35,0x30,0x0D,0x0A
Počkat na odpověď: data z elektroměru
Nějaké základy bych dohromady dal, ale s IR žádné zkušenosti nemám.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 24 hostů