diff options
Diffstat (limited to 'src/app/temperature.clj')
-rw-r--r-- | src/app/temperature.clj | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/app/temperature.clj b/src/app/temperature.clj new file mode 100644 index 0000000..1bdeac8 --- /dev/null +++ b/src/app/temperature.clj @@ -0,0 +1,28 @@ +(ns app.temperature + (:import (java.nio.file Files Paths) + (java.util.concurrent Executors TimeUnit))) + +(def temp (agent nil)) + +(defn poll + [state] + (let [path (Paths/get "/sys/bus/w1/devices" (make-array String 0)) + devices (Files/newDirectoryStream path "28-*") + files (map #(.resolve % "w1_slave") devices) + temperatures (map (fn [file] + (let [id (.. file + (getName 4) + (toString) + (substring 3)) + temp (-> (Files/readAllLines + file StandardCharsets/UTF_8) + (second) + (.split "t=") + (second))] + [id temp])) files)] + (assoc state :state temperatures))) + +(defn init + [] + (let [executor (Executors/newSingleThreadScheduledExecutor)] + (.scheduleAtFixedRate executor #(send temp poll) 0 10 TimeUnit/SECONDS))) |