5500){$s = 5500;} if(cs() == $s) return; file_put_contents("/sys/devices/platform/applesmc.768/fan1_output",$s); } if(file_get_contents("/sys/devices/platform/applesmc.768/fan1_manual") !== "1\n") { echo "set fan mode to manual\n"; file_put_contents("/sys/devices/platform/applesmc.768/fan1_manual","1\n"); } $temp = 0; $samples = Array(); $r = 0; $sockets = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP); $pid = pcntl_fork(); if ($pid == -1) {settemp(5500);die('Could not fork');} else if ($pid) { fclose($sockets[0]); while(1) { $temp = gettemp(); echo "{$temp} degrees celsius, " . cs() . " rpm" . "\r"; if($temp > 100){settemp(5500);}else{ if($r > 150) { fwrite($sockets[1],round(array_sum($samples)/count($samples),0) . PHP_EOL); $samples = Array(); $r = 0; } } $samples[] = calcspeed($temp); usleep(100000); $r++; } pcntl_wait($status); } else { fclose($sockets[1]); while(1){ $rpm = (int) fgets($sockets[0]); $diff = $rpm-cs(); $c = cs(); $steps = 100*speed; $step = round($diff/$steps); for($i = 0; $i < $steps; $i++) { $n = $c+$step; settemp($n); $c = $n; usleep(10000); } settemp($rpm); } } function cs(){return (int) file_get_contents("/sys/devices/platform/applesmc.768/fan1_output");} function calcspeed($temp) { return round((1100/7)*($temp-60),0); }