PV überschuss -> E Patrone

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

mad-mike
Beiträge: 491
Registriert: 6. Jan 2021 18:05
Answers: 3

Re: PV überschuss -> E Patrone

Beitrag 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 ;)
Gruss mad-mike

openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB) ;)

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: PV überschuss -> E Patrone

Beitrag 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...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mad-mike
Beiträge: 491
Registriert: 6. Jan 2021 18:05
Answers: 3

Re: PV überschuss -> E Patrone

Beitrag von mad-mike »

Danke, werde es mal so testen...

Im LogInfo teil ist ein Rechtschreibfehler. Relais1 . a -> e

Gruss ;)
Gruss mad-mike

openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB) ;)

mad-mike
Beiträge: 491
Registriert: 6. Jan 2021 18:05
Answers: 3

Re: PV überschuss -> E Patrone

Beitrag 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...
Gruss mad-mike

openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB) ;)

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: PV überschuss -> E Patrone

Beitrag von udo1toni »

mad-mike hat geschrieben: 1. Apr 2023 23:52 Im LogInfo teil ist ein Rechtschreibfehler. Relais1 . a -> e
Jetzt nicht mehr... :P
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
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mad-mike
Beiträge: 491
Registriert: 6. Jan 2021 18:05
Answers: 3

Re: PV überschuss -> E Patrone

Beitrag 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
Gruss mad-mike

openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB) ;)

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: PV überschuss -> E Patrone

Beitrag 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)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mad-mike
Beiträge: 491
Registriert: 6. Jan 2021 18:05
Answers: 3

Re: PV überschuss -> E Patrone

Beitrag 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
Gruss mad-mike

openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB) ;)

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: PV überschuss -> E Patrone

Beitrag 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 :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mad-mike
Beiträge: 491
Registriert: 6. Jan 2021 18:05
Answers: 3

Re: PV überschuss -> E Patrone

Beitrag 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
Gruss mad-mike

openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB) ;)

Antworten