Как стать автором
Обновить

Комментарии 34

А я уж было хотел порекомендовать термопот)
А я читал статью в надежде увидеть чайник под управлением Linux :(
Аналогично.
Советую посмотреть на openHAB, может пригодиться. Да мне и самому интересно, как он будет чувствовать себя на ARM, теоретически должен встать без особых проблем.
К сожалению, скорее всего не встанет. Он на яве, а софт-флоат сборка работает с плавающими раз в 10 медленнее, к тому же дата сборки аж 28 августа, и все еще залочена под 256 МБ ОЗУ. Wheezy с хард-флоатом обновляется регулярно.
С помощью GPIO к Raspberry Pi можно подключить только одну сеть 1-wire или несколько?
Дефолтный драйвер подразумевает, что 1-wire подключен к GPIO4. Он же (драйвер) и используется в статье.
Но ничто не мешает самостоятельно реализовать 1-wire програмно на любом из пинов.
Понятно, что драйвер можно поправить, вопрос был в том, можно ли использовать несколько сетей одновременно, например, работать с устройствами вроде DS2408 на одной сети во время опроса термометра на другой (если не всё в порядке с проводами, это может занимать несколько секунд).
Ох уж этот 1wire, ненавижу этот протокол.
Отчего же?
Пардон за оффтоп, но 24-25 градусов в квартире не слишком много? Или просто датчик расположен близко к батареям?
Просто я живу в 9-этажке на среднем этаже, а топят хорошо :)
А почему не привели схему подключения? Схема подключения для датчика DS18B20 и DS18B20P будет отличаться, т.к. DS18B20P с паразитным питанием.
Хм, вторую схему вижу впервые. По датащиту (хорошее слово получилось) ds18b20 подключается двумя способами: с внешним питанием (в этом случае используется сопротивление 4,7кОм) или с паразитным питанием (в этом случае используется транзистор). В тексте я писал про наличие сопротивления на 4,7кОм, и мне казалось, что этого достаточно для того, чтобы иметь представление о способе подключения датчиков.
На графике Hourly inside по шкале Y три раза идет «24» — это разновидность самовнушения у малинки?
Видимо, это разновидность глюка у rrdgraph. Я в скрипте создания графиков использовал параметр --alt-autoscale, что выбирает шкалу по Y с минимальной добавкой вверх и вниз от максимального и минимального значения диапазона, чтобы максимально заполнять область графика. Возможно, у rrdgraph стоит ограничение на количество значащих цифр в шкале, отсюда и такая особенность.
Оказывается, есть такая опция как --alt-y-grid. rrd автоматически определяет шаг сетки, а эта опция обеспечивает автоматический выбор формы представления значений, чтобы была видна разница. Добавил во все графики. Обновил скрин в статье.
>>В скрипте я указал интервал хранения температур — 600 сек. (5 мин.)

Ммм?
Мдя, видимо промахнулся )))
Подправил текст с описанием.
Возьмите слово «чайник» в заголовке в кавычки. А то многие, к сожалению, увидели не то, что ожидали.
Отдельный орден полагается за ковыряние в перле будучи «чайником»! =)
Относительно Патч ядра для 1-wire: Если Вы установили свежий Raspbian “wheezy”, то патч не нужен, все модули уже на борту. Просто загружаем их
sudo modprobe w1-gpio
sudo modprobe w1_therm


Чтобы они загружались при старте системы
добавляем в /etc/modules
w1-gpio
w1_therm
Можете дополнить описание как научить «малинку» отправлять данные на Народный мониторинг для отображения статистики и графиков Google Chart c привязкой к карте мира?
PS Протокол передачи доступен после регистрации на основе email адреса.
PPS В случае успеха добавлю Ваше решение в каталог поддерживаемых решений ибо «малиновая» аудитория растет и вопросов по ее использованию все больше и больше приходит.
Это детально расписано здесь. Делал 1 к 1. Но если есть необходимость в том, чтобы все было в одном месте — пишите, внесу коррективы в эту статью.
Я только ЗА и считаю правильнее дополнить Вашу статью
Ок, сейчас дополню.
отлично, теперь тема раскрыта полностью)
В указанной статье упор сделан именно на отправку с роутера MR3020, а не «Малинки», что весьма не 1 к 1. Поэтому ожидается отдельное описание в т.ч. и взаимодействия.
Ну там для малинки приведен отдельный скрипт. Я его 1 к 1 без переделки взял — все работает отлично. Если бы были особенности-сложности, я бы написал в комментарии.
Упора на роутер нет, просто большая часть работы была проведена по нему, вот и описания больше, а по молинке большая часть работы в этой статье, а у меня оставшаяся работа описана.
Не получалось завеси датчик, от отчаяния решил установить патч 1-wire, хотя знал, что это лишнее. В результате Raspberry перестал грузиться, что было печально, ведь дело было в поле, в 50км от монитора с HDMI. Стоит обновить статью и указать в ней, что не надо этого делать) Хоть она и старая, в поиске вылезает в топ10
Поднял под Orange PI, тоже работает. Правда в Perl скрипте кавычки испортились, пришлось исправить чуток.
Вот правильный вариант, если кому интересно. Сервер использовал lighttpd.

#!/usr/bin/perl

use warnings; 
#use diagnostics;
&check_modules; 
&get_device_IDs;



foreach $device(@deviceIDs) {
    $reading = & read_device($device);
    if ($reading != "9999") {
        push(@temp_readings, $reading);
		push(@temp_readings, $reading);
    }
}

#update the database
`/usr/bin/rrdtool update /home/RRD/multirPItemp.rrd N:$temp_readings[0]:$temp_readings[1]`;
#`/usr/bin/rrdtool update /home/RRD/multirPItemp.rrd N:$temp_readings[0]`;


print "Temp 1 = $temp_readings[0]\n";
print "Temp 2 = $temp_readings[1]\n";


########################################################################
#Дополнения для narodmon.ru.По материалам habrahabr.ru/post/166373
# open(FILE, ">/home/RRD/pi/temperature/temp_out");#
#print FILE "$temp_readings[0]";#
#close(FILE);#
#open(FILE, ">/home/RRD/temp_in");#
#print FILE "$temp_readings[1]";#
#close(FILE);
#######################################################################

sub check_modules {
    $mods = `cat /proc/modules`;

	if ($mods =~ /w1_gpio/ && $mods =~ /w1_therm/) {
        print "w1 modules already loaded \n";
    } else {
        print "loading w1 modules \n";
        `sudo modprobe w1-gpio`;
        `sudo modprobe w1-therm`;
    }

}



sub get_device_IDs {#
    #The Hex IDs off all detected 1 - wire devices on the bus are stored in the file
	# "w1_master_slaves"

    #open file
    open(FILE, "/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves") or die("Unable to open file");

    #read file into an array
	@deviceIDs = <FILE>;

    #close file
    close(FILE);
}

sub read_device {
    #takes one parameter — a device ID
	#returns the temperature
    #if we have something like valid conditions
    #else we return "9999" for undefined


    $readcommand = "cat /sys/bus/w1/devices/".$_[0]."/w1_slave 2>&1";
    $readcommand =~ s/\R//g;
    $sensor_temp = `$readcommand`;

    if ($sensor_temp!~/No such file or directory/) {
        if ($sensor_temp!~/NO/) {
            $sensor_temp =~ /t=(\d+)/i;
            $sensor_temp =~ /t=(\D*\d+)/i;
            $temperature = (($1 / 1000));
        } else {
            $ret = "9999";
        }
    } else {
        $ret = "9999";
    }
}
а, да, в модуле check_modules надо перед `sudo modprobe w1-gpio`; надо добавить `modprobe w1-sunxi`;
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации