Hallo zusammen,
brauche einen Stupser in die richtige Richtung.
Folgendes Szenario: habe einen dummy welcher die Werte von aktuellem Stromverbrauch, aktueller PV Leistung anzeigt und die Differenz daraus abbildet.
Internals:
FUUID 642aa501-f33f-976c-d691-15d0728af3088092
NAME Energie_Daten
NR 898
STATE Verbrauch: 373.11 Watt<br>
Solar: 193.55 Watt<br>
Differenz: 179.56 Watt<br>
Prozent: 19.35 %<br>
TYPE dummy
eventCount 19050
.attraggr:
.attreocr:
.*
.attreour:
.*
.attrminint:
.userReadings:
HASH(0x559113c13a00)
HASH(0x55911576ea80)
HASH(0x5591151bc060)
HASH(0x559114f8f740)
READINGS:
2023-07-13 18:10:45 diff 179.56
2023-07-13 18:10:45 prozent 19.35
2023-07-13 18:10:45 solar 193.55
2023-07-13 18:10:45 state verbrauch
2023-07-13 18:10:45 verbrauch 373.11
hmccu:
Attributes:
event-on-change-reading .*
event-on-update-reading .*
room Solar
stateFormat Verbrauch: verbrauch Watt<br>
Solar: solar Watt<br>
Differenz: diff Watt<br>
Prozent: prozent %<br>
userReadings diff {sprintf"%.2f", ReadingsNum("Energie_Daten","verbrauch",0) - ReadingsNum("Energie_Daten","solar",0)}, verbrauch {sprintf"%.2f", ReadingsNum("shelly3em_test","energie_summe",0)}, solar {sprintf"%.2f", ReadingsNum("MQTT2_growatt_224fdc","outputpower",0) + ReadingsNum("MQTT2_growatt_c0bfd8","outputpower",0)}, prozent {sprintf"%.2f", 100/1000*ReadingsNum("Energie_Daten","solar",0)}
wie im dummy zu sehen ist habe ich im moment eine Differenz von ca. 179 Watt, wie müsste ein DOIF gestrickt sein damit diese Differenz aus einem Akku zur vorhanden Solarleistung gespeist wird.
Da sich die PV Leistung und der Strombedarf in Hause ständig ändert, müsste auch die nachgeschobene Leistung aus dem Akku auch ständig nachgesteuert werden.
Kommt auf den Befekl zu Steuerung des Akkus an, aber grob (in Perl als Einzeiler machbar)
set Akkuleistung (([Verbrauch] - [Ertrag]))
wobei diff direkt im Befehl errechnet werden kann, im Perlmode sogar ohne extra Trigger, weil diese ja in der Differenzrechnung eh vorhanden sind.
PS: mein PC hat heute das Zeitliche gesegnet und am Handy habe ich keine Lust, die genaue Syntax zu suchen/tippen. Sorry.
Hallo,
der Befehl für die Steuerung des Akkus kommt vom Wechselrichter dieser kann über einen set Befehl die Leistung zwischen 10-100% regeln
z.B. entspricht der Wert 10= 100 Watt oder der Wert 17= 170 Watt
Internals:
.eventMapCmd Aktiv Standby
CID growatt_224fdc
DEF growatt_224fdc
FUUID 64381a44-f33f-976c-8343-1836244dc38dd530
IODev mybroker_2
LASTInputDev mybroker_2
MSGCNT 53402
NAME MQTT2_growatt_224fdc
NR 901
STATE Aktuell: 100.2 Watt <br>
Heute: 3.0 kWh <br>
Gesamt: 132.7 kWh <br>
Leistung: 10 % <br>
Temperatur: 39.5 °C <br>
Status: Aktiv
TYPE MQTT2_DEVICE
eventCount 18432
mybroker_2_CONN mybroker_2_192.168.178.116_49745
mybroker_2_MSGCNT 53402
mybroker_2_TIME 2023-07-13 19:01:36
.DT:
DEVICETOPIC MQTT2_growatt_224fdc
.attraggr:
.attreocr:
outputpower
maxoutputactivepp
state
enable
status
.attrminint:
.eventMapHash:
dev:
enable 1
usr:
Aktiv 1
Standby 0
.userReadings:
HASH(0x5591138a1fb0)
READINGS:
2023-07-11 10:27:20 IODev mybroker_2
2023-07-13 19:01:22 clientid growatt-224fdc
2023-07-13 18:43:49 connection online
2023-07-13 18:43:55 controlfirmware ZAAA
2023-07-13 19:01:36 deratingmode 0
2023-07-13 18:43:55 enable 1
2023-07-13 19:01:36 energytoday 3.0
2023-07-13 19:01:36 energytotal 132.7
2023-07-13 09:04:44 error Response timed out
2023-07-13 19:01:36 faultbitcode 0
2023-07-13 19:01:36 faultcode 0
2023-07-13 18:43:55 firmware GH1.0
2023-07-13 18:43:55 gridfreqhighconnlimit 50.1
2023-07-13 18:43:55 gridfreqhighlimit 51.5
2023-07-13 18:43:55 gridfreqlowconnlimit 49.9
2023-07-13 18:43:55 gridfreqlowlimit 47.5
2023-07-13 19:01:36 gridfrequency 50.06
2023-07-13 19:01:36 gridvoltage 236.6
2023-07-13 18:43:55 gridvolthighconnlimit 253.0
2023-07-13 18:43:55 gridvolthighlimit 264.5
2023-07-13 18:43:55 gridvoltlowconnlimit 195.5
2023-07-13 18:43:55 gridvoltlowlimit 184.0
2023-07-13 19:01:22 ip 192.168.178.116
2023-07-13 19:01:36 ipf 20000
2023-07-13 18:43:55 maxoutputactivepp 10
2023-07-13 18:43:55 maxoutputreactivepp 0
2023-07-13 18:43:55 maxpower 1000.0
2023-07-13 18:43:55 modulPower 000A
2023-07-13 19:01:36 opfullpower 0.0
2023-07-13 19:01:36 outputpower 100.2
2023-07-13 19:01:36 pv1current 2.1
2023-07-13 19:01:36 pv1energytoday 3.0
2023-07-13 19:01:36 pv1energytotal 135.0
2023-07-13 19:01:36 pv1power 102.1
2023-07-13 19:01:36 pv1voltage 54.8
2023-07-13 19:01:36 pv2current 0.0
2023-07-13 19:01:36 pv2energytoday 0.0
2023-07-13 19:01:36 pv2energytotal 0.0
2023-07-13 19:01:36 pv2power 0.0
2023-07-13 19:01:36 pv2voltage 0.0
2023-07-13 19:01:36 realoppercent 0
2023-07-13 19:01:22 rssi -57
2023-07-13 18:43:55 safetyfuncen 281
2023-07-13 18:43:55 serial
2023-07-13 19:01:36 solarpower 102.1
2023-07-13 19:01:22 ssid FRITZ!Box 6490 Cable
2023-07-13 18:43:55 startvoltage 50.0
2023-07-13 18:33:23 state 10
2023-07-13 19:01:36 status 1
2023-07-13 19:01:36 tempboost 0.0
2023-07-13 19:01:36 tempinverter 39.5
2023-07-13 19:01:36 tempipm 39.5
2023-07-13 19:01:36 totalworktime 1399664.0
2023-07-13 19:01:22 uptime 17
2023-07-13 19:01:22 version v1.2.0p2s
2023-07-13 18:43:55 voltnormal 100.0
2023-07-13 19:01:36 warningbitcode 0
2023-07-13 19:01:36 zustand Aktiv
Attributes:
IODev mybroker_2
alias Growatt 1
event-on-change-reading outputpower,maxoutputactivepp,state,enable,status
eventMap { dev=>{ 'enable'=>'0', 'enable'=>'1' }, usr=>{ 'Standby' => '0', 'Aktiv' => '1'} }
icon measure_photovoltaic_inst
readingList growatt_224fdc:growatt/data:.* { json2nameValue($EVENT) }
growatt_224fdc:growatt/error:.* error
growatt_224fdc:growatt/status:.* { json2nameValue($EVENT) }
growatt_224fdc:growatt/settings:.* { json2nameValue($EVENT) }
growatt_224fdc:growatt/connection:.* connection
room Solar
setList ON:noArg growatt/write/setEnable ON
OFF:noArg growatt/write/setEnable OFF
0:noArg growatt/write/setMaxOutput 0
1:noArg growatt/write/setMaxOutput 1
2:noArg growatt/write/setMaxOutput 2
3:noArg growatt/write/setMaxOutput 3
4:noArg growatt/write/setMaxOutput 4
5:noArg growatt/write/setMaxOutput 5
6:noArg growatt/write/setMaxOutput 6
7:noArg growatt/write/setMaxOutput 7
8:noArg growatt/write/setMaxOutput 8
9:noArg growatt/write/setMaxOutput 9
10:noArg growatt/write/setMaxOutput 10
11:noArg growatt/write/setMaxOutput 11
12:noArg growatt/write/setMaxOutput 12
13:noArg growatt/write/setMaxOutput 13
14:noArg growatt/write/setMaxOutput 14
15:noArg growatt/write/setMaxOutput 15
16:noArg growatt/write/setMaxOutput 16
17:noArg growatt/write/setMaxOutput 17
18:noArg growatt/write/setMaxOutput 18
19:noArg growatt/write/setMaxOutput 19
20:noArg growatt/write/setMaxOutput 20
21:noArg growatt/write/setMaxOutput 21
22:noArg growatt/write/setMaxOutput 22
23:noArg growatt/write/setMaxOutput 23
24:noArg growatt/write/setMaxOutput 24
25:noArg growatt/write/setMaxOutput 25
26:noArg growatt/write/setMaxOutput 26
27:noArg growatt/write/setMaxOutput 27
28:noArg growatt/write/setMaxOutput 28
29:noArg growatt/write/setMaxOutput 29
30:noArg growatt/write/setMaxOutput 30
31:noArg growatt/write/setMaxOutput 31
32:noArg growatt/write/setMaxOutput 32
33:noArg growatt/write/setMaxOutput 33
34:noArg growatt/write/setMaxOutput 34
35:noArg growatt/write/setMaxOutput 35
36:noArg growatt/write/setMaxOutput 36
37:noArg growatt/write/setMaxOutput 37
38:noArg growatt/write/setMaxOutput 38
39:noArg growatt/write/setMaxOutput 39
40:noArg growatt/write/setMaxOutput 40
41:noArg growatt/write/setMaxOutput 41
42:noArg growatt/write/setMaxOutput 42
43:noArg growatt/write/setMaxOutput 43
44:noArg growatt/write/setMaxOutput 44
45:noArg growatt/write/setMaxOutput 45
46:noArg growatt/write/setMaxOutput 46
47:noArg growatt/write/setMaxOutput 47
48:noArg growatt/write/setMaxOutput 48
49:noArg growatt/write/setMaxOutput 49
50:noArg growatt/write/setMaxOutput 50
51:noArg growatt/write/setMaxOutput 51
52:noArg growatt/write/setMaxOutput 52
53:noArg growatt/write/setMaxOutput 53
54:noArg growatt/write/setMaxOutput 54
55:noArg growatt/write/setMaxOutput 55
56:noArg growatt/write/setMaxOutput 56
57:noArg growatt/write/setMaxOutput 57
58:noArg growatt/write/setMaxOutput 58
59:noArg growatt/write/setMaxOutput 59
60:noArg growatt/write/setMaxOutput 60
61:noArg growatt/write/setMaxOutput 61
62:noArg growatt/write/setMaxOutput 62
63:noArg growatt/write/setMaxOutput 63
64:noArg growatt/write/setMaxOutput 64
65:noArg growatt/write/setMaxOutput 65
66:noArg growatt/write/setMaxOutput 66
67:noArg growatt/write/setMaxOutput 67
68:noArg growatt/write/setMaxOutput 68
69:noArg growatt/write/setMaxOutput 69
70:noArg growatt/write/setMaxOutput 70
71:noArg growatt/write/setMaxOutput 71
72:noArg growatt/write/setMaxOutput 72
73:noArg growatt/write/setMaxOutput 73
74:noArg growatt/write/setMaxOutput 74
75:noArg growatt/write/setMaxOutput 75
76:noArg growatt/write/setMaxOutput 76
77:noArg growatt/write/setMaxOutput 77
78:noArg growatt/write/setMaxOutput 78
79:noArg growatt/write/setMaxOutput 79
80:noArg growatt/write/setMaxOutput 80
81:noArg growatt/write/setMaxOutput 81
82:noArg growatt/write/setMaxOutput 82
83:noArg growatt/write/setMaxOutput 83
84:noArg growatt/write/setMaxOutput 84
85:noArg growatt/write/setMaxOutput 85
86:noArg growatt/write/setMaxOutput 86
87:noArg growatt/write/setMaxOutput 87
88:noArg growatt/write/setMaxOutput 88
89:noArg growatt/write/setMaxOutput 89
90:noArg growatt/write/setMaxOutput 90
91:noArg growatt/write/setMaxOutput 91
92:noArg growatt/write/setMaxOutput 92
93:noArg growatt/write/setMaxOutput 93
94:noArg growatt/write/setMaxOutput 94
95:noArg growatt/write/setMaxOutput 95
96:noArg growatt/write/setMaxOutput 96
97:noArg growatt/write/setMaxOutput 97
98:noArg growatt/write/setMaxOutput 98
99:noArg growatt/write/setMaxOutput 99
100:noArg growatt/write/setMaxOutput 100
stateFormat Aktuell: outputpower Watt <br>
Heute: energytoday kWh <br>
Gesamt: energytotal kWh <br>
Leistung: state % <br>
Temperatur: tempinverter °C <br>
Status: zustand
userReadings zustand {if (ReadingsVal($name,"enable",0) eq "0") {return "Standby"} elsif (ReadingsVal($name,"enable",0) eq "1") {return "Aktiv"}}
wenn ichs richtig verstanden habe müsste das DOIF in etwa so aussehen oder ?
nternals:
.AttrList disable:0,1 loglevel:0,1,2,3,4,5,6 notexist checkReadingEvent:0,1 addStateEvent:1,0 weekdays setList:textField-long readingList DOIF_Readings:textField-long event_Readings:textField-long uiState:textField-long uiTable:textField-long event-aggregator event-min-interval event-on-change-reading event-on-update-reading oldreadings stateFormat:textField-long timestamp-on-change-reading
CFGFN
DEF set MQTT2_growatt_224fdc (([Energie_Daten:verbrauch] - [Energie_Daten:solar]))
FUUID 64ad7a41-f33f-976c-ea32-73f01f7e27ff241c
MODEL Perl
NAME Akku_Regler_Diff
NOTIFYDEV global
NR 35709
NTFY_ORDER 50-Akku_Regler_Diff
STATE initialized
TYPE DOIF
eventCount 471
.attraggr:
.attrminint:
READINGS:
2023-07-13 18:53:37 mode enabled
2023-07-13 18:53:23 state initialized
Regex:
accu:
bar:
barAvg:
collect:
attr:
cmdState:
wait:
waitdel:
condition:
helper:
NOTIFYDEV global
globalinit 1
last_timer 0
sleeptimer -1
hmccu:
perlblock:
uiState:
uiTable:
Attributes:
room Solar
Ja, wobei fhem_set statt set Verwendung finden sollte. Erleichtert auch die Klammerung der Berechnung.
da passt was noch nicht ganz, habe error Meldung, müsste ja dem System noch einen Regelwert geben der zwischen 10 und 100 liegt :-\
Internals:
CFGFN
DEF ([Energie_Daten:diff] > 10) {fhem_set "MQTT2_growatt_224fdc"} ([Energie_Daten:verbrauch] - [Energie_Daten:solar])
FUUID 64ad7a41-f33f-976c-ea32-73f01f7e27ff241c
MODEL FHEM
NAME Akku_Regler_Diff
NOTIFYDEV Energie_Daten,global
NR 35709
NTFY_ORDER 50-Akku_Regler_Diff
STATE cmd_1
TYPE DOIF
eventCount 529
.attraggr:
.attrminint:
READINGS:
2023-07-13 20:09:14 Device Energie_Daten
2023-07-13 20:08:29 cmd 1.2
2023-07-13 20:08:29 cmd_event Akku_Regler_Diff
2023-07-13 20:08:29 cmd_nr 1
2023-07-13 20:08:29 cmd_seqnr 2
2023-07-13 20:09:14 e_Energie_Daten_diff 89.42
2023-07-13 20:08:29 error 274.50 - 198.60: Unknown command 274.50, try help.
2023-07-13 20:08:21 mode enabled
2023-07-13 20:08:29 state cmd_1
Regex:
accu:
bar:
barAvg:
collect:
cond:
Energie_Daten:
0:
diff ^Energie_Daten$:^diff:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Energie_Daten','diff') > 10
do:
0:
0 {fhem_set "MQTT2_growatt_224fdc"}
1 [Energie_Daten:verbrauch] - [Energie_Daten:solar]
1:
helper:
NOTIFYDEV Energie_Daten,global
event verbrauch,diff: 89.42,verbrauch: 273.84,solar: 187.80,prozent: 18.78
globalinit 1
last_timer 0
sleeptimer -1
timerdev Energie_Daten
timerevent verbrauch,diff: 89.42,verbrauch: 273.84,solar: 187.80,prozent: 18.78
triggerDev Energie_Daten
timerevents:
verbrauch
diff: 89.42
verbrauch: 273.84
solar: 187.80
prozent: 18.78
timereventsState:
state: verbrauch
diff: 89.42
verbrauch: 273.84
solar: 187.80
prozent: 18.78
triggerEvents:
verbrauch
diff: 89.42
verbrauch: 273.84
solar: 187.80
prozent: 18.78
triggerEventsState:
state: verbrauch
diff: 89.42
verbrauch: 273.84
solar: 187.80
prozent: 18.78
hmccu:
internals:
readings:
all Energie_Daten:diff
trigger:
uiState:
uiTable:
Attributes:
room Solar
([Energie_Daten:diff] > 10) (set MQTT2_growatt_224fdc {([Energie_Daten:verbrauch] - [Energie_Daten:solar])})
und do -Attribut auf always setzen, damit es bei jedem Trigger ausgeführt wird.
Was wenn < 10? Dann wird der letzte Stand beibehalten. Ist das sinnvoll/gewollt?
Und wenn man auf Diff triggert, kann man auch Diff zuweisen.
Zitat von: Per am 14 Juli 2023, 10:22:32Was wenn < 10? Dann wird der letzte Stand beibehalten. Ist das sinnvoll/gewollt?
Und wenn man auf Diff triggert, kann man auch Diff zuweisen.
da muss ich mir auch noch was überlegen, aber momentan klappt es noch nicht, der WR will zahlen ohne Komma habe schon mit round probiert aber passt noch nicht
Internals:
CFGFN
DEF ([Energie_Daten > 10) (set MQTT2_growatt_224fdc {([Energie_Daten - [Energie_Daten
FUUID 64ad7a41-f33f-976c-ea32-73f01f7e27ff241c
MODEL FHEM
NAME Akku_Regler_Diff
NOTIFYDEV Energie_Daten,global
NR 35709
NTFY_ORDER 50-Akku_Regler_Diff
STATE cmd_1
TYPE DOIF
eventCount 1199
.attraggr:
.attrminint:
READINGS:
2023-07-14 10 Device Energie_Daten
2023-07-14 10 cmd 1
2023-07-14 10 cmd_event Energie_Daten
2023-07-14 10 cmd_nr 1
2023-07-14 10 e_Energie_Daten_diff 134.09
2023-07-14 10 error set MQTT2_growatt_224fdc 12.698: Unknown argument 12.698, choose one of ON OFF 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 on-till off-till-overnight on-till-overnight toggle off-for-timer blink on-for-timer intervals off-till attrTemplate
2023-07-14 10 mode enabled
2023-07-14 10 state cmd_1
Regex:
accu:
bar:
barAvg:
collect:
cond:
Energie_Daten:
0:
diff ^Energie_Daten$
attr:
cmdState:
wait:
waitdel:
condition:
0 href='/fhem?detail=Energie_Daten'>Energie_Daten','diff') > 10
do:
0:
0 set MQTT2_growatt_224fdc {([Energie_Daten - [Energie_Daten
1:
helper:
NOTIFYDEV Energie_Daten,global
event verbrauch,diff: 134.09,verbrauch: 355.88,solar: 228.90,prozent: 22.89
globalinit 1
last_timer 0
sleeptimer -1
timerdev Energie_Daten
timerevent verbrauch,diff: 134.09,verbrauch: 355.88,solar: 228.90,prozent: 22.89
triggerDev Energie_Daten
DOIF_eventa:
cmd_nr: 1
cmd: 1
cmd_event: Energie_Daten
error: set MQTT2_growatt_224fdc 12.698: Unknown argument 12.698, choose one of ON OFF 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 on-till off-till-overnight on-till-overnight toggle off-for-timer blink on-for-timer intervals off-till attrTemplate
cmd_1
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: Energie_Daten
error: set MQTT2_growatt_224fdc 12.698: Unknown argument 12.698, choose one of ON OFF 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 on-till off-till-overnight on-till-overnight toggle off-for-timer blink on-for-timer intervals off-till attrTemplate
state: cmd_1
timerevents:
verbrauch
diff: 134.09
verbrauch: 355.88
solar: 228.90
prozent: 22.89
timereventsState:
state: verbrauch
diff: 134.09
verbrauch: 355.88
solar: 228.90
prozent: 22.89
triggerEvents:
verbrauch
diff: 134.09
verbrauch: 355.88
solar: 228.90
prozent: 22.89
triggerEventsState:
state: verbrauch
diff: 134.09
verbrauch: 355.88
solar: 228.90
prozent: 22.89
hmccu:
internals:
readings:
all Energie_Daten
trigger:
uiState:
uiTable:
Attributes:
do always
room Solar
auch mit ....d0 wird eine kommazahl erzeugt :'(
([Energie_Daten:diff] > 10) (set MQTT2_growatt_224fdc {([Energie_Daten:verbrauch:d0] - [Energie_Daten:solar:d0])/10})