#lang racket/base (require (prefix-in db: (planet ryanc/db:1:5))) (define pgc (db:postgresql-connect #:user "ebus" #:database "ebus" #:password "ebus" #:server "10.2.2.26")) ;; Query ID of sensor given by sensor-name ;; Returns null if sensor is undefined (define (get-sensor-id sensor-name) (with-handlers ([exn:fail? (lambda (exn) (void))]) (db:query-value pgc "SELECT id FROM sensor WHERE name = $1" sensor-name))) ;; Create Sensor-ID with given name ;; returns id (define (create-sensor-id sensor-name) (db:query-exec "INSERT INTO sensor(name) VALUES ($1)" sensor-name) (get-sensor-id sensor-name)) ;; Get ID of sensor given by sensor-name ;; define sensor if needed (define (sensor-id sensor-name) (let ([id (get-sensor-id sensor-name)]) (cond ((void? id) (create-sensor-id sensor-id)) (else id)))) (define (insert sensor-name value-float value-int value-string) (let ([sensor-id (sensor-id sensor-name)] [type (cond ((not (void? value-string)) "string") ((not (void? value-float)) "float") ((not (void? value-int)) "int"))]) (db:query-exec (string-append "INSERT INTO value(timestamp, sensor_id, type, value_float, value_int, value_string) " "VALUES (now(), $1, $2, $3, $4, $5)") sensor-id type value-float value-int value-string)))