Hallo,
da im Thema "Wago/SPS über Modbus(TCP/IP)..." (http://forum.fhem.de/index.php?topic=12655.msg78151#msg78151) die Anbindung fhem an den Solar-Log angesprochen wurde, wollte ich doch einmal einen eigenständigen Thread eröffnen um vielleicht weitere Unterstützung bekommen zu können.
Nachfolgend habe ich nochmals den Quellcode und die Dateien von Mopedpaul angefügt.
#######################################################################
# SOLARLOG
# Auslesen der Solarlog Werte
sub
Solarlog
{
use Socket;
use Getopt::Std;
use vars qw($opt_u $opt_r $opt_c $opt_g $opt_t $opt_h $opt_s $opt_p);
my ($remote, $port, $iaddr, $paddr, $proto, $line, $ans);
my ($ta_id, $prot_id, $unit_id, $mb_fc, $ref, $count, @data);
# Der Client wird flexibel durch Optionen, die es erlauben,
# ihn wie ein klassisches Unix-Tool mit vielen Parametern
# aufzurufen
$unit_id = $opt_u = 1; # 1 bei Solarlog
$ref = $opt_r = 3518; # Register im Solarlog
$count = $opt_c = 2; # Anzahl übertragener Register
$opt_g = 04; # Anforderung zum Lesen
$opt_t = 06; # Anforderung zum Schreiben
$opt_h = 0; # Anforderung der Hilfe
$remote = $opt_s = '192.168.10.89'; # IP-Adresse des Solarlog
$port = $opt_p = 502; # Port-Nummer vom Solarlog
getopts('u:r:c:gths:p:'); # Abfrage der Parameter
if ($opt_h) {
# Netterweise eine Gebrauchsanweisung
print "\n usage: $0 [-u unit(1)] [-r register(0)] [-c count(16)]\n",
" [(-g et)|-t ransmit] [-h elp]\n",
" [-s server(yak)] [-p port(502)]\n\n";
exit;
}
# Welche Optionen sind eingegeben worden?
$unit_id = $opt_u;
$ref = $opt_r;
$count = $opt_c;
$remote = $opt_s;
$port = $opt_p;
$mb_fc = 3;
if ($opt_t) {
unless ($opt_g) {
# wenn nicht lesen, dann schreiben
$mb_fc = 16;
@data = @ARGV;
$count = $#data + 1;
}
}
$ta_id = 4; # beliebig
$prot_id = 0; # " - aber in Anlehung an die Portnummer
# Verbindungsdaten festlegen
if ($port =~ /\D/) { $port = getservbyname($port, 'tcp') }
die "No Port" unless $port;
$iaddr = inet_aton($remote) or die "No Host: $remote";
$paddr = sockaddr_in($port, $iaddr);
$proto = getprotobyname('tcp');
#while ( 1 ) {
# dieser Client hält eine dauernde Verbindung zum Server
# dies erlaubt die kontinuierliche Beobachtung der Simulation
socket(SOCK, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
connect(SOCK, $paddr) or die "connect: $!";
# Netzwerkverbindung und Terminalausgabe ungepuffert.
select SOCK;
$| = 1;
select STDOUT;
$| = 1;
# Request formulieren (binär!)
$line = pack "nnnCCnn", $ta_id, $prot_id, 6, $unit_id, $mb_fc, $ref, $count;
if ( $mb_fc == 0x10 ) {
# binär kodieren - Big Endian
$line .= pack 'Cn*', 2*$count, @data;
}
# und absenden
send SOCK, $line, 0;
# ein wenig Geduld zeigen - hier 100 msec
select(undef, undef, undef, 0.2);
# und auf Antwort warten
next unless defined(recv SOCK, $ans, 6+3+2*$count, 0);
# Wenn der Server die Verbindung nicht schließt, dann tun wir das
close (SOCK);
# und bereiten die Ausgabe vor
my $header = substr($ans, 0, 6);
my ($tid, $prid, $hilen, $lolen) = unpack 'nnCC', $header;
my ($unit, $fc, $bc) = unpack 'C*', substr($ans, 6, 3);
# binär dekodieren
@data = unpack 'n*', substr($ans, 9);
my $len = 0x100 * $hilen + $lolen;
#####print "Unit $unit(Ref $ref): ";
foreach (@data) {
# if ( $_ >= 3000 ) {
# $tpm = $_ - 65536; # letzter Bit verdrehen
# } else {
# $tpm = $_;
# }
# $tpm = $tpm/10;
# printf "%5.2f", ($tempora);
print ' | ';
printf $_
# #printf "%5d", $_;
}
print "\n";
if ( $mb_fc == 0x10 ) {
# wenn wir nur geschrieben haben, Schluß
exit;
}
#}
exit;
# That's it
}
1;
Und hier nochmals sein Text:
ZitatIm Anhang die Beschreibung zun Solarlog Modbus. Wird wohl nicht groß auf der Solarlog Seite darüber berichtet, ist halt nur was für Leute, die die Solarlog Daten für weitere Anwendungen auswerten wollen - so wie wir halt. Habe diese Infos auch erst auf spezieller Nachfrage per Mail erhalten.
Es gibt verschiedene Versionen bezüglich des Umfangs der Infos (abrufbare Register) über dem Modbus. In der Modbus Free Version sind zumindest die Wichtigsten Parameter enthalten - Power AC+DC, Spannung AC+DC, Ertrag gestern,Tag,Mon,Jahr, (Verbrauch Momentan-am Tag-gestern - nur mit S0 Zähler für den Verbrauch im Haus).
Vor allem Interessant für die intelligente Schaltung von Verbrauchern die Parameter P-AC momentane AC Leistung und ggf aktueller Verbrauch. Vor allem bei weicher 70 % Regelung. Da kann man ggf Verbraucher zuschalten, wenn der Wechselrichter andernfalls in die 70% Begrenzung geht, und somit die volle Leistung der Anlage nutzen.
Wer mehr braucht (MPP Tracker, Temperaturen usw. muss dann eine Lizenz für den erweiterten Zugriff erwerben (Siehe PI_ModbusTCP_Interface_de.
Ich habe bereits erfolgreich die Daten von Adresse 3500 bis 3528 ausgelesen (das hier beschriebene Script vom Modbus (2010) mit den entsprechenden Netzwerk und Registeradressen. Allerdings nicht unter FHEM sondern direkt als Perl Script vom PC aus.
Komme jetzt aber nicht weiter bei der Einbindung in 99_myutils. Habe die 99_myutils mal angehängt. Vielleicht kann ja jemand weiter helfen. So wie es jetzt ist, hängt sich FHEM auf wenn die Sub Solarlog aufgerufen wird.
Ich stelle mir das so vor
Die Subroutine Solarlog in 99_myutils einbinden, dann über define die Routine aufrufen, hier die Registernummer übergeben und als Rückantwort den Registerinhalt zurück. Solarlog Adresse, Port (fest-502),Werte für Lesen (04), Schreiben (06).. usw können ja fest unter 99_myutils eingetragen werden.
FHEM
define SolarTimer at +*00:02:00 {Solarlog(Register,Wert)}
attr SolarTimer group Workflow
attr SolarTimer room Solaranlage
Ich habe dies ebenfalls einmal getestet und fhem hängt sich, wie er schreibt bei Aufruf von SolarLog auf.
Hat schon einmal jemand einen solchen Zugriff realisiert oder/und kann das Projekt untersützen? Oder aber sieht in dem Quelltext warum sich fhem aufhängt?
Danke
Gruß,
TinoB
Hallo,
den Grund für das Aufhängen habe ich gefunden. Am Ende vom Solarlog Script muss es nicht exit; sondern return; heißen. Nur so springen wir aus der Subroutine wieder zurück. Gibt es denn hier niemanden im Forum, der uns hier beim einlesen der Werte behilflich sein kann. Ich weiss einfach nicht, wie ich die Werte aus der Routine im FHEM übernehmen kann.
Im Script muss an dieser Stelle die Variablen abgegriffen werden:
foreach (@data) {
# if ( $_ >= 3000 ) {
# $tpm = $_ - 65536; # letzter Bit verdrehen
# } else {
# $tpm = $_;
# }
# $tpm = $tpm/10;
# printf "%5.2f", ($tempora);
print ' | ';
printf $_
# #printf "%5d", $_;
}
Die Schleife foreach (@data) wird so oft durchlaufen, wie das Register an Werten hat, also meistens 2 Werte. Hier müssten nun in der Schleife die Werte in Variablen übernommen werden, die dann in FHEM weiter verarbeitet werden ----------- WER KANN HELFEN. Das Script läuft jetzt als sub durch und liest definitiv die Werte aus.
ich habe mal das Ergebnis angehängt, wenn ich das Perl Script in einer Perl Umgebung (Strawberry Padre) auf meinem Windows Rechner starte. Ich bekomme im Fenster (siehe Modbus Solarlog) tatsächlich den Wert für das Register 3502 (Momentane Modulleistung AC Seite 32 Bit unsigned) angezeigt. Das Register hat 2 16 Bit Werte (und das entspricht auch immer der tatsächlichen momentanen Leistung am AC Ausgang des Wechselrichters.
MfG Mopedpaulchen
Hi,
habe einen Solarlog 200e mit Erfolg eingebunden. Bei Intersse kann ich mein Script posten. Anbei noch ein Screenschot.
Gruss
Michael
(siehe Anhang / see attachement)
Hallo Michael,
ja bitte das Script und gegebenenfalls die entsprechende Anleitung dazu.
Danke
Gruß,
TinoB
#Hallo Tino,
habe eine 99_SolarUtils.pm angelegt (siehe Anhang).
Musst nur Deine IP-Adresse anpassen.
Der Pfad "/opt/fhem/tmp/akt_tmp.txt" und "/opt/fhem/tmp/month_tmp.txt" muss ggfs. auch angepasst werden.
- Hole_akt_Daten (nur tagsüber, macht ja im dunkeln keinen Sinn)
- Hole_Monats_Daten (am letzten des Monats)
- Akt_Wert_Filtern (in der akt_temp.txt nach der aktuellen Leistung suchen)
- Monats_Wert_Filtern (Wert suchen)
- Abfrage_Ultimo (prüfen ob Monatsletzter)
Datei Kopieren und reload 99_SolarUtils.pm.
In Deine cfg folgende Zeilen Einfügen:
#---------------------------------------
define Aktuelle_Einspeiseleistung dummy
attr Aktuelle_Einspeiseleistung group PV
attr Aktuelle_Einspeiseleistung icon icoSolarlog.gif
attr Aktuelle_Einspeiseleistung room Zaehler
attr Aktuelle_Einspeiseleistung userReadings Leistung {ReadingsVal("Aktuelle_Einspeiseleistung","state",0);;}
define aktuelle_Ablesung_timer at +*00:03:00 {Hole_akt_Daten()};;\
{Akt_Wert_Filtern ("Aktuelle_Einspeiseleistung")}
define Monats_Einspeiseleistung dummy
attr Monats_Einspeiseleistung group PV
attr Monats_Einspeiseleistung icon icoSolarlog.gif
attr Monats_Einspeiseleistung room Zaehler
define Schalter_Auto_Ablesung_timer_Monat dummy
attr Schalter_Auto_Ablesung_timer_Monat room Zaehler
define Auto_Ablesung_timer_Monat at *00:03:00 set Schalter_Auto_Ablesung_timer_Monat on
define Auto_Ablesung_notify_Monat notify Schalter_Auto_Ablesung_timer_Monat:.*on {Monats_Wert_Filtern("Monats_Einspeiseleistung") if (Abfrage_Ultimo()ne "no")};;\
{fhem ("set Schalter_Auto_Ablesung_timer_Monat off")};;\
define FileLog_Aktuelle_Einspeiseleistung FileLog ./log/Aktuelle_Einspeiseleistung-%Y-%m.log Aktuelle_Einspeiseleistung
attr FileLog_Aktuelle_Einspeiseleistung group Zaehler
attr FileLog_Aktuelle_Einspeiseleistung room Logs
define weblink_Aktuelle_Einspeiseleistung weblink fileplot FileLog_Aktuelle_Einspeiseleistung:my_Einspeisung:CURRENT
attr weblink_Aktuelle_Einspeiseleistung group Zaehler
attr weblink_Aktuelle_Einspeiseleistung label "Ertrag der PV-Anlage: Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr weblink_Aktuelle_Einspeiseleistung room Zaehler,Plots
attr weblink_Aktuelle_Einspeiseleistung plotsize 800,300
define FileLog_Monats_Einspeiseleistung FileLog ./log/Monats_Einspeiseleistung-%Y.log Monats_Einspeiseleistung
attr FileLog_Monats_Einspeiseleistung group Zaehler
attr FileLog_Monats_Einspeiseleistung room Logs
define weblink_Monats_Einspeiseleistung weblink fileplot FileLog_Monats_Einspeiseleistung:my_Solarplot:CURRENT
attr weblink_Monats_Einspeiseleistung fixedrange year
attr weblink_Monats_Einspeiseleistung group Zaehler
attr weblink_Monats_Einspeiseleistung label "Ertrag der PV-Anlage/Monat: Min $data{min1}, Max $data{max1}, Last $data{currval1}, Summe $data{sum1}"
attr weblink_Monats_Einspeiseleistung room Zaehler,Plots
attr weblink_Monats_Einspeiseleistung plotsize 800,300
#-------------------------------------------------------------------------------------
Wenn Du einen Solarlog 200e besitzt muss es so funktionieren.
Bei andernen Loggern müssen vielleicht noch Anpassungen vorgenommen werden.
Viel Spass beim probieren
Michael
Hallo Michael,
vielen Dank für die tolle Arbeit, es läuft bei mir. Ich sehe zumindest die aktuelle Leistung, bekomme nur kein Plot angezeigt - ist aber klar, mir fehlen die gplot Dateien. kannst du noch folgende Dateien zur Verfügung stellen, macht die Sache einfacher.
Dateien:
my_einspeisung.gplot
my_solarplot.gplot
und wenn du dir schon die Arbeit mit dem Solarlog-Icon gemacht hast, vielleicht auch dieses.
PS für Fritzbox User: die Pfadangabe bei einer Fritzbox wäre dann "/var/media/ftp/fhem/FHEM/tmp/akt_tmp.txt" entsprechend für den Monat. wo bei das Verzeichnis tmp dann noch angelegt werden muss.
Vielen Dank und MfG Uwe
Hi Uwe,
freut mich dass es funktioniert.
Werde die Dateien heute Abend hochladen.
Grüsse
Michael
Hallo,
könnte jemand das auch ins Wiki einpflegen?
Das wär doch perfekt dort aufgehoben, oder nicht?
Grüße
@Uwe,
habe wenig Zeit, hier die Dateien.
Kannst ja mal einen Screenshot hochladen wenn es funktioniert.
Grüsse
Michael
(siehe Anhang / see attachement)
Hallo Michael,
zunächst die Rückmeldung, es funktioniert ;-) Danke, ich bin begeistert.
Allerdings gibt es doppelte Einträge im Logfile. Hier eine Beispiel:
2013-06-18_20:59:20 Aktuelle_Einspeiseleistung Leistung: 5
2013-06-18_20:59:20 Aktuelle_Einspeiseleistung 5
Ich bin nur noch nicht dazu gekommen den Fehler zu suchen. Ich werds mir bei Gelegenheit mal ansehen.
Gruß,
TinoB
Hallo Tino,
falls es dich stört einfach folgende Zeile entfernen:
attr Aktuelle_Einspeiseleistung userReadings Leistung {ReadingsVal("Aktuelle_Einspeiseleistung","state",0);;}
Ist noch eine Überbleibsel von Tests, hatte ich vergessen zu löschen.
Grüsse
Michael
Hallo,
hat jemand von Euch diese Abfrage in Zusammenhang mit einem HMLAN? Da gibt es scheinbar ein Problem in der Zeit wo keine Abfrage gemacht wird, also da wo kein Tag ist, gibt es Disconnects.
Ich werde zunächst einmal die Abfrage isday entfernen und sehen was dann im Logfile steht.
Gruß,
TinoB
Hallo Tino,
ja bei mir hängt auch ein HMLan mit im System, aber keine Probleme.
Gruß Uwe
Hallo Michael,
wie gewünscht ein Screenplot von meiner Solarlog Einbindung. Gibt es auch die Info über den Eigenverbrauch, denn wie du auf dem Screenplot siehst, wird bei mir der Eigenverbrauch mit eingerechnet, weil ich die weiche 70% Lösung bei der Solaranlage habe.
Ich meinte dieses Bild
Hallo Uwe,
in welcher Solarlog Datei steht der Eigenverbrauch? Ich habe nach den Datenformaten von Solarlog gesucht, jedoch nirgends einen Hinweis gefunden. Wir greifen hier ja auf die "min_cur.js" Datei zu. Steht dort etwas über den Eigenverbrauch in Deiner mit drin?
Gruß,
TinoB
Hi,
ihr müsst mal nachsehen welche Java-Scripte auf eurem Solarlog laufen. Irgendwo muss auch der Eigenverbrauch abgefragt werden.
Ich kann euch da nicht helfen da ich zu 100% einspeise.
Grüsse
Michael
Hallo!
Ich habe einen Wechselrichter von Fronius. Da gibt es auch eine Steckkarte, die über 868Mhz Daten an ein Wohnzimmer Display übermitteln kann. Wäre es möglich, diese Daten abzugreifen und in FHEM zu visualisieren?
Es gibt übrigens für Fronius Wechselrichter ein Linux-Tool, das sich über rs232 Daten holt. http://sourceforge.net/projects/fslurp/ (//sourceforge.net/projects/fslurp/)
Bin FHEM Anfänger, aber begeistert ;-)
mfg. Clemens
Hallo FHEMler, bin begeitert über dieses Thema.
habe einen SL200 Wifi PM+ und suche euch schon lange.
Versuche gerade alle komponenten zu integrieren./(da noch blutiger Anfänger, sehr schweisstreibend)
Mein FHEM läuft auf einer FB 7390 mit CUL sehr gut.
Vieleicht kann einer mir etwas behilflich sein die Dateien af meinem FHEM zu integrieren.
Würde mich freuen von euch zu hören.
Gruß aus Köln
Herbert
Hallo Herbert,
von der Sache steht bereits alles von Michael schon beschrieben. Den Quellcode einfügen, anpassen und Du bekommst die Daten vom SolarLog.
Gruß,
TinoB
Hi...,
hier findet ihr noch ein paar Infos zur Datenstruktur im Solarlog.
http://photonensammler.homedns.org/wiki/doku.php?id=solarlog_datenformat (//photonensammler.homedns.org/wiki/doku.php?id=solarlog_datenformat)
Michael
Hallo TinoB, habe mir schon alles durchgelesen, da ich aber noch am Anfang stehe hatte ich mir etwas Hilfe zu der genauen Vorgehensweise erhofft. Aber ok, probiere halt weiter selber rum.
Danke trotzdem für das reagieren auf mein Anliegen.
lentesh
Vielen Dank für das Modul. Läuft auch wunderbar mit einem SolarLog 1000.
Da ich auch eine weiche 70% Regelung habe würde ich gerne Verbraucher schalten.
Hat jemand vielleicht schon ein Beispiel wie man das am besten relaisiert?
z.b. beim Einspeisung von mind 1500W einen Verbraucher per Funksteckdose schalten.
Bin nicht so fit im Programmieren...
mfg
Spice
Hallo Spice,
hier eine Beispiel zum Testen:
define pv.Ertrag.notify notify a_PVErtrag {\
if(Value("a_PVErtrag") > 1500) {\
fhem("set Test_Dummy on");;\
}\
else {\
fhem("set Test_Dummy off");;\
}\
}
attr pv.Ertrag.notify room !Experiment
Allerdings ist dies nur ganz einfach und wird mit einer Abhängigkeit "a_PVErtrag" ausgeführt. Ist diese größer 1500 wird der Schalter "ein", ist dieser kleiner 1500 "aus" geschalten. Das ist natürlich nicht schön. Bei einem elektrischen Direktheizgerät wird das nicht stören, aber stell Dir vor Du möchtest Deinen Geschirrspüler oder Waschmaschiene oder sowas damit einschalten und es sind Wolken am Himmel ;-)
Somit müssen noch mehr Abhängikeiten mit berücksichtigt werden. Vielleicht der PV Anstieg der letzten Minuten? Vielleicht der Durchschnitt der letzten Minunten? Vielleicht das aktuelle Wetter?
Man kann natürlich nur den Einschaltwert berücksichichtigen. Wenn dann geh "an" und nicht wieder "aus". Wenn man Pech hat kann es passieren es geht "an" und es kommt gleich Regen oder dunkle Wolkem oder was auch immer. Dann läuft das ganze ab und man bezieht den Strom aus dem Netz.
Was ich damit sagen will, der Weg dieses System zum kompletten Energiemanager auszubauen ist richtig und auch ein absoluter Vorteil gegenüber anderen Systemen. Allerdings wird es noch ein langer Weg werden.
Gruß,
TinoB
Hallo TinoB,
Danke für das Beispiel.
Ich regle bereits meinen WW-Boiler mit dem SolarLog mit einer weichen 70% Regelung.
Der SolarLog berechnet hier den Überschuss auf 5 Minunten im Zusammenspiel mit dem Eigenverbrauch
(habe dafür ja auch einen extra Zähler) Diesen könnte man sogar mit dem volkszaehler.org Modul einbinden.
Für die Regelung über den Solarlog müsste ich allerding neue Netzwerksteckdosen kaufen um mehrere Geräte zu steuern.
Das Beispiel reicht fast aus. Hatte mir z.B. bei 1000W Einspeiseleistung ein und ab 100W wieder aus.
Teste das heute abend mal.
mfg
Spice
Hallo Solarlog Freunde,
habe mir gerade mal die Datei min_day.js vom Solarlog angesehen. Bei meiner Anlage mit 70% und Eigenverbrauch befindet sich ja auch ein S0 Zähler für den Eigenverbrauch am Solarlog. Der Wert kann in dieser Datei gefunden werden.
Auszug:
mitten am Tag
m[mi++]="01.07.13 14:50:00|654;0;9326|5258;5468;10959;296"
bei Start des WR
m[mi++]="01.07.13 06:30:00|204;0;4133|237;261;67;277"
m[mi++]="01.07.13 06:25:00|226;0;4116|173;190;47;254"
m[mi++]="01.07.13 06:20:00|345;0;4097|141;156;33;264"
m[mi++]="01.07.13 06:15:00|322;0;4068|128;142;21;265"
m[mi++]="01.07.13 06:10:00|288;0;4040|121;134;10;276"
m[mi++]="01.07.13 06:05:00|277;0;4016|6;6;0;343"
m[mi++]="01.07.13 06:00:00|302;0;3992|0;0;0;332"
m[mi++]="01.07.13 05:55:00|212;0;3967|1;2;0;328"
m[mi++]="01.07.13 05:50:00|213;0;3948|0;0;0;325"
m[mi++]="01.07.13 05:45:00|312;0;3932|0;1;0;318"
m[mi++]="01.07.13 05:40:00|213;0;3906|0;0;0;298"
m[mi++]="01.07.13 05:35:00|287;0;3888|0;0;0;173"
m[mi++]="01.07.13 05:30:00|369;0;3863|0;0;0;62"
m[mi++]="01.07.13 05:25:00|400;0;3828|0;0;0;0"
m[mi++]="01.07.13 05:20:00|397;0;3800|0;0;0;0"
bedeutet: die | sind Trenner für die einzelnen Geräte am Solarlog -
also "Datum, Uhrzeit ist klar |S0 AC momentanverbrauch;immer 0;S0 aufgelaufener Tageswertin W/h|WR momentan AC;WR momentan DC;aufgelaufene Solarleistung in W/h;Spannung momentan"
das File fängt immer um 0:00 Uhr an bis 23:55 des gleichten Tages. Es sind Mittelwerte von jeweils 5 Minuten
Hoffe das hilft ein wenig weiter für Leute, die den Eigenverbrauch unter FHEM anzeigen wollen
Ich steuere meine Poolpumpe über die Leistung der PV Anlage. Die Pumpe läuft über einen FS20 Schalter. Da die Anlage 7,3 kW Peek hat, würde der Solarlog bei 4900 W Einspeiseleistung den WR runterwürgen. Daher prüfe ich alle 3 Minuten, ob die Anlage über 4500 W leistet und schalte entsprechen meine Poolpumpe von 800 W /+ca 300W Haus Grundlast hinzu. Der Timer von der Pumpe läuft 3 min und 10 Sekunden, so das bei guter Sonneneinstrahlung die Pumpe durch läuft.
Mit :
define Pool_PV at +*00:03:00 {if (ReadingsVal("Aktuelle_Einspeiseleistung","Leistung",0) > 4500) {\\
fhem("set Poolpumpe on-for-timer 200") }}
attr Pool_PV alias Poolfilter 3 Min bei PV Power >4500W
attr Pool_PV room Pool
steht das in der FHEM CFG.
gefällt mir so aber noch nicht wirklich. ich will die Filterzeit auf ca 2 Std am Tag begrenzen, egal wie stark die Sonne scheint, es sei denn die Außentemperatur ist größer 26 Grad, da kann es dann auch mal länger sein. (Hintergrund - ich will vermeiden, das es bei kühlen Tagen und hoher Sonneneinstrahlung durch lange Filterlaufzeiten zum Abkühlen des Becken kommt.)
Info für Spiceweasel:du benutzt bestimmt die Verbrauchssteuerung die nur im Solarlog 1000 vorhanden ist. Hatte ich auch erst überlegt, war mir dann aber zu teuer nur für diese Funktion den Solarlog 1000 zu kaufen. Mit dem o.g. Beispiel kannst du über FHEM so viele Verbraucher schalten wie du möchtest. zusätzlich kannst du die Schaltvorgänge von weiteren Bedingungen abhängig machen wie Uhrzeit, Temperatur Schaltzustand anderer Komponenten ,Anwesenheit usw. Jetzt müssen wir nur noch die Verbrauchswerte nach FHEM übertragen (die Ertragswerte haben wir ja schon)und schon geht es los.
Vielleicht kann ja Michael sein Programm so erweitern, das auch auf die min_day.js zugegriffen wird, und die Werte in ein FHEM log übertragen werden ? Auch wenn Michael ja alles Einspeist, aber für den einen oder anderen wäre das sehr hilfreich.
Mfg Uwe
Hallo Solarlog Freunde,
bin schon weiter gekommen, kann jetzt die Verbrauchsdaten dank Michael (danke für die gute Vorarbeit, habe deine PM etwas erweitert) aus der Solarlog Datei raus holen, in einer Temp Datei ablegen und den aktuellen Verbrauchswert auslesen.
Habe das Ganze auch schon mit in das Diagramm von der Solaranlage eingebaut, so dass ich die gleiche Ansicht wie im Solarlog habe, nur mit dem großen Unterschied, dass ich mit diesen Werten unter FHEM steuern kann.
Hänge die Dateien mal an.
Wichtiger Hinweis: Der Wert ist ein über 5 min vom Solarlog gemittelter Wert. Da her etwas träge für schnelle und aktuelle Steueraufgaben. Aber ich habe das Projekt mit dem Modbus noch nicht aufgegeben, denn da sind die Werte wirklich aktuell. Auch der wirkliche Momentane Verbrauch kann da tatsächlich ausgelesen werden. Habe auch schon meinen neuen Stromzähler (2Richtungszähler ) über die Opto Schnittstelle angezapft. Bekomme auch schon Daten. Mal sehen wie es weiter geht, aber was hier im Forum schon alles möglich ist, einfach super.
Nur diese Perl Scripte - einfach gewöhnungsbedürftig. (8-0)
(siehe Anhang / see attachement)
MfG Uwe
Hallo Uwe,
habe gerade wenig Zeit und mal auf die Schnelle. In dieser Datei min_cur.js welche abgefragt wird, werden die Werte im 15-20 Sekunden Rhythums ausgegeben. Da man eh keine Verbraucher so schnell an und ausschalten kann, ist das schon fast zu viel ;-)
Bis später,
TinoB
Hallo Tino,
ist richtig für die aktuelle Leistung, aber in der Datei ist nicht der momentane Verbrauch. Der ist in einer anderen Datei und die wird nur alle 5 min aktualisiert. Siehe Logauszug oben.
MfG Uwe
Hallo Uwe,
Zitatist richtig für die aktuelle Leistung, aber in der Datei ist nicht der momentane Verbrauch. Der ist in einer anderen Datei und die wird nur alle 5 min aktualisiert. Siehe Logauszug oben.
ja stimmt, in der Datei werden nur alle 5 Minuten übermittelt.
ZitatHabe auch schon meinen neuen Stromzähler (2Richtungszähler ) über die Opto Schnittstelle angezapft. Bekomme auch schon Daten. Mal sehen wie es weiter geht, aber was hier im Forum schon alles möglich ist, einfach super.
Mit welchen Gerät genau fragst Du den Zähler ab? Und wie genau ist dies? Es kursieren ja mehrere Sachen hier rum.
Danke
Gruß,
Tino
Hallo Tino,
Stromzähler ist der EHL . Zum Abfragen habe ich kein Gerät - Opto Transistor mit kleinem Transistor Verstärker auf ein Microcontroller Eingang - halt alles Selbstbau. zur Genauigkeit kann ich sagen, das was du in der unteren Anzeige angezeigt bekommst, kommt auch auf dem Optoausgang - nur schneller hintereinander. Habe dir das Protokoll mal angehängt -ist das SML Protokoll
MfG Uwe
aber der 2Richtungszähler kann doch nicht den aktuellen Verbrauch anzeigen.
Nur ein extra Zähler dazwischen. So funktioniert ja auch die weiche 70% Regelung des SolarLog.
Der 2Richtungszähler misst ja nur Bezug und Lieferung.
Hallo Spiceweasel,
ja genau so läuft es auch bei mir 1xS0 Zähler für den gesamten Verbrauch und halt der 2 Wege für Bezug und Einspeisung. Aber ich möchte gerne den gerade aktuellen Verbrauchswert vom 2 Wege Zähler haben, denn da kann ich ganz genau erkennen, was gerade aktuell anliegt. Der Zähler gibt einen aktuellen Wert in kW/h raus mit A+ als Bezug und A- vor dem Wert bei Einspeisung. Somit kann ich immer genau erkennen, ob das Zuschalten von Verbrauchern dazu führt, das ich über dem solaren Ertrag liege und Strom vom EVU beziehe.
MfG Uwe
Hallo Freunde des Solarlog,
habe mich mal hingesetzt und die Solarlog Funktionen über den MODBUS TCP erstellt. Was soll ich sagen, funktioniert gut. Es geht hier um den Modus in der "Free" Version.
Die Auslesbaren Werte sind ja bereits im PDF weiter oben beschrieben. Ich hänge es noch mal mit rein.
HINWEIS :Alle Leistungswerte in WATT bzw W/h , Spannungen in Volt
Funktionen: Register Länge Hinweis
Last Update Reg 3500 2
akt Power ac Reg 3502 2
akt Power dc Reg 3504 2
akt Spannung ac Reg 3506 1
akt Spannung dc Reg 3507 1
Täglich aufsum. Ertrag Reg 3508 2
Gestern aufsum. Ertrag Reg 3510 2
Monatl. aufsum. Ertrag Reg 3512 2
Jährl. aufsum. Ertrag Reg 3514 2
Totaler aufsum. Ertrag Reg 3516 2
aktueller Verbrauch Reg 3518 2 bei Verbrauchswerten natürlich nur bei einem S0 Zähler für den Verbrauch am Solarlog !
Täglich aufsum. Verbrauch Reg 3520 2
Gestern aufsum. Verbrauch Reg 3522 2
Monatl. aufsum. Verbrauch Reg 3524 2
Jährl. aufsum. Verbrauch Reg 3526 2
Totaler aufsum. Verbrauch Reg 3528 2
Über die 99my_utilitys wird die Solarlog Modbus Funktion eingefügt. Der Aufruf erfolgt dann aus FHEM mit einem einfachen Aufruf der Subroutine Solarlog. Als Parameter werden 3 Werte übergeben.
1. Die Adresse vom auszulesenden Register
2. Die Länge des Registers 1 oder 2 je nach Number Reg Angabe
3. die von euch gewünschte Device, in dem der Wert zurück gegeben wird. Das ist schon alles. (Device vorher als Dummy anlegen)
Wie im Beispiel erkennbar - die 3 Dummy Device Akt_Verbrauch , Tagesertrag und Tagesverbrauch (oder wie auch immer ihr sie nennen wollt)
ausgelesen wird der Wert dann mit der Funktion :{Solarlog ("3508","2","Tagesertrag")} wo bei die 3 Parameter entsprechend gesetzt werden müssen. Den 2. Parameter brauche ich für die Umrechnung. es sind teilweise 16 und auch 32 Bit Werte - aber Ihr braucht selber nichts mehr umrechnen, es sei denn Ihr wollt die Werte nicht in Watt sondern kW.
Beispiel: fhem.cfg
###### SOLARLOG auslesen ##################################
#----- Aktueller Verbrauch --------------------------------
define Akt_Verbrauch dummy
attr Akt_Verbrauch alias Aktueller Verbrauch
attr Akt_Verbrauch group PV
attr Akt_Verbrauch room CUL_HM
#----- Tageswerte -----------------------------------------
define Tagesertrag dummy
attr Tagesertrag alias Tagesertrag
attr Tagesertrag group PV
attr Tagesertrag room CUL_HM
define Tagesverbrauch dummy
attr Tagesverbrauch alias Tagesverbrauch
attr Tagesverbrauch group PV
attr Tagesverbrauch room CUL_HM
#----- Solarlog auslesen -------------------------------
define Solarlog_Read_Timer_Tag at +*23:58:30 {Solarlog ("3508","2","Tagesertrag")};;{Solarlog ("3520","2","Tagesverbrauch")}
attr Solarlog_Read_Timer_Tag group PV
attr Solarlog_Read_Timer_Tag room CUL_HM
define Solarlog_Read_Timer_3min at +*00:02:30 {Solarlog ("3518","2","Akt_Verbrauch")}
attr Solarlog_Read_Timer_3min group PV
attr Solarlog_Read_Timer_3min room CUL_HM
-------------------------------------------------------------
Das war es schon. In fhem ist die Funktion sehr kompakt. Wer möchte kann die Werte natürlich noch in diverse Logs schreiben und sich eigene Grafiken und Auswertungen seiner Solaranlage erstellen.
Der besondere Vorteil ist hier, jeder kann sich nur die Werte raus picken, die er auch braucht und in selbst definierten Devices ablegen.
Viel Spaß mit den neuen Solarlog Funktionen. ----- gaaaanz laaaangsam gewöhne ich mich an Perl Script aber dann hat man tolle Möglichkeiten.
MfG Uwe
Hätte ich fast vergessen, natürlich müsst Ihr in der 99_Myutils die Netzwerkadresse von eurem Solarlog eintragen. (sollte eine Feste Adresse haben)
Hallo Uwe,
erstmal vielen Dank für die Arbeit an diesem Modul.Ich bin nun auch dazu gekommen dieses zu testen. Allerdings hört es bereits beim Laden des Moduls auf. Da bekomme ich folgende Fehlermeldung:
2013.07.24 22:02:50 1: reload: Error:Modul 99_myUtils deactivated:
Global symbol "$opt_u" requires explicit package name at ./FHEM/99_myUtils.pm line 31.
Global symbol "$opt_r" requires explicit package name at ./FHEM/99_myUtils.pm line 32.
Global symbol "$opt_c" requires explicit package name at ./FHEM/99_myUtils.pm line 33.
Global symbol "$opt_g" requires explicit package name at ./FHEM/99_myUtils.pm line 34.
Global symbol "$opt_t" requires explicit package name at ./FHEM/99_myUtils.pm line 35.
Global symbol "$opt_h" requires explicit package name at ./FHEM/99_myUtils.pm line 36.
Global symbol "$opt_s" requires explicit package name at ./FHEM/99_myUtils.pm line 37.
Global symbol "$opt_p" requires explicit package name at ./FHEM/99_myUtils.pm line 38.
Global symbol "$opt_h" requires explicit package name at ./FHEM/99_myUtils.pm line 40.
Global symbol "$opt_u" requires explicit package name at ./FHEM/99_myUtils.pm line 42.
Global symbol "$opt_r" requires explicit package name at ./FHEM/99_myUtils.pm line 43.
Global symbol "$opt_c" requires explicit package name at ./FHEM/99_myUtils.pm line 44.
Global symbol "$opt_s" requires explicit package name at ./FHEM/99_myUtils.pm line 45.
Global symbol "$opt_p" requires explicit package name at ./FHEM/99_myUtils.pm line 46.
Global symbol "$opt_t" requires explicit package name at ./FHEM/99_myUtils.pm line 49.
Global symbol "$opt_g" requires explicit package name at ./FHEM/99_myUtils.pm line 50.
Wie Du schreibst funktioniert es ja bei Dir. An was kann das liegen, dass es bei mir nicht läuft?
Danke
Gruß,
TinoB
Hallo Tino,
versuche es mal mit meiner Original Version von der 99_Myutil sind noch 2 weitere Funktionen enthalten, die du dann selber raus editieren kannst.
MfG Uwe
So, wie sie bei mir läuft:
Hallo Uwe,
ich habe den Fehler gefunden. Diese Zeile:
use vars qw($opt_u $opt_r $opt_c $opt_g $opt_t $opt_h $opt_s $opt_p);
war auskommentiert und führte zur Fehlermeldung. Ich habe die Auskommentierung entfernt und neu geladen. Bisher läuft nun alles.
Ich werde es nun einmal so laufen lassen und melde mich später nochmals dazu.
Danke schon einmal für die Umsetzung.
Viele Grüße,
Tino
Versuche das gerade fuer meinen Solarlog 100e unter Windows zum Laufen zu bringen aber ohne Erfolg.
Adresse und Pfade habe ich angepasst. Es wird eine leere akt_tmp.txt erzeugt.
Wenn ich das "Hole_Daten" auskommentiere und von Hand eine akt_tmp.txt erzeuge wird mir die aktuelle Leistung angezeigt
Wenn ich auf meinen Solarlog mit http://192.168.xxx.xxx:80/min_cur.js im IE zugreifen will, erscheint ERROR 400. Also kann ich die Datei doch auch nicht mit GetHttpfile kopieren, oder ?
Auch mit wget kann ich die Datei min_cur.js nicht downloaden.
Ihr holt Euch die Datei schon direkt vom Solarlog, oder von der Homepage, auf die der Solarlog seine Daten exportiert ?
Dort existiert eine min_cur.js
Zitat von: Mopedpaul am 25 Juli 2013, 16:50:44
Hallo Tino,
versuche es mal mit meiner Original Version von der 99_Myutil sind noch 2 weitere Funktionen enthalten, die du dann selber raus editieren kannst.
MfG Uwe
So, wie sie bei mir läuft:
#
Hallo.
Habe auch SolarLog, allerdings 300 Meter. Wie soll ich deine .pm in meine einfügen? einfach per copy/paste? ich habe gelesen das man die S99_myutils nicht editieren soll.
m.f.g.
Hallo,
Du könntest zum Beispiel die Datei auch umbennen dann die Initialisierung (ich hoffe das ist korrekt ausgedrückt) anpassen. Dann Zum Beispiel mit FTP übertragen und in fhem mit reload laden.
Ich hänge Dir meine geänderte mal ran.
Gruß,
Tino
hallo.
klappt leider nicht.
Zitat von: cotecmania am 28 Oktober 2013, 11:19:30
Versuche das gerade fuer meinen Solarlog 100e unter Windows zum Laufen zu bringen aber ohne Erfolg.
Adresse und Pfade habe ich angepasst. Es wird eine leere akt_tmp.txt erzeugt.
Wenn ich das "Hole_Daten" auskommentiere und von Hand eine akt_tmp.txt erzeuge wird mir die aktuelle Leistung angezeigt
Wenn ich auf meinen Solarlog mit http://192.168.xxx.xxx:80/min_cur.js im IE zugreifen will, erscheint ERROR 400. Also kann ich die Datei doch auch nicht mit GetHttpfile kopieren, oder ?
Auch mit wget kann ich die Datei min_cur.js nicht downloaden.
Ihr holt Euch die Datei schon direkt vom Solarlog, oder von der Homepage, auf die der Solarlog seine Daten exportiert ?
Dort existiert eine min_cur.js
hallo.
auch ich habe keine werte in den oben genannten codes stehen.
habe keine aktuelle min_cur.js. die gibts auch nicht mehr am solarlog zum abgreifen seit firmware 3.x. auf meiner eigenen homepage, wo ich solarlog per ftp uploaden lasse, sehe ich nur die vergangenen tage, den heutigen eben nicht. nur am solarlogportal. kann mir wer weiterhelfen?
Hallo,
wie hast Du die Datei eingebunden bzw. fragst Du die Werte ab? Häng doch bitte mal den Code mit ran. Hier werden die Daten vom SolarLog nicht über die *.js Dateien abgeholt sonder über Modbus.
Was ich eben sehe und vergessen habe zu erwähnen, zunächst muss in Zeile 37 die IP vom SolarLog noch eingetragen werden. Anschließend das Modul neu laden nicht vergessen.
$remote = $opt_s = '192.168.1.160'; # IP-Adresse des Solarlog eintragen
Gruß,
Tino
hallo.
ich hbe beide geposteten codes versucht. die ip habe ich natürlich geändert. was meinst du mit modbus? und wo sollte ich die zeile 37 editieren?
Gesendet von meinem Transformer TF101G mit Tapatalk
Hallo,
also Du musst die IP Adresse in der 99_mySolarUtils.pm auf die von Deinem SolarLog ändern, speichern und neu laden.
Anschließend versucht Du mal diesen Code in einer *.cfg Datei.
define SolarLogValueTimer at +*00:01:00 {\
if(Value("btn.PVErtrag") eq "Aktiv") {\
{Solarlog ("3502","1","Pac")};;{Solarlog ("3508","2","Today")};;{Solarlog ("3510","2","Yesterday")};;{Solarlog ("3512","2","Month")};;{Solarlog ("3514","2","Year")};;{Solarlog ("3516","2","Total")}\
}\
}
attr SolarLogValueTimer group PV
attr SolarLogValueTimer room !Experiment
Dann musst Du noch die Dummys für Pac, Today, Yesterday, Month, Year und Total anlegen. Hier ein Beispiel.
define Pac dummy
attr Pac alias Ertragsleistung Pac
attr Pac group Werte
attr Pac room Photovoltaik
attr Pac sortby 01
usw. usf.
Gruß
Tino,
Thx. Werds morgen austesten.
sent with tapatalk
Zitat von: oniT am 10 Februar 2014, 21:34:29
Hallo,
also Du musst die IP Adresse in der 99_mySolarUtils.pm auf die von Deinem SolarLog ändern, speichern und neu laden.
Anschließend versucht Du mal diesen Code in einer *.cfg Datei.
define SolarLogValueTimer at +*00:01:00 {\
if(Value("btn.PVErtrag") eq "Aktiv") {\
{Solarlog ("3502","1","Pac")};;{Solarlog ("3508","2","Today")};;{Solarlog ("3510","2","Yesterday")};;{Solarlog ("3512","2","Month")};;{Solarlog ("3514","2","Year")};;{Solarlog ("3516","2","Total")}\
}\
}
attr SolarLogValueTimer group PV
attr SolarLogValueTimer room !Experiment
Dann musst Du noch die Dummys für Pac, Today, Yesterday, Month, Year und Total anlegen. Hier ein Beispiel.
define Pac dummy
attr Pac alias Ertragsleistung Pac
attr Pac group Werte
attr Pac room Photovoltaik
attr Pac sortby 01
usw. usf.
Gruß
Tino,
hallo.
habe es versucht, sehe allerdings nur fragezeichen. ich denke es liegt am modbus.ich lese immer von "ree" version, und starten in fham. wie geschieht das genau und wo muss ich die "free" version installieren?
oder verstehe ich da etwas falsch?
Hallo,
also damit kenne ich mich jetzt nicht mehr aus. Bei mir läuft dies auf der FritzBox. Eventuell musst Du noch etwas anpassen.
Diese Infos sind etwas zu wenig damit Dir jemand hier helfen kann.
Welche Firmware ist auf dem SolarLog? Kann diese Modbus TCP? Frage doch gegebenenfalls bei SolarLog nach. Fhem ist auch die aktuellste Version? Was steht im Logfile? Oder hänge doch mal paar Screenshots mit an.
Gruß
Tino
Hallo. Fhem läuft auf dockstar. Solarlog FW 3.03 Modbus kann jeder, habs nachgelesen. Wie starte ich die routine auf fhem?
sent with tapatalk
### Solarlog ####
define SolarLogValueTimer at +*00:01:00 {\
if(Value("btn.PVErtrag") eq "Aktiv") {\
{Solarlog ("3502","1","Pac")};;{Solarlog ("3508","2","Today")};;{Solarlog ("3510","2","Yesterday")};;{Solarlog ("3512","2","Month")};;{Solarlog ("3514","2","Year")};;{Solarlog ("3516","2","Total")}\
}\
}
attr SolarLogValueTimer group PV
attr SolarLogValueTimer room !Experiment
### Ertrag ###
define Pac dummy
attr Pac alias Ertragsleistung Pac
attr Pac group Werte
attr Pac room SolarEdge
attr Pac sortby 01
### Heutiger Ertrag ##
define Today dummy
attr Today alias Heutiger Ertrag
attr Today group Werte
attr Today room SolarEdge
attr Today sortby 02
Hallo,
sorry, ich Frage in meinem Code mit
if(Value("btn.PVErtrag") eq "Aktiv")
noch den Sonnenauf- und untergang ab. Diesen musst Du noch entfernen. Habe ich eben erst gesehen. Ich stells mal bissl übersichtlicher dar ...
### Solarlog ####
define SolarLogValueTimer at +*00:01:00 {\
{Solarlog ("3502","1","Pac")};;\
{Solarlog ("3508","2","Today")};;\
{Solarlog ("3510","2","Yesterday")};;\
{Solarlog ("3512","2","Month")};;\
{Solarlog ("3514","2","Year")};;\
{Solarlog ("3516","2","Total")};;\
}
attr SolarLogValueTimer group PV
attr SolarLogValueTimer room !Experiment
Gruß,
Tino
Hallo. Thx. Werds abends testen
sent with tapatalk
[edit]
Danke!! jetzt klappts. HAbe mich schon gefragt was dieser eintrag (button ?) bedeuten soll. aber das dies sonnenuntergang sein soll ,kam mir nie in den sinn.
[/edit]
Zitat von: Mopedpaul am 23 Juli 2013, 01:06:01
Hallo Freunde des Solarlog,
aktueller Verbrauch Reg 3518 2 bei Verbrauchswerten natürlich nur bei einem S0 Zähler für den Verbrauch am Solarlog !
Den 2. Parameter brauche ich für die Umrechnung. es sind teilweise 16 und auch 32 Bit Werte - aber Ihr braucht selber nichts mehr umrechnen, es sei denn Ihr wollt die Werte nicht in Watt sondern kW.
Hallo.
Da das ding jetzt läuft, habe ich aber noch eine frage. Der wert aktueller verbrauch wird bei mir in kW ausgegeben, nicht wie im Datenblatt angegeben in Watt, PAC aber in Watt. Wie kann ich das ändern? hast du einen tipp?
möchte dann einen vergleich erstellen, und bei negativen ergebnis dann steckdosen schalten für eigenverbrauch.
Hallo,
Du bekommst Wert zumindest richtig in kW übergeben? Dann musst Du diesen noch umrechnen in Watt. Vielleicht gleich in der 99_mySolarUtils. Dort findest Du ganz unten in Zeil 107 folgenden Code:
if ($Werte == "2") { $Ergebnis = sprintf("%0.2f", ($data[0] + $data[1]*65535)/1000) }
vor diesen fügst Du mal diesen ein:
if ($Werte == "3") { $Ergebnis = sprintf("%0.2f", ($data[0] + $data[1]*65535)) }
und führst wieder ein reaload von diesem Modul durch.
In Deinem Code in der *.cfg änderst Du die:
{Solarlog ("3518","3","AktuellerVerbrauch")};;\
Oder wie auch immer Du den Dummy benannt hast und siehst mal ob dann der Wert gleich richtig übergeben wird.
Gruß,
Tino
Danke.
Noch eine Frage zur Länge der Ausgabe, aktuell 3, woher hast du die infos? im Datenblatt von Modbus free finde ich darüber nichts.
Nachtrag, habe jetzt alle werte auf 1 gestellt, jetzt ist alles in Watt, ohne kommastelle.
thx nochmals.