Ankündigung

Einklappen
Keine Ankündigung bisher.

Infrarotheizung mit openHAB

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

    Infrarotheizung mit openHAB

    Hallo zusammen,

    das es draußen kälter wir möchte ich meine Infrarotheizung mit openHAB steuern. Ich habe hier im Forum einen Beispiel Code gefunden. Ich benötige allerdings zusätlich eine gewisse Hysterese.

    Könnten ihr mir dabei helfen?

    Hier der Code von Jockel .

    Code:
     
     rule "Heizung Küche" when 	Item Temperature_GEG_Kitchen changed then 	var Number Ist 	var Number Soll  	if (Temperature_GEG_Kitchen.state instanceof DecimalType && Sollwerte_Kitchen.state instanceof DecimalType) {         Ist =   Temperature_GEG_Kitchen.state as DecimalType     	Soll = Sollwerte_Kitchen.state as DecimalType   	if (Ist < Soll) {  		sendCommand(Heating_GEG_Kitchen, ON) 	}  	else if (Ist > Soll) { 		sendCommand(Heating_GEG_Kitchen, OFF)    }  } end

    WIe würde der mit Hysterese aussehen?

    Danke und Gruß

    #2
    Code:
    val Number Hysterese = 0.1
    
    rule "Heizung Küche"
    when
        Item Temperature_GEG_Kitchen changed
    then
        if (Sollwerte_Kitchen.state instanceof DecimalType) {
            if (Temperature_GEG_Kitchen.state as DecimalType < Sollwerte_Kitchen.state as DecimalType - Hysterese)
                if (Heating_GEG_Kitchen.state != ON) Heating_GEG_Kitchen.sendCommand(ON)
            else if (Temperature_GEG_Kitchen.state as DecimalType > Sollwerte_Kitchen.state as DecimalType + Hysterese)
                if (Heating_GEG_Kitchen.state != OFF) Heating_GEG_Kitchen.sendCommand(OFF)
        }
    end
    Zur Erklärung: Eine Überprüfung von Temperature_GEG_Kitchen sollte unnötig sein, da die Regel bei changed triggert, was zwangsläufig bedeutet, dass es vom Typ Decimal ist. Eine Variable für Ist und Soll spart ein bisschen Text, bedeutet aber mehr Code. Solange nur eine Anweisung ausgeführt wird, werden keine Klammern {} benötigt. Damit nicht ständig wegen einer Temperaturänderung Kommandos gesendet werden, wird noch der Zustand des Aktors überprüft. Zu guter Letzt ist die Methode Item.sendCommand(Value) sicherer in der Anwendung.
    Hysterese ist als Konstante definiert, da dieser Wert im Allgemeinen nicht dynamisch ist. Ob man die Hysterese symmetrisch einbindet oder nicht, ist vermutlich Geschmacksache.

    Kommentar


      #3
      Hallo udo1toni,

      Die rule klappt leider nicht. Er führt die Rule nicht aus..

      Code:
      var Number Hysterese = 0.2
      
      rule "Heizung Schlafzimmer"
      when
          Item TempSZist changed
      then
          if (TempSZsoll.state instanceof DecimalType) {
              if (TempSZist.state as DecimalType <TempSZsoll.state as DecimalType - Hysterese)
                  if (HeizenEltern.state != ON) HeizenEltern.sendCommand(ON)
              else if (TempSZist.state as DecimalType >TempSZsoll.state as DecimalType + Hysterese)
                  if (HeizenEltern.state != OFF) HeizenEltern.sendCommand(OFF)
          }  
      end
      Hast du eine Idee warum?

      Grüße
      Zuletzt geändert von Miki84; 12.11.2016, 22:57.

      Kommentar


        #4
        Eventuell musst Du ein paar Klammern einbauen. Zur genauen Lokalisation des Problems sollten ein paar Logzeilen helfen:
        Code:
         var Number Hysterese = 0.2  
        rule "Heizung Schlafzimmer"
        when
            Item TempSZist changed
        then
            logInfo("Heiz","Heizung Schlafzimmer getriggert.")
            if (TempSZsoll.state instanceof DecimalType) {
                logInfo("Heiz","TempSZsoll = {}, TempSZist = {}",TempSZsoll.state,TempSZist.state)
                if ((TempSZist.state as DecimalType) < (TempSZsoll.state as DecimalType) - Hysterese) {
                    logInfo("Heiz","ON!")
                    if (HeizenEltern.state != ON)
                        HeizenEltern.sendCommand(ON)
                }
                else if ((TempSZist.state as DecimalType) > (TempSZsoll.state as DecimalType) + Hysterese) {
                    logInfo("Heiz","ON!")
                    if (HeizenEltern.state != OFF)
                        HeizenEltern.sendCommand(OFF)
                }
            }
        end
        Die Logs findest Du dann in der openhab.log.

        Kommentar


          #5
          Hallo udo1toni,

          funktioniert nun! Vielen Dank für deine Unterstützung.

          Gruß

          Miki

          Kommentar

          Lädt...
          X