Hallo,
mir ist es zumindest schon einmal gelungen die Werte der Solaranlage (Sunways NT 4200) aus dem Sunways Solar Inverter über curl auszulesen. Der folgende Aufruf:
curl --digest -u customer:******** "http://192.168.2.90/data/ajax.txt?CAN=1&HASH=00200403&TYPE=1 (//192.168.2.90/data/ajax.txt?CAN=1&HASH=00200403&TYPE=1)"
(curl --digest -u user:password "URL")
liefert mir die Daten in dieser Form zurück:
518 W;502 W;0.5 kVA;0.0 kvar;556.0;220.5;0.9;2.3;518.0;502.0;---;---;1.00 ;2.05;354.2;526.3;555.1;132;0;0;NT 4200;0
Dabei handelt es sich um die aktuellen Werte, die auch im Webfrontend angezeigt werden. Wer ebenfalls über einen Sunways Inverter mit integriertem Webserver verfügt, muss sich lediglich einmal über den Browser anmelden und die Funktion Extras - Webentwickler - Webconsole aktivieren. Jetzt einmal über den Browser anmelden. Danach kann man sich die URL aus der unteren Konsole einfach in den curl Aufruf kopieren.
Funktioniert hat es übrigens nur mit curl, wget z.B. unterstützt keine "RFC 2617 Digest Access Authentication".
Jetzt würde ich hierzu gerne ein Modul erstellen. Hätte jemand einen Vorschlag, an welchem bestehenden Modul ich mich bei der Implementierung orientieren könnte?
Danke für eure Hilfe
Hallo hotzi,
kann es sein, dass es so etwas (ähnliches) (//www.fhemwiki.de/wiki/NT5000) schon gibt?
Gruß
Thomas
Hallo Thomas,
der Ansatz ist zwar ein anderer, da ich in meinem Fall um die Anschaffung der zusätzlichen Hardware herumkomme und auch keine weitere Kabelverbindung benötige, aber du hast natürlich recht. Letztlich müsste ich ja lediglich die Datenquelle in dem Modul anpassen, alles weitere könnte ja so bleiben.
Viele Grüße und Danke für den Hinweis
Hallo hotzi,
habe ein At4500 von Sunways.
Habe es auch geschafft meinen auszulesen.
String:
0 W;0 W;0 VA;0 var;0.90;233.10;0.00;0.00;0;0;---;---;0.00 c;0.00;21.16;542.05;1484.71;8;0;0;AT 4500;1;x00100403;01;00000001;
Hast du schon was geschrieben um es darzustellen?
Gruß
lechez
Hallo,
habe es jetzt selber herausgefunden.
Habe mich jetzt in gplot eingelesen und bekomme jetzt meine Darstellung.
Hallo,
sorry das ich mich nicht schneller gemeldet hatte. Ich bin zeitlich noch nicht viel weiter gekommen. Bis jetzt hatte ich mir nur ein kleines Perl-Script geschrieben, dass die Daten in die DB überträgt. Damit sind sie sozusagen erst einmal gesichert.
Der Plot sieht super aus. Hier wird in einer Geschwindigkeit umgesetzt, da kommt ein dreifacher Familienvater einfach nicht mit. :-)
Zitat von: hotzi schrieb am Sa, 06 April 2013 21:33Hallo,
sorry das ich mich nicht schneller gemeldet hatte. Ich bin zeitlich noch nicht viel weiter gekommen. Bis jetzt hatte ich mir nur ein kleines Perl-Script geschrieben, dass die Daten in die DB überträgt. Damit sind sie sozusagen erst einmal gesichert.
Der Plot sieht super aus. Hier wird in einer Geschwindigkeit umgesetzt, da kommt ein dreifacher Familienvater einfach nicht mit. :-)
Hallo Hotzi,
kann ich verstehen, habe noch keine Kinder, aber bei der ganzen bastellei beleiben die Hausprojekte auch auf der Strecke. Ich wollte nur mein Eigenverbrauch erhöhen. Jetzt weiss ich welche Verbraucher ich wann schalten kann. Ich schreibe die Daten auch nur in ein Log nicht in einer DB. Ja ich muss es noch einwenig verfeinern. Jetzt mach ich aber erstmal die Aussenanlagen, Nachbar macht Druck.
Gruß
le Chez
Hallo, suche nach einem Script, um meinen Piko (Kostal) auszulesen. Habe versucht hier im Forum fündig zu werden ... Bin leider aber noch nicht so fit.
Ich möchte die aktuellen Werte in einem Log speichern und dann auch gern anzeigen! Den Piko kann man per HTTP ansprechen, dort muss ich dann die Werte mir zusammensuchen. Soweit so gut ... Wie spreche ich das Modul an? Muss ich ein eigenes Modul dafür schreiben, oder kann ich dies auch in 99_myUtils.pm ablegen.
viele Grüße
Olaf
## Piko auslesen
...
use WWW::Mechanize;
sub
pikopv
{
my $url = "http://192.168.178.36/";
my $digest_user = "xxx";
my $digest_password="xxx";
my $mech = WWW::Mechanize->new( autocheck => 1 );
$mech->credentials($digest_user, $digest_password);
$mech->add_header( 'X-REQUESTED-AUTH' => 'Digest' );
$mech->get($url);
my $response = $mech->response();
printf $response->content();
}
schau mal hier: Link (http://forum.fhem.de/index.php?topic=13212.msg81271#msg81271). das und zwei beiträge weiter unten geht natürlich nicht nur mit wetter daten sondern mit allem möglichen.
gruss
andre
Hi Olaf,
falls Du noch nach einer Lösung für den Kostal PIKO suchst:
Link (http://forum.fhem.de/index.php?topic=13508.0)
Hab mein Modul fertig.
MfG
Matthias
Hallo zusammen,
und noch schöne Rest-Weihnachten.
Bin grad dabei meine PV-Anlage in FHEM zu integrieren.
Sind beides Sunways AT (1x 5000er & 1x2700er).
Per curl bekomme ich die Werte übers Netzwerk.
Allerdings hapert es etwas am Einlesen in FHEM respektive dem Logging/Plotten der Werte.
Kann mir hier jemand helfen bzw. die Module zukommen lassen ?
Schöne Grüße,
danni-k
Hallo
ich lese mit einem EM1000WZ die Daten problemlos aus,
Plots etc bekommt man da prima hin dank des gutem FHEM Moduls
Als Bausatz sind die Em1000 auch sehr günstig
nur mal so als alternativer Vorschlag
Danke,
die EM1000WZ hatte ich mir auch schon angesehen.
Da ich den Wechselrichter aber eh schon an Netz habe, wäre es mir lieber, die Daten direkt auszulesen.
Dann hab ich auch die Momentanwerte etc.
Aber eventuell kommt das Teil trotzdem mit ran, damit ich meinen Stromverbrauch am anderen Zähler erfassen kann ;-)
Hallo zusammen,
hab's inzwischen hinbekommen und kann meine Solarinverter Sunways AT5000 (und AT2700) in FHEM mitloggen.
Ich hänge mal mein Modul an und einen Plot, falls es wer brauchen kann.
Hier der Aufruf im fhem.cfg:
# PV-Anlage
define myAT5000 AT5000 http://192.168.1.201/data/ajax.txt?CAN=1&HASH=00100403&TYPE=5 USER PASSWORD 300
attr myAT5000 delay 300
define FileLog_myAT5000 FileLog ./log/myAT5000-%Y.log myAT5000
attr FileLog_myAT5000 logtype at5000,text
attr FileLog_myAT5000 room logs
define SVG_FileLog_myAT5000_1 SVG FileLog_myAT5000:SVG_FileLog_myAT5000_1:CURRENT
attr SVG_FileLog_myAT5000_1 label "PV akt $data{currval1} kW, Max $data{max1} kW, Tag $data{currval2} kWh, Monat $data{currval3} kWh"
attr SVG_FileLog_myAT5000_1 room Plots
Evtl. mag ja jemand auch einiges dran verbessern am Coding ;)
Hi Danny-K!
Habe deinen sehr interessanten Artikel im fhem-Forum gefunden und - da ich ebenfalls 2 Sunways WR (NT4200 und NT10000) besitze - direkt mal testen wollen, ob das bei mir nicht auch funzt.
Der direkte Aufruf im Browser funktioniert auch einwandfrei:
2169 W;2106 W;2.1 kVA;0.0 kvar;450.1;449.1;447.4;234.0;233.5;232.5;1.6;1.6;1.6;3.0;3.0;3.0;728.0;723.0;718.0;707.0;701.0;698.0;---;---;1.00 ;1.00 ;1.00 ;0.69;0.67;0.68;52.4;44.5;16.9;107.6;96.0;67.3;10858.8;10795.2;10716.9;132;132;132;0;0;NT 10000 x 00200403;01;00000001
Nur beim Versuch, deine 20_AT5000.pm zu integrieren, bekomme ich folgende Fehlermeldungen:
Can't locate WWW/Mechanize.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl . /opt/fhem/FHEM) at /opt/fhem/FHEM/myUtilsTemplate.pm line 38. BEGIN failed--compilation aborted at /opt/fhem/FHEM/myUtilsTemplate.pm line 38.
Ich finde auch kein Verzeichnis WWW, sondern nur www, aber auch dort ist keine Datei Mechanize.pm zu finden...
Was übersehe ich?
JayAhr
P.S.: Meine Konfig: fhem 5.6 auf raspberry
Hallo JayAhr,
das ist ja verdammt lang her
Zitat von: danni-k am 13 Februar 2015, 16:47:18
Hallo JayAhr,
das ist ja verdammt lang her
Ähem, da fehlt der Rest.
Hatte das seinerzeit auf nem Beaglebone black laufen.
Soweit ich weiss ging das nachladen von WWW::mechanize mit cpan.
Syntax musst du mal googlen.
Viel Erfolg
Hallo Danni-K!
Vielen Dank für die schnelle Antwort!
Und das gute Gedächtnis! ;-)
Ich mach mich dann mal auf die Suche! ;-)
JayAhr
Hallo Danni-K,
ich nutze seit langem dein Modul AT5000 um meine Sunways WR auszulesen und über das Logfile als Plot anzuzeigen. Funktioniert soweit top, danke dafür. :D
Nur würde ich auch gerne mit dem Wert der aktuellen Leistung rechnen und für meine Hausautomatisierung verwenden. Leider scheitere ich daran den Wert "aktual" aus dem Logfile zu extrahieren. Ich bin leider zu wenig Programmierer (eigentlich gar nicht :(), als dass ich mit den Tipps aus dem Forum zum Thema "Werte aus Logfile auslesen" oder "get FileLog" etwas anfangen kann.
Ich habe auch versucht anhand des 70_NT5000.pm herauszufinden, wie ich ggf. AT5000 anpassen könnte um Readings zu erhalten. Leider erfolglos :'(
Habt ihr mir einen Tip, wie ich die aktuellen Werte als Readings in mein AT5000-Device rein bekommen?
Vielen Dank, vorab.
Grüße
Fabian
Hallo.
Die aktuellen Werte kannst Du doch direkt aus dem Device nehmen.
Bei DOIF z.B [device:reading] = wert
oder mit readingVal(,,device","Reading","defaultwert im Fehlerfall")
Gruß Christian
Servus!
Freut mich, dass noch jemand in dem (ur)alten Thread unterwegs ist. :-)
Das mit den Readings habe ich schon versucht. Mit
{ReadingsVal("myAT3000","aktual","123")}
bekomme ich aber immer nur 123 zurück.
Das Problem ist, dass mein AT5000-Device gar keine Readings hat. Anbei 3 Screenshots von
- AT5000-Device (myAT3000)
- FileLog Device
- ein Ausschnitt der Log-Datei
Ich hoffe das hilft euch weiter.
Mit dem "aktual" Wert würde ich gerne arbeiten.
Danke und Gruß
Fabian
Hi,
leider kenn ich das Modul nicht, aber wenn es keine readings erstellt, kann man die auch nicht auslesen.
Dann schau doch mal in das Modul, ob man da etwas im code erkennen kann.
Gibt es noch attribute, die man setzen kann? Was sagt die Dokumentation oder die commandref?
Bei mir ist gar kein at5000 Modul zu finden :-)
Das Modul sollte aber doch Readings erstellen:
readingsBeginUpdate($hash);
readingsBulkUpdate($hash,"aktual",$akt);
readingsBulkUpdate($hash,"Tagesertrag",$te);
readingsBulkUpdate($hash,"Monatsertrag",$me);
readingsBulkUpdate($hash,"Jahresertrag",$je);
readingsBulkUpdate($hash,"Gesamtertrag",$ge);
readingsEndUpdate($hash, 1);
(@ch.eick: das Modul ist höher hier (https://forum.fhem.de/index.php/topic,11972.msg120425.html#msg120425) im Thread)
Und Du hast ja entspr. Log Einträge. Ohne Events wäre es nicht möglich, wie diese FileLog definiert ist. Es sei denn, Du hast irgendein Skript, das die gleiche Datei befüllt.
Kannst Du das Ergebnis von einem "list myAT3000" posten?
Und auch in der Log schauen (mit verbose >=3)
Ein Skript habe ich nicht. Ich habe das Device und Logfile entsprechend dem Post von danni-k (31 Dezember 2013, 13:08:16) angelegt. Quasi copy&paste, mehr nicht.
Vor 2 Wochen habe ich dann sogar nochmal das Device gelöscht, mir hier nochmal das Modul gezogen und das Device neu angelegt. Leider keine immer Readings. :-(
Hier ein List:
Internals:
DEF http://192.168.188.37/data/ajax.txt?CAN=1&HASH=00100403&TYPE=5 customer ******** 60
FUUID 5c5dd958-f33f-3d64-5a70-789d15b828ad5d88
Host http://192.168.188.37/data/ajax.txt?CAN=1&HASH=00100403&TYPE=5
NAME myAT3000
NR 71
Pass ********
STATE initialized
TYPE AT5000
User customer
Attributes:
delay 60
icon measure_photovoltaic_inst
room Energie,Technikraum
verbose 5
recht überschaubar.
Im EventMonitor finde ich nichts von meinem AT3000, bis auf die verbose-Umstellung.
Im Logfile ist lediglich folgendes zu sehen:
2020.08.02 17:03:02 3: myAT3000: Beende nun Eltern-Prozess, bin durch
2020.08.02 17:03:03 3: myAT3000 Ich bin das Kind! Debug: Host:[http://192.168.188.37/data/ajax.txt?CAN=1&HASH=00100403&TYPE=5]
2020.08.02 17:03:03 3: myAT3000 Beende das Kind erfolreich...
2020.08.02 17:03:19 3: myAT3000: Beende nun Eltern-Prozess, bin durch
2020.08.02 17:03:19 3: myAT3000 Ich bin das Kind! Debug: Host:[http://192.168.188.37/data/ajax.txt?CAN=1&HASH=00100403&TYPE=5]
2020.08.02 17:03:19 3: myAT3000 Beende das Kind erfolreich...
Attribute gibt es lediglich suppressReadings, aber gerade das will ich ja nicht. CommandRef oder DeviceHelp gibt es leider nicht.
Versuche mal mit der angehängten Version vom Modul. Die sollte mehr verbose 4 Ausgabe in der Log zeigen.
Ich glaube, es hängt an BlockingCall. Hier wäre mMn ein HttpUtils_NonblockingGet besser. Aber zuerst mal sehen, was deine Log ausgibt (insb. ob er wirklich in die $finishFn kommt)
EDIT: Angehängte Version gelöscht. Es gibt jetzt weiter unten im Thread eine Version mit HttpUtils_NonblockingGet
Danke amenomade. Jetzt sieht das Logfile wiefolgt aus:
2020.08.02 19:33:03 3: myAT3000: Beende nun Eltern-Prozess, bin durch
2020.08.02 19:33:03 4: response=HTTP::Response=HASH(0x6ced370)
2020.08.02 19:33:03 4: ergebnis=master;0.23 kW;0.25 kVA;0.08 kvar;12.27 kWh;12.27 kVAh;0.01 kvarh;37.21 kWh;37.21 kVAh;0.01 kvarh;4.44 MWh;4.44 MVAh;0.00 Mvarh;49.24 MWh;49.24 MVAh;0.00 Mvarh;
1;AT 3000;0.12 kW;6.09 kWh;24.52 MWh;0055A1400667;268435492;3;00100403;0
2;AT 3000;0.11 kW;6.18 kWh;24.72 MWh;0055A1400671;268435492;3;00100403;0
x
x
0;0
00100403;01;00000005
2020.08.02 19:33:03 4: aktual=0.23 kW, tag=12.27 kWh, monat=37.21 kWh, jahr=4.44 MWh, gesamt=49.24 MWh
2020.08.02 19:33:03 3: myAT3000 Ich bin das Kind! Debug: Host:[http://192.168.188.37/data/ajax.txt?CAN=1&HASH=00100403&TYPE=5]
2020.08.02 19:33:03 3: myAT3000 Beende das Kind erfolreich...
Genau das sind die Werte die ich im Logfile habe, aber nicht als Reading.
Ja, und da sieht man nur die $blockingFn. Die readingsBulkUpdate, die da gemacht werden, können keine Readings erzeugen. Irgendwie merckt das die FileLog trotzdem (ich vermute, die Events sind doch da), und deswegen hast Du keine Readings, aberdoch FileLog Einträge.
Ein Workaround wäre, ein notify zu erstellen, der auf allen Events des Devices reagiert, und entspr. ein anderes Device (z.B. ein dummy) befüllt.
Ich schaue mal, ob ich das Modul irgendwie überarbeiten kann. Das Problem: ich kann dann nicht testen, da ich keine solche Solaranlage habe...
Zu Testen würde ich mich natürlich gerne bereitstellen. ;-) Danke schonmal vorab, solltest du dir die Mühe machen.
In der Richtung die Werte in ein Dummy o.ä. zu schreiben, hatte ich auch schon gedacht. Habe das aber mangels (FHEM-)Kenntnisse wieder verworfen, bzw. es hat nicht funktioniert. Evtl. versuche ich es in der Zwischenzeit mal den Weg über ein notify, wie du es schreibst.
Wenn Du testen willst... siehe anbei ;)
HttpUtils_NonBlockingGet mit digest Auth habe ich noch nie gemacht. Es kann sein, dass es nicht sofort funktioniert. Bitte um Geduld :)
Wunderbar danke. Jetzt habe ich die Readings ;D:
Internals:
DEF http://192.168.188.37/data/ajax.txt?CAN=1&HASH=00100403&TYPE=5 customer ******** 30
FUUID 5c5dd958-f33f-3d64-5a70-789d15b828ad5d88
Host http://192.168.188.37/data/ajax.txt?CAN=1&HASH=00100403&TYPE=5
NAME myAT3000
NR 71
NextUpdate 2020-08-02 21:22:34
Pass ********
STATE initialized
TYPE AT5000
User customer
READINGS:
2020-08-02 21:22:04 Gesamtertrag 49.24 MWh
2020-08-02 21:22:04 Jahresertrag 4.44 MWh
2020-08-02 21:22:04 Monatsertrag 37.60 kWh
2020-08-02 21:22:04 Tagesertrag 12.66 kWh
2020-08-02 21:22:04 aktual 0.00 kW
Attributes:
delay 30
icon measure_photovoltaic_inst
room Energie,Technikraum
verbose 5
Allerdings wollte ich "event-on-change-reading" einstellen, das ging nicht.
Wie setzt Du das? event-on-change-reading ist eine standard Funktion von Fhem, und die sollte unabhängig vom Modul sein.
zuerst wollte ich es wie gehabt über das ATTR-Menü im Device machen. Da finde ich den Menüeintrag nicht. Und so über die Commandozeile
attr myAT3000 event-on-change-reading .*
bekomme ich folgende Rückmeldung:
myAT3000: unknown attribute event-on-change-reading. Type 'attr myAT3000 ?' for a detailed list.
arf. Ja ok, moment
Habs hieroben (https://forum.fhem.de/index.php/topic,11972.msg1075909.html#msg1075909) aktualisiert.
Das ging übringens mit dem alten Modul auch nicht ;)
Wunderbar, danke. :D
Mit dem ursprünglichen Modul habe ich es wohl nie versucht einzustellen, da ich keine Readings gesehen hatte. ;-)