YASDI

YASDI Image YASDI ist eine Softwarebibliothek zur Kommunikation mit SMA Photovoltaik-Wechselrichtern (oder anderen Geraeten), die das SMAData1-Protokoll sprechen. Die Software wird von SMA unter der Open Source Lizenz LGPL zur freien Verfuegung bereitgestellt.
Wechselrichter-Kommunikation ueber Bluetooth (wegen des dort verwendeten "SMAData2+" Protokolls) ist leider aus rechtlichen Gruenden nicht moeglich! (technisch waere es moeglich gewesen)


Inhaltsverzeichnis

1 Uebersicht

2 Portierungen

3 Aufbau

4 Sprachanbindungen

5 Lizenz

6 Versionen

7 Download

8 Tutorial

9 Historie

9.5 Internas

10 FAQ

10.1 Schnittstellen

10.2 Was kann denn YASDI alles?

10.3 Was ist nicht möglich?

10.4 Kann ich ein SunnyBeam verwenden?

10.5 Can I get an windows CE port of YASDI from SMA?



Was ist YASDI?

Der Name YASDI steht fuer Yet another SMA Data Implementation. Der Name beschreibt eine in der Programmiersprache "C" geschriebene Software-Bibliothek (keine fertige Applikation), die das SMAData(1)-Protokoll implementiert. Es genuegen nur wenige zusaetzliche Zeilen, um eine vollstaendige aktive Applikation mit einer Wechselrichterkommunikation mit YASDI zu bauen.
YASDI wurde mit einer sehr einfachen Abstraktionsschicht zum darunterliegenden Betriebssystem/Hardware entwickelt, so dass eine einfache Portierung auf andere Betriebssysteme oder Embedded-Baugruppen moeglich ist.


Portierungen

Zur Zeit ist YASDI auf folgende Betriebssysteme portiert worden:

Die Portierung auf andere Betriebsysteme ist einfach moeglich (siehe HIER)


Aufbau

Die zu benutzende Master-API wurde einfach gehalten, um moeglichst viele Sprachen und System unterstuetzen zu koennen. Die API verwendet nur sehr einfache Datentypen...

YASDI wurde modular in mehrere Schichten und Module aufgeteilt:
YASDI overview


Programmiersprachenanbindungen

YASDI wurde in "C" geschrieben, besitzt aber darueber hinaus bereits einige Anbindungen zu anderen Programmiersprachen/Skriptsprachen, die die "C"-API verwenden. Zur Zeit existieren folgende Sprachanbindungen: Diese Sprachanbindungen sind zum Grossteil privat entstanden. SMA liefert offiziell nur die reine C-Schnittstelle aus.


Lizenz

YASDI ist seit Version 1.7 unter der freien Lizenz LGPL verfügbar.


Welche Versionen gibt es derzeit?

Download

Yasdi kann vom SMA Webserver frei bezogen werden: YASDI Dowload


Tutorial

Hier liegen ein paar einfache kleine Tutorials, die zeigen, wie einfach und simpel man mit YASDI und wenigen zusaetzlichen Zeilen Code mit SMA-Wechselrichtern kommunizieren kann:

Entstehungsgeschichte

YASDI entstand als SMA-internes Nebenprojekt der "SunnyBoy-Fertigungsendpruefung", jetzt Sunny Boy Produktion/Fertigung. Hier werden die Sunny Boys umfangreichen Funktions- und Dauerlastpruefungen unterzogen. Das gesamte Pruefsystem laeuft komplett unter Linux. Das Pruefsystem nutzt YASDI fuer die Kommunikation mit den Wechselrichtern...


Internas

YASDI ist ausgelegt, beliebige SMAData(1) Geraete als Master abzufragen. Diese koennen beliebige Geraete sein, nicht nur allein solare Wechselrichter. Jedes SMAData1-Geraet besitzt daher einen eigenen "Kanalkatalog" (Kanalliste), der der Kommunikation abfragbar ist. Kanaele koennen sehr viele unterschiedliche Eigenschaften haben (Name, numerischer Datentyp 8/16/32bit float etc, Zaehler, Counter, Wertarray, usw... ). Vereinbarungsgemaes representiert ein "Geraetetyp" eine bestimmte Kombination dieser Kanaele. Es gibt derzeit mehrere 100 verschiedene Geraetetypen. Damit YASDI nicht fuer jeden neuen Geraetetyp neuangepasst werden muss, fragt er die Kanalliste des Geraetes einmalig ab und legt ihn als binaere Kanallistendatei ab (im Verzeichnis "devices"). Der Schluessel dazu ist der 8-zeichenlage Geraetetyp. Diese Beschreibung ist notwendig, um die Datenantwort des Geraetes spaeter ueberhaupt wieder zu interpretieren, da die Datenwerte ggf. an bestimmten Positionen stehen. Dadurch ist alles sehr flexibel.
Zu Beginn wird eine Geraeterfassung durchgefuehrt. YASDI passt dann ggf. die Geraeteadressen an, da das SMAData1-Protokoll dies verlangt. Geraete mit gleicher Adresse werden ggf. vereandert. Das Geraet behalt in aller Regel diese Adresse auch nach einem Abschalten. Sind alle Geraete erfasst, werden die Geraetetypen kontrolliert. Ist ein Geraet noch unbekannt (noch keine Kanallistendate in "devices") so wird die Kanalliste des Geraetes einmalig abgefragt und als Datei fuer spaeter abgelegt. YASDI braucht diese Beschreibungsdatei, um mit dem Geraet zu sprechen. Ist dies geschehen, so ist die Erfassung abgeschlossen.
Nun koennen vom Geraet Kanaele abgefragt werden (ein 15-Zeichen langer Name). Welche es gibt, obliegt komplett dem Geraet. YASDI kann an mehreren Schnittstellen gleichzeitig mit Geraeten kommunizieren, da es dessen Presenz an der Schnittstelle vermerkt. Er besitzt Algorithmen, die moeglichst optimal die notwendigen Wartezeiten zum Einfrieren der Messwerte einhaelt bzw. versucht, diese zu vermeiden. Durch die Verwendung von ueberlappenden Kanalwertabfragen versucht YASDI das Optimum beim Zugriff zu erreichen, indem Abfragen zusammengefasst werden.
Zu erwahenen waere noch, dass YASDI in Schichten aufgebaut ist und das Grundgeruest auch fuer die Implementierung anderer Protokolle ausgelegt ist. SMAData2 bzw. SMAData2+ waeren damit auch umsetzbar gewesen...


FAQ



10.1 Welche Schnittstellen kann YASDI derzeit bedienen?

YASDI kann theoretisch mit beliebigen Arten von Bussen umgehen, da die unteren Treiber als Module abstrahiert sind. Zur Zeit existieren folgende Schnittstellenmodule:


10.2 Was kann denn YASDI alles?


10.3 Was kann YASDI NICHT?


10.4 Kann ich ein SunnyBeam verwenden?

Jein, ein SunnyBeam (nicht Bluetooth) wird nicht offiziell unterstuetzt. Mit einem kleinen Patch ist es aber unter Linux moeglich. Dabei ist der Zugriff auf die summierten Werte der Anlage beschraenkt. Die einzelnen Wechselrichter sind leider weiter nicht erreichbar (keine Geraetehierarchien).
Unter Linux ist folgendes zu tun:
sudo modprobe ftdi_sio product=0x002d vendor=0x1587
In der Sourcedatei code/smadata_layer.c in der Funktion TSMAData_SendRawPacket die Zeilen
/* Stringfilter? (SDC <=> SD Modus) */
if (Flags & TS_STRING_FILTER)
{
ersetzen durch
/* Stringfilter? (SDC <=> SD Modus) */
if (1)
{
Die Schnittstelleneigenschaften in der yasdi.ini auf 9600 Baud sowie den serielen Port auf /dev/ttyUSB0 stellen:
[COM1]
Device=/dev/ttyUSB0
Media=RS232
Baudrate=9600
Protocol=SMANet

Die erfolgreiche Erfassung sieht dann so aus:
************************************************************

        YASDI Mini Shell (build for Linux) 

      (This is an test program using YASDI)

************************************************************
Switching driver 'COM1' on...success

Command ('?' for help): e1
Starting device detection (sync).
How many devices should be searched? 
New device found: 'SBeam012 SN:140002520'
-------------------------------------------
Device handle | Device Name  
-------------------------------------------
     1        | 'SBeam012 SN:140002520'
-------------------------------------------

Command ('?' for help): a1
Device handle: Device 'SBeam012 SN:140002520' has 3 Spot channels:
Reading channel values, please wait...
------------------------------------------------------------
Channel handle |    Channel name    | Channel value (Unit) |
------------------------------------------------------------
       3       | '             Pac' | '0.000' (W) 
       7       | '         E-heute' | '0.000' (kWh) 
       8       | '         E-Total' | '0.000' (kWh) 
Command ('?' for help):

10.5 Can I get an windows CE port of YASDI from SMA?

Sorry but the WinCE port of YASDI is not available. But it's easy to create. You need to change the "hardware abstraction layer" of YASDI. For this the Win32 port is an good starting point:
os/os_windows.c/h
drivers/serial_windows.c/h
Rename these to
os/os_WinCE.c/h
drivers/serial_windowsCE.c/h
The only thing to change is to adopt the unicode WindowsCE API functions (Win32 functions uses c-strings instead). That's all.

1419