summaryrefslogtreecommitdiff
path: root/src/app/temperature.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/temperature.clj')
-rw-r--r--src/app/temperature.clj28
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)))