summaryrefslogtreecommitdiffstats
path: root/src/smart-relay.rkt
blob: 2ce045f753ee9e5baf088fd8ddec232c034809bb (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
29
30
31
32
33
34
35
36
37
38
#lang racket/base

(require racket/place)
(require racket/match)
(require (file "utils.rkt"))

(provide main)

(define (main #:host        [host        "localhost"]
              #:username    [username    #f]
              #:password    [password    #f]
              #:client-name [client-name "smart-relay"]
              #:topic-name  [topic-name  "hsp/bobma/smart-relay"]
              #:relay-dev   [relay-dev   "/dev/ttyUSB0"])
  (define toggle-relay
    (make-toggle-relay relay-dev))

  (define toggle-blinker-relay
    (make-toggle-blinker-relay toggle-relay))

  (define (make-mqtt-worker)
    (let ((mqtt-worker (dynamic-place (string->path "mqtt-client.rkt") 'main)))
     (place-channel-put mqtt-worker (list host
                                          username
                                          password
                                          client-name
                                          topic-name))
     mqtt-worker))

  (define mqtt-worker (make-mqtt-worker))

  (let loop ()
    (match (place-channel-get mqtt-worker)
      ['toggle
       (toggle-relay)]
      ['toggle-blinker
       (toggle-blinker-relay)])
    (loop)))