itiscold 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/Rakefile +1 -1
- data/bin/itiscold +1 -0
- data/lib/itiscold.rb +43 -95
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: cd0869cec41e9176d979090a0aef0bfea8794a85dc0509df7b178ba1e4d883b7
|
4
|
+
data.tar.gz: bacb9058aed2cd7513310e8107ea6980ad5f34b7dbf90127ce4ae28a5c58234b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 173188a5ad7a6323de6bf79c8535e42ee4add3e65e056d3b2f9a563d8f6d99718a63dddc0d94cf8c4b2eb86ba693e8bc5daae7b011f45bce8fbda94dfe3466ea
|
7
|
+
data.tar.gz: e92feba74df7e9aa2b456f3ca1eb77518dfade47d339e324728b07a84bd5a515117c253304c6bbffe4870cddefa3ceefcb6050db7a44a8b8b13c2509c6c9c639
|
data/Rakefile
CHANGED
data/bin/itiscold
CHANGED
data/lib/itiscold.rb
CHANGED
@@ -2,101 +2,18 @@ require 'termios'
|
|
2
2
|
require 'fcntl'
|
3
3
|
require 'webrick'
|
4
4
|
require 'json'
|
5
|
+
require 'uart'
|
6
|
+
require 'io/wait'
|
5
7
|
|
6
8
|
class Itiscold
|
7
|
-
VERSION = '1.0.
|
8
|
-
|
9
|
-
class TTY
|
10
|
-
include Termios
|
11
|
-
|
12
|
-
def self.open filename, speed, mode
|
13
|
-
if mode =~ /^(\d)(\w)(\d)$/
|
14
|
-
t.data_bits = $1.to_i
|
15
|
-
t.stop_bits = $3.to_i
|
16
|
-
t.parity = { 'N' => :none, 'E' => :even, 'O' => :odd }[$2]
|
17
|
-
t.speed = speed
|
18
|
-
t.read_timeout = 5
|
19
|
-
t.reading = true
|
20
|
-
t.update!
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.data_bits t, val
|
25
|
-
t.cflag &= ~CSIZE # clear previous values
|
26
|
-
t.cflag |= const_get("CS#{val}") # Set the data bits
|
27
|
-
t
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.stop_bits t, val
|
31
|
-
case val
|
32
|
-
when 1 then t.cflag &= ~CSTOPB
|
33
|
-
when 2 then t.cflag |= CSTOPB
|
34
|
-
else
|
35
|
-
raise
|
36
|
-
end
|
37
|
-
t
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.parity t, val
|
41
|
-
case val
|
42
|
-
when :none
|
43
|
-
t.cflag &= ~PARENB
|
44
|
-
when :even
|
45
|
-
t.cflag |= PARENB # Enable parity
|
46
|
-
t.cflag &= ~PARODD # Make it not odd
|
47
|
-
when :odd
|
48
|
-
t.cflag |= PARENB # Enable parity
|
49
|
-
t.cflag |= PARODD # Make it odd
|
50
|
-
else
|
51
|
-
raise
|
52
|
-
end
|
53
|
-
t
|
54
|
-
end
|
55
|
-
|
56
|
-
def self.speed t, speed
|
57
|
-
t.ispeed = const_get("B#{speed}")
|
58
|
-
t.ospeed = const_get("B#{speed}")
|
59
|
-
t
|
60
|
-
end
|
61
|
-
|
62
|
-
def self.read_timeout t, val
|
63
|
-
t.cc[VTIME] = val
|
64
|
-
t.cc[VMIN] = 0
|
65
|
-
t
|
66
|
-
end
|
67
|
-
|
68
|
-
def self.reading t
|
69
|
-
t.cflag |= CLOCAL | CREAD
|
70
|
-
t
|
71
|
-
end
|
72
|
-
end
|
9
|
+
VERSION = '1.0.2'
|
73
10
|
|
74
11
|
def self.open filename, speed = 115200
|
75
|
-
f =
|
76
|
-
f.binmode
|
77
|
-
f.sync = true
|
78
|
-
|
79
|
-
# enable blocking reads, otherwise read timeout won't work
|
80
|
-
f.fcntl Fcntl::F_SETFL, f.fcntl(Fcntl::F_GETFL, 0) & ~Fcntl::O_NONBLOCK
|
81
|
-
|
82
|
-
t = Termios.tcgetattr f
|
83
|
-
t.iflag = 0
|
84
|
-
t.oflag = 0
|
85
|
-
t.lflag = 0
|
86
|
-
t = TTY.data_bits t, 8
|
87
|
-
t = TTY.stop_bits t, 1
|
88
|
-
t = TTY.parity t, :none
|
89
|
-
t = TTY.speed t, speed
|
90
|
-
t = TTY.read_timeout t, 5
|
91
|
-
t = TTY.reading t
|
92
|
-
|
93
|
-
Termios.tcsetattr f, Termios::TCSANOW, t
|
94
|
-
Termios.tcflush f, Termios::TCIOFLUSH
|
12
|
+
f = UART.open filename, speed
|
95
13
|
|
96
14
|
temp = new f
|
97
15
|
|
98
16
|
# Try reading the version a few times before giving up
|
99
|
-
temp.flush
|
100
17
|
temp
|
101
18
|
end
|
102
19
|
|
@@ -125,10 +42,21 @@ class Itiscold
|
|
125
42
|
:new_station_number
|
126
43
|
|
127
44
|
def device_info
|
128
|
-
val =
|
129
|
-
|
130
|
-
|
45
|
+
val = nil
|
46
|
+
|
47
|
+
loop do
|
48
|
+
if @tty.wait_writable
|
49
|
+
@tty.write with_checksum([0xCC, 0x00, 0x06, 0x00]).pack('C5')
|
50
|
+
else
|
51
|
+
raise "Couldn't open tty for writing"
|
52
|
+
end
|
53
|
+
|
54
|
+
if @tty.wait_readable(2)
|
55
|
+
val = @tty.read 160
|
56
|
+
break
|
57
|
+
end
|
131
58
|
end
|
59
|
+
|
132
60
|
_, # C set number
|
133
61
|
station_no, # C station number
|
134
62
|
_, # C
|
@@ -166,6 +94,10 @@ class Itiscold
|
|
166
94
|
temp_calib / 10.0
|
167
95
|
end
|
168
96
|
|
97
|
+
def close
|
98
|
+
@tty.close
|
99
|
+
end
|
100
|
+
|
169
101
|
def device_params= values
|
170
102
|
data = [
|
171
103
|
0x33, # C
|
@@ -173,8 +105,8 @@ class Itiscold
|
|
173
105
|
0x05, 0x00, # CC
|
174
106
|
] + split_time(values.sample_interval) + # CCC
|
175
107
|
[
|
176
|
-
(values.upper_limit * 10).to_i, # n
|
177
|
-
(values.lower_limit * 10).to_i, # s>
|
108
|
+
(values.upper_limit * 10).to_i & 0xFFFF, # n
|
109
|
+
(values.lower_limit * 10).to_i & 0xFFFF, # s>
|
178
110
|
values.new_station_number || values.station_number, # C
|
179
111
|
allowed_encode(values.stop_button), # C
|
180
112
|
delay_time_encode(values.delay_time), # C
|
@@ -184,12 +116,25 @@ class Itiscold
|
|
184
116
|
(values.temp_calibration * 10).to_i, # C
|
185
117
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00 # C6
|
186
118
|
]
|
187
|
-
|
188
|
-
|
189
|
-
@tty.
|
119
|
+
|
120
|
+
loop do
|
121
|
+
if @tty.wait_writable
|
122
|
+
@tty.write with_checksum(data).pack('CCCCCCCns>CCCCCCCC6C')
|
123
|
+
else
|
124
|
+
raise "Couldn't open tty for writing"
|
125
|
+
end
|
126
|
+
|
127
|
+
if @tty.wait_readable(2)
|
128
|
+
@tty.read 3
|
129
|
+
break
|
130
|
+
end
|
190
131
|
end
|
191
132
|
end
|
192
133
|
|
134
|
+
def clear_data!
|
135
|
+
self.device_params = device_info
|
136
|
+
end
|
137
|
+
|
193
138
|
def set_device_number station_number, dev_number
|
194
139
|
str = dev_number.bytes.first(10)
|
195
140
|
str.concat([0x00] * (10 - str.length))
|
@@ -358,7 +303,10 @@ class Itiscold
|
|
358
303
|
raise "invalid checksum #{expected} == #{actual}" unless expected == actual
|
359
304
|
end
|
360
305
|
|
306
|
+
NULL_DATE = [65535, 255, 255, 255, 255, 255].pack('nC5')
|
307
|
+
|
361
308
|
def unpack_datetime bytes
|
309
|
+
return if bytes == NULL_DATE
|
362
310
|
Time.new(*bytes.unpack('nC5'))
|
363
311
|
end
|
364
312
|
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itiscold
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Patterson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: uart
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '5.
|
33
|
+
version: '5.10'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '5.
|
40
|
+
version: '5.10'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rdoc
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -115,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
115
|
version: '0'
|
116
116
|
requirements: []
|
117
117
|
rubyforge_project:
|
118
|
-
rubygems_version: 2.
|
118
|
+
rubygems_version: 2.7.3
|
119
119
|
signing_key:
|
120
120
|
specification_version: 4
|
121
121
|
summary: A thing that reads data from Elitech RC-5 temp sensor
|