1Set up the Raspberry Pi
2Electrical Connection of Sensores and Actuators
3Set up the Connection
4Heating Control

no warranty for any of the provided information

HV_heatingControl

Is used by:
HV_loop

The heating control is still under development.
  1. solar heating
    should have highest priority, low flow setup, winter/summer/vacation mode...
  2. pellet oven
    only utilized in winter, if sun prediction is low and storage tank is cold...
  3. ventilation
    t.b.d.
<?php 
/* published under GPL www.gnu.org/licenses/gpl.html */
function HV_heatingControl($Temp,$Sens){
  #include("HV_config.php");
 
  $stateServ=$GLOBALS['stateServ'];
  static $act;
  if($GLOBALS['debug']){echo "<HV_p><aj>HV_heatControl</aj>: ".$GLOBALS['heatMode']." ".$GLOBALS['stateSolar']."</p>\n";}
  /* solar usage should be independet of rest? */
  $act = HV_solarControl($Temp,$act,$Sens);
  /* use oven if solar heat is not sufficient */
  $act = HV_ovenControl($Temp,$act,$Sens);

  /* ventilation is not connected yet */
  $act["vent"]=0;
  /* activate home server */
  if($GLOBALS['stateServ']=="on"){
    $act["serv"]=1;
  }else{
    $act["serv"]=0;
  }
  
  if($GLOBALS['showRawValues']){
    include_once("HV_showRawValues.php");
    $data=array_merge($Temp,$act);
    $data['timer']=sprintf("%3d",$timer);
    HV_showRawValues($data);
  }
  return $act;
}

function HV_solarControl($Temp,$act,$Sens){
  #include("HV_config.php");
 /*
   http://www.westendorfer.at/auswertung/vergleich1.htm HighFlow/LowFlow
http://www.energieportal24.de/artikel_276.htm
Neben den ungeregelten Pumpen produziert Wilo auch ein drehzahlgeregeltes Modell und bietet es zusammen mit einem eigens dafür konzipierten Solarregler an. Die Elektronik der Regelung passt die Drehzahl der Pumpe stufenlos an den Bedarf der Anlage an. Dadurch ist jederzeit der optimale Betriebszustand für den gewünschten Volumenstrom gewährleistet. Durch die Variation des Volumenstroms wird die Solarernte größer. Denn bei wenig Sonne, wenn der Kollektor nur wenig wärmer als das Fluid ist, muss das Fluid sehr langsam durch den Kollektor fließen, um sich effektiv aufheizen zu können. So können auch geringe Strahlungsstärken genutzt werden und das bei einem möglichst geringen Stromverbrauch der Pumpe. Die Regelung erfolgt entweder über eine konstante oder eine variable Temperaturdifferenz zwischen Kollektor und Speicher. Gemessen werden neben Kollektor- und Speichertemperatur auch die Temperaturen des Speichervor- und Rücklaufes. Das Regelsystem hat einen integrierten Wärmemengenzähler, der ohne Durchflussmesser auskommt. Da die Pumpe bei vorgegebener Drehzahl und bekannter Viskosität des Fluids »weiß«, wie groß der Durchfluss ist, kann der Regler die Wärmemenge aus den Pumpendaten berechnen. Das funktioniert mit einer Genauigkeit von 10%, wie Messungen auf dem Solarprüfstand bei Wilo ergeben haben.
   */
  static $timer;
  $heatMode=$GLOBALS['heatMode'];
  $stateSolar=$GLOBALS['stateSolar'];
  $collHysteresis=$GLOBALS['collHysteresis'];
  $collOffset=$GLOBALS['collOffset'];
  $TtankSPsummer=$GLOBALS['TtankSPsummer'];
  if($stateSolar=="off"){
    $act["solar"]=0;
    if($GLOBALS['debug']){echo "solar OFF\n";}
  }elseif($stateSolar=="on"){
    $act["solar"]=1;
    if($GLOBALS['debug']){echo "solar ON\n";}
  }else{
    /* automatic */
    if($GLOBALS['debug']){echo "solar AUTO\n";}
    switch($heatMode){
    case "winter":
      /* fall through */
    case "vacation":
      $TtankSPsummer=60;
      /* fall through */
    case "summer":
      /* switch on if collector is warm enouch */
      $solarPumpOffDuration[0]['x']=30;  $solarPumpOffDuration[0]['y']=60;
      $solarPumpOffDuration[1]['x']=60;  $solarPumpOffDuration[1]['y']=5;

      $solarPumpOnDuration[0]['x']=60;  $solarPumpOnDuration[0]['y']=5;
      $solarPumpOnDuration[1]['x']=100; $solarPumpOnDuration[1]['y']=20;

      /* conditions to switch on */
      if($Temp["coll"]>$Temp["tLow"]+$collOffset AND $timer==0){
	/* activate if collector is warm enough */
	$timer = floor(tableInterpol($solarPumpOnDuration,$Temp["coll"],"saturate"));
      }elseif($Temp["tLow"]>$TtankSPsummer AND $Temp["coll"]>$Temp["tLow"]){
	/* switch to high flow mode to prevent boiling */
	$timer=$GLOBALS['solarPumpDuration'];
      }
      if($timer>0){
	$act["solar"]=1;
	$timer--;
	if($timer==0){
	  $timer=-floor(tableInterpol($solarPumpOffDuration,$Temp["coll"],"saturate"));
	}
      }elseif($timer<0){
	$act["solar"]=0;
	$timer++;
      }else{
	$act["solar"]=0;
      }
      break;
    default:
      echo "heatMode not defined!\n";
    } #switch

    /* shut off if tank gets too hot */
    if($Temp["tHot"]>$GLOBALS['TtankCritical']){
      $act["solar"]=0;
    }
  } #fi
  return $act;
}

function HV_ovenControl($Temp,$act,$Sens){
  $stateOven=$GLOBALS['stateOven'];
  $heatMode=$GLOBALS['heatMode'];
  if(!isset($act["oven"])){$act["oven"]=0;}
  if($stateOven=="off"){
      $act["oven"]=0;
  }elseif($stateOven=="on"){
      $act["oven"]=1;
  }else{
    /* automatic mode */
    $now=date('H');
    switch($heatMode){
    case "winter":
      $now=date('H');
      if($Temp["tHot"]<$GLOBALS['TtankOvenOn'] AND $Sens['sunshine']<50){
	$act["oven"]=1;
      }elseif($Temp["tHot"]<$GLOBALS['TtankOvenOn'] AND ($now<3 OR $now>14)){
	$act["oven"]=1;
      }elseif($Temp["tHot"]<$GLOBALS['TtankOvenOn']-10){
	$act["oven"]=1;
      }elseif($Temp["tHot"]>$GLOBALS['TtankOvenOff']){
	$act["oven"]=0;
      }
      break;
    case "summer":
      if($Temp["tHot"]<$GLOBALS['TtankOvenOn']){
	/* switch only on, if collector is cold, and already afternoon */
	$now=date('H');
	if($Temp["coll"]<30 AND $now>16){
	  $act["oven"]=1;
	}
      }elseif($Temp["tHot"]>$GLOBALS['TtankOvenOff']){
	$act["oven"]=0;
      }
      break;
    } #switch
  } #fi
  return $act;
}
?>
1HV_Admin_Login
2HV_colorMap
3HV_config
4HV_convertASCII
5HV_getSunPrediction
6HV_heatingControl
7HV_loop
8HV_readOperationState
9HV_readTemperatures
10HV_restart
11HV_serviceLog
12HV_setActuators
13HV_setParameters
14HV_showHouse
15HV_showLog
16HV_showRawValues
17HV_showWeatherForecast
18HV_thermos200
19HV_ventProg
20HV_writeLog
21index
22MoistAir
23readFilenames
24readNamedData
25tableInterpol

 

gnuplot

gnuplot is used to visualise the results - via script you can do infinite diagrams in 1 second.
Run 'test' in gnuplot to get an owerview of the available line- and symbolstyles.

Login
Valid HTML 4.01!