Управляем чем угодно откуда угодно

Включение/отключение нагрузки по показаниям датчиков

Виртурилка, 3G/4G, WiFi, моторчики, датчики, GPS и прочее - питание, драйвера, совместимость и т.д.

Включение/отключение нагрузки по показаниям датчиков

Сообщение Евгений » 21 дек 2014, 02:55

Здравствуйте. Сделал на даче тепловой насос который планирую контролировать с помощью V2r. Столкнулся с проблемой отсутствия знаний по программированию поэтому прошу помощи знатоков.

Есть датчик температуры DS18B20 и реле корректно подключенные к V2R. Хочу это всё объединить в скрипте и автоматически включать/выключать реле при переходе через "0".
Принцип вижу такой:
1.считывание показаний датчика
2.если t>0 установить значение gpio значение 1
3.если t<0 установить значение gpio значение 0
4.ждать 10 сек
5.перейти к п.1
Евгений
 
Сообщения: 3
Зарегистрирован: 18 дек 2014, 21:37

Re: Включение/отключение нагрузки по показаниям датчиков

Сообщение Gol » 21 дек 2014, 16:34

Можно как-то так, на PHP. Номер пина, который будем устанавливать в 0 или 1 задаётся в переменной $CON. Чтоб это вызывалось постоянно с промежутком в 10 секунд достаточно в шел-скрипт поместить, типа вот такого

Файл run.sh
Код: Выделить всё
#!/bin/sh
while [ 1 ] ; do
./readtemp.php
sleep 10
done


Ну а тут собссно чтение датчика, проверка температуры и установка пина в 1 или 0. Файл readtemp.php
Код: Выделить всё
#!/usr/bin/php
<?php
   $CON = 40;

   // load 1-wire devices list
   $devices = @file("/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves");
   $devicelist = "";
   for ($i = 0; $i < sizeof($devices); $i++) {

      if ($devices[$i]) {

         // load temperature value for each sensor
         $value_array[$i] = LoadValue(trim($devices[$i]));
         echo trim($devices[$i]) .": ".$value_array[$i]."\n";
         
         if ($value_array[$i] >= 0) {
            // temp is >= zero
            file_put_contents("/proc/v2r_pins/$CON", 1);
         } else {
            // temp is < zero
            file_put_contents("/proc/v2r_pins/$CON", 0);
         }
      }
   }

function LoadValue($device_id){
   // load value for specified sensor
   // load w1 value file
   $valuefile = @file("/sys/bus/w1/devices/w1_bus_master1/" . $device_id . "/w1_slave");
   if (!$valuefile) die ("empty file\n");
   $crc_string = $valuefile[0];
   $value_string = $valuefile[1];
   // check CRC
   if (strpos($crc_string, "YES") === false) {
      // CRC not OK, returns
      die ("bad CRC\n");
   }
   // now explode value_string
   $tmp = explode("t=", $value_string);
   if (!$tmp[1]) die ("empty value");
   // now make real value
   $value = round($tmp[1] / 1000, 2);
   return $value;
?>
Аватара пользователя
Gol
 
Сообщения: 507
Зарегистрирован: 17 фев 2012, 01:44
Откуда: Тула-Свободный-Щёкино-Тула-Москва

Re: Включение/отключение нагрузки по показаниям датчиков

Сообщение Евгений » 22 дек 2014, 14:38

Большое человеческое спасибо!)

С readtemp.php есть проблемка - не хватает " } " в самом конце }

Сосле запуска run.sh, V2R перестает отвечать в браузере, при этом функцию вкл/выкл по температуре выполняет, а запуск отдельным процессом не помогает.

Как вписать в скрипт конкретный датчик? /sys/bus/w1/devices/10-0008028171a6 - этот например))
Евгений
 
Сообщения: 3
Зарегистрирован: 18 дек 2014, 21:37


Вернуться в Железо - заставляем работать

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron