Studer Xtender XTM mit Xcom-232i Kommunikationsmodul / RS232 in fhem

Begonnen von holle75, 10 März 2016, 12:50:42

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

Das Modul NT5000.pm (im contrib-Ordner)  kommuniziert seriell mit einem NT5000-Wechselrichter von Sunways.

LG

pah

satprofi

So.
Werk fast vollendet.
Habe jetzt die wichtigsten Werte u. Commandos per Scom ausgelesen, und in div. pythonscripte eingetragen.

in FHEM habe ich Dummys angelegt die von Python gefüttert werden, bzw. Pythonscripte starten.
Mit DOIF rufe ich die jeweiligen scripte in python auf die mir den richtigen Ladestrom bei div. Überschuss einstellen.
Alle Minuten errechne ich den Überschuss, der dann DOIF triggert.
Ich bin auch am überlegen diese Ladesteuerung in ein eigenes Script zu packen, das alle minuten per cron gestartet wird.
das hat aber den nachteil das alle minuten selber befehl an den xtender geschickt wird, was bei doif nur dann erfolgt wenn sich der wert zur nächsten stufe ändert.
aber vielleicht fällt mir noch etwas besseres ein. habe die letzte woche einen crashkurs in python , mir raucht die birne.


define Batt_Ladung notify Batt_Ladung:on { {system('sudo python2 /usr/local/bin/ladung_on.py&');;} }
 

define ladestrom DOIF ([Ueberschuss] >1300 and [Lader] eq "on") ({system('sudo python2 /usr/local/bin/25Amp.py&')}
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

satprofi

Weitere Optimierung, den Ladestrom noch feiner gesteuert.

DOELSEIF ([Ueberschuss] >1400 and [Lader] eq "on" and [Wert_I:A] !=25) ("python2 /usr/local/bin/25Amp.py")
DOELSEIF ([Ueberschuss] >1200 and [Lader] eq "on" and [Wert_I:A] !=22) ("python2 /usr/local/bin/22Amp.py")
DOELSEIF ([Ueberschuss] >1100 and [Lader] eq "on" and [Wert_I:A] !=20) ("python2 /usr/local/bin/20Amp.py")
DOELSEIF ([Ueberschuss] >1000 and [Lader] eq "on" and [Wert_I:A] !=18) ("python2 /usr/local/bin/18Amp.py")
DOELSEIF ([Ueberschuss] >900 and [Lader] eq "on" and [Wert_I:A] !=16) ("python2 /usr/local/bin/16Amp.py")
DOELSEIF ([Ueberschuss] >800 and [Lader] eq "on" and [Wert_I:A] !=14) ("python2 /usr/local/bin/14Amp.py")
DOELSEIF ([Ueberschuss] >700 and [Lader] eq "on" and [Wert_I:A] !=12) ("python2 /usr/local/bin/12Amp.py")
DOELSEIF ([Ueberschuss] >600 and [Lader] eq "on" and [Wert_I:A] !=10) ("python2 /usr/local/bin/10Amp.py")
DOELSEIF ([Ueberschuss] >500 and [Lader] eq "on" and [Wert_I:A] !=8) ("python2 /usr/local/bin/8Amp.py")
DOELSEIF ([Ueberschuss] >400 and [Lader] eq "on" and [Wert_I:A] !=6) ("python2 /usr/local/bin/6Amp.py")
DOELSEIF ([Ueberschuss] >300 and [Lader] eq "on" and [Wert_I:A] !=4) ("python2 /usr/local/bin/4Amp.py")
DOELSEIF (([Ueberschuss] >200 and [Lader] eq "on" and [Wert_I:A] >2.5) or ([Lader] eq "off" and [Wert_I:A] >2)) ("python2 /usr/local/bin/2Amp.py")
DOELSEIF ([Ladestrom:state] eq "25A" and [Ueberschuss] <0) ("python2 /usr/local/bin/22Amp.py")
DOELSEIF ([Ladestrom:state] eq "22A" and [Ueberschuss] <0) ("python2 /usr/local/bin/20Amp.py")
DOELSEIF ([Ladestrom:state] eq "20A" and [Ueberschuss] <0) ("python2 /usr/local/bin/18Amp.py")
DOELSEIF ([Ladestrom:state] eq "18A" and [Ueberschuss] <0) ("python2 /usr/local/bin/16Amp.py")
DOELSEIF ([Ladestrom:state] eq "16A" and [Ueberschuss] <0) ("python2 /usr/local/bin/14Amp.py")
DOELSEIF ([Ladestrom:state] eq "14A" and [Ueberschuss] <0) ("python2 /usr/local/bin/12Amp.py")
DOELSEIF ([Ladestrom:state] eq "12A" and [Ueberschuss] <0) ("python2 /usr/local/bin/10Amp.py")
DOELSEIF ([Ladestrom:state] eq "10A" and [Ueberschuss] <0) ("python2 /usr/local/bin/8Amp.py")
DOELSEIF ([Ladestrom:state] eq "8A" and [Ueberschuss] <0) ("python2 /usr/local/bin/6Amp.py")
DOELSEIF ([Ladestrom:state] eq "6A" and [Ueberschuss] <0) ("python2 /usr/local/bin/4Amp.py")
DOELSEIF ([Ladestrom:state] eq "4A" and [Ueberschuss] <0) ("python2 /usr/local/bin/2Amp.py")



attr cmdState 25A|22A|20A|18A|16A|14A|12A|10A|8A|6A|4A|2A|22A|20A|18A|16A|14A|12A|10A|8A|6A|4A|2A
attr doalways 1
attr wait 0:0:0:0:0:0:0:0:0:0:0:0:5:5:5:5:5:5:5:5:5:5:5
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

satprofi

So, sensationell was jetzt geht. Bis zu 30% mehr Batterieladung.
Habe weiterhin an der Stellschraube gedreht.

DOELSEIF (([Ueberschuss] >1400 and [Lader] eq "on" and [Xtender_Batt_A] <25) or ([Ladestrom:state] eq "22A" and [Ueberschuss] >150)) ("python2 /usr/local/bin/25Amp.py")
DOELSEIF (([Ueberschuss] >1200 and [Lader] eq "on" and [Xtender_Batt_A] <22) or ([Ladestrom:state] eq "20A" and [Ueberschuss] >150)) ("python2 /usr/local/bin/22Amp.py")
DOELSEIF (([Ueberschuss] >1100 and [Lader] eq "on" and [Xtender_Batt_A] <20) or ([Ladestrom:state] eq "18A" and [Ueberschuss] >150)) ("python2 /usr/local/bin/20Amp.py")
DOELSEIF (([Ueberschuss] >1000 and [Lader] eq "on" and [Xtender_Batt_A] <18) or ([Ladestrom:state] eq "16A" and [Ueberschuss] >150)) ("python2 /usr/local/bin/18Amp.py")
DOELSEIF (([Ueberschuss] >900 and [Lader] eq "on" and [Xtender_Batt_A] <16) or ([Ladestrom:state] eq "14A" and [Ueberschuss] >150)) ("python2 /usr/local/bin/16Amp.py")
DOELSEIF (([Ueberschuss] >800 and [Lader] eq "on" and [Xtender_Batt_A] <14) or ([Ladestrom:state] eq "12A" and [Ueberschuss] >150)) ("python2 /usr/local/bin/14Amp.py")
DOELSEIF (([Ueberschuss] >700 and [Lader] eq "on" and [Xtender_Batt_A] <12) or ([Ladestrom:state] eq "10A" and [Ueberschuss] >150)) ("python2 /usr/local/bin/12Amp.py")
DOELSEIF (([Ueberschuss] >600 and [Lader] eq "on" and [Xtender_Batt_A] <10) or ([Ladestrom:state] eq "8A" and [Ueberschuss] >150)) ("python2 /usr/local/bin/10Amp.py")
DOELSEIF (([Ueberschuss] >500 and [Lader] eq "on" and [Xtender_Batt_A] <8) or ([Ladestrom:state] eq "6A" and [Ueberschuss] >150)) ("python2 /usr/local/bin/8Amp.py")
DOELSEIF (([Ueberschuss] >400 and [Lader] eq "on" and [Xtender_Batt_A] <6) or ([Ladestrom:state] eq "4A" and [Ueberschuss] >150)) ("python2 /usr/local/bin/6Amp.py")
DOELSEIF (([Ueberschuss] >300 and [Lader] eq "on" and [Xtender_Batt_A] <4) or ([Ladestrom:state] eq "2A" and [Ueberschuss] >150)) ("python2 /usr/local/bin/4Amp.py")
DOELSEIF (([Ueberschuss] >200 and [Lader] eq "on" and [Xtender_Batt_A] <=2) or ([Lader] eq "off" and [Wert_I:A] >2)) ("python2 /usr/local/bin/2Amp.py")
DOELSEIF ([Ladestrom:state] eq "25A" and [Ueberschuss] <1) ("python2 /usr/local/bin/22Amp.py", setreading Wert_I A 22)
DOELSEIF ([Ladestrom:state] eq "22A" and [Ueberschuss] <1) ("python2 /usr/local/bin/20Amp.py", setreading Wert_I A 20)
DOELSEIF ([Ladestrom:state] eq "20A" and [Ueberschuss] <1) ("python2 /usr/local/bin/18Amp.py", setreading Wert_I A 18)
DOELSEIF ([Ladestrom:state] eq "18A" and [Ueberschuss] <1) ("python2 /usr/local/bin/16Amp.py", setreading Wert_I A 16)
DOELSEIF ([Ladestrom:state] eq "16A" and [Ueberschuss] <1) ("python2 /usr/local/bin/14Amp.py", setreading Wert_I A 14)
DOELSEIF ([Ladestrom:state] eq "14A" and [Ueberschuss] <1) ("python2 /usr/local/bin/12Amp.py", setreading Wert_I A 12)
DOELSEIF ([Ladestrom:state] eq "12A" and [Ueberschuss] <1) ("python2 /usr/local/bin/10Amp.py", setreading Wert_I A 10)
DOELSEIF ([Ladestrom:state] eq "10A" and [Ueberschuss] <1) ("python2 /usr/local/bin/8Amp.py", setreading Wert_I A 8)
DOELSEIF ([Ladestrom:state] eq "8A" and [Ueberschuss] <1) ("python2 /usr/local/bin/6Amp.py", setreading Wert_I A 6)
DOELSEIF ([Ladestrom:state] eq "6A" and [Ueberschuss] <1) ("python2 /usr/local/bin/4Amp.py", setreading Wert_I A 4)
DOELSEIF ([Ladestrom:state] eq "4A" and [Ueberschuss] <1 and [Lader] eq "on") ("python2 /usr/local/bin/2Amp.py", setreading Wert_I A 2)



cmdState 25A|22A|20A|18A|16A|14A|12A|10A|8A|6A|4A|2A|22A|20A|18A|16A|14A|12A|10A|8A|6A|4A|2A
do always
wait 0:0:0:0:0:0:0:0:0:0:0:0:5,5:5,5:5,5:5,5:5,5:5,5:5,5:5,5:5,5:5,5:5,5

gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

holle75

Hallo satprofi, Hut ab, erstaunlich was du da hinbekommen hast. Spannend wäre für Menschen die zwar fhem "können", aber mit Python noch nichts am Hut hatten, eine kleine Hilfestellung, wie man das von dir erarbeitete zB auf einem Raspi umsetzt? Weil deine Anwendung ist ja jetzt speziell auf dich zugeschnitten, denke aber, jeder möchte vielleicht gerne seine eigenen Einstellungen abfragen und seine eigenen daraus resultierenden notifys/DOIF´s basteln? Vielleicht ist deswegen die response hier im Thread recht klein?

Oder jemand der Perl kann deine Scripts zB in das Modul von pah umwandelt/einbastelt? .... dass man auch ohne den Umweg Python direkt in fhem arbeiten kann. Hexcodes und  weiterer Ausbau kann man dann ja zusammen machen wenn das Gerüst (das Modul) steht (mehr/alle Hexcodes einpflegen).

lieb Gruß

H.


satprofi

Hallo.
Das mit einbindung in FHEM hab ich mir schon angesehen, über das script vom SolarLogUtils.pm.
Ich finde dort aber nicht den Abschnitt mit den Commandos.
Was aber zu bedenken wäre, schafft es evt. ein Modul alle Werte vom Xtender abzufragen? Es ist eine Unsumme an Werten, wo ich denke das FHEM in die Knie gehen wird bei de Abfrage. Man müsste wie, bei SolarLogUtils nur die Werte eintragen die man wirklich möchte. aber dann kann man mein Abfragescript auch hernehmen und anpassen.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

holle75

man könnte ja über attribute des Moduls die für sich spannenden Werte definieren? Das externe script macht das Ganze für fhemler die sich eher mit Linux rumschlagen als dass sie sich das ausgesucht hätten recht komplex ;) .... und irgendwie um die Ecke wenn ich doch direkt in fhem arbeiten könnte ......  Also versteh mich nicht falsch, ich wurschtel gerne in .pm´s rum, aber da weiß ich, wie ich es rückgängig machen kann. Linux/RPI bin ich einfach happy, dass alles läuft und mehr will ich damit nicht zu tun haben, solange ich nicht muß. Brauch nicht noch eine Baustelle.

Ich hatte mir das Modul von pah ganz am Anfang auch mal angeschaut, aber das ist wenn man sich nicht auskennt zu komplex (und zu weitreichend bezüglich der Auswirkungen auf den Xtender). Hatte aber das "Gefühl", dass das schon die richtige Richtung ist (Kommunikation über RS232 und alles dabei was es als Modul in fhem integrierbar macht).

Hey, ich schreibsel hier weit über meiner Verständniskategorie ;)

satprofi

Hier einmal ein Beispiel, wie es läuft.
Man sieht schön wann der Lader rauf od. runterregelt.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Kersten

Hallo Alle,

ich möchte gern einen Xtender von Studer einbinden über die xcom-232.
Kennt Ihr jemanden der schon so ein fhem-modul geschrieben hat?

Danke
Kersten

holle75

zwar eine späte Antwort, aber vielleicht kommt ja tatsächlich mal einer dazu, das zu tun.
Meines Wissens nach gibt es noch kein direktes Modul.

satprofi

Zitat von: Kersten am 12 Februar 2020, 12:49:42
Hallo Alle,

ich möchte gern einen Xtender von Studer einbinden über die xcom-232.
Kennt Ihr jemanden der schon so ein fhem-modul geschrieben hat?

Danke
Kersten

Die Befehlsstrings könnte ich beisteuern, je nach Erfordernis.
mit scom.exe alle werte auslesbar.

LG
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

holle75

Studer über Modbus

Das:

https://www.studer-innotec.com/de/actualites/die-studer-python-library-mit-einem-schritt-sind-sie-in-der-welt-der-entwickler-7439

ist doch was für uns?! ... in Kombi mit Stefan´s Modbus Modul

https://forum.fhem.de/index.php?topic=75638.0

Ich lese zwar zwei Stromzähler über Modbus aus, nur leider habe ich damals nicht verstanden was ich tue sondern mich an Anleitungen gehalten  :o


EDIT: @satprofi ... seh gerade, du hast schon gepostet

https://forum.fhem.de/index.php/topic,113688.msg1079516.html#msg1079516

... eigentlich hatte ich auf dich gehofft! ;D



osid-timo

Hallo,
seit kurzem besitze ich jetzt einen XTM1500-12 mit einem XCOM232i und einem USB-RS232 Adapter.

Ich  kann bequem die Batteriespannung id:3000 Ladestrom id:3005 auslesen.
Sobald ich aber versuche den Ladestrom zu begrenzen (wie hier schon im Thread beschrieben mit)
cmd2Amp =  '\xAA\x00\x01\x00\x00\x00\x65\x00\x00\x00\x0E\x00\x73\x79\x00\x02\x02\x00\x72\x04\x00\x00\x05\x00\x00\x00\x00\x40\xBE\x1A' id:1138 Ladestrom 2A

findet keine Reaktion im XTM statt und vor allem die Abfragen sind nicht mehr möglich!
Erst wenn ich die Verbindung XTM-XCOM trenne und neu verbinde laufen meine Abfragen wieder.

hat jemand eine Idee was mein Problem ist?

Gruß osid-timo
FHEM Pi3: 1* CUL, 30* Homematic, 10* EnOcean
FHEM Pi3: IR-Lesekopf, BT->SMA
FHEM Pi3: ZHK, 1-wire, 1* VBus   Resol DeltaSol BS

satprofi

wichtig ist , zu beginn den zugriff auf den flashspeicher zu sperren.. denn jeder steuerbefehl wird sonst in den flash geschrieben, der aber nach 1000 befehlen tot ist.

versuche einmal den befehl über scom.exe abzusenden, da siehst du sofort was nicht passt.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram