Seite 1 von 1

PV Anlage und Klimaanlagen

Verfasst: 19. Aug 2020 09:09
von nojo
Einen schönen Guten Morgen,

möchte mich zuerst vorstellen weil es mein erster Eintrag ist. Mein Name ist Norbert und ich bin 46 Jahre alt.
habe dieses Jahr eine PV und Klimaanlage Zuhause montiert und wollte diese beiden Anlagen mittels Hardware und der Software von Fronius miteinander verbinden. Leider kam es nach der Installation ganz anders, d.h. die Daikin Schnittstelle die meine Hardware benötigt hätte, wurde schon vom WLAN der Daikin Klimaanlage verwendet, deshalb habe ich eine andere Lösung suchen müssen um beide Komponenten miteinander zu verbinden.
nach kurzer Recherche bin ich auf OpenHab gestoßen und hab hier schon viel gelesen und auch umsetzen können (Danke). Leider bin ich nun zu einem Punkt gekommen wo ich Eure Hilfe benötige.

Ich hab eine Regel geschrieben die mir bei Über- und Unterschreiten eines Sollwertes per Telegram informiert. Die Regel funktioniert auch.
hier die Regel

Code: Alles auswählen

rule "Produktion"
when
    Time cron "0 30 21 ? * * *"
then
    sendTelegram("bot1", "%.6s kW wurden Heute produziert", fronius_powerinverter_a7b6bf8b_inverterdatachanneldayenergy.state.toString)
    sendTelegram("bot1", "%.6s MW wurden dieses Jahr produziert", fronius_powerinverter_a7b6bf8b_inverterdatachannelyear.state.toString)
    
end

rule "Strom_wird_zugekauft_verkauft"
when
    Item fronius_powerinverter_a7b6bf8b_inverterdatachannelpac changed
then
    if(!(previousState instanceof Number)) {
        logWarn("stromkauf","previousState keine gültige Zahl! ({})",previousState)
        return;
    }
    if(!(newState instanceof Number)) {
        logWarn("stromkauf","newState keine gültige Zahl! ({})",newState)
        return;
    }
    if(previousState >= 1000 && newState < 1000 && daikin_ac_unit_192_168_178_59_power.state == ON)
        sendTelegram("bot1", "%.6s W wird produziert, du kannst die Klima ausschalten", fronius_powerinverter_a7b6bf8b_inverterdatachannelpac.state.toString)
    else if(previousState <= 2000 && newState > 2000 && daikin_ac_unit_192_168_178_59_power.state == OFF)
        sendTelegram("bot1", "%.6s W wird produziert, Klima einschalten", fronius_powerinverter_a7b6bf8b_inverterdatachannelpac.state.toString)
end

jetzt wollte ich diese Regel mit einem Timer erweitern, d.h. sollte der Sollwert Unter- oder Überschritten werden, dann soll nach einer Zeit nochmals geprüft werden ob dieser Zustand noch immer Wahr oder Falsch ist.

Code: Alles auswählen

var Timer fronius_power_low = null

rule "Produktion"
when
    Time cron "0 30 21 ? * * *"
then
    sendTelegram("bot1", "%.6s kW wurden Heute produziert", fronius_powerinverter_a7b6bf8b_inverterdatachanneldayenergy.state.toString)
    sendTelegram("bot1", "%.6s MW wurden dieses Jahr produziert", fronius_powerinverter_a7b6bf8b_inverterdatachannelyear.state.toString)
    
end

rule "Strom_wird_zugekauft_verkauft"
when
    Item fronius_powerinverter_a7b6bf8b_inverterdatachannelpac changed
then
    if(!(previousState instanceof Number)) {
        logWarn("stromkauf","previousState keine gültige Zahl! ({})",previousState)
        return;
    }
    if(!(newState instanceof Number)) {
        logWarn("stromkauf","newState keine gültige Zahl! ({})",newState)
        return;
    }
    if(previousState >= 2000 && newState < 2000 && daikin_ac_unit_192_168_178_59_power.state == ON)
        sendTelegram("bot1", "%.6s W wird produziert, warte noch", fronius_powerinverter_a7b6bf8b_inverterdatachannelpac.state.toString)
        fronius_power_low?.cancel
        fronius_power_low = createTimer(now.plusMinutes(5), [|
            if(newState < 2000 && daikin_ac_unit_192_168_178_59_power.state == ON){
	            sendTelegram("bot1", "PV Leistung seit 5 Minuten zu gering")
                    fronius_power_low = null}
            ])
    else if(previousState <= 2000 && newState > 2000 && daikin_ac_unit_192_168_178_59_power.state == OFF){
        sendTelegram("bot1", "%.6s W wird produziert, Klima einschalten", fronius_powerinverter_a7b6bf8b_inverterdatachannelpac.state.toString)}

end



sobald ich nun den Timer in dieser Regel verwende, funktioniert diese Regel nicht mehr und ich komme auch nicht drauf wo mein Fehler ist.
was hab ich Falsch gemacht oder wie kann ich die nochmalige Abfrage machen?

vielen Dank,
Norbert

Re: PV Anlage und Klimaanlagen

Verfasst: 19. Aug 2020 13:42
von udo1toni
Du nutzt im Timer-Code die implizite Variable newState. Die steht aber im Kontext nicht zur Verfügung, Du musst stattdessen fronius_powerinverter_a7b6bf8b_inverterdatachannelpac.state verwenden.
Außerdem hast Du "plötzlich" mehrere Befehle, die zum if-Statement gehören. Deshalb muss der Block in geschweifte Klammern gesetzt werden.

Code: Alles auswählen

var Timer fronius_power_low = null

rule "Produktion"
when
    Time cron "0 30 21 ? * * *"
then
    sendTelegram("bot1", "%.6s kW wurden Heute produziert", fronius_powerinverter_a7b6bf8b_inverterdatachanneldayenergy.state.toString)
    sendTelegram("bot1", "%.6s MW wurden dieses Jahr produziert", fronius_powerinverter_a7b6bf8b_inverterdatachannelyear.state.toString)
end

rule "Strom_wird_zugekauft_verkauft"
when
    Item fronius_powerinverter_a7b6bf8b_inverterdatachannelpac changed
then
    if(!(previousState instanceof Number)) {
        logWarn("stromkauf","previousState keine gültige Zahl! ({})",previousState)
        return;
    }
    if(!(newState instanceof Number)) {
        logWarn("stromkauf","newState keine gültige Zahl! ({})",newState)
        return;
    }
    if(previousState >= 2000 && newState < 2000 && daikin_ac_unit_192_168_178_59_power.state == ON) {
        sendTelegram("bot1", "%.6s W wird produziert, warte noch", fronius_powerinverter_a7b6bf8b_inverterdatachannelpac.state.toString)
        fronius_power_low?.cancel
        fronius_power_low = createTimer(now.plusMinutes(5), [|
            if(fronius_powerinverter_a7b6bf8b_inverterdatachannelpac.state < 2000 && daikin_ac_unit_192_168_178_59_power.state == ON){
                sendTelegram("bot1", "PV Leistung seit 5 Minuten zu gering")
                fronius_power_low = null
            }
        ])
    } else if(previousState <= 2000 && newState > 2000 && daikin_ac_unit_192_168_178_59_power.state == OFF) {
        sendTelegram("bot1", "%.6s W wird produziert, Klima einschalten", fronius_powerinverter_a7b6bf8b_inverterdatachannelpac.state.toString)
    }
end
Ich möchte eine leicht andere Variante empfehlen.

Code: Alles auswählen

rule "Strom_wird_zugekauft_verkauft"
when
    Item fronius_powerinverter_a7b6bf8b_inverterdatachannelpac changed
then
    if(!(previousState instanceof Number)) {
        logWarn("stromkauf","previousState keine gültige Zahl! ({})",previousState)
        return;
    }
    if(!(newState instanceof Number)) {
        logWarn("stromkauf","newState keine gültige Zahl! ({})",newState)
        return;
    }
    if(previousState <= 2000 && newState > 2000) {
        fronius_power_low?.cancel
        if(daikin_ac_unit_192_168_178_59_power.state == OFF){
            sendTelegram("bot1", "%.6s W wird produziert, Klima einschalten", fronius_powerinverter_a7b6bf8b_inverterdatachannelpac.state.toString)
        }
    }
    if(previousState >= 2000 && newState < 2000) {
        fronius_power_low = createTimer(now.plusMinutes(5), [|
            if(daikin_ac_unit_192_168_178_59_power.state == ON){
                sendTelegram("bot1", "PV Leistung seit 5 Minuten zu gering")
                fronius_power_low = null
            }
        ])
    }
end
Der feine Unterschied ist, dass es nun nicht notwendig ist, innerhalb des Timers auf den Status der Leistung zu prüfen, da der Timer abgebrochen wird, sobald die erzeugte Leistung überschritten wird.

Wenn Du die Klimaanlage mit der Rule steuern willst, solltest Du noch sicherstellen, dass die Anlage weder zu schnell aus- noch zu schnell wieder eingeschaltet wird.

Re: PV Anlage und Klimaanlagen

Verfasst: 19. Aug 2020 15:11
von nojo
vielen Dank udo1toni.
dadurch die Leistung der PV Anlage heute von 1500 und 7000W schwank, werde ich deine Variante gleich testen und berichten.
udo1toni hat geschrieben: 19. Aug 2020 13:42 Wenn Du die Klimaanlage mit der Rule steuern willst, solltest Du noch sicherstellen, dass die Anlage weder zu schnell aus- noch zu schnell wieder eingeschaltet wird.
wenn alles klappt sollte die Regel die Klima automatisch Ein- beziehungsweise Ausschalten ob Sommer oder Winter, aber im Moment reicht es mir wenn ich die Info auf mein Handy bekomme und ich dann die Klima Ein- beziehungsweise Ausschalte.

Re: PV Anlage und Klimaanlagen

Verfasst: 19. Aug 2020 20:51
von nojo
erster Test war positiv.
morgen werde ich weiter Tests machen und den Code erweitern.
danke