Hur få OWFS att logga till MySQL ?

OWFS - One Wire File System är en Linuxmjukvara som stödjer de flesta kommersiellt tillgängliga 1wire-enheterna. OWFS saknar helt möjligheter att presentera data - detta måste göras med tex RRDTool

Moderator: elf98

Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
Quart
Moderator
Inlägg: 561
Blev medlem: 17 jun 2007, 21:14
Ort: Hindås
Kontakt:

Hur få OWFS att logga till MySQL ?

Inlägg av Quart » 07 jun 2011, 14:29

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 ?
Användarvisningsbild
CirruZZ
Master Moderator
Inlägg: 1621
Blev medlem: 13 feb 2008, 16:46
Ort: Ystad
Kontakt:

Re: Hur få OWFS att logga till MySQL ?

Inlägg av CirruZZ » 07 jun 2011, 17:08

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 :wink: Bash, Perl, PHP är väll dom vanligaste som används..
Projekt tråd | Blogg | Hemautomation
Rapporterar för : Ystad & Duved
jed
Tar hemautomation på allvar
Inlägg: 179
Blev medlem: 16 apr 2011, 10:51
Ort: Stockholm

Re: Hur få OWFS att logga till MySQL ?

Inlägg av jed » 07 jun 2011, 18:08

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 :)
Quart
Moderator
Inlägg: 561
Blev medlem: 17 jun 2007, 21:14
Ort: Hindås
Kontakt:

Re: Hur få OWFS att logga till MySQL ?

Inlägg av Quart » 07 jun 2011, 21:01

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
Quart
Moderator
Inlägg: 561
Blev medlem: 17 jun 2007, 21:14
Ort: Hindås
Kontakt:

Re: Hur få OWFS att logga till MySQL ?

Inlägg av Quart » 16 jun 2011, 11:55

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
jed
Tar hemautomation på allvar
Inlägg: 179
Blev medlem: 16 apr 2011, 10:51
Ort: Stockholm

Re: Hur få OWFS att logga till MySQL ?

Inlägg av jed » 16 jun 2011, 15:24

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/
Quart
Moderator
Inlägg: 561
Blev medlem: 17 jun 2007, 21:14
Ort: Hindås
Kontakt:

Re: Hur få OWFS att logga till MySQL ?

Inlägg av Quart » 16 jun 2011, 15:27

Tack, kan ha blandat ihop kommandona, är ingen expert på Mysql precis
jed
Tar hemautomation på allvar
Inlägg: 179
Blev medlem: 16 apr 2011, 10:51
Ort: Stockholm

Re: Hur få OWFS att logga till MySQL ?

Inlägg av jed » 16 jun 2011, 18:12

Så lite så, hoppas det funkar bra för dig! :)
Quart
Moderator
Inlägg: 561
Blev medlem: 17 jun 2007, 21:14
Ort: Hindås
Kontakt:

Re: Hur få OWFS att logga till MySQL ?

Inlägg av Quart » 16 jun 2011, 19:47

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 )
jed
Tar hemautomation på allvar
Inlägg: 179
Blev medlem: 16 apr 2011, 10:51
Ort: Stockholm

Re: Hur få OWFS att logga till MySQL ?

Inlägg av jed » 16 jun 2011, 20:54

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 ;)
Quart
Moderator
Inlägg: 561
Blev medlem: 17 jun 2007, 21:14
Ort: Hindås
Kontakt:

Re: Hur få OWFS att logga till MySQL ?

Inlägg av Quart » 16 jun 2011, 21:06

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();
}
?>
jed
Tar hemautomation på allvar
Inlägg: 179
Blev medlem: 16 apr 2011, 10:51
Ort: Stockholm

Re: Hur få OWFS att logga till MySQL ?

Inlägg av jed » 17 jun 2011, 09:19

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
Quart
Moderator
Inlägg: 561
Blev medlem: 17 jun 2007, 21:14
Ort: Hindås
Kontakt:

Re: Hur få OWFS att logga till MySQL ?

Inlägg av Quart » 17 jun 2011, 10:06

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();
?>
daromer
Hemautomation - det är mer än en hobby
Inlägg: 961
Blev medlem: 23 sep 2009, 09:31
Ort: Växjö

Re: Hur få OWFS att logga till MySQL ?

Inlägg av daromer » 17 jun 2011, 10:20

$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");
Quart
Moderator
Inlägg: 561
Blev medlem: 17 jun 2007, 21:14
Ort: Hindås
Kontakt:

Re: Hur få OWFS att logga till MySQL ?

Inlägg av Quart » 17 jun 2011, 10:50

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 :wink:

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.
Skriv svar