Merkmale und Technik: Unterschied zwischen den Versionen
Zeile 51: | Zeile 51: | ||
*** Postfix: 01 | *** Postfix: 01 | ||
** Der Zählerstand berechnet sich dann als (((00H*256)+40H)*256+40H)*256+72H = (((0*256)+64)*256+64)*256+114 = 4 210 802 (da stimmt nochwas nicht) | ** Der Zählerstand berechnet sich dann als (((00H*256)+40H)*256+40H)*256+72H = (((0*256)+64)*256+64)*256+114 = 4 210 802 (da stimmt nochwas nicht) | ||
** Das | ** Das Komma ist dann noch um 4 Stellen nach links zu verschieben. | ||
* Zählerstand 2.8.0=821 kWh (Einspeisung) | * Zählerstand 2.8.0=821 kWh (Einspeisung) | ||
Zeile 61: | Zeile 61: | ||
*** Postfix: 01 | *** Postfix: 01 | ||
** Der Zählerstand berechnet sich dann als ((7DH*256)+4AH)*256+60H = ((125*256)+74)*256+96 = 8 211 040 | ** Der Zählerstand berechnet sich dann als ((7DH*256)+4AH)*256+60H = ((125*256)+74)*256+96 = 8 211 040 | ||
** Das | ** Das Komma ist dann noch um 4 Stellen nach links zu verschieben: 821,1040 kWh | ||
=== Datenstruktur im Eeprom === | === Datenstruktur im Eeprom === |
Version vom 9. November 2012, 05:12 Uhr
Technische Merkmale
Grundversion
- Bestellliste
- Internes Abspeichern der letzten 100 Tageswerte für die Energieerzeugung (davon die neuesten 40 über die Weboberfläche angezeigt)
- Internes Abspeichern der 5-Minutenwerte des aktuellen Tages und des Vortages
- Automatische Statusmail einmal täglich
- Ausgang mit Signal, falls aktuelle Solarleistung über einem Schwellwert liegt (so kann man einen Verbraucher steuern).
- Tabellarische Darstellung
- der letzten 40 Tageswerte
- der Monatswerte von aktuellem Monat und Vormonat
- der 5-Minutenwerte von Tag und Vortag
- Grafische Darstellung
- der 5-Minutenwerte von Tag und Vortag
Erweiterungspaket S0-Zähler
- Bestellliste
- Das Paket besteht aus einem S0-Zähler und erzeugt S0-Signale, wenn keiner in der Anlage vorhanden ist
- Der Zähler muß von einem Elektriker in die Hausinstallation eingebaut werden.
- Aufgrund der Zähler- und Einbaukosten sollte man zunächst versuchen, die S0-Signale anders zu erzeugen, z.B. mittels einer Photodiode über einer vielleicht vorhandenen LED, die im Takt der Energieerzeugung blinkt, oder mittels einer Lichtschranke am Rad des Ferraris-Zählers.
Erweiterungspaket SML-Lesekopf
- Bestellliste
- Das Paket besteht aus Bauteilen für einen Lesekopf, mit dem Daten aus einem SML-Bezugs-Einspeisezähler zusätzlich in das Board eingespeist werden können
- Internes Abspeichern der letzten 30 Tageswerte für die Bezug und Einspeisung
- Internes Abspeichern der 5-Minutenwerte des aktuellen Tages und des Vortages von Bezug und Einspeisung
- Automatische Statusmail einmal täglich umfasst Bezug und Einspeisung
- Tabellarische Darstellung
- der letzten 30 Tageswerte von Bezug und Einspeisung
- der 5-Minutenwerte von Tag und Vortag (Bezug und Einspeisung)
- Grafische Darstellung
- der 5-Minutenwerte von Tag und Vortag (Bezug und Einspeisung)
- Für einen geschützten Zugriff auf die Daten können die Namen aller Webseiten, auf denen Bezug und Einspeisungswerte vorkommen, mit einem frei wählbaren Namensstamm versehen werden.
Detailliertere technische Hintergrundbeschreibung
Hintergrundinfos zu Programmiergeräten
Für das Aufspielen der FreeSol-Sofware auf den Chip im Board sowie für die anschließende Konfiguration benötigt man einen Programmieradapter. Sofern man noch keinen hat, hat man die Wahl zwischen ganz unterschiedlichen Varianten, die im Detail hier beschrieben werden. In der Regel wird man jedoch wohl einen der beiden Programmieradapter aus dem Grundpaket wählen.
Der Sourcecode der FreeSol-Software für das AVR-NetIO-Board
Die FreeSol-Software, die auf den Mikroprozessor geladen werden muss, ist in Basic für den BASCOM-Compiler geschrieben und basiert zum größten Teil auf Quellen des Programmpakets NETIO+, in dem verschiedene Ethernet-Dienste für das NetIO-Board implementiert sind. Der komplette Sorcecode ist im Downloadbereich verfügbar und kann somit auch selber weiterentwickelt werden.
Die BASCOM-Programmierumgebung kostet für ein Programm in der Größe von FreeSol allerdings ca. 70 EUR.
Hinweise zur SML-Entschlüsselung
Beispiel Hager EHZ 363Z5
- Zählerstand 1.8.0=1263 kWh (Bezug)
- gesamter Code: 77 07 01 00 01 08 00 7F 62 02 01 62 1E 52 7F 55 00 40 40 72 01
- gliedert sich in
- Zählernummer: 77 07 01 00 01 08 00
- unklar: 7F 62 02 01 62 1E 52 7F 55
- Zählerstand: 00 40 40 72
- Postfix: 01
- Der Zählerstand berechnet sich dann als (((00H*256)+40H)*256+40H)*256+72H = (((0*256)+64)*256+64)*256+114 = 4 210 802 (da stimmt nochwas nicht)
- Das Komma ist dann noch um 4 Stellen nach links zu verschieben.
- Zählerstand 2.8.0=821 kWh (Einspeisung)
- gesamter Code: 77 07 01 00 02 08 00 7F 62 02 01 62 1E 52 7F 54 7D 4A 60 01
- gliedert sich in
- Zählernummer: 77 07 01 00 02 08 00 7F 62 02 01 62 1E 52 7F 54 7D 4A 60 01
- unklar: 7F 62 02 01 62 1E 52 7F 54
- Zählerstand: 7D 4A 60
- Postfix: 01
- Der Zählerstand berechnet sich dann als ((7DH*256)+4AH)*256+60H = ((125*256)+74)*256+96 = 8 211 040
- Das Komma ist dann noch um 4 Stellen nach links zu verschieben: 821,1040 kWh
Datenstruktur im Eeprom
Sowohl alle notwendigen Parameter zur Konfiguration des Loggers als auch alle dauerhaft gespeicherten Loggerdaten finden sich im Eeprom des Boards. Die folgende Tabelle erläutert die wesentlichen Variablen und ihre Position im Speicher. Zu beachten ist, das Strings im Speicher jeweils ein Byte länger sind, da sie mit FF abgeschlossen werden.
Startposition HEX | Typ | Name | Bemerkung |
---|---|---|---|
001 | String*12 | Ee_s12_hostname | Name des Prozessorboards, z.B. "freesol". Taucht z.B. im Router auf und kann dann als Internetadresse im internen Netz aufgerufen werden, z.B. http://freesol |
00E | Byte*6 | Ee_b_macaddr(6) | MAC-Adresse des Chips. Der gekaufte Austauschprozessor ATMega1284P hat keine MAC-Adresse, am besten verwendet man hier die Adresse, die auf den kleinen ATMega32-Prozessor aufgeklebt war, der ursprünglich im Board war. |
014 | Byte*4 | Ee_b_ipaddr(4) | IP-Adresse des Boards. Diese Adresse ist nur zu Beginn gültig und wird ggf. durch eine mittels DHCP zugewiesene Adresse überschrieben oder zumindest diese DHCP-Adresse verwendet. |
018 | Byte*4 | Ee_b_subnetmask(4) | Subnetmask, hier setzt man in der Regel 255.255.255.0 |
01C | Byte*4 | Ee_b_defaultgateway(4) | Defaultgateway. Hier steht in der Regel die IP-Adresse des Router. Meistens ist das fast IP-Adresse des Boards, nur die letzte der ist Zahlen ist eine 1 |
020 | Byte*4 | Ee_b_nameserver(4) | Nameserver. In der Regel dieselbe IP-Adresse wie der Router. |
024 | Byte*4 | Ee_b_ntpserver(4) | NTP-Server. Dieser Server stellt die Uhrzeit zur Verfügung. Es gibt viele Server im Internet, die das können, bei mir funktioniert 192.145.119.188 |
0C8 | Byte*4 | Ee_smtp_server_ip_addr(4) | IP-Adresse des sendenden Mailservers. Im Moment nur für GMX getestet. |
0CC | Byte | Ee_b_smtp_server_port_h | Portadresse des Mailservers, High Byte |
0CD | Byte | Ee_b_smtp_server_port_l | Portadresse des Mailservers, Low Byte |
0CE | String*31 | Ee_s31_meine_email_adresse | Absendermailadresse |
0EE | String*47 | Ee_s47_benutzerkennung | Benutzerkennung des Mailkontos. ACHTUNG: Nicht die Mailadresse eingeben, die Benutzerkennung ist eine Nummer. Die Benutzerkennung findet sich als Kundennummer bei gmx.de unter "Mein Account". |
11E | String*31 | Ee_s31_passwort | Passwort des Mailkontos |
13E | String*31 | Ee_s31_empfaenger_email_adresse | Empfängermailadresse |
15F | Long | Ee_fs_speicherdatum_tage | Datum des letzten Abspeicherns. Format ist Sysday(), 4197 ist der 29.6.2011 |
163 | Integer*100 | Ee_fs_tageswerte(100) | Hier werden die letzten 100 Tagesenergiewerte abgespeichert. die Werte werden als Wh/10 abgespeichert, 57,3 kWh gibt also 5730. Die Werte kommen jeweils in die Speicherstelle Sysday Modulo 100, der Wert für den 29.6.2011 (Sysday ist 4197) geht also nach Ee_fs_tageswerte(97). |
22B | Long | Ee_fs_speicherdatum_monate | Tag, an dem der letzte Vorgänger-Monatswert Energie abgespeichert wurde. |
22F | Long | Ee_fs_monatswerte | Letzter gespeicherter Vorgänger-Monatswert Energie |
233 | Long | Ee_fs_speicherdat_lfdmon | Tag, an dem der laufender Monatswert Energie abgespeichert wurde. |
237 | Long | Ee_fs_lfdmonwerte | Laufender Monatswert Energie |
23B | Integer | Ee_fs_anlagenleistung | Die Peak-Anlagenleistung in Wh. Errechnet sich aus der Nennleistung aller Module. |
23D | Long | Ee_fs_pulszahlges | Hier wird jeweils der S0-Zählerstand um Mitternacht abgespeichert. Kann verwendet werden, um ein Zähleroffset zu setzen. |
241 | Integer | Ee_fs_pulsfaktor | S0-Pulse pro kWh. Muss ab Version 1.02 angegeben werden, typischerweise 1000. |
243 | Byte | Ee_lcd | 0 wenn kein LCD, 1 wenn spezielles 3-Ziffern-LCD mit I2c, 2 wenn LCD TC1604E-01 von Pollin. |
244 | Byte | Ee_fs_maildebugflag | Im Normalbetrieb = 0. Falls der Wert manuell auf 1 gesetzt ist, wird alle 5 min eine Testmail geschickt. Hilft beim Einrichten und Testen des Mailaccounts. |
245 | Integer | Ee_fs_schaltschwelle | Schaltschwelle für Ausgang Pin2 (EXT) in W (aktuelle Leistung in Watt, Mittelwert über 5 min). Wird 1, wenn Wert die letzten 5 min >= Schaltschwelle war." |
247 | String*40 | Ee_fs_alarmmailtext | Text für Alarmierungsmail beim Anliegen eines 0V-Signals auf Pin4 (EXT). Wird einmal pro Minute ausgelesen, ca. bei 22 Sekunden. Mail wird erneut erst nach zwischenzeitlichem Rücksetzen des Signals versandt (auch dies wird nur einmal pro Minute abgefragt). Unbeschaltet gilt als 1. |
26F | Integer | Ee_fs_schaltdauer | Zahl der 5min-Intervalle, nach denen das Schaltsignal nach Überschreiten der Schaltschwelle an bleibt. O bedeutet Funktion ist aus. |
271 | Long | Ee_fs_speicherdatum_minuten | Tag, an dem die letzen gültigen 5-Minutenwerte abgespeichert wurden. Hilft bei Stromausfällen, wenn Tag älter ist, werden nach dem Booten die Minutenwerte gelöscht. |
275 | Integer | Ee_fs_minw(216) | Die 5-Minutenwerte des aktuellen Tages. |
425 | Integer | Ee_fs_dhcp | 1: DHVP ausgeschalten, alle anderen Werte : DHCP eingeschalten. Sollte im Normalfall auf 0 stehen. |
427 | Long | Ee_fs_bezug_speichdat_t | Letztes Speicherdatum Tagesstand Bezug. |
42b | Long | Ee_fs_bezug_tagesstand(30) | Zählerstände des Bezugszählers am Tagesstart. |
4A3 | Long | Ee_fs_einspeis_speichdat_t | Letztes Speicherdatum Tagesstand Einspeisung. |
4A7 | Long | Ee_fs_einspeis_tagesstand(30) | Zählerstände des Einspeisezählers am Tagesstart. |
51F | Integer | Ee_fs_min_bezug(288) | Die 5-Minutenwerte des Bezugs des aktuellen Tages. |
75F | Integer | Ee_fs_min_einspeis(288) | Die 5-Minutenwerte der Einspeisung Bezugs des aktuellen Tages. |
99F | Integer | Ee_fs_min_bezug_vt(288) | Die 5-Minutenwerte des Bezugs des Vortags. |
BDF | Integer | Ee_fs_min_einspeis_vt(288) | Die 5-Minutenwerte der Einspeisung Bezugs des Vortags. |
E1F | Long | Ee_fs_speichdat_vt_t | Speicherdatum für 5min Werte von Bezug und Einspeisung des Vortags. |
E23 | Integer | Ee_fs_minw_vt(216) | Die 5-Minutenwerte der Solarerzeugung des Vortags. |
FD3 | String*6 | Ee_fs_ev_url | Präfix für die Webseiten mit vertraulicher Information (Bezugs- und Einspeisewerte). |
Erläuterung der Inhalte der Webseiten des Logger
Die Eingabe der Netzwerkadresse ohne weitere Fileangaben zeigt auf das Index-File, in dem eine Gesamtansicht der wichtigsten Loggereinstellungen zu sehen ist.
In der unteren Tabelle werden dabei für jede Stunde der S0-Zählerstand (mittlere Zeile) sowie die in dieser Stunde eingegangenen S0-Signale angezeigt.
In der Gesamtansicht kann man auf Buttons mit verschiedenen Unteransichten klicken, in denen neben einer grafischen Darstellung der 5-Minuten-Werte des aktuellen Tages (graph1.svg) auch Tages- und Monatswerte (days_hist.js und months.js)sowie Konfigurationsdaten (base_vars.js) in dem für Sonnenertrag.de notwendigen Format zu finden sind. Auch finden sich die 5-Minutenwerte für die grafische Darstellung nochmals in einem extra File (minutes.js).
Weitere verfügbare Filenamen sind:
- minutesv.js: 5-Minutenwerte des S0-Zählers der PV-Anlage vom Vortag
- graph1v.svg: Grafik der 5-Minutenwerte des S0-Zählers der PV-Anlage vom Vortag
Für den einfachen Zugriff auf wichtige Einzelwerte sind noch einige Spezialseiten definiert:
- iframe_1.htm: Datum und Zeit
- iframe_2.htm: Aktuelle Solarleistung (alle 5 min aktualisiert)
- iframe_3.htm: Gesamte erzeugte Solarenergie
- iframe_4.htm: Heute erzeugte Solarenergie
- iframe_5.htm: Datum, Zeit und aktuelle Solarleistung (alle 1 min aktualisiert) (ab Version 2.01.02)
- iframe_6.htm: Zahl der SML-Lesefehler und Gesamtzahl der SML-Nachrichten (d.h. mindestens Anfang und Ende erkannt) (ab Version 2.02.01)
Bei zusätzlichem Betrieb eines SML-Zählers für Bezug und Einspeisung sind weitere Webseiten verfügbar, die hier beschrieben sind.
Steckerbelegung
Die Abbildung unten zeigt einen Auszug aus dem AVR-NetIO-Schaltplan. Alle Signale werden über den EXT-Stecker geleitet.
Die Numerierung geht so weiter, dass das Pin in der zweiten Zeile links die Nummer drei hat. Die Pins werden von FreeSol im Moment wie folgt verwendet:
PIN | Bedeutung |
---|---|
1 | Eingang: Verbindung zu S0+ vom Solar-S0-Zähler |
2 | Ausgang: Schaltsignal für externen Verbraucher, falls genügend Solarstrom da ist. |
3 | Ausgang: schaltet synchron mit S0-Signal. Zur Kontrolle z.B. über 220 Ohm Widerstand und eine LED an GND führen. |
4 | Eingang: falls auf GND gezogen, wird eine Störungsmeldung per Email versandt. |
Betriebsspannungen 0V und +5V werden aus der blauen Schraubklemmenleiste am Boardrand abgegriffen, die entsprechenden Ausgänge kommen mehrfach vor und sind beschriftet.
Das LCD-Dsiplay wird über die 25-pol-DSUB-Leiste angeschlossen.
Funktionserweiterungen des Loggers
Täglicher Status-Emailversand
Das Programm kann einmal täglich eine Statusemail mit dem Ertrag des Tages an eine Emailadresse versenden. Hierzu ist ein kostenfreier GMX-Mailaccount einzurichten. Die Konfiguration des Boards erfolgt über das Windows-Setup-Programm.
Versand von Störungsmeldungen
Eine externes Signal kann benutzt werden, um dem Board eine Hardwarestörung mitzuteilen. Als Störungsquellen kommen entweder Störungssignale vom Wechselrichter oder auch Zustandsmeldungen von Blitzschutzelementen in Frage.
Im Moment müssen alle Störungen zu einem elektrischen Signal zusammengeführt werden (bei Bedarf könnte ich auch auf mehrere Eingangssignale erweitern). Der zuständige Eingang ist Pin 4 des EXT-Steckers. Ist er unbeschaltet oder liegt er auf 5 V, so liegt keine Störung vor. Falls er auf 0 V gezogen wird und dieses Signal mindestens eine Minute lang anliegt, wird eine Störungsmail an die normale Benachrichtigungsadresse generiert, der Text ist über einen Konfigurationsparameter einstellbar. Falls die Störung weiter besteht, wird eine erneute Mail erst dann verschickt, wenn das Signal mindestens eine Minute lang auf 5V lag. (Technische Umsetzung: Das Signal wird nur einmal pro Minute abgefragt)
Steuerung externer Verbraucher
Falls die Leistung der Solaranlage über einer mit dem Setup-Programm einstellbaren Schaltschwelle liegt (Messung als 5min-Mittelwert), kann von PIN 2 des EXT-Steckers ein Steuersignal zum Anschalten eines externen Verbrauchers gegeben werden. Das Steuersignal bleibt mindestens 5 min lang an, jedoch lässt sich über den Parameter "Schaltdauer" konfigurieren, wie viele 5min-Zyklen der Verbraucher anbleiben soll. Sobald ein weiterer 5min-Zyklus über der Schaltschwelle liegt, wird die Anschaltdauer wieder auf die eingestellte Schaltdauer verlängert.
Zur sicheren elektrischen Ansteuerung empfehle ich einen Funksender (Bausatz 9,95 EUR, fertig aufgebaut 17,95 EUR) und eine Funksteckdose (22,95 EUR) von ELV.
Sofern man nur Kleinspannung schalten will oder ein professioneller Elektriker ist, kann man sich auch mal die [href="http://www.pollin.de/shop/dt/NTU5OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_Relaiskarte_K1.html Pollin-Relaisplatine K1] ansehen. Achtung, Warnhinweis: Keine 230V-Schaltungen bauen, wenn man nicht weiß, was man tut.
LCD-Display
An das Freesol-Board kann ein LCD-Display vom Typ TC1604A angeschlossen werden (gibts bei Pollin, Bestellnummer 120 628, 8.95 EUR). Da das Board an den 25-poligen Stecker anzuschliessen ist, muss man sich leider das Kabel selber bauen. Sofern man nicht ein altes Kabel mit passendem Stecker hat, von dem man ein Ende abschneiden kann, hilft vielleicht eine Kombination der Pollin-Bestellnummern 721 775 und 720 418 (kosten zusammen 1,50 EUR, Kabel zerschneiden und ein Ende an die LCD-Platine löten).
Die Anschlüsse an der Platine sind mit 1 und 16 beschriftet, die Belegung ist wie folgt:
LCD Display | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
D-Sub-25-Buchse | 18 | 15 | 18 | 2 | 3 | 4 | 18 | 18 | 18 | 18 | 5 | 6 | 7 | 8 | 15 | 18 |
Bedeutung | Vss | Vdd | V0 | RS | R/W | E | DB0 | DB1 | DB2 | DB3 | DB4 | DB5 | DB6 | DB7 | A | K |
Anmerkung: V0 könnte man an den Abgreifkontakt eines 10K-Potis legen und damit die Displayhelligkeit regeln, habe ich aber konstant an Masse liegen. Ebenfalls ist das Display nicht ausschaltbar.
Achtung: Hintergrundbeleuchtung auf PIN 15 braucht eventuell einen Vorwiderstand von ca 10 Ohm, da bin ich noch am Forschen.
Zur Aktivierung des Displays muss der Konfigurationsparameter fs_lcd auf 2 stehen.
Programmversionen
FreeSol AVR
- 2.01
- EHD versteht nun auch Sequenz 63 1 A2, vorher nur 62 82
- Reload Button bei frees_i.htm geht jetzt richtig
- 2.01.06
- Fehler in Datum von minutes.js usw kurz nach Mitternacht korrigert durch Ersetzen von Date$ durch Date(netio_time)
- iframe_5.htm eingebaut
- Vortageswerte S, B, E auch im Speicher richtig zwischen 0.00 und 1.27
- frees_1a eingefügt
- frees_1a Plausibilitätstest bei Leistungswerten eingefügt
- 2.01.07
- EHD versteht nun auch Codierung 64 an Pos 139
- 2.01.08
- Fehler in frees_1a.js (Vortageswerte) beseitigt
- Heartbeat um S0-Stand und sml ergänzt
- 2.02
- Keine Änderungen zu 2.01.08, stabile Release
- 2.03.01
- Beseitigung des 5-8-12 Bugs
FreeSol Setup
- 1.18
- Beschriftung der Buttons verbessert, Defaultwerte für Filenamen und Warnmeldung geändert
- 1.19
- Bug in Filelänge Hexfile bei Nutzung von 'Defaultwerte'-Knopf beseitigt
FreeSol SML
- 1.04
- EHD versteht nun auch Sequenz 63 1 A2, vorher nur 62 82
- 1.06
- EHD versteht nun auch Codierung 64 an Pos 139
- 1.09
- Neuer Zähler Hager EHZ363Z5 integriert
FreeSol EV
- 2.29
- Unterstützung für Datenabruf aus eigenem Portal eingebaut.
- 2.30
- Bug beim Einlesen von *_bv.js und *_ev.js beseitigt.
- 2.31
- Skalierungs-Bug bei Anzeigen Minutenvergleich beseitigt
- 2.32
- Minutenwerte werden nur noch für den aktuell eingestellten Monat aus dem Portal geholt
- Knopfbeschriftungen bei Minutenwerte geändert