Hallo,
ich versuche meinen Smartmeter auszulesen. Dazu habe ich diese Schaltung
http://gonium.net/blog/2010/10/24/smart-meter-datenkabel-selbst-gemacht--libehz/
mit dem BPW82 nachgebaut. Allerdings ist der R3 bei mit ein 5.5k statt
4.7k wie in der Schaltung. Schaltung wird mit 3.3v versorgt und es hängt
ein Arduino dran. Ganz simples Programm:
1
String inputString = "";
2
boolean stringComplete = false;
3
4
// the setup routine runs once when you press reset:
5
void setup() {
6
Serial.begin(9600);
7
inputString.reserve(200);
8
9
Serial.println("boot....");
10
11
}
12
13
void serialEvent() {
14
while (Serial.available()) {
15
char inChar = (char)Serial.read();
16
inputString += inChar;
17
if (inChar == '\n') {
18
stringComplete = true;
19
}
20
}
21
}
22
23
void loop() {
24
if(stringComplete) {
25
Serial.println(inputString);
26
inputString = "";
27
stringComplete = false;
28
}
29
}
Ich kann zwar Daten empfangen, allerdings nur kryptische Zeichen.
Kann mir jemand helfen?
Danke!
Hallo Filth,
>Mit einem USB-TTL-Adapter kann man sich nun den Klartext in einer Terminal >anschauen. Ich verwende dafür einen Kermit mit folgenden Einstellungen (in der >.kermrc, 9600 7N1)
steht ein bisschen im Gegensatz zu :
>Serial.begin(9600);
Mit dem Standard 8N1
Probier mal: Serial.begin(9600, SERIAL_7N1);
Liebe Grüße
Helfer
Oh das hab ich überlesen - angepasst, in hterm auf 9600 7N1 umgestellt -
leider trotzdem wie vorher.
Das "boot" kommt noch lesbar, danach nur noch Zeichensalat
Hallo Helfer,
mein Aufbau ist wie folgt:
Die obere Schaltung hängt am RX vom Arduino. Der Arduino per USB am
Rechner, dort im hterm sehe ich Ausgabe von meinem Arduino.
Gruß
Bei den meisten Arduino Boards liest du die Serielle Schnittstelle über
den USB Anschluss aus. Somit schreibt der Arduino gleichzeitig mit dem
Smartmeter auf die Serielle Schnittstelle und du empfängst natürlich nur
Blödsinn.
Versuche doch erstmal nur, wie auf der Projektseite beschrieben, das
Smartmeter nur mit einem TTL-USB Wandler auszulesen. Wenn du damit die
Funktion deines Aufbaus getestet, kannst du die Auswertung mittels eines
Aurduinos übernehmen.
Gruß
Hmm gerade getestet: direkt an einem TTL-USB Wandler kommt nichts. Am
Arduino zusammen mit dem Blinken der IR-LED (durch Handycam gesehen)
kommt der Datensalat an.
Bist du sicher, dass der Arduino gleichzeitig mit dem Smartmeter
schreibt? Die Schaltung der IR LED hängt ja am RX Pin des Arduino und
dieser schreibt auf dem TX Pin (ist ein arduino micro, also ohne USB
Port)
Achso, entschuldige, da habe ich gerade einen Knoten im Kopf gehabt.
So wie du es beschreibst ist es schon ok. Hast du auch die 7N1
Einstellung im Arduino geändert?
Ja, das ist wirksam geändert - sehe ich daran, dass ohne passende 7N1
Einstellung im Hterm das "boot" nicht lesbar ankommt.
Auf der Seite von der Schaltung steht, dass diese für 5v entworfen ist,
kann das das Problem sein? Ich betreibe das Ganze ja mit 3.3v.
Ansonsten ist nur noch der R3 anders - ich habe 5.5k statt 4.7k, evtl
hier das Problem?
Filth schrieb:> Ansonsten ist nur noch der R3 anders - ich habe 5.5k statt 4.7k, evtl> hier das Problem?
Du solltest das Signal direkt am Eingang des Arduinos messen;
am besten mit einem Oszi. Wenn das Signal dort schon schlecht
ist, kann es durch den µC nicht besser werden. Übrigens, 5,5kOhm
Widerstände gibt es normalerweise nicht; vielleicht ist dort ein
völlig falscher Wert verbaut?
Gruss
Harald
Wenn "boot" ankommt und dies vom Smartmeter ist, läuft die
Kommunikation! Nur das der Inhalt für Neugierige wohl verschlüsselt ist!
Immerhin soll ja nur der Energieversorger wissen wann Du deinen Toast
machst und nicht Du selber, weil Du ja keinen Nutzen von deinem eigenen
Bewegungsprofil hast (PS: mein Energieversorger will deshalb die Anzahl
der Mitbewohner wissen obwohl es nur ein Konto gibt ;-) ) Ich habe
sicherheisthalber mal 10 Leute angegeben.
Hallo Harald,
hmm mein Multimeter zeigt mir 5.56kOhm an. Falsch?
Wie kann ich das Signal ohne Oszi messen? Habe nämlich leider keinen zur
Verfügung.
Gruß
Alex
:-) schrieb:> Wenn "boot" ankommt und dies vom Smartmeter ist, läuft die> Kommunikation!
Scheint so, als ob der TO das 'boot ...' selbst schreibt :
Filth schrieb:> // the setup routine runs once when you press reset:> void setup() {> Serial.begin(9600);> inputString.reserve(200);>> Serial.println("boot....");>> }
Ja, das "boot" kommt von mir selbt.
Habe R3 probehalber mal durch einen 2.6k Widerstand ersetzt, jetzt sieht
man den Datensalat auch ohne Arduino, also direkt am TTL-USB Wandler.
Aber immernoch keine lesbaren Daten
Filth schrieb:> Hmm gerade getestet: direkt an einem TTL-USB Wandler kommt nichts. Am> Arduino zusammen mit dem Blinken der IR-LED (durch Handycam gesehen)> kommt der Datensalat an.
Solange da nix ankommt, kann Dein Ardunio auch nix sinnvolles liefern.
Filth schrieb:> Habe R3 probehalber mal durch einen 2.6k Widerstand ersetzt, jetzt sieht> man den Datensalat auch ohne Arduino, also direkt am TTL-USB Wandler.> Aber immernoch keine lesbaren Daten
Das spricht dafür, daß die Schaltung nicht sonderlich gut für 3.3V
geeignet ist.
Unter
http://wiki.volkszaehler.org/hardware/controllers/ir-schreib-lesekopf-ttl-ausgang
findest Du eine Schaltung, die wohl auch für 3,3V geeignet ist.
Filth schrieb:> Wie kann man denn sinnvoll die Schaltung ohne Oszi "debuggen" oder sich> dem Fehler näheren?
Schwierig ... ohne Oszi kannst Du die vorhanden Pegel nicht ordentlich
einschätzen.
Eigentlich kann man da auch fast eine Regelmäßigkeit erkennen. Jeder von
den Blöcken enthält einen ähnlichen String:
<22>bww<7>
<22>cww<7>
<22>eww<7>
usw.
Warum fragst du?
Filth schrieb:> Warum fragst du?
Genau diese Regelmäßigkeit habe ich auch gesehen. Könnte eine falsche
Baudrate sein. Stell Dein Terminal mal auf 300 baud 7E1 ein, dann klappt
das vielleicht.
Hab alle möglichen Konstellationen was die Baudrate angeht
durchprobiert, ohne Erfolg. Man sieht wiederkehrende Zeichen, aber
lesbar ist das Ganze nicht.
Dann wird es schwierig mit derm Remote-Helfen.
Hier nochmal meine Tipps:
1. Laß den Ardunio erstmal weg
2. Finde heraus, welches die tatsächlichen Übertragungsparameter sind
(Hersteller)
3. Schau Dir die Pegel an (Oszi)
Mehr können wir hier wohl nicht für Dich tun.
Einen Tipp habe ich noch: Eventuell ist noch der Pegel des TTL-Signals
invertiert. Du kannst mal probieren, ob eine Invertierung des Signals
Dich weiterbringt.
Ansonsten bleibt mir nur viel Erfolg zu wünschen.