1-wire sensorvärde till SQL

I detta forum hör diskussioner gällande teknik i största allmänhet och hemautomation i synnerhet hemma.
Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
gnagis
Tar hemautomation på allvar
Inlägg: 82
Blev medlem: 14 maj 2009, 10:08
Ort: Stockholm

1-wire sensorvärde till SQL

Inlägg av gnagis »

Jag kör idag ett 1-wire system på en Windows PC.
Har ett gäng sensorer, vars värden sparas i olika tabeller i 1 databas.
Nu håller jag på att försöka flytta över till en Raspberry Pi.
Jag har kommit så här pass långt :
2013-09-10-wheezy-raspbian.img i grunden.
Sedan har jag installerat LAMP.
Har 2 st sensorer på 1-wire som är kopplad till RPi:n via en "Adapter USB 1wire (DS9490R)"
Sensor-värdet sparas i filen temperature, som ligger i /mnt/1wire/10.1CF43E010800
Har importerat en tabell från gamla systemet in i befintlig Databas i RPi:n.
Nu försöker jag förtvivlat förstå och få till det så att värdena sparas till min Importerade tabell.
Jag behöver alltså hjälp med hur jag ska skriva ett script för att t.ex var 5:e minut, spara värdet till SQL-tabellen
PatrikN78
Tar hemautomation på allvar
Inlägg: 99
Blev medlem: 24 dec 2011, 16:24
Ort: Jämjö

Re: 1-wire sensorvärde till SQL

Inlägg av PatrikN78 »

Bara för att reda ut begreppen lite: det är (My)SQL du vill spara till?
Eller det vanligaste som är en RRD-databas?
gnagis
Tar hemautomation på allvar
Inlägg: 82
Blev medlem: 14 maj 2009, 10:08
Ort: Stockholm

Re: 1-wire sensorvärde till SQL

Inlägg av gnagis »

Till MySQL
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: 1-wire sensorvärde till SQL

Inlägg av flyvert »

gnagis skrev:Till MySQL
Om du läser denna tråd som egentligen rör hur man kan skapa trender i webklienter från MySQL finner du mitt högst rudimentära insamlings & lagringsskript som jag schedulerar via cron:

http://www.temperatur.nu/forum/linux/be ... t3115.html

I sitt allra enklaste kan ett skript se ut så här (du måste givetvis anpassa för hur du loggar på vad tabellen heter och vilka kolumner du har i tabellen:

#!/bin/bash

sens1temp=$(cat /mnt/1wire/7E.C42600001000/EDS0068/temperature)

mysql --user=user --password=pw << ENDSQL
use onewire
insert into data ( time, sensorid, property, value, aggregate ) values ( now(), 1, 1, $sens1temp, 1 );
ENDSQL


Ovantstående saknar all form av felhantering, t.ex om OWFS eller MySQL ligger nere - man får kika i logfilen som cronjobbet lämnar på /tmp (se nedan).

Sen får du göra "man cron" och "man crontab" eller läsa på nätet hur cron fungerar.
Har för mig att jag fick först addera "pi" till cron.allow, i annat fall kan endast root köra cron.

Som du ser har jag lite ett o annat som cron drar runt åt mig:
pi@Raspberry ~ $ crontab -l
* * * * * /usr/local/bin/loggatemp > /tmp/loggatemp.log 2>&1
0 * * * * /usr/local/bin/loggastatistik > /tmp/loggastatistik.log 2>&1
0 * * * * /usr/bin/mysql --user=user --password=pw -e'call updatehourdata;' onewire > /tmp/updatehourdata.log 2>&1
1 0 * * * /usr/bin/mysql --user=user --password=pw -e'call updatedaydata;' onewire > /tmp/updatedaydata.log 2>&1
2 0 * * 1 /usr/bin/mysql --user=user --password=pw -e'call updateweekdata;' onewire > /tmp/updateweekdata.log 2>&1
3 0 1 * * /usr/bin/mysql --user=user --password=pw -e'call updatemonthdata;' onewire > /tmp/updatemonthdata.log 2>&1
15 0 1 * * /usr/local/bin/dbbackup > /tmp/dbbackup.log 2>&1


/f
Om traktorn stjälper; håll i ratten, hoppa ej!
riro
Tar hemautomation på allvar
Inlägg: 161
Blev medlem: 19 feb 2008, 15:35
Ort: Falun

Re: 1-wire sensorvärde till SQL

Inlägg av riro »

gnagis
Tar hemautomation på allvar
Inlägg: 82
Blev medlem: 14 maj 2009, 10:08
Ort: Stockholm

Re: 1-wire sensorvärde till SQL

Inlägg av gnagis »

Mitt stora problem är att jag inte har så mycket kunskap, så jag har svårt att förstå vad jag behöver ändra i olika filer, så det ska passa mitt system.
Jag har hittat hur mycket exempel som helst, men lyckas inte anpassa det till mitt system.
Jag är alltså en totalt newbie och behöver mer detaljerad hjälp.
Om nån har ett tips på script så kanske en variant skulle vara att det jag behöver ändra på för att få det att fungera, kanske vore att rödmarkera det ?
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: 1-wire sensorvärde till SQL

Inlägg av flyvert »

Okej,

Det finns nog två (eller fler) vägar att välja på här.

1) Antingen tar du ett färdigt exempel, t.ex. switchkingskriptet som riro länkade till
2) Eller så får du gå lite SQL/PHP skola på nätet o här på forumet

Jag tog alt 2 då jag ofta vill ha egen touch på saker o ting, samt inte är helt rädd att programmera o prova på saker. Det underlättar givetvis om du har någon bakgrund med datorer o programmering, om så bara i Basic på en ZX Spectrum 48K som jag började med på åttiotalet...

Prova lite "hello world" prylar (ja, det går att googla på "hello world mysql" o andra saker - var inte rädd att "datorn går sönder"... :D

Du har ju trots allt skaffat dig en RPi, MySQL och fått in en dump av en tabell det är tom mer än vad jag gjort! :D

Antar att du vet vad följande SQL sats gör?
mysql> select now();

Anta att du vill köra den 1 ggr/minut o låta output gå till en logfil?

Laga följande textfil o lägg den på t.ex. /usr/local/bin med något passande namn, t.ex. "tid".
Observera att du måste byta ut user, pw och o db mot den user o databas du har i din RPi.

Kod: Markera allt

#!/bin/bash
mysql --user=user --password=pw << ENDSQL
 use db
 select now();
ENDSQL
[/color]

Se till att den blir exekverbar med
$ sudo chmod 755 /usr/local/bin/tid

Prova att köra skriptet...
$ tid
(du behöver inte ge full sökväg till skriptet - /usr/local/bin finns med i PATH variabeln...)

Okej, om du nu vill köra detta 1 ggr/minut så är det enklast att låta cron göra saken.
Underskatta aldrig kraften i "man" - prova "man man"...
$ man cron
$ man crontab


cron o crontab kan användas för att schedulera saker o ting i Linux.
Formatet står omnämnt i manualerna. Följande entry i cron skulle köra ditt tidsskript varje minut
* * * * * /usr/local/bin/tid

Dock skulle outputen bli mailad till dig och så småningom fylla disken.
För att ta reda på output kan man pipea man den till filer.

* * * * * /usr/local/bin/tid > /tmp/tid.log 2>&1
Ovanstående rad skickar outputen till /tmp/tid.log. 2>&1 ordnar så att ev. fel oxo skickas till samma fil, annars går de som mail.

Ett alternativ är:
* * * * * /usr/local/bin/tid > /tmp/tid.log 2> /tmp/tid.fel.log

För att få skapa cronjob måste användaren finnas med i filen:
/etc/cron.allow

För att bekvämt kunna köra jobb som "pi" (defaultanvändaren) måste du se till att det finns en rad i filen som innehåller "pi", min cron.allow ser ut så här (cat används för att dumpa dvs "läsa ut" filer till kommandoraden:
$ cat /etc/cron.allow
pi


För att addera cronjobbet, lägg raden "* * * * * /usr/local/bin/tid > /tmp/tid.log 2>&1" i en textfil, t.ex. pi.cron och "läs in den" med:
$ crontab pi.cron

Verifiera med:
$ crontab -l

Sen är det bara att vänta på nästa minut och sen förhoppningsvis se resultatet på /tmp katalogen.

Med detta bakom dig är det bara att fortsätta att följa de exempel jag givit tidigare, t.ex. att läsa innehållet i "/mnt/1wire/10.1CF43E010800" filen o "trycka in" det i din databas.

Återkom med kommentarer...

/f
Om traktorn stjälper; håll i ratten, hoppa ej!
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: 1-wire sensorvärde till SQL

Inlägg av flyvert »

Hur gick det gnagis?
Om traktorn stjälper; håll i ratten, hoppa ej!
gnagis
Tar hemautomation på allvar
Inlägg: 82
Blev medlem: 14 maj 2009, 10:08
Ort: Stockholm

Re: 1-wire sensorvärde till SQL

Inlägg av gnagis »

Hej flyvert
Mega-tack för ditt inlägg. Har tyvärr inte haft möjlighet ännu.
Jag har hållit på mycket med datorer under många år, tycker att jag kan en hel del och kan lite DOS t.o.m. Så jag är inte rädd att grejerna ska "explodera" :-)
Men just SQL har jag inte pysslat speciellt mycket med, så det är därför och det jag behöver lite extrahjälp med och ska genast börja testa det du skrev i inlägget
Tack så länge !
Återkommer snarast med resultat.
Skriv svar