summaryrefslogtreecommitdiff
path: root/src/app/temperature.clj
blob: 1bdeac8b7ca13b12ce977e923d094ce6dad95ca9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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)))