1-wire Mysql

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
worid
Сообщения: 16
Зарегистрирован: 26 ноя 2011, 01:15

1-wire Mysql

Сообщение worid » 26 ноя 2011, 11:23

Извиняюсь что целую тему создаю, но в других не могу найти.
С программированием я не селен, не могу понять как записывать данный с датчика температуры в Mysql.
По возможности не могли бы вы выложить скрипт который записывает данные Mysql и чтоб потом можно было из этих данных построить график уже.
Заранее благодарю.

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: 1-wire Mysql

Сообщение Andrey_B » 26 ноя 2011, 11:53

viewtopic.php?f=1&t=92&p=1316#p1316

Для PHP:

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

<?
$conn=mysql_connect("localhost", "username", "password");
mysql_select_db("test",$conn);
require "/opt/owfs/bin/ownet.php";
$ow=new OWNet("tcp://localhost:3000");
$my_value = $ow->get("28.D6C18D020000/temperature");
$sql = "INSERT INTO test_table VALUES (NOW(), $my_value)";
mysql_query($sql,$conn);
?>
Для Python работа с БД выглядит примерно так:

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

import sys
import MySQLdb
db = MySQLdb.connect(host='localhost', user='user', passwd='password', db='test')
cursor= db.cursor()
my_value = 30 # Здесь берем данные из 1-wire
cursor.execute("INSERT INTO test_table VALUES (NOW(), " + str(my_value) + ")")

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: 1-wire Mysql

Сообщение Andrey_B » 26 ноя 2011, 12:07

Еще проще с bash:

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

mysql -u user -ppassword --database=test -e "INSERT INTO test_table VALUES (NOW(), '`cat /mnt/1wire/28.02315A020000/temperature`')"

worid
Сообщения: 16
Зарегистрирован: 26 ноя 2011, 01:15

Re: 1-wire Mysql

Сообщение worid » 26 ноя 2011, 12:08

эм, у меня по этому пути require "/opt/owfs/bin/ownet.php"; нет такого файла:(

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: 1-wire Mysql

Сообщение Andrey_B » 26 ноя 2011, 12:10

Если вы компилировали owfs вручную из последних версий, то он лежит тут:
/opt/owfs/share/php/OWNet/ownet.php

Найти ownet.php в системе можно с помощью команды
find / -name "ownet.php"

worid
Сообщения: 16
Зарегистрирован: 26 ноя 2011, 01:15

Re: 1-wire Mysql

Сообщение worid » 26 ноя 2011, 12:19

файл нашелся /root/owfs-2.7p32/module/ownet/php/ownet.php
Как я понимаю он находится в исходниках.
Это так нормально или же установился owfs не правельно?

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: 1-wire Mysql

Сообщение Andrey_B » 26 ноя 2011, 12:28

Либо вы не выполняли команду make install,
либо у вас команда ./configure не нашла достаточных оснований для установки ownet.php
Запустите ./configure и обратите внимание на строчки:
Module configuration:
Среди прочих должно быть:
owphp is enabled
Если модуль отключен, проверьте, установлены ли в системе пакеты: php5, php5-dev, php5-cli

worid
Сообщения: 16
Зарегистрирован: 26 ноя 2011, 01:15

Re: 1-wire Mysql

Сообщение worid » 26 ноя 2011, 12:36

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

root@world-server:~/owfs-2.7p32# apt-get install php5 php5-dev php5-cli
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Некоторые пакеты невозможно установить. Возможно, вы просите невозможного,
или же используете нестабильную версию дистрибутива, где запрошенные вами
пакеты ещё не созданы или были удалены из Incoming.
Следующая информация, возможно, поможет вам:

Пакеты, имеющие неудовлетворённые зависимости:
 libc6-dev : Ломает: gcc-4.4 (< 4.4.6-4) но 4.4.5-8 будет установлен
Вот что выдает при попытке установить данные пакеты

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: 1-wire Mysql

Сообщение Andrey_B » 26 ноя 2011, 12:44

Проверьте ваш /etc/apt/sources.list на предмет сторонних или нестабильных репозиториев.
Выполните команды:

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

aptitude clean && aptitude update
aptitude -f install

xace
Сообщения: 56
Зарегистрирован: 12 май 2011, 18:07

Re: 1-wire Mysql

Сообщение xace » 26 ноя 2011, 15:42

Что бы не создавать тему... хотел спросить ...

Есть таблица

temp_date temp_value
-----------------------------------------
2011-11-15 00:00:03 26.25
2011-11-14 23:00:03 26.38
2011-11-14 22:00:03 26.63
2011-11-14 21:00:03 26.06

и т.д.

как мне сделать запрос чтобы выести массив для графиков

как в примере автора...

$ydata = array("температура", "температура", "температура", "температура");
$xdata = array("дата", "дата", "дата", "дата");

сломал всею голову.... еще сложнее для меня как вывести массив за сутки, неделю , месяц.
Автор подскажите. PHP только изучаю.

worid
Сообщения: 16
Зарегистрирован: 26 ноя 2011, 01:15

Re: 1-wire Mysql

Сообщение worid » 26 ноя 2011, 18:29

Подскажите при команде

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

/opt/owfs/bin/owfs -d /dev/ttyS0 -m /mnt/1wire
Ничего не происходит.
Хотя все подключено.
Датчик на ком порту

tester
Модератор
Сообщения: 49
Зарегистрирован: 18 мар 2011, 14:22
Откуда: СПб
Контактная информация:

Re: 1-wire Mysql

Сообщение tester » 26 ноя 2011, 20:17

я запускаюсь так:

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

owfs -u /mnt/owfs/
и считываем температуру:

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

cat /mnt/owfs/uncached/28.57Z9BD020000/temperature
скрипт на перле делает аналогично, читая файл раз в минуту и записывая в базу данных

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

my $sql="INSERT INTO 1wire_temp SET datetime='$ts'", temp1='$temp';
$sth=$db->prepare($sql);
$sth->execute || warn "$prdt: Error: " . $db->errstr;
$sth->finish;

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: 1-wire Mysql

Сообщение Andrey_B » 26 ноя 2011, 22:18

xace, запрос простой:
SELECT temp_date, temp_value FROM test_table
Поизучайте описание языка SQL

Если вы хотите выбрать данные за определенный период, то можно использовать такие запросы
SELECT temp_date, temp_value FROM test_table WHERE temp_date>(NOW() - INTERVAL 1 MONTH)
Запрос выберет данные за последний месяц
Посмотрите Date and Time Functions из документации MySQL

Скачайте архив демо-интерфейса, который я опубликовал. Там есть ответы на ваши вопросы
Файл graph.php

Заполнять архив можно так

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

$xdata = array();
$xdata[] = 1;
$xdata[] = 2;
$xdata[] = 3;
print_r($xdata)
На выходе получим

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

Array ( [0] => 1 [1] => 2 [2] => 3 ) 

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: 1-wire Mysql

Сообщение Andrey_B » 26 ноя 2011, 22:23

worid, а что по-вашему должно происходить?
Смотрите содержимое /mnt/1wire
Смотрите логи owfs. Если owfs вылетает, запускайте owfs с ключом --error_level=12 и смотрите /var/log/messages

worid
Сообщения: 16
Зарегистрирован: 26 ноя 2011, 01:15

Re: 1-wire Mysql

Сообщение worid » 27 ноя 2011, 10:17

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

root@debian:~# /opt/owfs/bin/owfs --error_level=12 -d /dev/ttyS0 /mnt/1-weri/
CONNECT: owfs.c:main(100) fuse mount point: /mnt/1-weri/
CONNECT: ow_avahi_link.c:OW_Load_avahi_library(72) No Avahi support. Library libavahi-client couldn't be loaded
CONNECT: ow_dnssd.c:OW_Load_dnssd_library(136) Zeroconf/Bonjour is disabled since dnssd library isn't found
   CALL: ow_parsename.c:FS_ParsedName_anywhere(95) path=[]
  DEBUG: owlib.c:SetupTemperatureLimits(79) Globals temp limits 0C 100C (for simulated adapters)
  DEBUG: ow_ds9097U.c:DS2480_initialize_repeatedly(267) Attempt #0 to initialize the DS9097U

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: 1-wire Mysql

Сообщение Andrey_B » 27 ноя 2011, 11:27

worid, "ничего не происходит" - это не описание проблемы. В чем именно заключается затруднение?
Из приведенного куска отладочной информации невозможно догадаться в чем сложность и тем более судить о ее причинах.
С флагом --error_level=12 в логе /var/log/messages появляется раз в 100 больше информации. Смотреть нужно лог
Откройте еще одну консоль и смотрите лог с помощью команды
tail -f /var/log/messages

Да, и прежде чем постить весь лог, попытайтесь понять причину самостоятельно.
Мы можем выучить таблицу умножения за вас, но тогда знать ее будем именно мы.

vtec
Сообщения: 459
Зарегистрирован: 19 сен 2011, 09:28

Re: 1-wire Mysql

Сообщение vtec » 28 ноя 2011, 09:06

Вот как у меня запускается сервер через COM порт:
/opt/owfs/bin/owserver -debug -d /dev/ttyS0 -p 3000

Вот так считываю:
<?php
require "/opt/owfs/bin/ownet.php";
$ow=new OWNet("tcp://localhost:3000");
$temp = $ow->read("288F36D402000088/temperature");
if (is_null($temp) or $temp==''){
$temp = $ow->read("288F36D402000088/temperature");
}
$temp = round($temp,0);
echo $temp;
unset($ow);
?>

worid
Сообщения: 16
Зарегистрирован: 26 ноя 2011, 01:15

Re: 1-wire Mysql

Сообщение worid » 28 ноя 2011, 18:22

mysql_select_db("test",$db);
$resultat = mysql_query("SELECT DATE_FORMAT(ow_date, '%H:%i'), ow_val FROM test_table WHERE ow_date>(NOW() - INTERVAL 1 DAY)",$db);
$array = mysql_fetch_array($resultat);

$ydata = $array['ow_date'];
$xdata = $array['ow_val'];

$graph = new Graph("800.600");
$graph->SetScale("textlin");
$graph->SetMarginColor('white');
$graph->SetFrame(true,'#B3BCCB', 1);
$graph->SetTickDensity(TICKD_DENSE);
$graph->img->SetMargin(50,20,20,60);
$graph->title->SetMargin(10);
$graph->xaxis->SetTickLabels($xdata);
$graph->xaxis->SetLabelAngle(90);
$graph->xaxis->SetPos('min');

$my_interval = ceil($i / 30);
$graph->xaxis->SetTextTickInterval($my_interval);

$lineplot=new LinePlot($ydata);
$graph->Add($lineplot);
$graph->Stroke();

Подскажите где тут может быть ошибка
Вложения
data.png
data.png (2.78 КБ) 37786 просмотров
Последний раз редактировалось worid 28 ноя 2011, 19:04, всего редактировалось 1 раз.

tester
Модератор
Сообщения: 49
Зарегистрирован: 18 мар 2011, 14:22
Откуда: СПб
Контактная информация:

Re: 1-wire Mysql

Сообщение tester » 28 ноя 2011, 18:40

Сегодня обнаружил неполадку: при использовании модуля аналоговых сигналов на основе DS2438 (от Бенукс), если он стоит в конце 1-wire цепочки, то все нормально, а вот если в промежутке, то вся сеть начинает скакать: то появляются модули, то исчезают, все кроме температурных датчиков (на паразитном). Переставляю модуль в конец - сразу все нормально.

Пытался найти что-то в логах, но --error_level=12 ничего не показывает. Предполагаю что проблема в питании 12в, но где и в чем не пойму. Может ли быть проблема в самом модуле? Причем до этого с ним все было отлично, работал бесперебойно недели две.

Подскажите как и что продиагностировать, где увидеть логи?!

UPD: По ходу что-то странное... на одном из контактов, где не должно быть ничего, появились +/- 10вольт, которые передавались по всей сети, странно что раньше такого не было...

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: 1-wire Mysql

Сообщение Andrey_B » 29 ноя 2011, 10:51

worid, jpgraph вам же пишет в чем ошибка. Данных нет.
Насколько я понимаю, у вас неправильно делается выборка из базы данных.
Собственно, в массив ничего не попадает.

Ответить