Sida 1 av 2
Hur få OWFS att logga till MySQL ?
Postat: 07 jun 2011, 14:29
av Quart
Hej
Har precis installerat OWFS (tack för en bra howto!)
Men jag vill ha in värdena i en MySQL databas och jag har sökt utan att hitta någon bra guide till hur man gör det.
Är det någon som kan hjälpa en "linux newbie" med detta ?
Re: Hur få OWFS att logga till MySQL ?
Postat: 07 jun 2011, 17:08
av CirruZZ
Det finns massor med olika vägar att gå, men alla bygger på något sorts script. Så det är upp till dig på vilket sätt du vill lösa det och vilket språk du känner dig bekväm med, eller som "newbi", minst obekväm med

Bash, Perl, PHP är väll dom vanligaste som används..
Re: Hur få OWFS att logga till MySQL ?
Postat: 07 jun 2011, 18:08
av jed
Ett snabbhack som jag skrev när jag testade home automation på min mac mini (har gått över till en virtuell debian på den nu, så snart jag har flashat om mitt qnap 409-nas med debian så kommer ha att köras på den)
Jag anropar den via crontab så den körs var femte minut med
Kod: Markera allt
*/5 * * * * /usr/bin/php /Library/WebServer/SSLDocuments/read_temp_to_mysql.php
Kod: Markera allt
<?php
include_once ("/Library/WebServer/SSLDocuments/system/mysql_settings.php");
# Path to owfs
$owfs_path = "/mnt/owfs";
# Connect to the database and select a db
mysql_connect ($mysqlHost, $mysqlUsername, $mysqlPassword);
mysql_select_db ($mysqlDatabase);
# Get serial from the database
$sensor_q = "SELECT serial FROM tempsensors ORDER by serial";
$sensor_r = @mysql_query ($sensor_q);
if (@mysql_num_rows ($sensor_r) > 0)
{
while ($_sensor = @mysql_fetch_object ($sensor_r))
{
$temp = exec ("/bin/cat $owfs_path/$_sensor->serial/temperature");
$date = date ("Y-m-d H:i:s");
$save_temp_q = "INSERT INTO temps (sensor_serial, temp_c, date)";
$save_temp_q .= " VALUES ('$_sensor->serial', '$temp', '$date')";
$save_temp_r = @mysql_query ($save_temp_q);
}
} else {
echo "No sensors found!<br />";
echo "Cowardly bailing out...<p>";
echo @mysql_error();
}
?>
mysql_settings.php:
Kod: Markera allt
<?php
$mysqlHost = "localhost";
$mysqlDatabase = "homeautomation";
$mysqlUsername = "ha";
$mysqlPassword = "långt och hemligt lösenord";
?>
Glöm inte att anpassa sökvägarna

Re: Hur få OWFS att logga till MySQL ?
Postat: 07 jun 2011, 21:01
av Quart
jed skrev:Ett snabbhack som jag skrev när jag testade home automation på min mac mini (har gått över till en virtuell debian på den nu, så snart jag har flashat om mitt qnap 409-nas med debian så kommer ha att köras på den)
Jag anropar den via crontab så den körs var femte minut med
Kod: Markera allt
*/5 * * * * /usr/bin/php /Library/WebServer/SSLDocuments/read_temp_to_mysql.php
Kod: Markera allt
<?php
include_once ("/Library/WebServer/SSLDocuments/system/mysql_settings.php");
# Path to owfs
$owfs_path = "/mnt/owfs";
# Connect to the database and select a db
mysql_connect ($mysqlHost, $mysqlUsername, $mysqlPassword);
mysql_select_db ($mysqlDatabase);
# Get serial from the database
$sensor_q = "SELECT serial FROM tempsensors ORDER by serial";
$sensor_r = @mysql_query ($sensor_q);
if (@mysql_num_rows ($sensor_r) > 0)
{
while ($_sensor = @mysql_fetch_object ($sensor_r))
{
$temp = exec ("/bin/cat $owfs_path/$_sensor->serial/temperature");
$date = date ("Y-m-d H:i:s");
$save_temp_q = "INSERT INTO temps (sensor_serial, temp_c, date)";
$save_temp_q .= " VALUES ('$_sensor->serial', '$temp', '$date')";
$save_temp_r = @mysql_query ($save_temp_q);
}
} else {
echo "No sensors found!<br />";
echo "Cowardly bailing out...<p>";
echo @mysql_error();
}
?>
mysql_settings.php:
Kod: Markera allt
<?php
$mysqlHost = "localhost";
$mysqlDatabase = "homeautomation";
$mysqlUsername = "ha";
$mysqlPassword = "långt och hemligt lösenord";
?>
Glöm inte att anpassa sökvägarna

Tack detta skall provas, har pillat en del med PHP så det borde jag lösa.
Återkommer med resultat
Re: Hur få OWFS att logga till MySQL ?
Postat: 16 jun 2011, 11:55
av Quart
Kan du ge mig info om hur dina databaser är skapade.
För jag vet inte hur jag skall skapa upp tabellerna
Skulle du vilja köra "copy create statment" på din databas
Re: Hur få OWFS att logga till MySQL ?
Postat: 16 jun 2011, 15:24
av jed
copy create table känner jag inte igen, inte mysql heller
Men show create table på temps och tempsensor ger:
Kod: Markera allt
CREATE TABLE `temps` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`sensor_serial` char(24) COLLATE latin1_general_ci DEFAULT NULL,
`temp_c` float DEFAULT NULL,
`date` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `date` (`date`)
)
Kod: Markera allt
CREATE TABLE `tempsensors` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`serial` char(24) COLLATE latin1_general_ci DEFAULT NULL,
`name` varchar(30) COLLATE latin1_general_ci DEFAULT NULL,
`sensortype` int(10) unsigned NOT NULL DEFAULT '0',
`sort` int(10) unsigned DEFAULT '0',
`dateadded` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
Tabellerna kommer från ha, jag har inte specat dom själv.
http://karpero.mine.nu/ha/
Re: Hur få OWFS att logga till MySQL ?
Postat: 16 jun 2011, 15:27
av Quart
Tack, kan ha blandat ihop kommandona, är ingen expert på Mysql precis
Re: Hur få OWFS att logga till MySQL ?
Postat: 16 jun 2011, 18:12
av jed
Så lite så, hoppas det funkar bra för dig!

Re: Hur få OWFS att logga till MySQL ?
Postat: 16 jun 2011, 19:47
av Quart
Givetvis dök jag på patrull.
Skapade databasen och tabellerna med hjälp av dina filer.
Men nu undrar jag om jag måste speca varje "sensor" i tabellen först innan jag kan köra read_temp_to_mysql.php
Samt så undrar jag vad som menas med # Path to owfs
jag tolkar det som att det är katalogen där sensorerna finns, hos mig /mnt/1-wire. ( Jag har följt howto här på temperatur )
Re: Hur få OWFS att logga till MySQL ?
Postat: 16 jun 2011, 20:54
av jed
Japp, du måste lägga in en post för varje sensor. Ha fungerar så, därför jag skrev skriptet på det sättet.
Finns det inga sensorer i tempsensors så kommer den att avsluta direkt.
$owfs_path ska du sätta till "/mnt/1-wire", jag har inte följt howton här

Re: Hur få OWFS att logga till MySQL ?
Postat: 16 jun 2011, 21:06
av Quart
YES, Fick till det nu loggas iallafall min hittils enda inkopplade tempgivare till mysql, nu är det bara elmätarna kvar.
Har försökt skapa en ny databas kallad el, där har jag använt samma script för att skapa tabellerna förutom att jag döpt om temp_c till counts
Men jag får inte till det. så här ser scriptet ut
Kod: Markera allt
<?php
include_once ("/var/www/mysql_settings_el_a.php");
# Connect to the database and select a db
mysql_connect ($mysqlHost, $mysqlUsername, $mysqlPassword);
mysql_select_db ($mysqlDatabase);
{
$temp = exec ("/bin/cat /mnt/1wire/uncached/1D.C58C0C000000/counters_A");
$date = date ("Y-m-d H:i:s");
$save_temp_q = "INSERT INTO el_a (1D.C58C0C000000l, counts, date)";
$save_temp_q .= " VALUES ('$_sensor->serial', '$temp', '$date')";
$save_temp_r = @mysql_query ($save_temp_q);
}
} else {
echo "No sensors found!<br />";
echo "Cowardly bailing out...<p>";
echo @mysql_error();
}
?>
Re: Hur få OWFS att logga till MySQL ?
Postat: 17 jun 2011, 09:19
av jed
Quart skrev:YES, Fick till det nu loggas iallafall min hittils enda inkopplade tempgivare till mysql, nu är det bara elmätarna kvar.
Har försökt skapa en ny databas kallad el, där har jag använt samma script för att skapa tabellerna förutom att jag döpt om temp_c till counts
Men jag får inte till det. så här ser scriptet ut
Vad får du för felmeddelande? Din INSERT-sats ser lite klurig ut...
Prova att lägga in:
echo @mysql_error();
efter:
$save_temp_r = @mysql_query ($save_temp_q);
Syntaxen för INSERT ser ut så här:
INSERT INTO [tabell] ([rad1], [rad2], [rad3]) VALUES ('[värde1], [värde2], [värde3]);
Du har blandat ihop fältnamnet med datat som du vill stoppa in.
Prova:
Kod: Markera allt
<?php
include_once ("/var/www/mysql_settings_el_a.php");
# Connect to the database and select a db
mysql_connect ($mysqlHost, $mysqlUsername, $mysqlPassword);
mysql_select_db ($mysqlDatabase);
$temp = exec ("/bin/cat /mnt/1wire/uncached/1D.C58C0C000000/counters_A");
$date = date ("Y-m-d H:i:s");
$save_temp_q = "INSERT INTO el_a (sensor_serial, counts, date)";
$save_temp_q .= " VALUES ('1D.C58C0C000000l', '$temp', '$date')";
$save_temp_r = @mysql_query ($save_temp_q);
?>
Om fältet inte heter sensor_serial så byt ut det.
Heter tabellen el eller el_a? Heter den el så byt ut el_a ovan
Re: Hur få OWFS att logga till MySQL ?
Postat: 17 jun 2011, 10:06
av Quart
jed skrev:Quart skrev:YES, Fick till det nu loggas iallafall min hittils enda inkopplade tempgivare till mysql, nu är det bara elmätarna kvar.
Har försökt skapa en ny databas kallad el, där har jag använt samma script för att skapa tabellerna förutom att jag döpt om temp_c till counts
Men jag får inte till det. så här ser scriptet ut
Vad får du för felmeddelande? Din INSERT-sats ser lite klurig ut...
Prova att lägga in:
echo @mysql_error();
efter:
$save_temp_r = @mysql_query ($save_temp_q);
Syntaxen för INSERT ser ut så här:
INSERT INTO [tabell] ([rad1], [rad2], [rad3]) VALUES ('[värde1], [värde2], [värde3]);
Du har blandat ihop fältnamnet med datat som du vill stoppa in.
Prova:
Kod: Markera allt
<?php
include_once ("/var/www/mysql_settings_el_a.php");
# Connect to the database and select a db
mysql_connect ($mysqlHost, $mysqlUsername, $mysqlPassword);
mysql_select_db ($mysqlDatabase);
$temp = exec ("/bin/cat /mnt/1wire/uncached/1D.C58C0C000000/counters_A");
$date = date ("Y-m-d H:i:s");
$save_temp_q = "INSERT INTO el_a (sensor_serial, counts, date)";
$save_temp_q .= " VALUES ('1D.C58C0C000000l', '$temp', '$date')";
$save_temp_r = @mysql_query ($save_temp_q);
?>
Om fältet inte heter sensor_serial så byt ut det.
Heter tabellen el eller el_a? Heter den el så byt ut el_a ovan
Stort tack, nu är jag på god väg tror jag
Kör enligt koden nedan nu, får "Data truncated for column 'counts' at row 1"
Kod: Markera allt
<?php
include_once ("/var/www/mysql_settings_el_a.php");
# Connect to the database and select a db
mysql_connect ($mysqlHost, $mysqlUsername, $mysqlPassword);
mysql_select_db ($mysqlDatabase);
$temp = exec ("/bin/cat /mnt/1wire/uncached/1D.C58C0C000000/counters_A");
$date = date ("Y-m-d H:i:s");
$save_temp_q = "INSERT INTO el_a (sensor_serial, counts, date)";
$save_temp_q .= " VALUES ('1D.C58C0C000000', '$counts', '$date')";
$save_temp_r = @mysql_query ($save_temp_q);
echo @mysql_error();
?>
Re: Hur få OWFS att logga till MySQL ?
Postat: 17 jun 2011, 10:20
av daromer
$temp = exec ("/bin/cat /mnt/1wire/uncached/1D.C58C0C000000/counters_A");
Borde väl vara
$counts = exec ("/bin/cat /mnt/1wire/uncached/1D.C58C0C000000/counters_A");
Re: Hur få OWFS att logga till MySQL ?
Postat: 17 jun 2011, 10:50
av Quart
daromer skrev:$temp = exec ("/bin/cat /mnt/1wire/uncached/1D.C58C0C000000/counters_A");
Borde väl vara
$counts = exec ("/bin/cat /mnt/1wire/uncached/1D.C58C0C000000/counters_A");
Fasen du hann skriva det fortare än
Nu funkar det, nu loggas temp och el både till rrd och mysql
STORT TACK TILL ALLA HJÄLPSAMMA MÄNNISKOR PÅ DETTA FORUM.
EN LINUX och MySQL NEWBIE har lärt sig massor av ER.