Seite 2 von 3
Re: PV überschuss -> E Patrone
Verfasst: 1. Apr 2023 21:24
von mad-mike
Aktuell so:
Code: Alles auswählen
rule "ePatrone 3"
when
Item FRITZDECT2101_Leistung changed
then
var Relais1 = OFF
var Relais2 = OFF
var Relais3 = OFF
var Number nDiff = ((FRITZDECT2101_Leistung.state as Number).floatValue *15)
var Integer iStufe = (nDiff / 15).intValue
if((ePatrone.state != ON)){
iStufe = 0
}
if(iStufe < 0)
iStufe = 0
if(iStufe > 300)
iStufe = 301
if(iStufe > 100) {
iStufe -= 100
Relais1 = ON
}
if(iStufe > 100) {
iStufe -= 100
Relais2 = ON
}
if(iStufe > 100) {
iStufe -= 100
Relais3 = ON
}
Ladeleistung.sendCommand(iStufe)
Module_5_Heizpatrone_Ausgang_1.sendCommand(iStufe)
Stufe1.sendCommand(Relais1)
Stufe2.sendCommand(Relais2)
Stufe3.sendCommand(Relais3)
Thread::sleep(500)
pvakt.postUpdate(nDiff)
logInfo("ePatrone","Überschuss = {} Watt, Stufe1 = {} / Stufe2 = {} / Stufe3 = {}",nDiff,Stufe1.state,Stufe2.state,Stufe3.state)
end
Gruss

Re: PV überschuss -> E Patrone
Verfasst: 1. Apr 2023 21:47
von udo1toni
Ah. Ich sehe Dein Problem.
Weil Du im letzten Vergleich auch wieder auf > 100 testest, musst Du vorne den Maximalwert auf 301 begrenzen. Korrekt wäre hingegen, den letzten Vergleich auf == 100 zu ändern, dann kannst Du vorne auf 300 begrenzen.
Die Rule sendet ständig Befehle, obwohl das evtl. teilweise gar nicht notwendig ist. Also besser so:
Code: Alles auswählen
rule "ePatrone 3"
when
Item FRITZDECT2101_Leistung changed
then
var Relais1 = OFF
var Relais2 = OFF
var Relais3 = OFF
var Number nDiff = ((FRITZDECT2101_Leistung.state as Number).floatValue * 15)
var Integer iStufe = (nDiff / 15).intValue
if(ePatrone.state != ON){
iStufe = 0
}
if(iStufe < 0)
iStufe = 0
if(iStufe > 300)
iStufe = 300
if(iStufe > 100) {
iStufe -= 100
Relais1 = ON
}
if(iStufe > 100) {
iStufe -= 100
Relais2 = ON
}
if(iStufe == 100) {
iStufe -= 100
Relais3 = ON
}
if(Ladeleistung.state.toString != iStufe.toString)
Ladeleistung.sendCommand(iStufe)
if(Module_5_Heizpatrone_Ausgang_1.state.toString != iStufe.toString)
Module_5_Heizpatrone_Ausgang_1.sendCommand(iStufe)
if(Stufe1.state != Relais1)
Stufe1.sendCommand(Relais1)
if(Stufe2.state != Relais2)
Stufe2.sendCommand(Relais2)
if(Stufe3.state != Relais3)
Stufe3.sendCommand(Relais3)
pvakt.postUpdate(nDiff)
logInfo("ePatrone","Überschuss = {} Watt, Stufe1 = {} / Stufe2 = {} / Stufe3 = {}",nDiff,Relais1,Relais2,Relais3)
end
Für die Items Ladeleistung, Module_5_Heizpatrone_Ausgang_1 sowie Stufe1, Stufe2 und Stufe3 wird der aktuelle Status mit dem Soll verglichen. Nur bei Abweichung wird ein Befehl gesendet.
Wenn Du auf das Auslesen der drei Status verzichtest und stattdessen die Sollwerte loggst, kannst Du auf das Thread::sleep() verzichten.
Ich weiß, Du möchtest den Status nach dem Schaltvorgang haben, aber der wird Dir auch nach den 500 Millisekunden nicht garantiert. Du müsstest viel Aufwand betreiben, um sicherzustellen, den "echten" Status zu bekommen (mindestens autoupdate="false" für die Items plus Überwachung des Zeitstempels vom Update - mit Abgleich der aktuellen Zeit usw., und im Grunde müsstest Du statt der Schaltstellung die Stromaufnahme der drei Stromkreise überwachen und daraus den aktuellen Status ableiten.

Und auch da kann was schief gehen...
Re: PV überschuss -> E Patrone
Verfasst: 1. Apr 2023 23:52
von mad-mike
Danke, werde es mal so testen...
Im LogInfo teil ist ein Rechtschreibfehler. Relais1 . a -> e
Gruss

Re: PV überschuss -> E Patrone
Verfasst: 2. Apr 2023 01:07
von mad-mike
mad-mike hat geschrieben: ↑1. Apr 2023 11:50
Ich habe mir anhand dieser rule aber gedacht, ich könnte auch meine Drehzahl Steuerung der Pumpe realisieren.
Pumpe ist eine 0-10 Volt pumpe, und der Ausgang steht mir am LCN Modul zu Verfügung.
Wenn on Brauch die Pumpe 2 Volt, der Regel Bereich ist dann von 2 bis 10 Volt.
Ich dachte mir, das man also eine rule baut, die anhand von einem Temperatur Sensor ab 60 Grad die Drehzahl nach oben stellt.
Kann man doch bestimmt so abwandeln?
Ich versuche mich Mal dran.
Code: Alles auswählen
rule "ePatrone 2"
when
Item pvsim changed
then
var Number pDiff = ((pvsim.state as Number).floatValue)
var Integer pStufe = (pDiff).intValue
if(pStufe < 58)
pStufe = 10
if(pStufe > 68)
pStufe = 100
if(Module_5_Heizpatrone_Ausgang_3.state.toString != pStufe.toString)
Module_5_Heizpatrone_Ausgang_3.sendCommand(pStufe)
logInfo("ePatrone","Pumpe = {} %",pStufe)
end
Ich habe es mal versucht, ich dachte, die Rule mach ein 3satz von.
Also unterhalb von 58 Ist wert pStufe: 10, das Passt.
Oberhalb von 68 ist Wert pStufe 100 das passt auch.
nun dachte ich, pStufe wird im Bereich von 58 <-> 68 dann von 10 - 100 hoch gerechnet. Stattdessen wird der wert, Welches das Item pvsim enthält gesetzt...
Re: PV überschuss -> E Patrone
Verfasst: 2. Apr 2023 03:02
von udo1toni
mad-mike hat geschrieben: ↑1. Apr 2023 23:52
Im LogInfo teil ist ein Rechtschreibfehler. Relais1 . a -> e
Jetzt nicht mehr...
mad-mike hat geschrieben: ↑2. Apr 2023 01:07
Also unterhalb von 58 Ist wert pStufe: 10, das Passt.
Oberhalb von 68 ist Wert pStufe 100 das passt auch.
nun dachte ich, pStufe wird im Bereich von 58 <-> 68 dann von 10 - 100 hoch gerechnet. Stattdessen wird der wert, Welches das Item pvsim enthält gesetzt...
Ja, so steht das ja auch im Code. Eine Rule macht exakt das, was da steht, nicht mehr und nicht weniger. Es gibt drei Möglichkeiten, Wert unter der Untergrenze, Wert über der Obergrenze, Wert zwischen beiden Grenzwerten. Du hast Möglichkeit 1 und 2 abgedeckt, Möglichkeit 3 aber nicht.
Code: Alles auswählen
rule "ePatrone 2"
when
Item pvsim changed
then
var Number nTemp = (pvsim.state as Number).floatValue - 58 // Untergrenze auf 0 verschieben
var Integer pStufe = 10
if(nTemp < 0) // unterhalb der Untergrenze
pStufe = 10 // Minimalwert setzen
else if(nTemp > 10) // Obergrenze 10° über Untergrenze, falls überschritten
pStufe = 100 // Maximalwert setzen
else // Wert zwischen 0 und 10
pStufe = 10 + (nTemp * 9).intValue // Wertebereich auf 10 - 100 umrechnen
if(Module_5_Heizpatrone_Ausgang_3.state.toString != pStufe.toString)
Module_5_Heizpatrone_Ausgang_3.sendCommand(pStufe)
logInfo("ePatrone","Pumpe = {} %",pStufe)
end
Re: PV überschuss -> E Patrone
Verfasst: 27. Jul 2023 17:18
von mad-mike
Moin,
Also vom testen her funktioniert es wie gewollt...
jedoch zeigt sich das die PV anlage doch etwas andere werte vom dach bringt, wie eventuell vermutet.
Kann man die RULE noch mal ergänzen?
Also das mit den Schaltrelais der einzelnen Stufen gegen 1nen Dimmer nummer 2?
Code: Alles auswählen
then
var Relais1 = OFF
var Relais2 = OFF
var Relais3 = OFF
var Number nDiff = (Netz_Einspeisung.state as Number).floatValue
var Integer iStufe = (nDiff / 15).intValue
if(ePatrone.state != ON){
iStufe = 0
}
if(iStufe < 0)
iStufe = 0
if(iStufe > 300)
iStufe = 300
if(iStufe > 100) {
iStufe -= 100
Relais1 = ON
}
if(iStufe > 100) {
iStufe -= 100
Relais2 = ON
}
if(iStufe == 100) {
iStufe -= 100
Relais3 = ON
}
if(Ladeleistung.state.toString != iStufe.toString)
Ladeleistung.sendCommand(iStufe)
if(Module_5_Heizpatrone_Ausgang_1.state.toString != iStufe.toString)
Module_5_Heizpatrone_Ausgang_1.sendCommand(iStufe)
if(Stufe1.state != Relais1)
Stufe1.sendCommand(Relais1)
if(Stufe2.state != Relais2)
Stufe2.sendCommand(Relais2)
if(Stufe3.state != Relais3)
Stufe3.sendCommand(Relais3)
pvakt.postUpdate(nDiff)
logInfo("ePatrone","Watt = {}, Modular = {} %, Stufe1 = {} / Stufe2 = {} / Stufe3 = {}",nDiff,iStufe,Relais1,Relais2,Relais3)
end
also Leistung soll nur noch bis 3000 Watt sein, und anstatt stufen möchte ich "" Module_5_Heizpatrone_Ausgang_2.sendCommand(iStufe)""
noch verwenden...
Desweiteren kann man eventuell noch ein : ramp=0.5 bei dem sendCommand mit geben...
Relais 1-3 können weg.
Danke und Gruss
Re: PV überschuss -> E Patrone
Verfasst: 27. Jul 2023 17:46
von udo1toni
Also zwei Dimmer Statt einem Dimmer? Wie sollen sich die Dimmer verhalten, erst der eine von 0 bis 100, dann (wenn der erste schon 100 % hat) den 2. Dimmer von 0 bis 100, oder eher beide Dimmer auf die jeweils gleiche Stufe bringen (beginnend mit Dimmer 1 auf 1, dann Dimmer 2 auch auf 1, dann Dimmer 1 auf 2, Dimmer 2 auf 2 usw. bis eben beide Dimmer auf 100 sind)
Und was meinst Du mit ramp=0.5? Ein Dimmer Item kennt keinen Ramp Parameter, das kann höchstens im Channel (fix) gesetzt werden (wenn das Binding das kann), ansonsten nur im Dimmer selbst (bei meinne knx Dimmern kann ich die Ramp-Zeit auch setzen, aber eben nur mittels ETS, der knx Konfigurationssoftware)
Re: PV überschuss -> E Patrone
Verfasst: 27. Jul 2023 20:09
von mad-mike
Also zwei Dimmer Statt einem Dimmer?
Ja,
Wie sollen sich die Dimmer verhalten
Gute frage, Wenn die beiden Dimmer symetrisch die leistung hochfahren, müsste doch besser sein?? also denke ich deine Variante:
oder eher beide Dimmer auf die jeweils gleiche Stufe bringen (beginnend mit Dimmer 1 auf 1, dann Dimmer 2 auch auf 1, dann Dimmer 1 auf 2, Dimmer 2 auf 2 usw. bis eben beide Dimmer auf 100 sind)
Müsste doch besser sein?? Also ich bevorzuge diese version.
Und was meinst Du mit ramp=0.5? Ein Dimmer Item kennt keinen Ramp Parameter, das kann höchstens im Channel (fix) gesetzt werden (wenn das Binding das kann), ansonsten nur im Dimmer selbst (bei meinne knx Dimmern kann ich die Ramp-Zeit auch setzen, aber eben nur mittels ETS, der knx Konfigurationssoftware)
Du hast recht. das müsste im Channel eingetragen werden. (Aber geht wohl nur über die Text Files. nicht über die UI.
Oder halt über die LCN PRO software.. Die habe ich hier, das ist kein Problem.
Danke und Gruss
Re: PV überschuss -> E Patrone
Verfasst: 27. Jul 2023 21:19
von udo1toni
Ohne es jetzt auf Herz und Nieren geprüft zu haben, gehe ich hiervon aus:
Code: Alles auswählen
then
var Number nDiff = (Netz_Einspeisung.state as Number).floatValue
var Integer iStufe = (nDiff / 15).intValue
if(ePatrone.state != ON){
iStufe = 0
}
if(iStufe < 0)
iStufe = 0
if(iStufe > 200)
iStufe = 200
var iDim1 = (iStufe/2).intValue
var iDim2 = (iStufe/2).intValue
if((iStufe/2).intValue != iStufe/2)
iDim1 = iDim1 + 1
if(Ladeleistung.state.toString != iStufe.toString)
Ladeleistung.sendCommand(iStufe)
if(Module_5_Heizpatrone_Ausgang_1.state.toString != iDim1.toString)
Module_5_Heizpatrone_Ausgang_1.sendCommand(iDim1)
if(Module_5_Heizpatrone_Ausgang_2.state.toString != iDim2.toString)
Module_5_Heizpatrone_Ausgang_2.sendCommand(iDim2)
pvakt.postUpdate(nDiff)
logInfo("ePatrone","Watt = {}, Dim1 = {} %, Dim2 = {} %",nDiff,iDim1,iDim2)
end
Wir haben insgesamt 201 Stufen, wobei die erste Stufe das "Aus" ist. Die Leistung soll gleichmäßig verteilt werden, also bekommt jeder der beiden Kanäle auch die Hälfte der Leistung. Ist die gewählte Stufe ungerade ((w/2).intValue != w/2), so bekommt der Dimmer1 eine Stufe mehr. Die Relais entfallen, dafür kommt der zweite Dimmer dazu, alles andere müsste so bleiben können wie gehabt.
Wie immer ungetestet

Re: PV überschuss -> E Patrone
Verfasst: 28. Jul 2023 16:42
von mad-mike
Moin,
wie soll ich sagen, läuft....
Danke dafür.
Der LCN DImmer ist abgestuft in 50 Schritten. die Rule sendet in 100 Schritten.
LCN korrigiert diesen wert automatisch um ein Punkt nach unten. Ist auch gut so, weil um 1 Punkt nach oben, würde ja zuviel Leistung bedeuten.
Ist dieses verhalten vom Nachteil? Oder lässt sich hier noch was optimieren?
Code: Alles auswählen
2023-07-28 16:38:37.569 [INFO ] [openhab.event.ItemCommandEvent ] - Item 'Module_5_Heizpatrone_Ausgang_2' received command 73
2023-07-28 16:38:37.570 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'Module_5_Heizpatrone_Ausgang_1' predicted to become 73
2023-07-28 16:38:37.572 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'Module_5_Heizpatrone_Ausgang_2' predicted to become 73
2023-07-28 16:38:37.577 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'Module_5_Heizpatrone_Ausgang_1' updated to 73
2023-07-28 16:38:37.578 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Module_5_Heizpatrone_Ausgang_1' changed from 74 to 73
2023-07-28 16:38:37.578 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'Module_5_Heizpatrone_Ausgang_2' updated to 73
2023-07-28 16:38:37.579 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Module_5_Heizpatrone_Ausgang_2' changed from 74 to 73
2023-07-28 16:38:37.647 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'Module_5_Heizpatrone_Ausgang_1' updated to 72
2023-07-28 16:38:37.648 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Module_5_Heizpatrone_Ausgang_1' changed from 73 to 72
2023-07-28 16:38:37.739 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'Module_5_Heizpatrone_Ausgang_2' updated to 72
2023-07-28 16:38:37.740 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Module_5_Heizpatrone_Ausgang_2' changed from 73 to 72