Подключение управляемого кулера к raspberry

Программная платформа для систем автоматизации.
Диспетчеризация, Умный дом.
amgstone
Сообщения: 65
Зарегистрирован: 29 янв 2019, 21:19

Подключение управляемого кулера к raspberry

Сообщение amgstone » 25 фев 2019, 09:09

Добрый день, нужна помощь: прикупил кулер для корпуса на дин рейку: https://prom.ua/ua/p873312377-ventilyat ... 30h10.html и силовой модуль: https://diylab.com.ua/p704621321-silovi ... osfet.html. Как написать скрипт чтобы вентилятор включался в заданую температуру и выключался когда raspberry остынет. температура raspberry без корпуса у меня 45 градусов, боюсь что когда засуну в корпус будет существенно выше температура. Операционная система: linux.

thunder_d
Сообщения: 34
Зарегистрирован: 25 июн 2018, 05:03

Re: Подключение управляемого кулера к raspberry

Сообщение thunder_d » 25 фев 2019, 09:49

Лучше приклей радиатор , на алиэспресс их много.

amgstone
Сообщения: 65
Зарегистрирован: 29 янв 2019, 21:19

Re: Подключение управляемого кулера к raspberry

Сообщение amgstone » 25 фев 2019, 09:58

thunder_d писал(а):
25 фев 2019, 09:49
Лучше приклей радиатор , на алиэспресс их много.
эта температура уже с радиатором, просто он будет в корпусе и в щитовой закрытой

gis
Сообщения: 62
Зарегистрирован: 14 дек 2018, 17:29

Re: Подключение управляемого кулера к raspberry

Сообщение gis » 25 фев 2019, 10:41

amgstone писал(а):
25 фев 2019, 09:09
Добрый день, нужна помощь: прикупил кулер для корпуса на дин рейку
А какой корпус, если не секрет?

amgstone
Сообщения: 65
Зарегистрирован: 29 янв 2019, 21:19

Re: Подключение управляемого кулера к raspberry

Сообщение amgstone » 25 фев 2019, 10:54

gis писал(а):
25 фев 2019, 10:41
amgstone писал(а):
25 фев 2019, 09:09
Добрый день, нужна помощь: прикупил кулер для корпуса на дин рейку
А какой корпус, если не секрет?
http://hobbytech.com.ua/shop/raspberry/ ... -b-2-case/

thunder_d
Сообщения: 34
Зарегистрирован: 25 июн 2018, 05:03

Re: Подключение управляемого кулера к raspberry

Сообщение thunder_d » 25 фев 2019, 11:29

В такой корпус, можно ТАКОЙ радиатор засунуть, будет на 2-5 градусов выше температуры помещения, не ставь вентилятор, не долговечно.


viktor6
Сообщения: 11
Зарегистрирован: 02 авг 2018, 12:40

Re: Подключение управляемого кулера к raspberry

Сообщение viktor6 » 08 май 2019, 10:23

Я себе сделал по этой статье.
http://codius.ru/articles/Raspberry_Pi_3_GPIO_часть_3

Viktor
Сообщения: 3
Зарегистрирован: 28 авг 2019, 19:16

Re: Подключение управляемого кулера к raspberry

Сообщение Viktor » 28 авг 2019, 19:23

Вопрос к разработке: цель - получить значение температуры процессора как значение датчика IH.
this.execOS(`vcgencmd measure_temp`) выполняется из сценария, однако не получилось присвоить полученное в stdout значение переменной или датчику. Если в лоб пытаться, то по логу сценария идет запрос, окончание работы сценария, тадам!!! stdout: temp=___.
Если идти через readline.question, то сценарий только запускается и останавливается не делая ничего. Как это сделать?

intrapro
Сообщения: 458
Зарегистрирован: 13 дек 2016, 09:14

Re: Подключение управляемого кулера к raspberry

Сообщение intrapro » 29 авг 2019, 17:11

Viktor писал(а):
28 авг 2019, 19:23
Вопрос к разработке: цель - получить значение температуры процессора как значение датчика IH.
this.execOS(`vcgencmd measure_temp`) выполняется из сценария, однако не получилось присвоить полученное в stdout значение переменной или датчику. Если в лоб пытаться, то по логу сценария идет запрос, окончание работы сценария, тадам!!! stdout: temp=___.
Если идти через readline.question, то сценарий только запускается и останавливается не делая ничего. Как это сделать?
Действительно, функции обратного вызова у команды this.execOS не было.
В ближайшем релизе 4.6.12 она будет добавлена, в качестве аргумента функция получает stdout:

Код: Выделить всё

script({
    start() {
       this.execOS(`vcgencmd measure_temp`, 'process');
    },
    process(stdout) {
      ...
    }
});

В системе кроме сценариев есть плагины, которые тоже пишутся довольно просто и легко добавляются.
Ваша задача скорее для плагина - получение значения датчика, опрос нужно выполнять циклически с каким-то интервалом.
Посмотрим, как реализовать эту задачу через плагин на js. Здесь нет никаких ограничений по синтаксису и обратным вызовам, чистейший Javascript.

Код: Выделить всё

const child = require('child_process');  
const plugin = require('ih-plugin-api')(); //  Объект для связи с сервером (ядром системы) 

pollAndSend(); 
setInterval(pollAndSend, interval * 5000); // Будем запрашивать раз в 5 секунд

// Функция выполняет нужную команду и передает значение канала на сервер. Имя канала = CPU_TEMP
function pollAndSend() {
  child.exec('vcgencmd measure_temp', (error, stdout, stderr) => {
    let err = 1;
    let value;
    if (!error) {
      plugin.log(`stdout: ${stdout}`);
      if (stdout && stdout.substr(0, 4) == 'temp') value = parseFloat(stdout.split('=').pop()); // Разбор значения temp=xxxx
      err = value == undefined ? 1 : 0;
    }
    plugin.sendData({ id: 'CPU_TEMP', value, err }); // Отдаем на сервер значение или ошибку
  });
}
Назовем наш новый плагин в честь команды vcgencmd.
Кроме основного файла со скриптом (vcgencmd.js ) плагину еще нужны два файла:
vcgencmd.ih - ярлык плагина

Код: Выделить всё

{
    "id":"vcgencmd",
    "description":"RPI vcgencmd",
    "cross":true,
    "version":"0.0.1"
}
vcgencmd.json - манифест плагина

Код: Выделить всё

{
  "name": "vcgencmd",
  "description": "RPI vcgencmd",
  "module": "vcgencmd.js",
  "single": 1,

  "params": [
    {
      "name": "interval",
      "note": "Интервал получения значений",
      "type": "number",
      "val": 60
    }
  ],

  "channels": [{ "id": "CPU_TEMP", "desc": "SensorA" }],

  "genrules": {
    "SensorA": {
      "cl": "SensorA"
    }
  }
}
Здесь прописываются параметры, которые будут доступны для интерактивного редактирования
Например, можно дать пользователю менять интервал опроса.
Также описан канал "CPU_TEMP", его можно будет привязать к аналоговому датчику.

Все три файла должны быть в папке с названием плагина - vcgencmd

Новый вариант файла vcgencmd.js с учетом получения параметров с сервера и дополнительной обработкой ошибок

Код: Выделить всё

/**
 *  vcgencmd.js - плагин для чтения температуры CPU RPI
 */
const child = require('child_process');
const plugin = require('ih-plugin-api')(); 

// читаем параметры с сервера - у нас это интервал опроса
plugin.params.get()
  .then(params => {
    let interval = params.interval > 0 ? params.interval : 5;
    setInterval(pollAndSend, interval * 1000);
  })
  .catch(e => {
    plugin.exit(1, 'ERROR! ' + JSON.stringify(e));
  });

// Функция выполняет нужную команду и передает значение на сервер
// Имя канала = CPU_TEMP
function pollAndSend() {
  child.exec('vcgencmd measure_temp', (error, stdout, stderr) => {
    let err = 1;
    let value;
    if (error) {
      plugin.log(`exec error: ${error}`);
    } else if (stderr) {
      plugin.log(`stderr: ${stderr}`);
    } else if (stdout) {
      plugin.log(`stdout: ${stdout}`);

      if (stdout && stdout.substr(0, 4) == 'temp') value = parseFloat(stdout.split('=').pop());
      err = value == undefined ? 1 : 0;
    } else {
      plugin.log(`EMPTY stdout!!`);
    }
    plugin.sendData({ id: 'CPU_TEMP', value, err });
  });
}
Теперь как подключить плагин к системе? Достаточно скопировать папку vcgencmd в /var/lib/intrahouse-c/plugins и обновить страничку раздела Плагины - новый плагин появится в списке с состоянии stop. Дальше все как обычно - нужно запустить плагин командой Старт, можно пользоваться отладчиком плагина, привязать канал к устройству.

Во вложении архив в тремя файлами, можно загрузить как обычный плагин из zip файла
vcgencmd.zip
(1.42 КБ) 11 скачиваний

Ответить