SMA Modbus SUNNY TRIPOWER 8.0

Begonnen von mediastudio, 30 August 2019, 21:12:22

Vorheriges Thema - Nächstes Thema

mediastudio

Ich brauche Hilfe, ich habe einen ,,SUNNY TRIPOWER 8.0"  / STP8.0-3AV-40 569 im Betrieb.
Ich brauche den Momentanwert  des Wchselrichters. Ich habe Modbus aktiviert.
Der Wert ist unter  ,, 30775"  AC Wirkleistung über alle Phasen (W) [TotInvPwrAt] über den Modbus auszulesen.
Im ,,ioBroker"  wird mir der Wert übergeben, aber ich wollte den ohne " ioBroker"  in Fhem einlesen um damit eine Steckdose zu steuern.

Leider bekomme ich nur eine Meldung das  ,,PWP – openet" aber sonst nichtst.
Ich habe dieses aus den Foren mal in der CFG eingetragen.

define PWP ModbusAttr  3  30   192.168.10.33:502  TCP
attr PWP userattr obj-h30775-reading obj-h30377-unpack obj-h30775-poll
attr PWP obj-h30775-len 2 WRtyp
attr PWP obj-h30775-unpack N
attr PWP obj-h30775-poll 1
attr PWP verbose 5
attr PWP room SMA 

Kann mir da jemand ein Beispiel geben das für mich in Frage kommt.
Ich brauche nur den einen Wert über den Modbus.



Wzut

#1
sieht "fast"gut aus :)
aber wenn du 30775 ausliest muss das Kind auch einen Namen bekommen. Was soll der Zusatz WRtyp bei len ?

define PWP ModbusAttr 3 30 192.168.10.33:502 TCP
attr PWP userattr obj-h30775-reading obj-h30775-unpack obj-h30775-poll obj-h30775-len
attr PWP obj-h30775-len 2
attr PWP obj-h30775-unpack N
attr PWP obj-h30775-poll 1
attr PWP obj-h30775-reading Wirkleistung
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

mediastudio

Hallo, der Zusatz "WRtyp" bei len, das hatte ich nur so gesehen, konnt ich auch nicht deuten.
Ich werde das gleich mal teste.

attr PWP obj-h30775-reading Wirkleistung

Danke für die schnelle Antwort.

mediastudio

Besten Dank, es funktioniert, die Daten werden angezeigt.

define PWP ModbusAttr  3  30  192.168.10.33:502 TCP
attr PWP userattr obj-h30775-reading obj-h30775-unpack obj-h30775-poll obj-h30775-len
attr PWP obj-h30775-len 2
attr PWP obj-h30775-unpack N
attr PWP obj-h30775-poll 1
attr PWP obj-h30775-reading Wirkleistung
attr PWP room SMA

Das reading fehlte.

mediastudio

Für alle die auch über einen   ,,SUNNY TRIPOWER 8.0" mit FHEM Steckdosen schalten möchten
ist hier mal mein Eintrag in der CFG.
Die Daten hole ich über den ModBus, der muss nur aktiviert werden im SMA ist er schon vorhanden.

define PWP ModbusAttr  3  30   IP-vom SMA:502  TCP

Über einen Slider kann der Schwellwert eingestellt werden.
Der SMA hat die Eigenschaft  über ,,obj-h30775"  bei nicht vorhandener Leistung, also wenn dunkel, einen hohen konstanten Wert auszugeben. Damit auch ,,0" Watt Aktuelle Leistung angezeigt wird ist
folgende Abfrage:

if ( $IstPV > 7000 ) {$IstPV=0};;fhem("setreading PWP leistung $IstPV");;\

Meine PV ist auf 7000 KWh  max. Einspeisung begrenzt, hier und auch beim Slider muss der Wert je nach eigener Anwendung angepasst werden.  Das  icon SMA.png und icon funk_steckdose.png sollte jeder für sich erstellen. Ich möchte kein Problem mit Urheberrechte.
Ansonsten kann das alles ohne Probleme auf andere Verbraucher angewandt werden.
   
### SUNNY TRIPOWER 8.0 ###
define PWP ModbusAttr 3  30  IP-vom SMA:502 TCP
attr PWP userattr obj-h30775-reading obj-h30775-unpack obj-h30775-poll obj-h30775-len
attr PWP alias SUNNY TRIPOWER 8.0
attr PWP obj-h30775-len 2
attr PWP obj-h30775-unpack N
attr PWP obj-h30775-poll 1
attr PWP obj-h30775-reading Wirkleistung
attr PWP room SMA
attr PWP group SUNNY TRIPOWER
attr PWP icon SMA.png
attr PWP stateFormat leistung: Watt  Aktuelle Leistung
setreading PWP leistung 0

### PV_Steckdose
define PV_Steckdose dummy
attr PV_Steckdose alias PV Steckdose
attr PV_Steckdose group Relaxliegen
attr PV_Steckdose icon funk_steckdose.png
attr PV_Steckdose devStateIcon on:power.on off:power.off
attr PV_Steckdose setList off on
attr PV_Steckdose userReadings http {esp_http("192.168.10.156", "12", ReadingsVal("PV_Steckdose","state","") =~/^on/?1:0)};;{esp_http("192.168.10.156", "13", ReadingsVal("PV_Steckdose","state","") =~/^on/?0:1)}
attr PV_Steckdose room SMA
attr PV_Steckdose group SMA

### PV_Steckdose Einschaltwet Vorgabe
define PWP_soll dummy
attr PWP_soll alias Einschaltschwelle bei KWh
attr PWP_soll readingList PWP_sollwert
attr PWP_soll room SMA
attr PWP_soll setList PWP_sollwert:slider,100,50.0,7000
#attr PWP_soll stateFormat slider_sollwert
attr PWP_soll webCmd PWP_sollwert
attr PWP_soll group SMA

define Regelung_PV_Steckdose notify PWP:.* {\
   my $IstPV = ReadingsVal("PWP","Wirkleistung","0");;\
   my $SollPV = ReadingsVal("PWP_soll","PWP_sollwert","0");;\
   if ( $IstPV > 7000 ) {$IstPV=0};;fhem("setreading PWP leistung $IstPV");;\
   if (($IstPV > $SollPV) or ($IstPV == $SollPV))\
   {fhem ("set PV_Steckdose on")}\
   else\
   {fhem ("set PV_Steckdose off")}\
}




Wzut

Zitat von: mediastudio am 02 September 2019, 12:15:21
Der SMA hat die Eigenschaft  über ,,obj-h30775"  bei nicht vorhandener Leistung, also wenn dunkel, einen hohen konstanten Wert auszugeben.
Das machen andere SMA Modelle auch und ebenso in anderen Registern :)
Meine Lösung
attr <name> dev-h-defExpr $val & 0x1FFFFFFF
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

mediastudio

Hallo Wzut, ich bin Dir dankbar für Deine Hinweise.
Es funktioniert so einwandfrei, die Werte zeigen nun  bei nicht vorhandener Leistung  ,,0" .
Hier nun für weitere User meine CFG.

### SUNNY TRIPOWER 8.0 ###
define PWP ModbusAttr  3  30  IP-vom SMA:502  TCP
attr PWP userattr obj-h30775-reading obj-h30775-unpack obj-h30775-poll obj-h30775-len
attr PWP alias SUNNY TRIPOWER 8.0
attr PWP dev-h-defExpr $val & 0x1FFFFFFF
attr PWP obj-h30775-len 2
attr PWP obj-h30775-unpack N
attr PWP obj-h30775-poll 1
attr PWP obj-h30775-reading Wirkleistung
attr PWP room SMA
attr PWP group SUNNY TRIPOWER
attr PWP icon SMA.png
attr PWP stateFormat Wirkleistung: Watt  Aktuelle Leistung


### Steckdose Powerline 1 ####
define PV_Steckdose_1 dummy
attr PV_Steckdose_1 alias PV Steckdose 1
attr PV_Steckdose_1 group Relaxliegen
attr PV_Steckdose_1 icon funk_steckdose.png
attr PV_Steckdose_1 devStateIcon on:power.on off:power.off
attr PV_Steckdose_1 setList off on
attr PV_Steckdose_1 userReadings http {esp_http("192.168.10.156", "12", ReadingsVal("PV_Steckdose_1","state","") =~/^on/?1:0)};;{esp_http("192.168.10.156", "13", ReadingsVal("PV_Steckdose_1","state","") =~/^on/?0:1)}
attr PV_Steckdose_1 room SMA
attr PV_Steckdose_1 group Powerline 1

### PV_Steckdose_1 Einschaltwet Vorgabe
define PWP_soll_1 dummy
attr PWP_soll_1 alias Einschaltschwelle
attr PWP_soll_1 readingList PWP_sollwert_1
attr PWP_soll_1 room SMA
attr PWP_soll_1 setList PWP_sollwert_1:slider,100,50.0,7000
attr PWP_soll_1 stateFormat bei Watt
attr PWP_soll_1 webCmd PWP_sollwert_1
attr PWP_soll_1 group Powerline 1
 
define Regelung_PV_Steckdose_1 notify PWP:.* {\
   my $IstPV1 = ReadingsVal("PWP","Wirkleistung","0");;\
   my $SollPV1 = ReadingsVal("PWP_soll_1","PWP_sollwert_1","0");;\
   if (($IstPV1 > $SollPV1) or ($IstPV1 == $SollPV1))\
   {fhem ("set PV_Steckdose_1 on")}\
   else\
   {fhem ("set PV_Steckdose_1 off")}\
}


Wzut

#7
Zitat von: mediastudio am 03 September 2019, 21:35:42
Hallo Wzut, ich bin Dir dankbar für Deine Hinweise.
fein , aber sei doch nicht so geizig, der WR hat noch einige interessante bzw wichtige Register.
Hier mal wie das bei meinen beiden minimal ausschaut :
attr 8000TL dev-h-defExpr $val & 0x1FFFFFFF
attr 8000TL dev-h-defLen 2
attr 8000TL dev-h-defPoll 1
attr 8000TL dev-h-defUnpack N
attr 8000TL enableControlSet 1
attr 8000TL devStateIcon ok:on fault:message_attention warnings:message_attention
attr 8000TL obj-h30201-map 35:fault,303:off,307:ok,455:warnings
attr 8000TL obj-h30201-reading state
attr 8000TL obj-h30211-map 336:Contact manufacturer, 337:Contact installer, 338:invalid, 887:none
attr 8000TL obj-h30211-reading Aktion
attr 8000TL obj-h30529-reading Gesamtertrag
attr 8000TL obj-h30535-reading Tagesertrag
attr 8000TL obj-h30775-reading Wirkleistung
attr 8000TL obj-h30953-expr ($val  & 0xFFF) / 10
attr 8000TL obj-h30953-reading Temperatur

und wenn du vllt noch ein WR Icon suchst :
Zitat<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="250px" height="250px" viewBox="0 0 250 250" version="1.1" fill="#000000">
  <g id="surface740315">
    <path style=" stroke:none;fill-rule:nonzero;fill:#000000;fill-opacity:1;" d="M 45 20 C 31.273438 20 20 31.273438 20 45 L 20 205 C 20 218.726562 31.273438 230 45 230 L 205 230 C 218.726562 230 230 218.726562 230 205 L 230 45 C 230 31.273438 218.726562 20 205 20 Z M 45 30 L 205 30 C 207.308594 30 209.46875 30.566406 211.425781 31.503906 L 31.503906 211.425781 C 30.566406 209.46875 30 207.308594 30 205 L 30 45 C 30 36.726562 36.726562 30 45 30 Z M 218.496094 38.574219 C 219.433594 40.53125 220 42.691406 220 45 L 220 205 C 220 213.273438 213.273438 220 205 220 L 45 220 C 42.691406 220 40.53125 219.433594 38.574219 218.496094 Z M 69.960938 55.15625 C 68.933594 55.128906 67.921875 55.160156 66.945312 55.242188 C 64.332031 55.46875 61.898438 56.058594 59.738281 56.902344 C 51.082031 60.289062 46.054688 66.933594 46.054688 66.933594 L 53.945312 73.066406 C 53.945312 73.066406 57.667969 68.460938 63.386719 66.222656 C 69.109375 63.980469 76.261719 63.332031 86.464844 73.535156 C 98.761719 85.832031 111.609375 86.480469 120.261719 83.097656 C 128.917969 79.710938 133.945312 73.066406 133.945312 73.066406 L 126.054688 66.933594 C 126.054688 66.933594 122.332031 71.539062 116.613281 73.777344 C 110.890625 76.019531 103.738281 76.667969 93.535156 66.464844 C 85.464844 58.394531 77.164062 55.34375 69.960938 55.15625 Z M 125 160 L 125 170 L 195 170 L 195 160 Z M 125 180 L 125 190 L 155 190 L 155 180 Z M 165 180 L 165 190 L 195 190 L 195 180 Z M 165 180 "/>
  </g>
</svg>
in eine Textdatei kopieren bsp acdc.svg und unter /opt/fhem/www/images/fhemSVG speichern
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

mediastudio

Hallo Wzut, ich habe nun mal die readings eingefügt.
Bei Gesamtertrag habe ich einen 7-stelligen Wert den ich so gesetzt habe:
attr PWP obj-h30529-expr ($val  & 0x1FFFFFFF ) / 1000
attr PWP obj-h30529-reading Gesamtertrag
Dann bekomme ich die richtige Ausgabe Gesamtertrag:  2126.275  KWh.
Würde den gerne zwei Stellen hinter dem Punkt aufgerundet anzeigen.
Der Wert für den Tagesertrag bleibt unverändert, zu hoch.
Der Wert von der Temperatur wird nur angezeigt wenn auch die Wirkleistung >0 ist.
Dieses  ,,attr PWP enableControlSet 1" bringt eine Fehlermeldung.
Wie ich aber sehe kennst Du dich mit WS von SMA aus, ich bin da ein Neuling.
Gibt es eine Möglichkeit den Modbus vom SMA gleichzeitig von zwei Geräten abzufragen?

Wzut

du kannst Werte problemlos noch formatieren, bei deinem Gesamtertrag wäre das z.B.
attr PWP obj-h30529-format %.2f

K.A. was da bei deinem Tagesertrag schief läuft, stimmt denn die Registernummer für deinen Typ laut SMA Modbus Doku ?

Das SMA nur eine gültige Temperatur überträgt wenn der WR auch arbeitet finde ich auch etwas unglücklich, aber mir ist die 0 persönlich lieber als ein Pseudowert mit seinen gesetzten High Bits. Aber man kann sich ja mit FHEM Bordmitteln (Stichwort userReadings)  noch ganz gut weiterhelfen.

Lass enableControlSet einfach weg, sitzt bei mir vermutlich auch nur noch als Altlast

Zugriff von mehr als einem Gerät sollte kein Problem sein solange du es mit dem Abfrageintervall nicht übertreibst. Ggf. immer mal wieder das Log checken ob FHEM mault das er nicht oder nur teilweise geantwortet hat.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

mediastudio

Hallo Wzut,
deine Angaben sind schon richtig, hier ist ein Link vom SMA
http://files.sma.de/dl/2585/WEBBOX-MODBUS-TB-de-19.pdf
da sehe ich ab Seite 25 unter ID3 die Parameter. Die Formatierung klappt habe nun wie im GUI vom SMA die gleiche Anzeige.

Wzut

wie Webbox ? Du hast doch einen TP 8.0 ?
https://www.sma.de/service/downloads.html -> Monitoring & Control -> MODBUS PROTOCOLL SCHNITSTELLE -> alle anzeigen
dann runter bis
Technical Information - SMA Modbus® Interface - SUNNY TRIPOWER 8.0 / 10.0 (STP8.0-3AV-40 / STP10.0-3AV-40)
Art: Technische InformationenSprache: International Dokumentennummer: MODBUS-HTML_STP8-10-3AV-40_V11Versionsnummer: 1.1
MODBUS-HTML_STP8-10-3AV-40_V11.zip

ergibt dann https://files.sma.de/dl/24399/MODBUS-HTML_STP8-10-3AV-40_V11.zip
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

mediastudio

Ich habe mir die Dateien runtergeladen und werde da mal sehen wie die Parameter sind.
Du warst mir eine große Hilfe, seit Juli habe ich eine PV mit 9,92 KW pik. Mein Vorhaben läuft soweit. Ich habe verschiedene Hardware im Einsatz. Grundausstattung ein Bungalow mit EnOcean seit 2011. Jetzt setze ich zum Teil auch EspEasy und Sonoff ein. Mit Sonoff über Fhem habe ich noch kleine Probleme.
Besten Gruß aus Windeck Rosbach

Wzut

Bei 9,92kWp hast du schon richtig Geld in die Hand genommen. Überlege dir mal ob du da als SMA Nutzer und Smart Home Fan nicht noch 500 Öre draufpackst und dir einen Sunny Home Manager 2.0 gönnst. (gab sogar letzte Woche im Inverter Thread ein Angebot eines Users )
zumal du ja mit deinen Schaltsteckdosen eh schon in die Richtung Eigenverbrauchoptimierung steuerst.
IMHO nur mit dem HM2.0 siehst du was von deiner aktuellen PV Leistung wirklich übrig bleibt. Die Daten sind dann auch im Sunny Portal verfügbar und du bist sogar ein Stück unabhängig von FHEM was History und Charts betrifft. Im Gegenzug gibt es aber dann auch die SMA Module von DS_Starter
(Heiko) die dir das alles wieder schön zu FHEM bringen. Ich habe meinen HM2.0 letztes Jahr von meinem Solar Guru verpasst bekommen ohne Ahnung davon zu haben und bin jetzt heilfroh das er ihn damals als unbedingt erforderlich aufs Angebot gesetzt hat.

 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

mediastudio

Hallo, über einen "Sunny Home Manager 2.0" habe ich schon nachgedacht. Bei mir ist die 70% Regelung im SMA eingestellt. Da ich 2020 ein Pool mit Wärmepumpe bauen will, hätte ich gerne die 100%-tige Ausnutzung meiner PV. Das ist der nächste Ansatz. Nachdem Du mir ja so schnell geholfen hast, kann ich schon mal eine elektrische Zusatzheizung für die Fußbodenheizung steuern.
Meine Wärmepumpe hat einen 200 L Pufferspeicher den ich mit einer 1KW Heizpatrone aufgerüstet habe, diese schaltet sich bei PV-Leistung >1500 Watt zu und der Kreislauf der Fußbodenheizung wird vorgewärmt. Ich habe nun ,,gosona" WiFi Steckdosen auf Sonoff gefläsht.  Diese Steckdosen messen die Leistung  der Verbraucher, dadurch kann ich die zurzeit Gesamtentnahme ermitteln und so Verbraucher Zu- oder Abschalten. Fazit, es darf bei zu geringer PV-Leistung kein teurer, eingekaufter Strom verbraucht werden. Das wende ich auf Zusatzgeräte an, auch einen Heizlüfter im Wohnbereich.   

fireball

Servus,

ich habe aktuell einen SunnyBoy 2.5 hier rumliegen und wollte den mal über FHEM auslesen.
Jetzt habe ich mich ein wenig in das Thema eingelesen und glaube, die für mich einfachste Variante, die auch offline funktioniert ist über MODBUS?!

Jetzt habe ich habe mal ne Frage... Anbei ist die Modbusbeschreibung für den SunnyBoy 2.5
Wie komme ich an die Werte?

Mit define SunnyBoy ModbusAttr  3  30   192.168.178.8:502  TCP  habe ich den WR erreicht... ich habe mir jetzt eure Attribute angeschaut aber werde noch nicht recht schlau draus.

Was ich verstanden habe:
Hiermit lege ich ein Reading Wirkleistung an, lese das aus dem obj-h (Holding register) mit der Nummer aus meiner ModbusTabelle aus, unpack sagt noch was es ist, also Strink, Int, etc?! und len sagt wieviel Register das läuft (steh auch in der Tabelle)

attr PWP obj-h30775-len 2
attr PWP obj-h30775-unpack N
attr PWP obj-h30775-poll 1
attr PWP obj-h30775-reading Wirkleistung


Aber ich bekomme nix...
Habt ihr mal ein Beispiel und wie ich das genau in FHEM eintrage...

Internals:
   DEF        3  30   192.168.178.8:502  TCP
   DeviceName 192.168.178.8:502
   EXPECT     idle
   FD         4
   FUUID      60520f2d-f33f-2912-baf1-c87fd5987c23dd54
   IODev      SunnyBoy
   Interval   30
   LASTOPEN   1615997146.6411
   MODBUSID   3
   MODE       master
   MODULEVERSION Modbus 4.4.00 - 7.2.2021
   NAME       SunnyBoy
   NOTIFYDEV  global
   NR         16
   NTFY_ORDER 50-SunnyBoy
   PARTIAL   
   PROTOCOL   TCP
   STATE      opened
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   nextOpenDelay 60
   READ:
   READINGS:
     2021-03-17 17:05:47   state           opened
   defptr:
     SunnyBoy   3
   lastRead:
Attributes:
   obj-h30055-len 2
   obj-h30055-reading Hersteller


Hier im IOBroker geht das irgendwie einfacher... ab Minute 11...
https://www.youtube.com/watch?v=bX7py1NiRLA

VG+Danke
René

Wzut

ähh ... warum ist in deinem list in Bruchstücken Register h30055 drin , lesen willst du aber h30775 ?
dein mini list ist schon richtig, nur musst du es auch beim Device benutzen :)
Tipp : du kannst beim SMA einiges an Tipparbeit sparen wenn du poll/len& unpack quasi als default fest legst, dann du nur noch ein Attribut pro Reading

attr SunnyBoy dev-h-defExpr $val & 0x1FFFFFFF
attr SunnyBoy dev-h-defLen 2
attr SunnyBoy dev-h-defPoll 1
attr SunnyBoy dev-h-defUnpack N
attr SunnyBoy obj-h30775-reading Wirkleistung
attr SunnyBoy obj-h30201-reading Status
attr SunnyBoy obj-h30953-reading Temperatur
attr SunnyBoy obj-h30529-reading Gesamtertrag
attr SunnyBoy obj-h30535-reading Tagesertrag


Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

fireball

Hi,

danke für die schnelle Reaktion...

Deine Werte funktionieren bei mir auch...
h30055 war bei mir drin, weil ich den Hersteller rauslesen wollte so als Test... laut Doku/Tabelle ist das

Nameplate.Vendor 30055    2     U32   TAGLIST RO

Mit deinen 3 defaults habe ich quasi die 2 Register,  immer An unsigned long werte (Pack-Doku) und Poll 1 ist immer alle Werte aktualisieren, richtig?!

Wie gebe ich das denn eigentlich über FHEM Oberfläche als Attribut ein?! zB obj-[cdih][1-9][0-9]*-reading ???
Ich habe jetzt alles in die fhem.cfg kopiert. Aber die Oberfläche meckert immer wenn ich ein Reading anlege, dass es nicht dem Format entspricht...

Was ist aber mit den anderen Werten, die so interessant sind... die sind zum Teil ja nicht alle U32 sondern S32 oder U64...
Dann muss ich ein extra obj-[cdih][1-9][0-9]*-unpack anlegen oder?

Wzut

ei , ei wie bist du den zum Developer Status gekommen, das sind doch Basics :)
Nix fhem.cfg kopieren, ich hatte in meinem Beispiel extra schon deinen Device Namen verwendet.
Du hättest nur Zeile für Zeile kopieren und in FHEMWEB in die Eingabezeile pasten müssen oder eben die raw Ansicht öffnen und alles am Stück reinpacken.

Wenn du nun an Register kommst die nicht mehr dem default entsprechen must du halt mehr machen , Bsp das Temperatur Register:
(ich bleibe jetzt bei meinen Namen)
attr 8000TL obj-h30953-expr ($val  & 0xFFFF) / 10
attr 8000TL obj-h30953-format %.0f
attr 8000TL obj-h30953-reading Temperatur

oder noch eines
attr 8000TL obj-h30211-map 336:Contact manufacturer, 337:Contact installer, 338:invalid, 887:none
attr 8000TL obj-h30211-reading Aktion
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

fireball

Hi,

ja, das war mir durchaus klar, dass ich das Zeile für Zeile oben ins FHEMWEB eintragen kann oder der schlechtere Web über die cfg-Datei.

Ich wollte nur wissen in welchem Format das Modul das unten in der Attribut Zeile fordert, da habe ich jetzt schon X-Sachen ausprobiert, das Modul nimmt  da nix an oder geht das überhaupt so oder nur über die FHEMWEB Zeile mit den attr-Einträgen?!

VG
René

fireball

So ich habe jetzt ein wenig weiter mit den Attributen rumgespielt... so langsam wird es.
Auch mit den Formatierungen und den Maps habe ich schon was gebaut.

Leider liegt der WR hier bei mir trocken und sauber im Büro und nicht alle Werte liefern auch ein Ergebniss... daher die Frage...

Ich habe zwar nur einen 1phasigen WR, aber warum zeigt er  bei Netzspannung_Phase_L1  so einen komischen Wert an: 536870911.00?!!?
Ist das unpack da nicht richtig?! Laut Doku ist es ein U32 und das sollte dann ja passen mit dem Defaultwert?!

Die zweite Frage wäre, warum wird keine Temperatur angezeigt?!

Oder muss das Gerät auch komplett eingeschaltet sein?! Aktuell hat es zwar Strom und Netzwerk, aber der Hauptschalter am Gerät ist aus.

VG+Danke
René




Internals:
   DEF        3  30   192.168.178.8:502  TCP
   DeviceName 192.168.178.8:502
   EXPECT     idle
   FD         4
   FUUID      60520f2d-f33f-2912-baf1-c87fd5987c23dd54
   IODev      SunnyBoy
   Interval   30
   LASTOPEN   1616090389.6054
   MODBUSID   3
   MODE       master
   MODULEVERSION Modbus 4.4.00 - 7.2.2021
   NAME       SunnyBoy
   NOTIFYDEV  global
   NR         16
   NTFY_ORDER 50-SunnyBoy
   PARTIAL   
   PROTOCOL   TCP
   STATE      opened
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   nextOpenDelay 60
   QUEUE:
   READ:
     BUFFER     
   READINGS:
     2021-03-18 19:09:50   DC_Leistung_Eingang 0.00
     2021-03-18 19:09:50   DC_Spannung_Eingang 0.00
     2021-03-18 19:09:50   DC_Strom_Eingang 0.00
     2021-03-18 19:09:50   Gesamtertrag    6863862
     2021-03-18 19:09:51   Nennfrequenz    50.00
     2021-03-18 19:09:50   Netzspannung_Phase_L1 536870911.00
     2021-03-18 19:09:50   Netzspannung_Phase_L2 536870911.00
     2021-03-18 19:09:51   Netzspannung_Phase_L3 536870911.00
     2021-03-18 19:09:51   Netzstrom_Phase_L1 0.000
     2021-03-18 19:09:51   Netzstrom_Phase_L2 0.000
     2021-03-18 19:09:51   Netzstrom_Phase_L3 0.000
     2021-03-18 19:09:49   Status          OK
     2021-03-18 19:09:50   Tagesertrag     0
     2021-03-18 19:09:51   Temperatur      0
     2021-03-18 19:09:50   Wirkleistung    0
     2021-03-18 18:59:49   state           opened
   REMEMBER:
     lid        3
     lname      SunnyBoy
     lrecv      1616090991.698
     lsend      1616090991.68283
   defptr:
     SunnyBoy   3
   gotReadings:
     Nennfrequenz 50.00
   lastRead:
     h30201     1616090990.00274
     h30529     1616090990.12247
     h30535     1616090990.24268
     h30769     1616090990.36266
     h30771     1616090990.48264
     h30773     1616090990.62256
     h30775     1616090990.74286
     h30783     1616090990.86457
     h30785     1616090990.98272
     h30787     1616090991.10264
     h30953     1616090991.22272
     h30977     1616090991.34533
     h30979     1616090991.46292
     h30981     1616090991.58273
     h40135     1616090991.70258
Attributes:
   dev-h-defExpr $val & 0x1FFFFFFF
   dev-h-defLen 2
   dev-h-defPoll 1
   dev-h-defUnpack N
   obj-h30201-map 35:Fehler, 303:Aus, 307:OK, 455:Warnung
   obj-h30201-reading Status
   obj-h30529-reading Gesamtertrag
   obj-h30535-reading Tagesertrag
   obj-h30769-format %.2f
   obj-h30769-reading DC_Strom_Eingang
   obj-h30771-format %.2f
   obj-h30771-reading DC_Spannung_Eingang
   obj-h30773-format %.2f
   obj-h30773-reading DC_Leistung_Eingang
   obj-h30775-reading Wirkleistung
   obj-h30783-format %.2f
   obj-h30783-reading Netzspannung_Phase_L1
   obj-h30785-format %.2f
   obj-h30785-reading Netzspannung_Phase_L2
   obj-h30787-format %.2f
   obj-h30787-reading Netzspannung_Phase_L3
   obj-h30953-expr ($val  & 0xFFFF) / 10
   obj-h30953-format %.0f
   obj-h30953-reading Temperatur
   obj-h30977-format %.3f
   obj-h30977-reading Netzstrom_Phase_L1
   obj-h30979-format %.3f
   obj-h30979-reading Netzstrom_Phase_L2
   obj-h30981-format %.3f
   obj-h30981-reading Netzstrom_Phase_L3
   obj-h40135-expr ($val  & 0xFFFF) / 100
   obj-h40135-format %2.2f
   obj-h40135-reading Nennfrequenz




Wzut

Temperatur ist bei mir z.Z. auch 0 da er jetzt nichts produziert , wegen L1 schaue ich morgen wenn wieder Sonne da ist.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wzut

So ich kann dich beruhigen : Sobald er arbeitet gibt es auch eine Temperatur.
Mit der L1 ist genauso, gestern Abend hatte ich mit unpack N auch so irre Werte wie du, heute morgen habe ich 23474
Wenn da noch zwei Nachkommastellen drin sind ergäbe das 234,74 - klingt plausibel.
Das ist so ein Thema das ich bei SMA noch nier verstanden habe, einige Werte sind nur "echt" wenn der WR wirklich arbeitet, aber statt im anderen Fall einfach 0 ins Register zu schreiben setzen sie irgendwelche höhere Bits und man hat dann diese unsinnig hohen Werte.
In dem Fall hilft nur das Register noch mit einer Bitmaske zu verunden und damit die ganzen Bits die im Normalfall nie 1 sein können einfach platt zumachen.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

fireball

Moinsen,

cool, danke für dein Feedback, dann bleibt das erstmal so bei mir...
Das mit der Logik bei SMA ist wirklich komisch, denn bei Netzstrom_Phase_L1 also den Ampere, da steht ja bei mir 0.000 drin.
Da müsstest du ja jetzt auch Werte größer 0 haben, oder?!

Ich weiß zwar noch nicht ob ich das jemals brauchen werde, aber die so kann man die Netzspannung ja in kein Diagramm bringen.

VG
Rene

Wzut

Gib mal die Register Nr, ich habe das bei mir per default nicht drin und das schöne Exel Sheet von SMA mit allen Modbus Werten ist auch irgendwo in meinen Backups versteckt.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

fireball

Moinsen,

ich habe diese Attribute hier, das Dokument für den SunnyBoy2.5 habe ich auch ein paar Posts weiter unten drangehangen gehabt.

attr SunnyBoy obj-h30783-format %.2f
attr SunnyBoy obj-h30783-reading Netzspannung_Phase_L1
attr SunnyBoy obj-h30785-format %.2f
attr SunnyBoy obj-h30785-reading Netzspannung_Phase_L2
attr SunnyBoy obj-h30787-format %.2f
attr SunnyBoy obj-h30787-reading Netzspannung_Phase_L3
attr SunnyBoy obj-h30837-reading Wirkleistung_Max
attr SunnyBoy obj-h30953-expr ($val  & 0xFFFF) / 10
attr SunnyBoy obj-h30953-format %.0f
attr SunnyBoy obj-h30953-reading Temperatur
attr SunnyBoy obj-h30977-format %.3f
attr SunnyBoy obj-h30977-reading Netzstrom_Phase_L1
attr SunnyBoy obj-h30979-format %.3f
attr SunnyBoy obj-h30979-reading Netzstrom_Phase_L2
attr SunnyBoy obj-h30981-format %.3f
attr SunnyBoy obj-h30981-reading Netzstrom_Phase_L3


Also h30977, h30979 und h30981.
VG+Danke
René

Wzut

h30977 liefert bei mir z.Z. unformatiert 8275 , schaut also auch ganz gut aus
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

fireball

ja super... wäre also 8,275 A. Mal sehen was heute abend ist.
Gibts eine Möglichkeit das Format so anzupassen bei den Volt-Zahlen, dass man sagen kann, alles über 240V = X, sodass da nie solche (536870911.00) extremen Werte rauskommen können?! X könnte 0 oder ein max Wert sein, aber nie ein so krasser Wert.
Die Doku von MODBUS gibt mir leider nichts her dafür...

Man könnte ja mal mit Stefan, der das MODBUS Modul geschrieben hat sonst sprechen?!

VG
REné

Wzut

na klar , habe ich doch geschrieben , Bitmaske drüber und alle unerwünschten Bits totschlagen.
Per default gibt es ja schon
dev-h-defExpr $val & 0x1FFFFFFF
ergo neue passende Bitmaske nach persönlichem Geschmack nehmen und dem Register direkt zuweisen.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

fireball

Moinsen,
ich habe mal versucht mich in das Thema reinzulesen...

Volt auf der Phase 1-3 gehen ja bis 240V.
240 entspricht 11110000 in Bits.

Damit ich alle Zahlen von 0-240 abbilden kann, müssen alle diese Stellen 1 werden können, alle darüber müsste ich mit mit 0 belegen...
Ist das die Bitmaske nicht 11111111 = 255 = FF?

Jetzt wird bei mir der 255,00 angezeigt.

   obj-h30783-format %.2f
   obj-h30783-reading Netzspannung_Phase_L1
   obj-h30785-expr $val & 0xFF
   obj-h30785-format %.2f
   obj-h30785-reading Netzspannung_Phase_L2
   obj-h30787-expr $val & 0xFF
   obj-h30787-format %.2f
   obj-h30787-reading Netzspannung_Phase_L


Wäre das richtig?!
VG
René

Wzut

#30
ne Denkfehler , die 240 sind in Wahrheit 24000 da ja später noch das Komma gesetzt werden kann :)
attr 8000TL obj-h30783-expr ($val & 0x5FFF) /100

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

MadMax

Hallo Zusammen,

ich hoffe ich bin hier richtig.
Nachdem das SMA Inverter Modul sich nicht mit meinem neuen SMA STP8.0SE Hybridwechselrichter verbindet (eigentlich kann der Speedwire aber es kommt nur Timeout) versuche ich es nun mit Modbus.


defmod STP8SE ModbusAttr 3  30   192.168.xx.xx:502  TCP
attr STP8SE dev-h-defExpr $val & 0x1FFFFFFF
attr STP8SE dev-h-defLen 2
attr STP8SE dev-h-defPoll 1
attr STP8SE dev-h-defUnpack N
attr STP8SE event-on-change-reading .*
attr STP8SE obj-h30201-map 35:Fehler, 303:Aus, 307:OK, 455:Warnung
attr STP8SE obj-h30201-reading Status
attr STP8SE obj-h30217-map 16777213:Fehler, 51:geschlossen, 311:offen
attr STP8SE obj-h30217-reading Netzrelais
attr STP8SE obj-h30529-reading Gesamtertrag
attr STP8SE obj-h30535-reading Tagesertrag
attr STP8SE obj-h30769-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30769-format %.3f
attr STP8SE obj-h30769-reading DC_Strom_1
attr STP8SE obj-h30771-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30771-format %.2f
attr STP8SE obj-h30771-reading DC_Spannung_1
attr STP8SE obj-h30773-reading DC_Leistung_1
attr STP8SE obj-h30775-reading Wirkleistung
attr STP8SE obj-h30777-reading Wirkleistung_L1
attr STP8SE obj-h30779-reading Wirkleistung_L2
attr STP8SE obj-h30781-reading Wirkleistung_L3
attr STP8SE obj-h30843-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30843-format %.3f
attr STP8SE obj-h30843-reading Batteriestrom
attr STP8SE obj-h30845-reading Ladezustand
attr STP8SE obj-h30849-expr ($val  & 0xFFFF) / 10
attr STP8SE obj-h30849-format %.1f
attr STP8SE obj-h30849-reading Batterietemperatur
attr STP8SE obj-h30851-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30851-format %.2f
attr STP8SE obj-h30851-reading Batteriespannung
attr STP8SE obj-h30953-expr ($val  & 0xFFFF) / 10
attr STP8SE obj-h30953-format %.1f
attr STP8SE obj-h30953-reading Temperatur
attr STP8SE obj-h30955-map 16777213:Fehler, 303:Aus, 2291:standby, 2292:laden, 2293:entladen
attr STP8SE obj-h30955-reading Batteriestatus
attr STP8SE obj-h30957-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30957-format %.3f
attr STP8SE obj-h30957-reading DC_Strom_2
attr STP8SE obj-h30959-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30959-format %.2f
attr STP8SE obj-h30959-reading DC_Spannung_2
attr STP8SE obj-h30961-reading DC_Leistung_2
attr STP8SE obj-h31393-reading Batterieladeleistung
attr STP8SE obj-h31395-reading Batterieentladleistung
attr STP8SE obj-h34661-len 4
attr STP8SE obj-h34661-reading Batterieladung
attr STP8SE obj-h34665-len 4
attr STP8SE obj-h34665-reading Batterieentladung
attr STP8SE room PV->Stromversorgung

setstate STP8SE opened
setstate STP8SE 2022-07-06 18:12:50 Batterieentladleistung 0
setstate STP8SE 2022-07-06 18:12:50 Batterieentladung 0
setstate STP8SE 2022-07-06 18:12:50 Batterieladeleistung 0
setstate STP8SE 2022-07-06 18:12:50 Batterieladung 536870911
setstate STP8SE 2022-07-06 18:12:49 Batteriespannung 374.80
setstate STP8SE 2022-07-06 18:12:49 Batteriestatus standby
setstate STP8SE 2022-07-06 18:12:48 Batteriestrom 0.000
setstate STP8SE 2022-07-06 18:12:49 Batterietemperatur 20.0
setstate STP8SE 2022-07-06 18:12:47 DC_Leistung_1 1512
setstate STP8SE 2022-07-06 18:12:50 DC_Leistung_2 450
setstate STP8SE 2022-07-06 18:12:47 DC_Spannung_1 576.50
setstate STP8SE 2022-07-06 18:12:49 DC_Spannung_2 404.40
setstate STP8SE 2022-07-06 18:12:47 DC_Strom_1 2.622
setstate STP8SE 2022-07-06 18:12:49 DC_Strom_2 1.086
setstate STP8SE 2022-07-06 18:12:46 Gesamtertrag 41117
setstate STP8SE 2022-07-06 18:12:48 Ladezustand 100
setstate STP8SE 2022-07-06 18:12:46 Netzrelais geschlossen
setstate STP8SE 2022-07-06 18:12:46 Status OK
setstate STP8SE 2022-07-06 18:12:46 Tagesertrag 21216
setstate STP8SE 2022-07-06 18:12:49 Temperatur 38.8
setstate STP8SE 2022-07-06 18:12:47 Wirkleistung 1870
setstate STP8SE 2022-07-06 18:12:47 Wirkleistung_L1 663
setstate STP8SE 2022-07-06 18:12:48 Wirkleistung_L2 665
setstate STP8SE 2022-07-06 18:12:48 Wirkleistung_L3 667
setstate STP8SE 2022-07-06 17:44:10 state opened


Soweit komme ich an alle Interessanten werte ran, nur nicht die Batterieladung und Entladung in wh.
Da kommt nur Blödsinn raus.

Die Register sind vom SBS2.5 aber liefern mir keine Plausiblen werte...

31397 Battery charge Wh U64 FIX0 RO
31401 Battery discharge Wh U64 FIX0 RO
34661 Charge of current battery Wh U64 FIX0 RO
34665 Battery discharge of current battery Wh U64 FIX0 RO


Hat Jemand eine Idee oder kennt ein neueres Dokument?

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

MadMax

Hallo,

ich bekomme jetzt soweit alle Daten die ich aktuell benötige.
Hier die Konfiguration falls jemand auch einen SMA STP Smart Energy hat.


defmod STP8SE ModbusAttr 3  30   192.168.xx.xx:502  TCP
attr STP8SE dev-h-defExpr $val & 0x1FFFFFFF
attr STP8SE dev-h-defLen 2
attr STP8SE dev-h-defPoll 1
attr STP8SE dev-h-defUnpack N
attr STP8SE event-min-interval .*:1200
attr STP8SE event-on-change-reading .*eistung.*:10,.*DC_Spannung.*:5,.*trom.*:0.2,.*EYESTERDAY.*,.*Batteriespannung.*:0.5
attr STP8SE obj-h30201-map 35:Fehler, 303:Aus, 307:OK, 455:Warnung
attr STP8SE obj-h30201-reading Status
attr STP8SE obj-h30217-map 16777213:Fehler, 51:geschlossen, 311:offen
attr STP8SE obj-h30217-reading Netzrelais
attr STP8SE obj-h30529-reading Gesamtertrag
attr STP8SE obj-h30535-reading Tagesertrag
attr STP8SE obj-h30769-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30769-format %.3f
attr STP8SE obj-h30769-reading DC_Strom_1
attr STP8SE obj-h30771-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30771-format %.2f
attr STP8SE obj-h30771-reading DC_Spannung_1
attr STP8SE obj-h30773-reading DC_Leistung_1
attr STP8SE obj-h30775-expr $val & 0xFFFFFFFF
attr STP8SE obj-h30775-len 2
attr STP8SE obj-h30775-reading Wirkleistung
attr STP8SE obj-h30775-unpack l>
attr STP8SE obj-h30777-reading Wirkleistung_L1
attr STP8SE obj-h30779-reading Wirkleistung_L2
attr STP8SE obj-h30781-reading Wirkleistung_L3
attr STP8SE obj-h30843-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30843-format %.3f
attr STP8SE obj-h30843-reading Batteriestrom
attr STP8SE obj-h30845-reading Ladezustand
attr STP8SE obj-h30849-expr ($val  & 0xFFFF) / 10
attr STP8SE obj-h30849-format %.1f
attr STP8SE obj-h30849-reading Batterietemperatur
attr STP8SE obj-h30851-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30851-format %.2f
attr STP8SE obj-h30851-reading Batteriespannung
attr STP8SE obj-h30953-expr ($val  & 0xFFFF) / 10
attr STP8SE obj-h30953-format %.1f
attr STP8SE obj-h30953-reading Temperatur
attr STP8SE obj-h30955-map 16777213:Fehler, 303:Aus, 2291:standby, 2292:laden, 2293:entladen
attr STP8SE obj-h30955-reading Batteriestatus
attr STP8SE obj-h30957-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30957-format %.3f
attr STP8SE obj-h30957-reading DC_Strom_2
attr STP8SE obj-h30959-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30959-format %.2f
attr STP8SE obj-h30959-reading DC_Spannung_2
attr STP8SE obj-h30961-reading DC_Leistung_2
attr STP8SE obj-h31393-reading Batterieladeleistung
attr STP8SE obj-h31395-reading Batterieentladleistung
attr STP8SE obj-h31397-expr $val & 0xFFFFFFFFFFFFFFFF
attr STP8SE obj-h31397-len 4
attr STP8SE obj-h31397-reading Batterieladung
attr STP8SE obj-h31397-unpack Q>
attr STP8SE obj-h31401-expr $val & 0xFFFFFFFFFFFFFFFF
attr STP8SE obj-h31401-len 4
attr STP8SE obj-h31401-reading Batterieentladung
attr STP8SE obj-h31401-unpack Q>



attr STP8SE devStateIcon {\
my $mode = 'measure_power@green';;;;\
$mode = 'measure_power@yellow' if (ReadingsVal($name, "Wirkleistung", "") < 1);;;;\
\
my $dc_sum = ReadingsVal($name,"DC_Leistung",0);; \
\
my $mode2 = 'sani_solar@green';;;;\
$mode2 = 'sani_solar@yellow' if ($dc_sum < 1);;;;\
\
my $mode3 = 'solar@green';;;;\
$mode3 = 'solar@yellow' if (ReadingsVal($name,"DC_Leistung_1",0) < 1);;;;\
\
my $mode4 = 'solar@green';;;;\
$mode4 = 'solar@yellow' if (ReadingsVal($name,"DC_Leistung_2",0) < 1);;;;\
\
my $chargePw = ReadingsVal($name, "Batterieleistung", "");;;;\
\
my $charge = '';;;;\
$charge = 'control_arrow_leftward@greenyellow' if ($chargePw < 0);;;;\
$charge = 'control_arrow_rightward@green' if ($chargePw > 0);;;;\
\
my $ChargeStatus = 'measure_battery_100@green';;;;\
$ChargeStatus = 'measure_battery_75@green' if (ReadingsVal($name, "Ladezustand", "") < 80);;;;\
$ChargeStatus = 'measure_battery_50@yellow' if (ReadingsVal($name, "Ladezustand", "") < 55);;;;\
$ChargeStatus = 'measure_battery_25@orange' if (ReadingsVal($name, "Ladezustand", "") < 30);;;;\
$ChargeStatus = 'measure_battery_0@red' if (ReadingsVal($name, "Ladezustand", "") < 6);;;;\
\
my $Cap = (ReadingsVal($name,"Ladezustand",0) -5) * 190;;\
\
\
"<div>" . \
FW_makeImage($mode,"measure_power") ." AC ". ReadingsVal($name,"Wirkleistung",0) ."W  ". \
FW_makeImage($mode2,"sani_solar") ." DC ".$dc_sum."W  ". \
FW_makeImage($mode3,"solar") ." MPP1 ".ReadingsVal($name,"DC_Leistung_1",0)."W  ". \
FW_makeImage($mode4,"solar") ." MPP2 ".ReadingsVal($name,"DC_Leistung_2",0)."W  ". \
FW_makeImage($ChargeStatus,"") . \
FW_makeImage($charge,"") ." ". $chargePw ."W   ". \
ReadingsVal($name,"Ladezustand",0) ."% ".\
$Cap."wh  ".\
"</div>"}


Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

didy

#33
Zitat von: MadMax am 09 Juli 2022, 15:00:25
Hallo,

ich bekomme jetzt soweit alle Daten die ich aktuell benötige.
Hier die Konfiguration falls jemand auch einen SMA STP Smart Energy hat.
Danke!
Hab die Namen etwas für mich angepasst, aber warst mir eine große Hilfe, allein das ModbusAttr-Modul verstehen.

Interessanterweise ist bei mir die Summe der Wirkleistung L1+L2+L3 nicht das selbe wie die gesamte Wirkleistung. Ist das bei dir auch so?

Das was man aktuell an Verbrauch hat (was der WR selbst ja berechnet für seine eigene Websiten-Darstellung bzw. für die App) scheint man nicht abrufen zu können. Ich rechne das dann selbst aus, sieh hier:
https://forum.fhem.de/index.php/topic,128947.0.html
(War eigentlich ne Frage, hab mir die Antwort dann 20min später selber gegeben....)

didy

Ganz passt das noch nicht. Ich bekomme bei Wirkleistung keine negativer Werte sondern stattdessen Werte kurz vor 32bit-Vollausschlag, trotz des "attr STP8SE obj-h30775-unpack l>". (Eingenverbrauch WR nachts wenn auch keine Batterie-Einspeisung mehr.)

Die Wirkleistung der drei Phasen ist auch signed Datentyp, hier fehlt bei dir das passende unpack. (Generell wäre zu überlegen, ob es nicht sinnvoller ist, signed als default zu machen und bei den unsigned einen entsprechenden unpack anzugeben.)

Was ich noch nicht verstehe: Warum blendest du per Default einige Bits aus per "attr STP8SE dev-h-defExpr $val & 0x1FFFFFFF"? Ist das der "Workaround" um das Vorzeichen zu ignorieren?
(Nein das ist nicht der Grund, dass das signed nicht funktioniert, das passende expr für den 30775 habe ich schon auch.)

MadMax

Hallo,

mittlerweile habe ich den WR so in betrieb:


defmod STP8SE ModbusAttr 3  30   192.168.xx.xx:502  TCP
attr STP8SE dev-h-defLen 2
attr STP8SE dev-h-defPoll 1
attr STP8SE dev-h-defUnpack N
attr STP8SE devStateIcon {\
my $mode = 'measure_power@green';;;;\
$mode = 'measure_power@yellow' if (ReadingsVal($name, "Wirkleistung", "") < 1);;;;\
\
my $dc_sum = ReadingsVal($name,"DC_Leistung",0);; \
\
my $mode2 = 'sani_solar@green';;;;\
$mode2 = 'sani_solar@yellow' if ($dc_sum < 1);;;;\
\
my $mode3 = 'solar@green';;;;\
$mode3 = 'solar@yellow' if (ReadingsVal($name,"DC_Leistung_1",0) < 1);;;;\
\
my $mode4 = 'solar@green';;;;\
$mode4 = 'solar@yellow' if (ReadingsVal($name,"DC_Leistung_2",0) < 1);;;;\
\
my $chargePw = ReadingsVal($name, "Batterieleistung", "");;;;\
\
my $charge = '';;;;\
$charge = 'control_arrow_leftward@greenyellow' if ($chargePw < 0);;;;\
$charge = 'control_arrow_rightward@green' if ($chargePw > 0);;;;\
\
my $ChargeStatus = 'measure_battery_100@green';;;;\
$ChargeStatus = 'measure_battery_75@green' if (ReadingsVal($name, "Ladezustand", "") < 80);;;;\
$ChargeStatus = 'measure_battery_50@yellow' if (ReadingsVal($name, "Ladezustand", "") < 55);;;;\
$ChargeStatus = 'measure_battery_25@orange' if (ReadingsVal($name, "Ladezustand", "") < 30);;;;\
$ChargeStatus = 'measure_battery_0@red' if (ReadingsVal($name, "Ladezustand", "") < 6);;;;\
\
my $Cap = (ReadingsVal($name,"Ladezustand",0) -5) * 190;;\
\
\
"<div>" . \
FW_makeImage($mode,"measure_power") ." AC ". ReadingsVal($name,"Wirkleistung",0) ."W  ". \
FW_makeImage($mode2,"sani_solar") ." DC ".$dc_sum."W  ". \
FW_makeImage($mode3,"solar") ." MPP1 ".ReadingsVal($name,"DC_Leistung_1",0)."W  ". \
FW_makeImage($mode4,"solar") ." MPP2 ".ReadingsVal($name,"DC_Leistung_2",0)."W  ". \
FW_makeImage($ChargeStatus,"") . \
FW_makeImage($charge,"") ." ". $chargePw ."W   ". \
ReadingsVal($name,"Ladezustand",0) ."% ".\
$Cap."wh  ".\
"</div>"}
attr STP8SE event-min-interval .*:1200
attr STP8SE event-on-change-reading .*eistung.*:10,.*DC_Spannung.*:5,.*trom.*:0.2,.*EYESTERDAY.*,.*Batteriespannung.*:0.5,Ladezustand.*
attr STP8SE group PV Energy
attr STP8SE obj-h30201-map 35:Fehler, 303:Aus, 307:OK, 455:Warnung
attr STP8SE obj-h30201-reading Status
attr STP8SE obj-h30217-map 16777213:Fehler, 51:geschlossen, 311:offen
attr STP8SE obj-h30217-reading Netzrelais
attr STP8SE obj-h30529-reading Gesamtertrag
attr STP8SE obj-h30535-reading Tagesertrag
attr STP8SE obj-h30769-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30769-format %.3f
attr STP8SE obj-h30769-reading DC_Strom_1
attr STP8SE obj-h30771-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30771-format %.2f
attr STP8SE obj-h30771-reading DC_Spannung_1
attr STP8SE obj-h30773-reading DC_Leistung_1
attr STP8SE obj-h30775-expr $val
attr STP8SE obj-h30775-len 2
attr STP8SE obj-h30775-reading Wirkleistung
attr STP8SE obj-h30775-unpack i>
attr STP8SE obj-h30777-expr $val
attr STP8SE obj-h30777-reading Wirkleistung_L1
attr STP8SE obj-h30777-unpack i>
attr STP8SE obj-h30779-expr $val
attr STP8SE obj-h30779-reading Wirkleistung_L2
attr STP8SE obj-h30779-unpack i>
attr STP8SE obj-h30781-expr $val
attr STP8SE obj-h30781-reading Wirkleistung_L3
attr STP8SE obj-h30781-unpack i>
attr STP8SE obj-h30843-expr $val/1000
attr STP8SE obj-h30843-format %.3f
attr STP8SE obj-h30843-reading Batteriestrom
attr STP8SE obj-h30843-unpack i>
attr STP8SE obj-h30845-reading Ladezustand
attr STP8SE obj-h30849-expr ($val  & 0xFFFF) / 10
attr STP8SE obj-h30849-format %.1f
attr STP8SE obj-h30849-reading Batterietemperatur
attr STP8SE obj-h30851-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30851-format %.2f
attr STP8SE obj-h30851-reading Batteriespannung
attr STP8SE obj-h30953-expr ($val  & 0xFFFF) / 10
attr STP8SE obj-h30953-format %.1f
attr STP8SE obj-h30953-reading Temperatur
attr STP8SE obj-h30955-map 16777213:Fehler, 303:Aus, 2291:standby, 2292:laden, 2293:entladen
attr STP8SE obj-h30955-reading Batteriestatus
attr STP8SE obj-h30957-expr ($val  & 0xFFFF) / 1000
attr STP8SE obj-h30957-format %.3f
attr STP8SE obj-h30957-reading DC_Strom_2
attr STP8SE obj-h30959-expr ($val  & 0xFFFF) / 100
attr STP8SE obj-h30959-format %.2f
attr STP8SE obj-h30959-reading DC_Spannung_2
attr STP8SE obj-h30961-reading DC_Leistung_2
attr STP8SE obj-h31393-reading Batterieladeleistung
attr STP8SE obj-h31395-reading Batterieentladleistung
attr STP8SE obj-h31397-expr $val & 0xFFFFFFFFFFFFFFFF
attr STP8SE obj-h31397-len 4
attr STP8SE obj-h31397-reading Batterieladung
attr STP8SE obj-h31397-unpack Q>
attr STP8SE obj-h31401-expr $val & 0xFFFFFFFFFFFFFFFF
attr STP8SE obj-h31401-len 4
attr STP8SE obj-h31401-reading Batterieentladung
attr STP8SE obj-h31401-unpack Q>
attr STP8SE obj-h40073-reading BAT_EV_Untere_Batterieentladegrenze
attr STP8SE obj-h40149-len 2
attr STP8SE obj-h40149-reading Set_Leistung
attr STP8SE obj-h40149-set 1
attr STP8SE obj-h40149-unpack i>
attr STP8SE obj-h40151-reading Set_Aktiv
attr STP8SE obj-h40151-set 1
attr STP8SE obj-h40236-reading Set_BMS_Mode
attr STP8SE obj-h40236-set 1
attr STP8SE obj-h40721-reading BAT_Minimale_Breite_des_Tiefentladeschutzbereichs
attr STP8SE obj-h40781-reading Set_Netzaustauschleistung
attr STP8SE obj-h40781-set 1
attr STP8SE obj-h40793-reading Set_LadeP_min
attr STP8SE obj-h40793-set 1
attr STP8SE obj-h40795-reading Set_LadeP_max
attr STP8SE obj-h40795-set 1
attr STP8SE obj-h40797-reading Set_EntladeP_min
attr STP8SE obj-h40797-set 1
attr STP8SE obj-h40799-reading Set_EntladeP_max
attr STP8SE obj-h40799-set 1


Damit kann ich auf die Ladung manuell über Modbus steuern.


Ja die Summe der Leistungten passt bei mir auch nicht 100%, außerdem wird die Batterieentladung nur auf 10w genau gerundet.

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

didy

Hi,

Zitat von: MadMax am 29 August 2022, 18:20:11attr STP8SE obj-h30775-unpack i>
attr STP8SE obj-h30777-expr $val
Was ist der Hintergrund deines wechsels von l (klein L) auf i? Soweit ich sehe ist der Unterschied, dass du i nicht die Länge des Integers definierst - was macht das in der Praxis für einen Unterschied?
Und welchen Zweck hat ein "expr $val" - was macht das anders als das expr ganz wegzulassen?

Jedenfalls, ich habe jetzt mal angefangen mich ein wenig mit diesen ganzen Unpack-Optionen etc. zu beschäftigen. Du hast einen Standard definiert und Abweichungen davon jeweils einzeln definiert. Ich glaube ich mach das anders: Man kann auch Typen definieren. Man braucht ja fast immer die gleichen Dinge.
Ich hab mal mit folgenden angefangen, und die entsprechend der Tabelle von SMA benannt:

attr WR dev-type-S32_FIX0-len 2
attr WR dev-type-S32_FIX0-unpack l>

attr WR dev-type-U32_FIX2-len 2
attr WR dev-type-U32_FIX2-unpack L>
attr WR dev-type-U32_FIX2-expr $val / 100
attr WR dev-type-U32_FIX2-format %.2f

attr WR dev-type-S32_FIX3-len 2
attr WR dev-type-S32_FIX3-unpack l>
attr WR dev-type-S32_FIX3-expr $val / 1000
attr WR dev-type-S32_FIX3-format %.3f


Man braucht für die einzelnen Datenobjekte dann immer nur noch angeben, welchen Typ sie haben, spart einiges Copy&Paste, da ja viel gleich ist:

attr WR obj-h30775-reading Pw
attr WR obj-h30775-type S32_FIX0

attr WR obj-h30783-reading U_L1
attr WR obj-h30783-type U32_FIX2

attr WR obj-h30843-reading Bat_I
attr WR obj-h30783-type S32_FIX3


Ich denke ich arbeit da heut abend weiter, kann dann auch meine Lösung komplett posten wenn ichs fertig hab.
Das mit den Stati sieht auch interessant aus, aber damit hab ich mich noch gar nicht beschäftigt, ich muss erstmal die Daten vernünftig reinbekommen. Und das schreiben hab ich auch noch nicht angeschaut.

Zitat von: MadMax am 29 August 2022, 18:20:11Damit kann ich auf die Ladung manuell über Modbus steuern.
Blöde Frage, aber anhand was steuerst du das, und wieso lässt ihn nicht einfach selber machen, bzw. mit der Sunny-Portal-Prognose?

Zitat von: MadMax am 29 August 2022, 18:20:11Ja die Summe der Leistungten passt bei mir auch nicht 100%,
Ich hab mir das nochmal angeschaut. Wenn man Momentanwerte anschaut passt hat man ständig das Gefühl, es passt nicht. Plottet man beides (also die Wirkleistungssumme vom Wechselrichter sowie die selbstgerechnete Summe L1+L2+L3) als Diagramm, sieht es eher so aus, als sei der Hauptunterschied, dass die Zahlen ggf. ein paar Sekunden versatz haben, die Kurven passen jedenfalls recht gut zusammen. Kleine Abweichungen dann ggf. noch durch Rundungsfehler, er gibt ja nur ganze Watt aus.

Zitat von: MadMax am 29 August 2022, 18:20:11außerdem wird die Batterieentladung nur auf 10w genau gerundet.
Sicher, dass er nicht einfach nur 10W-Stufen macht? Auch beim Blick in die Wechselrichtereigene App/Webseite seh ich da meist nur 10W-Stufen, und die Differenz von 3-5W wird aus dem Netz bezogen oder ins Netz eingespeist.

Mich wundert an der Stelle eher was anderes - die Summe beider PV-String-DC-Leistungen ist größer als die AC-Leistung (also wenn keine Batterieladung), was logisch ist weil der Wechselrichter einen Wirkungsgrad <100% hat. Im nächtlichen Batteriebetrieb sieht aber die AC-Leistung und die Batterie-Entladeleistung gleich aus. Wahrscheinlich wird das aber daran liegen, dass 2% von 200W (nachts von der Batterie) absolut nur ne Handvoll Watt sind die in Rauschen und Rundungsfehler untergehen, bei >5kW vom Dach fällt das eher auf.

Grüße,
Didi

MadMax

Ich hatte irgendwann alle Werte dir ich brauchte.
Ich hab einfach nur viel rumprobiert bis die Werte gepasst hatten  :o

Die Ladung steuere ich manuell weil bei 37kwp im Sommer auch gerne mal über 20kw vom Dach kommen und da hat die Steuerung von SMA am Nachmittag die Batterie in 15minuten mit 10kw voll geladen was jedesmal für die Batterie ein Schlag ins Gesicht ist.
Darum Steuere ich das selbst. Außerdem muss ich die Batterie nicht immer auf 100% laden.

Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

didy

Zitat von: MadMax am 29 August 2022, 19:09:26Ich hatte irgendwann alle Werte dir ich brauchte.
Ich hab einfach nur viel rumprobiert bis die Werte gepasst hatten  :o
Okay alles klar :D

Zitat von: MadMax am 29 August 2022, 19:09:26Die Ladung steuere ich manuell weil bei 37kwp
Und da hast du nur die 8kW-Version vom WR? :D
D.h. du hast nur einen Wechselrichter mit Batterie?

Zitat von: MadMax am 29 August 2022, 19:09:26im Sommer auch gerne mal über 20kw vom Dach kommen und da hat die Steuerung von SMA am Nachmittag die Batterie in 15minuten mit 10kw voll geladen was jedesmal für die Batterie ein Schlag ins Gesicht ist.
Okay, d.h. du steuerst weniger die Zeit sondern vielmehr die Ladeleistung.

MadMax

Ich habe insgesamt 5 Wechselrichter aber nur der STP8.0SE ist über Modbus eingebunden, die anderen über SMAInverter.

Ja genau, ich will wegen der Effizienz nur aus der PV vom STP8.0SE in die Batterie laden, darum gebe ich als sollwert zum laden die aktuelle DC Leistung mal 0.8 vor und begrenze das ganze noch auf 2000w.
Ich berechne den mindestladestand für die nächste Nacht mit etwas Reserve.
Dann lass ich noch "Platz" für die 70% Regelung und ab 15uhr lade ich dann mit maximal 2000w bis 80% und alle 7 Tage mal auf 100%.
Das Funktioniert aktuell sehr gut, ich denke wenn die Sonnenstunden weniger werden und es auch Diesiger wird werde ich auch noch über die anderen WR von der AC-Seite nachladen müssen.
Also die AC-Leistung kann auch negativ sein.

Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

fireball

Hi,

wenn der WR keinen Strom mehr produziert, dann stehen bei mir sinnfrei Werte in den Readings.
Wie kann ich diese Werte einfach auf 0 setzen?
Bei eingigen Werte funktioniert es:
DC_Leistung_Eingang
Netzstrom_Phase_L2

bei einigen wie:
DC_Spannung_Eingang
DC_Strom_Eingang
Nennfrequenz
Netzspannung_Phase_L2
funktioniert es nicht...

Danke
VG
René

Internals:
   DEF        3  30   192.168.178.7:502  TCP
   DeviceName 192.168.178.7:502
   EXPECT     idle
   FD         60
   FUUID      608005a6-f33f-0804-ef70-a711145ff3715ef4
   IODev      SunnyBoy
   Interval   30
   LASTOPEN   1664861995.58783
   MODBUSID   3
   MODE       master
   MODULEVERSION Modbus 4.4.04 - 17.7.2021
   NAME       SunnyBoy
   NOTIFYDEV  global
   NR         576
   NTFY_ORDER 50-SunnyBoy
   PARTIAL   
   PROTOCOL   TCP
   STATE      OK
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   eventCount 18733
   nextOpenDelay 60
   QUEUE:
   READ:
     BUFFER     
   READINGS:
     2022-10-04 19:40:23   DC_Leistung_Eingang 0.00
     2022-10-04 19:40:22   DC_Spannung_Eingang 21474836.48
     2022-10-04 19:40:22   DC_Strom_Eingang 2147483.65
     2022-10-04 19:40:22   Gesamtertrag    6910104
     2022-10-04 19:40:23   Nennfrequenz    655.35
     2021-04-23 08:09:54   Nennleistung_im_Zustand_Ok 2500
     2022-10-04 19:40:23   Netzspannung_Phase_L2 42949672.95
     2022-10-04 19:40:23   Netzstrom_Phase_L2 0.00
     2022-10-04 19:40:22   Status          OK
     2022-10-04 19:40:22   Tagesertrag     9.143
     2022-10-04 19:40:23   Temperatur      0
     2022-10-04 19:40:22   Wirkleistung_Begrenzung 2500
     2022-10-04 19:40:23   Wirkleistung_Max 2500
     2022-10-04 19:40:23   Wirkleistung_Phase_L2 0
     2022-10-04 19:40:23   statStateDay    opened: 19:40:26 opened_Count: 1
     2022-10-03 23:59:55   statStateDayLast opened: 24:00:00 opened_Count: 1
     2022-10-04 19:40:23   statStateMonth  opened: 3d 19:40:26 opened_Count: 1
     2022-09-30 23:59:55   statStateMonthLast opened: 1d 01:18:31 opened_Count: 1 (since: 2022-09-29_22:41:24)
     2022-10-04 19:40:23   statStateYear   opened: 4d 20:58:57 opened_Count: 1 (since: 2022-09-29_22:41:24)
     2022-10-04 07:39:56   state           opened
   REMEMBER:
     lid        3
     lname      SunnyBoy
     lrecv      1664905223.7915
     lsend      1664905223.77444
   defptr:
     SunnyBoy   3
   gotReadings:
     Netzstrom_Phase_L2 0.00
   helper:
     _98_statistics EnergieManagement
   lastRead:
     h30201     1664905222.33045
     h30233     1664905222.46102
     h30529     1664905222.59304
     h30535     1664905222.71326
     h30769     1664905222.83658
     h30771     1664905222.95322
     h30773     1664905223.07406
     h30775     1664905223.19438
     h30785     1664905223.31375
     h30803     1664905223.43337
     h30837     1664905223.55426
     h30953     1664905223.67299
     h30979     1664905223.79283
Attributes:
   alias      SunnyBoy
   dev-h-defExpr $val & 0x1FFFFFFF
   dev-h-defLen 2
   dev-h-defPoll 1
   dev-h-defUnpack N
   obj-h30201-map 35:Fehler, 303:Aus, 307:OK, 455:Warnung
   obj-h30201-reading Status
   obj-h30233-reading Wirkleistung_Begrenzung
   obj-h30529-reading Gesamtertrag
   obj-h30535-expr $val/1000
   obj-h30535-format %.3f
   obj-h30535-reading Tagesertrag
   obj-h30769-expr $val/1000
   obj-h30769-format %.2f
   obj-h30769-reading DC_Strom_Eingang
   obj-h30771-expr $val/100
   obj-h30771-format %.2f
   obj-h30771-reading DC_Spannung_Eingang
   obj-h30773-format %.2f
   obj-h30773-reading DC_Leistung_Eingang
   obj-h30775-reading Wirkleistung_Phase_L2
   obj-h30785-expr $val/100
   obj-h30785-format %.2f
   obj-h30785-reading Netzspannung_Phase_L2
   obj-h30803-expr ($val  & 0xFFFF) / 100
   obj-h30803-format %2.2f
   obj-h30803-reading Nennfrequenz
   obj-h30837-reading Wirkleistung_Max
   obj-h30953-expr ($val  & 0xFFFF) / 10
   obj-h30953-format %.0f
   obj-h30953-reading Temperatur
   obj-h30979-expr ($val & 0x7FFF) /1000
   obj-h30979-format %.2f
   obj-h30979-reading Netzstrom_Phase_L2
   room       ENERGIE,HWR
   stateFormat Status

Wzut

#41
Zitat von: fireball am 04 Oktober 2022, 19:44:06
Wie kann ich diese Werte einfach auf 0 setzen?

   obj-h30803-expr ($val  & 0xFFFF) / 100

nicht unbedingt 0 aber um die sinnvoll zu bändigen kann man z.B. schon mal alles platt schlagen was nicht sein kann.
Am Beispiel Frequenz statt 0xFFFF runter gehen auf 0x13FF - also von 65535 auf nur noch 5119

   obj-h30803-expr ($val  & 0x13FF) / 100
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

fireball

Danke, das hat soweit geklappt, jetzt steht da  51.19.

Warum dann aber nicht so, da steht dann glatt 50.00, zumindest solange kein echter Wert anliegt.
($val & 0x1388) / 100

Kannst du mir das Vorgehen nochmal genau erklären? $val ist der Wert, wenn der da ist, brauch ich nur noch ein Format und evtl. eine Umrechnung, zB /1000 oder so.
Was macht das ($val  & 0x13FF) genau?

Und warum setze ich das aktuell fast für jeden Wert, hab aber auch noch einen globalen Umrechner    dev-h-defExpr $val & 0x1FFFFFFF

VG+Danke
René

habl

SMA Geräte haben die Eigenschaft, sofern der WR die angefragten Werte nicht ermitteln kann, bestimmte Werte zurückzugeben. Das passiert z.B. bei einem Reboot, Update etc. Ich habe bei mir dafür das dev-h-defIgnoreExpr Attribut gesetzt:


( ( $val==536870911 ) || ( $val==2147483648 ) || ( $val==4294967295 ) || ( $val==65535 ) )



VG
  habl

stefanne

Das mit der PV Steckdose ist eine tolle Idee. Ich habe daran einen Heizlüfter angeschlossen der "überflüssigen" PV Strom in Heizenergie umwandelt.

Ich habe statt dem Notify ein DOIF verwandt. Damit kann ich mir das Dummy Device sparen.


defmod PWP_DOIF_1 DOIF ([PWP:"^Wirkleistung:.*$"] and ([PWP:Wirkleistung] >= [PWP_DOIF_1:PWP_sollwert] ))\
(\
  set MQTT2_shellyplus1pm_0cdc7ef63bdc on\
)\
DOELSEIF ([PWP:Wirkleistung] < [PWP_DOIF_1:PWP_sollwert] )\
(\
  set MQTT2_shellyplus1pm_0cdc7ef63bdc off\
)
attr PWP_DOIF_1 eventMap cmd_1:on cmd_2:off
attr PWP_DOIF_1 icon sani_heating_automatic
attr PWP_DOIF_1 readingList PWP_sollwert
attr PWP_DOIF_1 room SMA
attr PWP_DOIF_1 setList PWP_sollwert:slider,0,100.0,7000
attr PWP_DOIF_1 webCmd PWP_sollwert

Fistandantilus

Hallo zusammen,

ich kämpfe auch gerade mit der Bitmaske und komme nicht weiter :(
Ich habe einen Sunny Tripower 4.0
Nach dem Neustart bei Dunkelheit heute habe ich auch die großen Werte:


Internals:
   DEF        3 30 192.168.1.171:502 TCP
   DeviceName 192.168.1.171:502
   EXPECT     idle
   FD         34
   FUUID      638d30b2-f33f-1a0c-ce3d-639131a7a1738e5e
   IODev      STP4
   Interval   30
   LASTOPEN   1673628861.5019
   MODBUSID   3
   MODE       master
   MODULEVERSION Modbus 4.4.11 - 5.10.2022
   NAME       STP4
   NOTIFYDEV  global
   NR         848
   NTFY_ORDER 50-STP4
   PARTIAL   
   PROTOCOL   TCP
   STATE      aktuell: 2147483648 Watt  / total: 4294967295 Watt
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   eventCount 24
   nextOpenDelay 60
   QUEUE:
   READ:
     BUFFER     
   READINGS:
     2023-01-13 19:20:23   Gesamtertrag    4294967295
     2023-01-13 19:32:26   Status          OK
     2023-01-13 19:20:23   Tagesertrag     4294967295
     2023-01-12 21:59:00   TagesertragStat 2179
     2023-01-13 19:20:23   Temperatur      2147483648
     2023-01-13 19:20:23   Wirkleistung    2147483648
     2023-01-13 19:29:27   state           active
   REMEMBER:
     lid        3
     lname      STP4
     lrecv      1673634747.20055
     lsend      1673634747.01617
   defptr:
     STP4       3
   gotReadings:
   lastRead:
     h30201     1673634746.40292
     h30529     1673634023.25735
     h30535     1673634023.38157
     h30775     1673634023.50684
     h30953     1673634023.65104
Attributes:
   DbLogExclude Status, Temperatur, Wirkleistung, state, Gesamtertrag
   alias      SUNNY TRIPOWER 4.0
   dev-h-defExpr $val & 0x1FFFFFFF
   dev-h-defIgnoreExpr ( ( $val==536870911 ) || ( $val==2147483648 ) || ( $val==4294967295 ) || ( $val==65535 ) )
   dev-h-defLen 2
   dev-h-defPoll 1
   dev-h-defUnpack N
   event-on-change-reading TagesertragStat
   group      4: Energie
   icon       measure_photovoltaic_inst
   obj-h30201-map 35:Fehler, 303:Aus, 307:OK, 455:Warnung
   obj-h30201-reading Status
   obj-h30529-reading Gesamtertrag
   obj-h30535-reading Tagesertrag
   obj-h30775-reading Wirkleistung
   obj-h30953-reading Temperatur
   room       Energie
   stateFormat aktuell: Wirkleistung Watt  / total: Tagesertrag Watt
   verbose    0


Hab schon einiges probiert und auch gedacht dev-h-defIgnoreExpr hilft, aber wie Ihr seht leider nicht :(

VG
S.
Raspberry Pi 3 + FHEM + Smartvisu/Fronthem, CUL, HMLAN, Enocean USB300, Eltako (FAM14, FSB14, FSR,FTS14EM,Multisensor,...) - MySQL DB + 2.Raspberry für Heizungsregelung und 3. Raspberry als Alarmanlage

MadMax

#46
Hallo,

Ich habe den SMA Hybridwechselrichter inzwischen gut im SMAInverter Modul integriert.
https://forum.fhem.de/index.php/topic,56080.msg1257813.html#msg1257813

Da brauchst du nur die IP Adresse und das Passwort.

Gruß
Max

PS: Die Normalen Tripower sind schon lange intigriert.
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

Fistandantilus

Kann das sein, dass das nur funktioniert, wenn man das SMA Portal eingerichtet hat. Hab ich nämlich nicht, und bekomme daher einen Timeout...
Raspberry Pi 3 + FHEM + Smartvisu/Fronthem, CUL, HMLAN, Enocean USB300, Eltako (FAM14, FSB14, FSR,FTS14EM,Multisensor,...) - MySQL DB + 2.Raspberry für Heizungsregelung und 3. Raspberry als Alarmanlage

MadMax

Hallo,

eigentlich verbindet sich das Modul über Speedwire und dabei sollte es egal sein ob die WR im Portal ist.
Du brauchst auf jedenfall das Installateur Passwort.

Gruß Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

Fistandantilus

Ah, Speedwire wird das Problem sein, der setzt doch eine Kabelverbindung voraus. Ich hab aktuell leider nur WLAN anliegen.
Raspberry Pi 3 + FHEM + Smartvisu/Fronthem, CUL, HMLAN, Enocean USB300, Eltako (FAM14, FSB14, FSR,FTS14EM,Multisensor,...) - MySQL DB + 2.Raspberry für Heizungsregelung und 3. Raspberry als Alarmanlage

MadMax

Das weiß ich nicht aber wäre schon möglich
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

Dr.McKay

Zitat von: MadMax am 09 Juli 2022, 15:00:25Hallo,

ich bekomme jetzt soweit alle Daten die ich aktuell benötige.
Hier die Konfiguration falls jemand auch einen SMA STP Smart Energy hat.


attr STP8SE devStateIcon {\
my $mode = 'measure_power@green';;;;\
$mode = 'measure_power@yellow' if (ReadingsVal($name, "Wirkleistung", "") < 1);;;;\
\
my $dc_sum = ReadingsVal($name,"DC_Leistung",0);; \
\
my $mode2 = 'sani_solar@green';;;;\
$mode2 = 'sani_solar@yellow' if ($dc_sum < 1);;;;\
\
my $mode3 = 'solar@green';;;;\
$mode3 = 'solar@yellow' if (ReadingsVal($name,"DC_Leistung_1",0) < 1);;;;\
\
my $mode4 = 'solar@green';;;;\
$mode4 = 'solar@yellow' if (ReadingsVal($name,"DC_Leistung_2",0) < 1);;;;\
\
my $chargePw = ReadingsVal($name, "Batterieleistung", "");;;;\
\
my $charge = '';;;;\
$charge = 'control_arrow_leftward@greenyellow' if ($chargePw < 0);;;;\
$charge = 'control_arrow_rightward@green' if ($chargePw > 0);;;;\
\
my $ChargeStatus = 'measure_battery_100@green';;;;\
$ChargeStatus = 'measure_battery_75@green' if (ReadingsVal($name, "Ladezustand", "") < 80);;;;\
$ChargeStatus = 'measure_battery_50@yellow' if (ReadingsVal($name, "Ladezustand", "") < 55);;;;\
$ChargeStatus = 'measure_battery_25@orange' if (ReadingsVal($name, "Ladezustand", "") < 30);;;;\
$ChargeStatus = 'measure_battery_0@red' if (ReadingsVal($name, "Ladezustand", "") < 6);;;;\
\
my $Cap = (ReadingsVal($name,"Ladezustand",0) -5) * 190;;\
\
\
"<div>" . \
FW_makeImage($mode,"measure_power") ." AC ". ReadingsVal($name,"Wirkleistung",0) ."W  ". \
FW_makeImage($mode2,"sani_solar") ." DC ".$dc_sum."W  ". \
FW_makeImage($mode3,"solar") ." MPP1 ".ReadingsVal($name,"DC_Leistung_1",0)."W  ". \
FW_makeImage($mode4,"solar") ." MPP2 ".ReadingsVal($name,"DC_Leistung_2",0)."W  ". \
FW_makeImage($ChargeStatus,"") . \
FW_makeImage($charge,"") ." ". $chargePw ."W   ". \
ReadingsVal($name,"Ladezustand",0) ."% ".\
$Cap."wh  ".\
"</div>"}

Gruß
Max

Hallo Max,

kannst du nochmal erläutern wie dein devStatIcon funktionier und was dann am Ende rauskommen soll? Habe verwsucht das nachzubauen, abert bei wird nur die Zeile

measure_power@green AC 2147483648W sani_solar@yellow DC 0W solar@yellow MPP1 0W solar@yellow MPP2 0W measure_battery_100@green W 536870911% 102005472140wh

in Fhem angezeigt. Wie kann ich das zum laufen bekommen?

Danke

Dr.McKay

Zitat von: Dr.McKay am 20 März 2023, 19:59:21
Zitat von: MadMax am 09 Juli 2022, 15:00:25Hallo Max,

kannst du nochmal erläutern wie dein devStatIcon funktionier und was dann am Ende rauskommen soll? Habe verwsucht das nachzubauen, abert bei wird nur die Zeile

measure_power@green AC 2147483648W sani_solar@yellow DC 0W solar@yellow MPP1 0W solar@yellow MPP2 0W measure_battery_100@green W 536870911% 102005472140wh

in Fhem angezeigt. Wie kann ich das zum laufen bekommen?

Danke

Hat sich erledigt, der Icon Pfad war bei mir verstellt.

MadMax

#53
Hallo,

Hat sich zwar erledigt aber es sollte so aussehen.

Du darfst diesen Dateianhang nicht ansehen.

Das SMAInverter Modul kann drn STPxxSE jetzt aber auch auslesen.
Du musst nicht Modbus nutzen.


Gruß Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

thomas.z

Hallo Max,

Stefan hat mich auf diesen Thread aufmerksam gemacht und ich habe Deine folgenden Registerdefinitionen gefunden:
Zitat von: MadMax am 29 August 2022, 18:20:11attr STP8SE obj-h40793-reading Set_LadeP_min
attr STP8SE obj-h40793-set 1
attr STP8SE obj-h40795-reading Set_LadeP_max
attr STP8SE obj-h40795-set 1
attr STP8SE obj-h40797-reading Set_EntladeP_min
attr STP8SE obj-h40797-set 1
attr STP8SE obj-h40799-reading Set_EntladeP_max
attr STP8SE obj-h40799-set 1

Konntest Du diese Register mal erfolgreich testen?
In der aktuellen Spec für die STP-SE fehlen z. B. die Register 40793 und 40797. Und ich habe es bisher nicht geschafft, mit dem Register 40795 irgendeine Wirkung zu erzielen. Muss ggf. Register 40151 auf "aktiv" (802) gestellt werden? Ich würde gerne ebenfalls gelegentlich die Aufladung der Batterie auf z. B. 90% begrenzen (zur Schonung) und dachte mir, ich könnte dazu 40795 auf "0" setzen, wenn die 90% erreicht sind, und wieder erhöhen, wenn z. B. 80% unterschritten werden.

Danke und Gruß
Thomas
Gruß
Thomas
--
tinkerboard s, RPI-RF-MOD, debmatic 3.61.7.90, fhem 5.9.21052, HMIP-WTH-x, HMIP-eTRV-x, HMIP-BSM, Delock 11826, RPI 3b mit ebus Adapter 2.2 RPI, SMA-EM, Compleo eBox-Smart

MadMax

Hallo Thomas,

Ja ich nutze das und Steuere die Ladung manuell.
Register 40151 muss auf 802 gesetzt werden so das du Steuern kannst.
Du solltest aber nicht 1 mal pro sec senden dann hängt sich der WR auf.
Ich frage alle 2s die Daten ab und wenn der sollwert den ich berechne sich änder dann übertrage ich den oder nach 30s.
Das läuft so.


Gruß Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

thomas.z

Hallo Max,
danke schön für Deine Erläuterung. Ich werde dann weiter experimentieren. Vielleicht finde ich eine einfache Lösung, die bei Dauersonnenschein den Speicher vor langem Standby bei 100% Ladung bewahrt, ohne dass ich gleich die Ladesteuerung komplett selber machen muss  :) .

Gruß
Thomas
Gruß
Thomas
--
tinkerboard s, RPI-RF-MOD, debmatic 3.61.7.90, fhem 5.9.21052, HMIP-WTH-x, HMIP-eTRV-x, HMIP-BSM, Delock 11826, RPI 3b mit ebus Adapter 2.2 RPI, SMA-EM, Compleo eBox-Smart

th0nix

#57
Hallo zusammen, ich habe versucht Netzeinspeisung und Netzbezug mit auszulesen.

attr STP8SE obj-h30867-expr ($val & 0x7FFF)
attr STP8SE obj-h30867-reading Netzeinspeisung

attr STP8SE obj-h30865-expr ($val & 0x7FFF)
attr STP8SE obj-h30865-reading Netzbezug

Die Werte scheinen aber nicht zu passen und werden auch nicht aktuallisert. Hat jemand die Werte schon am laufen?
Habe die Werte hier gefunden: https://forum.iobroker.net/assets/uploads/files/721_sma_modbus-tb-de-13.pdf

Danke schon mal

Habe meinen Fehler gefunden - nachdem ich Netz.* in das Attribut event-on-change-reading  scheinen die Werte zu passen.

Sieht dann in Summe so aus:
attr STP8SE event-on-change-reading .*eistung.*:10,.*DC_Spannung.*:5,.*trom.*:0.2,.*EYESTERDAY.*,.*Batteriespannung.*:0.5,Netz.*

attr STP8SE obj-h30867-expr ($val & 0x7FFF)
attr STP8SE obj-h30867-reading Netzeinspeisung

attr STP8SE obj-h30865-expr ($val & 0x7FFF)
attr STP8SE obj-h30865-reading Netzbezug


MadMax

Auslesen der Werte mache ich über die Module 76_SMAInverter.pm und SMAEM.pm.

Die Steuerung erfolgt dann über Modbus TCP
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

Oskar

Moin,

magst Du da vielleicht die Batteriekapazität mit aufnehmen?
Im Modbus geht das ja recht einfach:

attr STP8EM obj-h40187-reading BatterieNennWh
eventuell noch $val & 0xFFFF und dann die aktuelle Kapazität ausrechenen:
my $Cap = ReadingsVal($name,"BatterieNennWh",0) / 100 * ReadingsVal($name,"Ladezustand",0);

Wäre schick, wenn das auch in den SMA-Modulen ginge.

Liebe Grüße
    Oskar
--
fhem geht auch auf mac os x

Oskar

Zitat von: Oskar am 06 Dezember 2023, 19:51:27magst Du da vielleicht die Batteriekapazität mit aufnehmen?
Ich bin ja blind.  Ist ja schon drin "BAT_RATED_CAPACITY"...
--
fhem geht auch auf mac os x

fireball

Hi,

gibts einen Wert im WR der wiedergibt, ob der WR im Notstrom läuft oder nicht?!
Ich würde gern ein paar UseCases implementieren, die zB Geräte abschalten, falls Stromausfall ist.
Wenn ja, könnte man das auch in das SMAInverter Modul mit aufnehmen!?

VG+Danke
René

MadMax

Ja gibt es, steht auch in der Doku.

INV_OperatingStatus / operating_status : Betriebsstatus des Wechselrichters (Netzparallelbetrieb/Backup) (bei Hybridwechselrichtern)

Zumindest beim SMAINVERTER Modul.
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

fireball

Hi, das klingt ja super, habe auch grad in die Doku geschaut in FHEM, aber über die Zustände steht da nix.
Wo finde ich die?
VG+Danke

MadMax

Unzen Links wenn du das Modul auf hast steht "help for SMAInverter".

Da sind dann alle Readings beschrieben.
Im Zweifel testen indem du die Sicherung vom Wechselrichter raus nimmst  ;D
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax