Ankündigung

Einklappen
Keine Ankündigung bisher.

Number Item in Rule

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

    Number Item in Rule

    Hallo,

    ich habe ein Problem mit einer Rule.

    Es wurden drei Items vom Typ Number definiert.
    Diese können alle in der Sitemap per Setpoint eingestellt werden.

    In der Rule erhalte ich keinen Zugriff...da heißt es immer Instance = Null

    Wer hat hier eine Idee?

    rule"DG_Heizung_Betrieb_16301700"
    when
    Time cron "0 30 16 1/1 * ? *"
    then
    {
    if (DG_Badezimmer_Temperatur_Betrieb_16301700.state =ON)
    {
    sendCommand(DG_Badezimmer_Temperatur_Soll, DG_Badezimmer_Temperatur_Soll_Betrieb.state)
    }
    else
    {
    sendCommand(DG_Badezimmer_Temperatur_Soll, DG_Badezimmer_Temperatur_Soll_Reduziert.state)
    }
    }
    end


    NumberDG_Badezimmer_Temperatur_Soll"Soll-Temperatur" (DG_Badezimmer_Temperatur)
    NumberDG_Badezimmer_Temperatur_Soll_Betrieb"Soll-Temperatur" (DG_Badezimmer_Temperatur)
    NumberDG_Badezimmer_Temperatur_Soll_Reduziert"Soll-Temperatur reduz." (DG_Badezimmer_Temperatur)

    Setpoint item=DG_Badezimmer_Temperatur_Soll label="Soll-Temperatur [%.1f °C]" step=0.5 minValue=10 maxValue=30
    Setpoint item=DG_Badezimmer_Temperatur_Soll_Betrieb label="Soll-Temperatur Betrieb [%.1f °C]" step=0.5 minValue=10 maxValue=30
    Setpoint item=DG_Badezimmer_Temperatur_Soll_Reduziert label="Soll-Temperatur reduziert [%.1f °C]" step=0.5 minValue=10 maxValue=30



    DAnke & Grüße

    #2
    Dein Trigger ist etwas seltsam. Möchtest Du die Rule tatsächlich einmal täglich ausführen? Egal... in Deinem If-statement machst Du eine Wertzuweisung, statt den Status zu vergleichen. Es muss == heißen, statt =. Eine optimierte Fassung:
    Code:
    rule "DG Heizung Betrieb 16301700"
    when
        Time cron "0 30 16 * * ?" // einmal täglich um 16:30:00 Uhr
    then
        logInfo("heizung","Soll Betrieb: {}°C Soll Reduziert: {}°C",DG_Badezimmer_Temperatur_Soll_Betrieb.state,DG_Badezimmer_Temperatur_Soll_Reduziert.state)
        if(!(DG_Badezimmer_Temperatur_Soll_Betrieb.state   instanceof Number)) return;
        if(!(DG_Badezimmer_Temperatur_Soll_Reduziert.state instanceof Number)) return;
        
        DG_Badezimmer_Temperatur_Soll.sendCommand(
            if(DG_Badezimmer_Temperatur_Betrieb_16301700.state == ON)
                (DG_Badezimmer_Temperatur_Soll_Betrieb.state as Number)
            else
                (DG_Badezimmer_Temperatur_Soll_Reduziert.state as Number)
        )
    end
    Der Kopf verhindert, dass die Rule mit einer Nullpointer Exception hängen bleibt. Der untere Teil ist der eigentliche Befehl. Beachte bitte, dass ich die Methode statt der Action verwende (das sollte immer die erste Wahl sein). der ternäre Operator kürzt die Rule auf einen einzigen sendCommand() Befehl.

    Kommentar

    Lädt...
    X