Benutzer-Werkzeuge

Webseiten-Werkzeuge


howto:wechselrichter_sma

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
howto:wechselrichter_sma [2014/05/20 22:25] mikemillerhowto:wechselrichter_sma [2018/04/01 15:56] (aktuell) – Titel jau
Zeile 1: Zeile 1:
-===Anleitung für den Wechselrichter SMA === +===(verschobene Seite)=== 
- +#redirect hardware:channels:solar_inverters:sma
- +
-Ich besitze den Wechselrichter STP 9000TL-20 [[http://www.sma.de/produkte/solar-wechselrichter-ohne-transformator/sunny-tripower-5000tl-6000tl-7000tl-8000tl-9000tl.html]]. Dieser hat direkt einen Ethernetanschluss, der mit dem Tool smaspot [[https://smaspot.codeplex.com/]] angesprochen werden kann. Das Tool smaspot ist zu kompilieren. Sobald es läuft, findet es den Wechselrichter und gibt ein paar Infos aus: +
-SMAspot -sp0 -v +
- +
-Ich möchte den Gesamtertrag, sowie den Ertrag je String in den Volkszaehler übernehmen: +
-Hierzu habe ich für den Gesamtertrag einen Kanal  +
-El. Energie (Zählerstände +
-und für den Ertrag je String  je einen Kanal  +
-El. Energie (Leistungswerte) +
-angelegt. Die UUID sind später im Script einzutragen. +
-Anbei das Script: +
- +
-<code> +
-#!/usr/bin/perl +
-use LWP::UserAgent; +
-open STATUS, "/home/markus/hack/sma/smaspot/bin/Release/SMAspot -sp0 -v |" +
-or die "can't fork: $!"; +
-while (<STATUS>) { +
- if (/ETotal:[ ]*(.*)kWh/){ +
- &submitt("e63106b0-dd25-11e3-9cd5-27aa144849cd",  $1); +
-  +
-    } +
-    if (/String 1 Pdc:[ ]*(.*)kW/){ +
-    $value $1; +
-    $value =~ s/\.//g; +
-    &submitt("103ec300-dd27-11e3-84b2-a98f0b16e92d",  $value); +
-     +
-     +
-    } +
-    if (/String 2 Pdc:[ ]*(.*)kW/){ +
-    $value $1; +
-    $value =~ s/\.//g; +
-    &submitt("2d130060-dd27-11e3-b78b-738251a19608",  $value); +
-    } +
-}  +
-close STATUS or die "bad netstat: $! $?"; +
- +
-#------ +
-sub submitt +
-+
-     $uuid =  $_[0] ; +
-    $val =  $_[1] ; +
-    print $uuid . " " . $val . "\n"; +
- +
- +
-    my $server_endpoint = "http://localhost/volkszaehler.org/htdocs/middleware.php/data/${uuid}.json?value=" . $val; +
-#    get("http://localhost/volkszaehler.org/htdocs/middleware.php/data/2d130060-dd27-11e3-b78b-738251a19608.json?value=" . $1)."\n"; +
-    #print "serverget = " .  $server_endpoint . "\n"; +
- +
-    # set custom HTTP request header fields +
-    my $req = HTTP::Request->new(POST => $server_endpoint); +
-    $req->header('content-type' => 'application/json'); +
-    $req->header('x-auth-token' => 'kfksj48sdfj4jd9d'); +
- +
-    # add POST data to HTTP request body +
-    $req->content(" "); +
- +
-    my $ua = LWP::UserAgent->new; +
-    my $resp = $ua->request($req); +
-    if ($resp->is_success) { +
-      my $message = $resp->decoded_content; +
-      print "Received reply: $message\n"; +
-    } else { +
-      print "HTTP GET error code: ", $resp->code, "\n"; +
-      print "HTTP GET error message: ", $resp->message, "\n"; +
-    } +
- +
-+
-</code> +
- +
-Das Script wird dabei einmal pro Minute mit cron aufgerufen. +
-<code> +
-*  * * * *    /usr/bin/perl /home/markus/hack/Volksz/sma.pl +
-</code> +
- +
-Um den Eigenverbrauch zu bestimmen bilde ich die Differenz zwischen der Einspeisung, gemessen am Stromzähler. ( mit vzlogger) und der erzeugten Strommenge des SMA. Da der SMA immer etwas verzögert die Werte anzeigt, lege ich nur einen Messpunkt alle 15 Minuten ab: Die Kanäle sind zuvor in der Weboberfläche anzulegen, und mit mysql die channel_id zu selektieren. +
- +
-<code> +
-#!/bin/bash +
-echo ' +
-delete from `data` where `timestamp` = (select * from (select max(timestamp) from data where channel_id = 7) x) and channel_id = 7 +
-' | mysql --user=vz --password=fdfdfdfdf volkszaehler -T +
-echo ' +
-INSERT INTO `data`( `channel_id`, `timestamp`, `value`) select 7,  timestamp_2,   data_4.value - data_2.value /1000    from ( +
-SELECT  +
-max(case when `channel_id`  = 2 then timestamp else 0 end) timestamp_2, +
-max(case when `channel_id`  = 4 then timestamp else 0 end) timestamp_4 +
-  FROM `data` where channel_id in (2,4)  +
-and timestamp > (select max(timestamp) from data where `channel_id` = 7) +
-group by floor(`timestamp`/60/1000/15) ) a inner join data data_2 on  timestamp_2  = data_2.timestamp and data_2.channel_id = 2 +
-inner join data data_4 on  timestamp_4  = data_4.timestamp and data_4.channel_id = 4 +
-' | mysql --user=vz --password=fdfdfdfdf volkszaehler +
- +
-echo ' +
-delete from `data` where channel_id = 8 +
-' | mysql --user=vz --password=fdfdfdfdf volkszaehler -T +
-#and timestamp > (select max(timestamp) from data where `channel_id` = 8) +
- +
-echo ' +
-INSERT INTO `data`( `channel_id`, `timestamp`, `value`) select 8,  timestamp_7,   data_7.value + data_1.value/1000     from ( +
-SELECT  +
-max(case when `channel_id`  = 1 then timestamp else 0 end) timestamp_1, +
-max(case when `channel_id`  = 7 then timestamp else 0 end) timestamp_7 +
-  FROM `data` where channel_id in (1,7)  +
-group by floor(`timestamp`/60/1000/15) ) a inner join data data_7 on  timestamp_7  = data_7.timestamp and data_7.channel_id = 7 +
-inner join data data_1 on  timestamp_1  = data_1.timestamp and data_1.channel_id = 1 +
-' | mysql --user=vz --password=fdfdfdfdf volkszaehler +
- +
-</code> +
-auch diese Script wird mit cron gestartet, aber nur ein mal die Stunde. +
-<code> +
-1  * * * *    bash /home/markus/hack/Volksz/eigenverbrauch.bash +
-</code> +
- +
-Und so sieht es aus: +
- +
-{{:howto:screenshotsma.jpg?800|}} +
- +
howto/wechselrichter_sma.1400617521.txt.gz · Zuletzt geändert: 2014/05/20 22:25 von mikemiller