Ankündigung

Einklappen
Keine Ankündigung bisher.

Rule funktioniert nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Rule funktioniert nicht

    Hallo,

    nachdem mit Udo's Hilfe meine Stromtankstelle mit einem Zwischenstecker in Abhängigkeit der anliegenden PV-Leistung AN- oder AUS-geschaltet wird (https://knx-user-forum.de/forum/supp...n-lassen/page2) möchte ich nun einen Schritt weiter gehen und die Ladeleistung noch verändern. Dies geschieht über einen weiteren Raspberry mit Openhab, der verschiedene Relais der Wallbox schaltet.
    Der Wallbox-Raspberry erhält drei Werte:
    - Item "Manu" wenn mit voller Leistung geladen werden soll vom Hausteuerungs-Raspberry
    - Item "Automatisch" wenn nur mit überschüssiger PV-Leistung geladen werden soll vom Haussteuerungs-Raspberry. Dort ist auch die Rule hinterlegt, welche Item "Automatisch" auch wieder abschaltet.
    - Item "aktLeistungberechnet" die Leistung welche über den Hauszähler geht über http-Binding

    Die Items "Strom6" und "Strom10" schalten dann die jeweiligen Relais. Sind beide Items OFF, wird mit max. Stromstärke geladen. Sind beide Items ON, wird nur mit 6Ampere geladen, liegt an der Bauart der Wallbox. Das Item "Ladestation" schaltet den Ladestrom komplett aus bzw. ein.
    Was nicht funktioniert, ist die Veränderung der Ladestromstärke, das Item "Strom6" bleibt im Automatik-Modus immer an. Schalte ich auf manuell um, schaltet das Item wie gewollt aus. Hier wäre der Code, komplett:

    Code:
    import org.joda.time.*
    import org.openhab.core.library.types.*
    import org.openhab.core.persistence.*
    import org.openhab.model.script.actions.*
    import org.openhab.model.script.actions.Timer
    import org.joda.time.DateTime
    import java.lang.Math
    
    rule "Laden automatisch EIN_AUS"
    when
            Item Automatisch changed or
            Item Manu changed from ON to OFF
    then
        if (Automatisch.state==ON) {                                                  // wenn genug Leistung vorhanden dass automatische Ladung EIN
                sendCommand(Ladestation, ON)                                   // lasse Ladestation an
                sendCommand(Strom6, ON)                                          // reduziere Ladestrom auf 6 Ampere
                                            }
        else                                                                                           // wenn nicht genug Leistung
                    sendCommand(Ladestation, OFF)                             // schalte Ladestation AUS
    end
    
    
    rule "Laden erzwingen"
    when
        Item Manu changed
    then
            if (Manu.state==ON) {                                                   // wenn Ladung nötig
                    sendCommand(Ladestation, ON)                         // schalte Ladestation EIN
                    sendCommand(Strom6, OFF)                              // Lade mit 16 Ampere
                    sendCommand (Strom10, OFF)
                                            }
                    
            else
            {       if (Automatisch.state==ON) {
                    sendCommand(Strom6, ON)
                    sendCommand(Strom10, OFF)
                    }
    
            else    {
                    sendCommand(Ladestation, OFF)
                    sendCommand(Strom6, ON)
                    sendCommand(Strom10, OFF)
                    }
            }
    
    end
    
    rule „Leistung anpassen“
    when
            Item aktLeistungberechnet received update                                 // jede Minute
    then
            if (Automatisch.state==ON) {
                    if (aktLeistungberechnet.state<0){                                                    // wenn Strom gekauft wird
                            sendCommand(Strom6, ON)                                        // gehe auf minimale Ladeleistung
                            sendCommand(Strom10, OFF)
                                                   }
                    if (aktLeistungberechnet.state > 1500){                                    // wenn mehr als 1500W verkauft werden
                            if (Strom6.state==ON){                                                     // und mit 6 Ampere geladen wird
                                    sendCommand(Strom10, ON)                               // lade mit 10 Ampere
                                    sendCommand(Strom6, OFF)                               // schalte 6 Ampere aus
                                                      }
                            if (Strom10.state==ON){                                                   // wenn mit 10 Ampere geladen wird
                                    sendCommand(Strom10,OFF)                              // schalte 10 Ampere aus und lades somit mit 16 Ampere
                                                       }
                                                       }
                                                       }
    end
    Denke es passt jetzt. Versuche stehen noch aus, sobald die Sonne scheint.
    Zuletzt geändert von Hasso; 19.05.2016, 10:33.

    #2
    Also, in der Rule "Laden erzwingen" fehlt eine schließende geschweifte Klammer (nach dem 1. else-Block, aber schon die öffnende Klammer sollte unnötig sein, da es nur einen Befehl in diesem Block gibt, nämlich das if ().

    Ich empfehle grundsätzlich, lieber die Methode Item.sendCommand(value) zu verwenden, statt die Action sendCommand(Item,value), weil es da schon mal Nickligkeiten bei der Action gab, die bei der Methode nicht auftraten.

    Zum testen der Rules könntest Du die entsprechenden Items über die osgi-Konsole künstlich mit Werten versorgen, einfach, um zu schauen, ob die Rules das machen, was Du erwartest - zu dem Zweck bieten sich logInfo()-Statements an, dann sieht man direkt, ob die Rule korrekt getriggert wurde.

    Kommentar

    Lädt...
    X