Pezibaer's SDM630DC Arduino Logger

(letzte Änderung:03.05.2016 14:20:18)


Der Sinn und Zweck des Projektes.....

..... war die Suche nach einer kostengünstigen Hardware/Lösung um den Stromverbrauch und PV Ertrag eines Haushaltes möglichst präzise zu erfassen und aufzuzeichnen bzw. auch die Auswertung beliebig selbst anzupassen

Angefangen hat alles in diesem Thread in meinem Lieblingsforum auf www.photovoltaikforum.com

Hier gibt es einen Liveview auf eine Beispielseite des Projekts. Link Liveansicht mit AJAX komponenten
Momentan wird hier aber noch regelmäßig gebastelt also kann ich nicht garantieren das der Liveview immer zu jeder Tageszeit funktioniert bzw Verfügbar ist.

Warnhinweis

Dieses Projekt wird unter privatem Charakter betrieben, und ich weise hiermit darauf hin das sich diese Seite nicht an Laien richtet, denn der Anschluss des SDM630 sollte ausschließlich von fachkundigem Personen erfolgen.

Inhaltsverzeichnis:

Die eingesetzte Hardware

Eastron SDM630DC

Eastron SDM630M-DCProduktlink Hersteller: http://www.eastrongroup.com/eproduct_121.html

Modbus RTU Beschreibung des SDM630
http://www.ausboard.net.au/index_files/Eastron/Eastron%20Modbus%20Registers.pdf

Aufpassen dieses Gerät gibt es in 2 Versionen Direktmessend "DC" oder mittels Messumwandler "CT"... Für die CT Version wird ein speparater Messumwandler benötigt. Vorteil wäre man muss hier im Sicherungskasten nicht mehr umklemmen. Nachteil sind die Kosten des Messumwandlers... Ich selber verwende die DC Version weil es doch um einiges günstiger war.

Ich selbst hab meinen bei B+G gekauft. B+G SDM630 Derzeit scheinbar lt. Auskunft ausverkauft, kommen aber lt. Auskunft nach. Alternativen sind derzeit über AliExpress http://www.aliexpress.com/item/SDM630-DC-Mutli-Function-Four-Module-Three-Phase-100A-Direct-Connection-Digital-Din-Rail-Power-Meter/936679409.html

Steckboards Beispiele für Modbus

Modbus Steckboardversion ARDUINO NANO

Die ersten Gehversuche wurden mit einem Arduino Nano mit einem Steckboard realisiert. So sieht die Verkabelung als Steckboardversion mit dem Arduino Nano aus. Diese Verkabelung ist von der Pinbelegung 1:1 auf die jeweiligen Pins des Arduino UNO umsetzbar

RS485 Modbus PLATINE Arduino

Modbus Steckboardversion ARDUINO UNO


Wie erwähnt hier die Pendantverkablelung des UNOs
RS485 Modbus PLATINE Arduino

Arduino Shields

Modbus Shield Version 1 für Arduino UNO

Bei nicht kritischen Umgebungen reicht eine einfache Platine galvanisch nicht getrennt. Diese Version wird ausschließlich zu Testzwecken empfohlen

RS485 Modbus PLATINE Arduino

R1: 120 OHM
C1: 100 nF
MAX485CPA+ (5V Version)

Download: Sprint-Layout file

Modbus Shield Version 2 (galvanisch getrennt) für Arduino UNO

Generell zu empfehlen ist, die auch von mir seit 2 Jahren eingesetzte glavanisch getrennt Version. Nicht nur in Rauhen umgebungen sondern auch zum Schutz der Ungeschützen Elektronik des SDMs auf Modbusseite. Erfahrungsgemäß wurde hier nach testen auch eine Verbesserung der generellen Übertragungsqualität festgestellt

Galvanisch getrennt RS485 Modbus PLATINE Arduino

R1: 4,7 KOHM
R2: 466 OHM
R3: 612 OHM
R4: 120 OHM
C1: 100 nF
C2: 47 nF
DCDC: NME 0505D
Optokoppler: 6N137
MAX485CPA+ (5V Version)

Download: Sprint-Layout file

So sieht es dann bestückt aus
DCDC Bestückt

Wichtiger Hinweis: Diese Version kann nicht mit dem internen Spanunnungswandler des Uno's betrieben werden, da diese die Leistungsfähigkeit des SOT223 Spannungsreglers, durch die PULLUP/DOWS des Modbuses übersteigt. Als Lösung wird empfohlen den UNO einfach über den USB-Anschluß mit Spannung zu versorgen

Software

Software Arduino

Arduino Entwicklungsumgebung
http://arduino.cc/en/main/software

Notwendige Modbus Library https://github.com/4-20ma/ModbusMaster/archive/master.zip

Diese gehört modifiziert im ModbusMaster.cpp File Stand 01.11.2014

Zeile746: direkt nach// transmit request

folgenden Code einfügen

UCSR0A = UCSR0A |(1 << TXC0);
Serial.flush();
digitalWrite(3, HIGH);
Alternativ stelle ich gleich die gesamte modifizierte Library hier bereit

Arduino IDE 1.0.x http://www.polz.info/SDM630/ModbusMaster_master.zip - Modifiziert

Arduino Code zum Auslesen und Übertragen der Daten an einen Webserver
NEU SDM630_READER.ino Version 19 - 24.10.2014

Der Code beinhaltet ein Set von Parametern. Das kann natürlich individuell angepasst werden, das diese Parameter hier so drinnen sind, hat sich aus einem anderen Projekt ergeben.

Adaptionen Erklärungen SDM630_READER.ino

Die Nummer der Node muss hier an die MODBUS Slave ID angepasst werden. Diese ID wird hier im Gerät selbst eingestellt. Voreingestellt im SDM630 ist die Nummer 1.

ModbusMaster node(2);

Adaption an die Umgebungsbedingen des Netzwerkes

char server[] = "www.YourWebpage.com"; // Hostname 2 change PHP/MYSQL WEBSERVER
/IPAddress server(192,168,0,1);  //alternative IP Adress  PHP/MYSQL WEBSERVER

IPAddress gateway   (192,168,  0,230); // Network Gateway to Change
IPAddress subnet    (255,255,255,  0); //Network Subnetmask
IPAddress dnsserver (192,168,  0,230); //Network DNSSERVER
IPAddress ip        (192,168,  0, 35); //IPADRESS of Arduino

Baudrate des im SDM eingestellten Wertes. 9600 haben sich als sehr zuverlässig erwiesen und reicht auch für theoretische 1 Sekunden Intervalle aus

node.begin(9600); 

Abfragen der Werte aus dem SDM.
Parameter1:RegisterStartwert
Parameter2:Anzahl der in folge auszulesenen Parameter
Parameter3:Startposition zum Schreiben im internen Speicherarray
Der letzte Parameter könnte eigentlich entfallen, muss aber gesetzt werden, weil es nun eh fortlaufend ist, war ursprünglich anderst gedacht. Bei der nächsten Version wirds dann geändert :)

getRTUMore(0x0000,3,1);  // Parameter   1 -   3 Voltage

Wartezeit nach jedem push der Daten an den Server in Millisekunden(1000 = 1 Sekunde). Setzten nach Intervallwunsch

delay(5000); 

Serverport des Webservers: Normal ist der HTTP Port 80, sollte ein anderer Port verwendet werden muss die hier angegeben werden, also statt 80 z.B. 8080

if (client.connect(server, 80)) 

Dateiname des Insertfiles am Webserver, würde das insert file z.b anders heißen und unter http://www.deinhost.com/sdm/anderesinserfile.php liegen Müsste der Link dann so aussehen /sdm/anderesinserfile.php

client.print("GET /insert.php?") 

Schreiben der Getwerte an den Webserver
Die 3 Parameter der createWebParam Parameter1Interner Speicher Startwert.. entspricht Parameter 3 von vorhin
Parameter2Ende des Speicherauslesen bei Wert
Parameter3Parameter Start Wert für GETName
Bisserl kompliziert, ich weiß, wenn etwas nicht klar ist mich Fragen, oder selbst umprogrammieren, ich werd das voraussichtlich auch in der nächsten Version ändern.

createWebParam(  1,  3,  1); 

Sollte selbsterklärend sein :)

client.println("Host: www.YourWebpage.com");

Software Webserver

Erforderlich ist ein Webserver mit PHP/MYSQL, ob dieser im LAN als eigener Server läuft, oder irgendwo im WWW als normaler Webhost bei einem ganz normalem Hostingprovider liegt spielt hier keine Rolle solange MYSQL und PHP auf dem Webspace installiert ist. Es steht natürlich jedem Frei hier ein anderes insertscript zu verwenden als jenes, dass ich hier zu Verfügung stelle um mit anderen Datenbanktypen zu arbeiten. Solltet ihr euch nicht sicher sein ob das passt, was ihr hier nehmen wollt, einfach fragen ich helf da gerne weiter.

MYSQL/PHP InsertScript
insertscript.zip

Einfaches vereinfachtes Beispielscript zum Auslesen und Anzeigen mittels Highcharts
SDM630/graph.zip

Datepicker CSS und JS
jquery.simple-dtpicker.css
jquery.simple-dtpicker.js

Gehäuse:

Gehäuse hab ich eines vom Conrad gegekauft weil er bei mir gleich um die Ecke ist. Dieses Teil gibt es in allen Farben. Gelb, Rot, Schwarz, Blau und ich persönlich liebe das Ding zum Basteln, weils es ohne Schrauben zum Öffnen und Verschließen ist. Man muss die inneren Haltefüse am besten mit einem Dremel wegsägen und dann an der passenden Stelle dann am Boden mit UHU Hartplastikleber wieder ankleben (wo wir gleich zu einem weitere Pflichutensil jedes Bastlers kommen.. Der DREMEL ist Pflicht :))

http://www.conrad.at/ce/de/product/523130/Universal-Gehaeuse-Polystyrol-Gelb-135-x-95-x-45-1-St?ref=searchDetail

Kontaktmöglichkeiten:

derzeit bitte über das oben genannte Forum am besten in den betreffenden gelinkten Thread oder per MAIL an support@polz.info oder was mir von allem am liebsten ist bitte per Skype mein Username: pppolz