예제 #1
0
 function doIt()
 {
     lib_log("CSH", "----- Start -----\n");
     // Get current time and date
     $dtz = new DateTimeZone("Europe/Stockholm");
     //Your timezone
     $now = new DateTime(date("Y-m-d H:i:s"), $dtz);
     $snow = $now->format("Y-m-d H:i:s");
     //================================
     // Configuration
     //================================
     $waterIn_sid = 3;
     // 3
     $waterOut_sid = 1;
     // 1
     $smokeTemp_sid = 4;
     // 4
     $outdoorTemp_sid = 9;
     // Garage indoor
     $indoorTemp_sid = 2;
     // 2
     // Memories
     //-------------------------------
     $labelTargetTemperature = "CSH_targetTemperature";
     $labelLatestOrderTime = "CSH_latestOrderTime";
     //========================================================
     $targetTemp = (int) lib_recall($labelTargetTemperature);
     $lowWaterOut = $targetTemp - 1.0;
     //26.0;
     $highWaterOut = $targetTemp + 1.0;
     //28.0;
     $inertiaTime = 360;
     // sec
     // Recall time and date for latest order
     $prev = lib_recall($labelLatestOrderTime);
     if ($prev == 'void') {
         $prev = $snow;
         lib_remember($labelLatestOrderTime, $snow);
     }
     $diff = strtotime($snow) - strtotime($prev);
     lib_log("CSH", "==> {$snow} [{$prev}] {$diff}({$inertiaTime})\n");
     //========================================================
     $waterIn = lib_getLatestValue($waterIn_sid);
     if ($waterIn == SXN_NO_VALUE) {
         lib_log("CSH", "No value for WaterIn\n");
         return;
     }
     $waterOut = lib_getLatestValue($waterOut_sid);
     if ($waterOut == SXN_NO_VALUE) {
         lib_log("CSH", "No value for WaterOut\n");
         return;
     }
     if ($waterOut < $targetTemp - 7.0) {
         lib_log("CSH", "Un-realistic value for WaterOut\n");
         return;
     }
     $smokeTemp = lib_getLatestValue($smokeTemp_sid);
     if ($smokeTemp == SXN_NO_VALUE) {
         lib_log("CSH", "No value for SmokeTemp\n");
         return;
     }
     $outdoorTemp = lib_getLatestValue($outdoorTemp_sid);
     if ($outdoorTemp == SXN_NO_VALUE) {
         lib_log("CSH", "No value for OutdoorTemp\n");
     }
     $indoorTemp = lib_getLatestValue($indoorTemp_sid);
     if ($outdoorTemp == SXN_NO_VALUE) {
         lib_log("CSH", "No value for IndoorTemp\n");
     }
     //========================================================
     $energy = 100 * ($waterOut - $waterIn);
     $logmsg = "Indoor      = " . $indoorTemp . "\n";
     lib_log("CSH", $logmsg);
     $logmsg = "WaterIn     = " . $waterIn . "\n";
     lib_log("CSH", $logmsg);
     $logmsg = "WaterOut    = " . $waterOut . "\n";
     lib_log("CSH", $logmsg);
     $logmsg = "TargetTemp  = " . $targetTemp . "\n";
     lib_log("CSH", $logmsg);
     $logmsg = "lowTemp     = " . $lowWaterOut . "\n";
     lib_log("CSH", $logmsg);
     $logmsg = "highTemp    = " . $highWaterOut . "\n";
     lib_log("CSH", $logmsg);
     $logmsg = "OutdoorTemp = " . $outdoorTemp . "\n";
     lib_log("CSH", $logmsg);
     $logmsg = "SmokeTemp   = " . $smokeTemp . "\n";
     lib_log("CSH", $logmsg);
     $logmsg = "Energy      = " . $energy . "\n";
     lib_log("CSH", $logmsg);
     $freqBurnerOn = lib_recall("CSH_freqBurnerOn");
     $freqBurnerOff = lib_recall("CSH_freqBurnerOff");
     $logmsg = "Freq On     = " . $freqBurnerOn . "\n";
     lib_log("CSH", $logmsg);
     $logmsg = "Freq Off    = " . $freqBurnerOff . "\n";
     lib_log("CSH", $logmsg);
     $smokeDir = lib_recall("CSH_smokeDir");
     if ($smokeDir == 'void') {
         $smokeDir = 1;
     }
     if ($smokeDir == 1) {
         lib_log("CSH", "Burner ON\n");
     }
     if ($smokeDir == 2) {
         lib_log("CSH", "Burner OFF\n");
     }
     lib_log("CSH", "Action:");
     if ($smokeTemp > 42.0 && $smokeDir == 2) {
         lib_remember("CSH_smokeDir", 1);
         $timeBurnerOn = lib_recall("CSH_timeBurnerOn");
         $freqBurnerOn = (int) (strtotime($snow) - strtotime($timeBurnerOn)) / 60.0;
         // minutes
         lib_remember("CSH_timeBurnerOn", $snow);
         $logmsg = "Burner ON " . $freqBurnerOn . "\n";
         lib_log("CSH", $logmsg);
         lib_remember("CSH_freqBurnerOn", $freqBurnerOn);
     }
     if ($smokeTemp < 42.0 && $smokeDir == 1) {
         lib_remember("CSH_smokeDir", 2);
         $timeBurnerOff = lib_recall("CSH_timeBurnerOff");
         $freqBurnerOff = (int) (strtotime($snow) - strtotime($timeBurnerOff)) / 60.0;
         // minutes
         lib_remember("CSH_timeBurnerOff", $snow);
         $logmsg = "Burner OFF " . $freqBurnerOff . "\n";
         lib_log("CSH", $logmsg);
         lib_remember("CSH_freqBurnerOff", $freqBurnerOff);
     }
     if ($diff > $inertiaTime) {
         //echo("Algo: $delta<br>");
         lib_log("CSH", "Wake Up ");
         if ($smokeTemp > 26.0) {
             if ($waterOut < $lowWaterOut) {
                 lib_log("CSH", "C_UP");
                 $steps = ($highWaterOut + $lowWaterOut) / 2.0 - $waterOut;
                 $steps = round($steps * 4);
                 if ($steps < 1 || $steps > 50) {
                     $steps = 1;
                     $logmsg = "Error: Steps out of range " . $steps . "\n";
                     lib_log("CSH", $logmsg);
                 }
                 lib_log("CSH", " + ");
                 $order = "NBC_STEPPER_CTRL 1 " . $steps . " 20";
                 lib_log("CSH", $order);
                 insertOrder($waterOut_sid, $order);
                 lib_remember($labelLatestOrderTime, $snow);
             } else {
                 if ($waterOut > $highWaterOut) {
                     lib_log("CSH", "C_DOWN");
                     $steps = $waterOut - ($highWaterOut + $lowWaterOut) / 2.0;
                     $steps = round($steps * 4);
                     if ($steps < 1 || $steps > 50) {
                         $steps = 1;
                         $logmsg = "Error: Steps out of range " . $steps . "\n";
                         lib_log("CSH", $logmsg);
                     }
                     lib_log("CSH", " - ");
                     $order = "NBC_STEPPER_CTRL 2 " . $steps . " 20";
                     lib_log("CSH", $order);
                     insertOrder($waterOut_sid, $order);
                     lib_remember($labelLatestOrderTime, $snow);
                 } else {
                     lib_log("CSH", " Temperature within target ");
                 }
             }
         } else {
             if ($smokeTemp < 25.0) {
                 lib_log("CSH", "Heater is off ");
             }
             if ($waterOut < $waterIn) {
                 lib_log("CSH", "No heating is needed ");
             }
         }
     } else {
         lib_log("CSH", "Sleeping");
     }
     lib_log("CSH", "\n");
     lib_log("CSH", "-----End-----\n");
 }
예제 #2
0
파일: sxn_csh.php 프로젝트: bsaxen/sxndata
ini_set('display_errors', 1);
error_reporting(E_ALL);
echo "</head> ";
$docRoot = $_SERVER['DOCUMENT_ROOT'];
$labelTargetTemperature = "CSH_targetTemperature";
$do = isset($_GET['do']) ? $_GET['do'] : null;
if ($do == 'csl') {
    system("rm -f log/CSH.log");
}
if ($do == 'inc') {
    $targetTemp = (int) lib_recall($labelTargetTemperature) + 1.0;
    lib_remember($labelTargetTemperature, $targetTemp);
}
if ($do == 'dec') {
    $targetTemp = (int) lib_recall($labelTargetTemperature) - 1.0;
    lib_remember($labelTargetTemperature, $targetTemp);
}
$targetTemp = (int) lib_recall($labelTargetTemperature);
$burnerStatus = (int) lib_recall("CSH_smokeDir");
if ($burnerStatus == 1) {
    $burner_ON_OFF = "ON";
}
if ($burnerStatus == 2) {
    $burner_ON_OFF = "OFF";
}
$waterTempOut = lib_getLatestValue(1);
$waterTempIn = lib_getLatestValue(3);
$outdoorTemp = lib_getLatestValue(9);
$indoorTemp = lib_getLatestValue(2);
$smokeTemp = lib_getLatestValue(4);
$energy = 100 * ($waterTempOut - $waterTempIn);