Steckdosen schalten wenn 15min (=15x) SolarEdgePV status-pv_power >1

Begonnen von BKutte, 05 März 2021, 11:39:12

Vorheriges Thema - Nächstes Thema

BKutte

Hallo,
ich habe schon vor einigen Monaten das erste mal mit dem Thema FHEM und meiner PV-Anlage los gelegt und dann leider gefrustet erstmal Winterpause gemacht. Nun habe ich das Thema aus gegebenem Sonnenschein wieder aufgenommen und stecke wieder fest  :'(

Ziel ist "eigentlich" simpel (oder auch nicht):
Wenn die Solare Edge PV 15 minuten Lang (da alle 60 Sekunden abgefragt wird ist das 15x) über 1kW erzeugt sollen 3 Steckdosen eingeschalten werden und wenn sie das 15 Minuten lang nicht mehr tut dann sollen diese wieder abgeschalten werden. Ich habe dazu in eurem Wiki gewühlt und auch im Forum gesucht. Das einbinden des SolareEdge WR und der Shelly Plug Steckdosen war recht logisch und einfach. Doch im Wiki unter "Erste Schritte" hab ich es mit notify probiert aber da komme ich nicht weiter. Es ist ja kein einfaches "wenn das on dann das on" und wie man mit den "Regular Expression" die gewünschte Logik abbildet krieg ich leider nicht hin :'(

Im Event Monitor wird brav alle 60 Sekunden der Status der PV ausgegeben:

2021-03-05 11:36:00 SolarEdgeAPI SolarEdgePV status-pv_status: Active
2021-03-05 11:36:00 SolarEdgeAPI SolarEdgePV status-unit: kW
2021-03-05 11:36:00 SolarEdgeAPI SolarEdgePV status-updateRefreshRate: 3
2021-03-05 11:36:00 SolarEdgeAPI SolarEdgePV status-load_power: 2.78
2021-03-05 11:36:00 SolarEdgeAPI SolarEdgePV status-grid_power: 0.03
2021-03-05 11:36:00 SolarEdgeAPI SolarEdgePV status-load_status: Active
2021-03-05 11:36:00 SolarEdgeAPI SolarEdgePV status-pv_power: 2.75
2021-03-05 11:36:00 SolarEdgeAPI SolarEdgePV status-storage_status: -
2021-03-05 11:36:00 SolarEdgeAPI SolarEdgePV status-grid_status: Active
2021-03-05 11:36:00 SolarEdgeAPI SolarEdgePV active


Und geschalten werden soll:

ShellyPlug1
ShellyPlug3
ShellyPlug4


Wäre echt super wenn ihr mich hier auf den richtigen Weg bringen könntet. Dafür schon mal vielen Dank!!!

Otto123

Hi,

für die Raw Definition ein DOIF
defmod di_wm DOIF ([SolarEdgePV:status-pv_power] > 1000 )((set ShellyPlug1,ShellyPlug3,ShellyPlug4 on)) DOELSEIF ([SolarEdgePV:status-pv_power] <= 1000 )((set ShellyPlug1,ShellyPlug3,ShellyPlug4 off))

attr di_wm do resetwait
attr di_wm room TestPower
attr di_wm wait 900:900


Die Erklärung sollte sich in der Doku finden lassen ;)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

Bei kWh-Angaben und ohne Hysterese reicht schon:

defmod di_wm DOIF ([SolarEdgePV:status-pv_power] > 1 ) ((set ShellyPlug1,ShellyPlug3,ShellyPlug4 on)) DOELSE ((set ShellyPlug1,ShellyPlug3,ShellyPlug4 off))

attr di_wm do resetwait
attr di_wm room TestPower
attr di_wm wait 900:900
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

BKutte

DANKE für die super schnellen Antworten.

Es sind keine kWh sondern die aktuell erzeugten kW der Anlage. Ich versuche also mal Ottos Idee mit für mich sprechenden Bezeichnungen:


defmod di_PVgrosser1 DOIF ([SolarEdgePV:status-pv_power] > 1 )((set ShellyPlug1,ShellyPlug3,ShellyPlug4 on)) DOELSEIF ([SolarEdgePV:status-pv_power] <= 1 )((set ShellyPlug1,ShellyPlug3,ShellyPlug4 off))

attr di_PVgrosser1 do resetwait
attr di_PVgrosser1 room PV
attr di_PVgrosser1 wait 900:900


Den Wert habe ich auf 1 geändert weil ich mir recht sicher bin das hier kW und nicht Watt angegeben werden. Siehe "SolarEdgePV status-pv_power: 2.75"

BKutte

@Damian: Du meinst ohne zu warten bis 15minuten unter 1 kW geliefert werden?!? Auch eine Idee. Danke!

Otto123

Nein Damians Vorschlag macht das Gleiche wie meiner, er fragt nur nicht nochmal explizit ab. Die "ELSE" von > 1 ist ja <=1 :)
In meinem Vorschlag kannst Du auch bei >1 einschalten und erst bei 0.8 wieder aus.
Dein Wartezeit für beide Kommandos steckt hier drin:
attr di_PVgrosser1 do resetwait
attr di_PVgrosser1 wait 900:900
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

Zitat von: BKutte am 05 März 2021, 13:01:49
@Damian: Du meinst ohne zu warten bis 15minuten unter 1 kW geliefert werden?!? Auch eine Idee. Danke!

Der DOELSE-Fall entspricht dem Gegenteil:

DOELSEIF ([SolarEdgePV:status-pv_power] <= 1 )

Mit Hysterese ist eine Differenz zwischen dem Ein- und Ausschalten gemeint.

z. B. Einschalten bei >1 und Ausschalten bei z. B. < 0.5

In dem Fall brauchst du auf jeden Fall einen DOELSEIF-Fall

Du kannst auch mit

wait 0:900

sofort einschalten, aber bei 15 Minuten unter 1 erst ausschalten.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

BKutte

So, hab den DOIF noch mal umbenannt:

[b]
defmod di_PVerzeugung1up DOIF ([SolarEdgePV:status-pv_power] > 1 )((set ShellyPlug3,ShellyPlug4 on)) DOELSEIF ([SolarEdgePV:status-pv_power] <= 1 )((set ShellyPlug3,ShellyPlug4 off))

attr di_PVerzeugung1up do resetwait
attr di_PVerzeugung1up room PV
attr di_PVerzeugung1up wait 900:900
[/b]


Und auch gleich einen zweiten für Einspeisung (also Überschuss der Anlage) gebaut. Habe auch einen Speicher der Strom aufnimmt und wenn der voll ist soll dieser Wert zusätzliche Verbraucher schalten.


defmod di_PVeinspeisung06up DOIF ([SolarEdgePV:status-grid_power] < -0,6 )((set ShellyPlug1 on)) DOELSEIF ([SolarEdgePV:status-grid_power] >= -0,2 )((set ShellyPlug1 off))

attr di_PVeinspeisung06up do resetwait
attr di_PVeinspeisung06up room PV
attr di_PVeinspeisung06up wait 900:900


Sorry, bin etwas übermotiviert in der Hoffnung das es funktioniert. Bisher gings leider noch nicht. Ich denke ich habe beim ersten versuch was falsch gemacht und habe nun nochmal alle DOIF gelöscht und neu gemacht.

BKutte

Mist. Beim zweiten steht "warning condition c01: Useless use of numeric lt (<) in void context" drin...

Aber die Werte für Einspeisung sind negativ


2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-unit: kW
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-grid_power: -1.88
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-load_power: 0.43
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-grid_status: Active
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-pv_power: 2.31
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-pv_status: Active
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-storage_status: -
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-load_status: Active
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-updateRefreshRate: 3
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV active

Also muss ich die Logik doch umdrehen und ich will bei 0,6 kW Einspeisung ein und erst bei unter 0,2kW Einspeisung aus schalten...

Damian

Zitat von: BKutte am 05 März 2021, 14:07:40
Mist. Beim zweiten steht "warning condition c01: Useless use of numeric lt (<) in void context" drin...

Aber die Werte für Einspeisung sind negativ


2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-unit: kW
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-grid_power: -1.88
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-load_power: 0.43
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-grid_status: Active
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-pv_power: 2.31
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-pv_status: Active
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-storage_status: -
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-load_status: Active
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-updateRefreshRate: 3
2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV active

Also muss ich die Logik doch umdrehen und ich will bei 0,6 kW Einspeisung ein und erst bei unter 0,2kW Einspeisung aus schalten...

Du fragst aber pv_power ab:

2021-03-05 14:06:08 SolarEdgeAPI SolarEdgePV status-pv_power: 2.31
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

Das ist falsch! -0,6
Gleitkomma Zahlen mit Punkt angeben! -> -0.6
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

BKutte

@Damian: Ich hab schnell mall zwei DOIFs drauß gemacht. Der erste fragt ab ob mehr als 1 kW von der Anlage erzeugt wird (status-pv_power) und soll dann Kleinverbraucher einschalten. Der zweite Frage nach ob schon Überschuss eingespeist wird (status-grid_power) und soll dann größere Verbraucher aktivieren.

@Otto123: Super! Danke. Hab ich in "." geändert.

Jetzt bin ich auf morgen gespannt ob es funktioniert. Leider kann ich das Verhalten aktuell noch nicht checken...

Eine "Schönheitsfrage" habe ich noch. Kann ich die beiden DOIFs so modifizieren das statt "STATE cmd_1" bzw. STATE cmd_2" "STATE On" bzw. "STATE Off" angezeigt wird oder habe ich den Wert falsch verstanden?

Damian

Dafür gibt es ein Attribut: https://fhem.de/commandref_DE.html#DOIF_cmdState

Wenn du das Modul öfters nutzen willst, dann solltest du dir in Ruhe die Commandref zu Gemüte führen: https://fhem.de/commandref_DE.html#DOIF
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

pejonp

@BKutte

Fragst du deine SolarEdge Daten vom Internetprotal oder direkt per Modbus vom WR ab ?
Beim Portal must du vieleicht beachten, das dort nur alle Paar Minuten die Anzeige geändert wird. Oder liege ich da falsch ?!

Falls du den SolarEdge WR per Modbus abfragen möchtest gibt es ein Modul (https://github.com/pejonp/FHEM---SolarEdge) und Forumseintrag (https://forum.fhem.de/index.php/topic,80767.msg1114894.html#msg1114894) .

pejonp
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

BKutte

@pejonp: Ja, ich frage das Protal ab. Reicht mir im Prinzip auch da ich ja so und so erst nachdem 15 Minuten die entsprechende Schwelle unter bzw. überschritten wurde schalten will. Also ist die Verzögerung ok.

Danke @Damian. Ich habe mal versucht per
attr di_PVeinspeisung06up state on,off
den "state" zu ändern aber keinen Effekt gesehen. Eigentlich will ich ja nur das in der Übersicht (siehe Anhang) "On" oder "Off" für das DOIF angezeigt wird. Muss aber nicht sein. Wäre nur ein "Nice to have"...

Euch schon mal vielen Dank! Scheinbar funktionierts gut :-) Muss noch ein bischen beobachten ob die Logiken sauber greifen aber nun bin ich schon viel weiter auch wenn ich zugeben muss, dass der DOIF echt komplex ist und ich mich da noch einige Zeit reinfuchsen muss...