2017-12-06 13:34 GMT+01:00 Darko Volaric <li...@darko.org>: > How it's stored depends on how the messages table is defined (which type > the message column has been given), which you haven't shown, and whether > storeMessage quotes the message argument when forming the string. My advice > is to remove any column type and make sure numbers are not quoted when they > are inserted into the database. >
I should have added those also: CREATE TABLE messages( messageID INTEGER PRIMARY KEY AUTOINCREMENT, date TEXT NOT NULL DEFAULT CURRENT_DATE, time TEXT NOT NULL DEFAULT CURRENT_TIME, type TEXT NOT NULL, message NOT NULL ) As you see message does not have any type. storeMessage: proc storeMessage {type message} { db eval " INSERT INTO messages (type, message) VALUES (:type, :message) " } I changed it to: proc storeMessage {type message} { db eval { INSERT INTO messages (type, message) VALUES (:type, :message) } } But that does not make a difference. On Wed, Dec 6, 2017 at 11:09 AM, Cecil Westerhof <cldwester...@gmail.com> > wrote: > > > I have the following tcl script: > > #!/usr/bin/env tclsh > > > > ### Improvements > > # Get database from conf-file > > > > > > package require sqlite3 > > CREATE TABLE messages( > messageID INTEGER PRIMARY KEY AUTOINCREMENT, > date TEXT NOT NULL DEFAULT CURRENT_DATE, > time TEXT NOT NULL DEFAULT CURRENT_TIME, > type TEXT NOT NULL, > message NOT NULL > ) > > > > proc getCPUTemp {} { > > if {1 != [regexp -all -line {^CPU_TEMP: +\+([0-9.]+)°C } [exec > > sensors] -> temp]} { > > error {Did not get exactly a single temperature line from > [exec > > sensors] output} CREATE TABLE messages( > messageID INTEGER PRIMARY KEY AUTOINCREMENT, > date TEXT NOT NULL DEFAULT CURRENT_DATE, > time TEXT NOT NULL DEFAULT CURRENT_TIME, > type TEXT NOT NULL, > message NOT NULL > ) > > } > > return ${temp} > > } > > > > proc storeCPUTemp {} { > > storeMessage cpu-temp [getCPUTemp] > > } > > > > proc storeMessage {type message} { > > db eval " > > INSERT INTO messages > > (type, message) > > VALUES > > (:type, :message) > > " > > } CREATE TABLE messages( > messageID INTEGER PRIMARY KEY AUTOINCREMENT, > date TEXT NOT NULL DEFAULT CURRENT_DATE, > time TEXT NOT NULL DEFAULT CURRENT_TIME, > type TEXT NOT NULL, > message NOT NULL > ) > > > > proc storeSwap {} { > > storeMessage swap-usage [exec swapon --noheadings --show] > > } > > > > if {$argc != 1} { > > error "Error: ${argv0} DATABASE" > > } > > sqlite db [lindex $argv 0] > > db timeout 10000 > > while {true} { > > after [expr {1000 * (60 - [clock seconds] % 60)}] > > set currentMinute [clock format [clock seconds] -format %M] > > db transaction { > > storeCPUTemp > > # At the whole hour we save swap usage > > if {${currentMinute} == "00"} { > > storeSwap > > } > > } > > } > > # Not really necessary because the above loop never ends > > # But I find this more clear and is robuster against change > > db close > > > > If I enter: > > SELECT date > > , message > > , TYPEOF(message) > > FROM messages > > WHERE type = 'cpu-temp' > > AND date = '2017-12-06' > > > > I see that the temperature is saved as text. > > In the past I had a script like this in Python who would save the > > temperature as real. What do I need to change to let this script save it > as > > real also? > > > > -- > > Cecil Westerhof > > _______________________________________________ > > sqlite-users mailing list > > sqlite-users@mailinglists.sqlite.org > > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > > > _______________________________________________ > sqlite-users mailing list > sqlite-users@mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > -- Cecil Westerhof _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users