Вероятно, есть недочеты, но для моих целей поддержания температуры на балконе вполне подходит. Как всегда с PID-ами, вопрос сводится к подбору коэффициентов.
Дополнения и улучшения приветствуются!
По свойствам класса, понятно из комментариев к ним.
По методам.
setPrev - устанавливает временной интервал. Вызывается перед расчетом. Можно дополнить на уровне объекта необходимыми операциями перед расчетом, специфичными для этого объекта. Для примера, в моем случае регулятора температуры, я привожу временной интервал к интервалу получения температуры - к 3-м минутам, вызываю локальный метод вместо родительского.
Код: Выделить всё
$this->setProperty("period", (time() - $this->getProperty("lastRun"))/60/3);
Код: Выделить всё
$this->setProperty("PID", round($this->getProperty("PID"), 0, PHP_ROUND_HALF_UP));