agri-controller 0.0.0 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (182) hide show
  1. checksums.yaml +7 -0
  2. data/ChangeLog.txt +36 -0
  3. data/LICENSE.txt +15 -0
  4. data/agri-controller.gemspec +36 -0
  5. data/gpl-2.0.txt +339 -0
  6. data/lib/agri-controller.rb +11 -33
  7. data/lib/agri-controller/bcc.rb +86 -53
  8. data/lib/agri-controller/bit.rb +158 -143
  9. data/lib/agri-controller/device.rb +7 -0
  10. data/lib/agri-controller/device/dacs.rb +148 -0
  11. data/lib/agri-controller/device/kr.rb +23 -0
  12. data/lib/agri-controller/device/ma.rb +92 -0
  13. data/lib/agri-controller/device/mch383.rb +178 -0
  14. data/lib/agri-controller/device/tr.rb +230 -0
  15. data/lib/agri-controller/device/wr1010.rb +314 -0
  16. data/lib/agri-controller/dt.rb +17 -0
  17. data/lib/agri-controller/error_caption.rb +67 -46
  18. data/lib/agri-controller/gruff.rb +7 -0
  19. data/lib/agri-controller/gruff/base.rb +88 -0
  20. data/lib/agri-controller/gruff/chdata.rb +64 -0
  21. data/lib/agri-controller/gruff/join_csv.rb +62 -0
  22. data/lib/agri-controller/gruff/rename_csv.rb +50 -0
  23. data/lib/agri-controller/{thermo_data_each_day.rb → gruff/thermo_data_each_day.rb} +67 -67
  24. data/lib/agri-controller/{thermo_gruff.rb → gruff/thermo_gruff.rb} +112 -109
  25. data/lib/agri-controller/gruff/thermo_gruff2.rb +161 -0
  26. data/lib/agri-controller/{thermo_gruff_generate.rb → gruff/thermo_gruff_generate.rb} +28 -28
  27. data/lib/agri-controller/gruff/thermo_gruff_loop.rb +42 -0
  28. data/lib/agri-controller/loger.rb +91 -51
  29. data/lib/agri-controller/main.rb +0 -0
  30. data/lib/agri-controller/main_linux.rb +282 -0
  31. data/lib/agri-controller/main_new.rb +401 -401
  32. data/lib/agri-controller/multiple_pulse_timer.rb +190 -169
  33. data/lib/agri-controller/n_dan_thermo.rb +156 -154
  34. data/lib/agri-controller/save_threads.rb +181 -172
  35. data/lib/agri-controller/setting_io.rb +53 -53
  36. data/lib/agri-controller/ttyUSB_watchdog.rb +43 -0
  37. data/lib/agri-controller/value_controller.rb +209 -167
  38. data/lib/agri-controller/version.rb +7 -5
  39. data/lib/agri-controller/web.rb +39 -39
  40. data/lib/agri-controller/webrick_test.rb +51 -46
  41. data/lib/agri-controller/wet_sensor.rb +92 -0
  42. data/test/tc_bit.rb +14 -3
  43. data/test/tc_trigger.rb +27 -0
  44. data/test/ts_agri-controller.rb +10 -10
  45. metadata +62 -202
  46. data/bin/main.bat +0 -2
  47. data/bin/main.bat /202/326/202/314/203V/203/207/201[/203g/203J/203b/203g.lnk +0 -0
  48. data/bin/main.rb +0 -23
  49. data/bin/memo.txt +0 -4
  50. data/bin/server.bat +0 -1
  51. data/bin/server.bat /202/326/202/314/203V/203/207/201[/203g/203J/203b/203g.lnk +0 -0
  52. data/bin/server.rb +0 -4
  53. data/bin/set_config.rb +0 -47
  54. data/bin/usual.rb +0 -3
  55. data/bin//203R/203}/203/223/203h /203v/203/215/203/223/203v/203g.lnk +0 -0
  56. data/lib/agri-controller/dacs.rb +0 -114
  57. data/lib/agri-controller/dircopy.rb +0 -30
  58. data/lib/agri-controller/kr.rb +0 -34
  59. data/lib/agri-controller/kr_2.rb +0 -78
  60. data/lib/agri-controller/serial.rb +0 -114
  61. data/lib/agri-controller/thermo_gruff_loop.rb +0 -35
  62. data/lib/agri-controller/wetsensor.rb +0 -119
  63. data/lib/agri-controller/wr1010.rb +0 -316
  64. data/lib/agri-controller/wr1010_2.rb +0 -0
  65. data/lib/cgi-bin/auto01.cgi +0 -0
  66. data/lib/cgi-bin/auto02.cgi +0 -0
  67. data/lib/cgi-bin/change_step.cgi +0 -42
  68. data/lib/cgi-bin/config/change_step +0 -4
  69. data/lib/cgi-bin/config/house1 +0 -20
  70. data/lib/cgi-bin/config/house2 +0 -8
  71. data/lib/cgi-bin/config/kr01_readable.txt +0 -2
  72. data/lib/cgi-bin/config/kr02_readable.txt +0 -2
  73. data/lib/cgi-bin/config/kr1_bit.txt +0 -2
  74. data/lib/cgi-bin/config/kr2_bit.txt +0 -2
  75. data/lib/cgi-bin/config/last_bit.txt +0 -1
  76. data/lib/cgi-bin/config/last_thermo_data +0 -22
  77. data/lib/cgi-bin/config/last_thermo_time +0 -2
  78. data/lib/cgi-bin/config/manual_bool01.txt +0 -2
  79. data/lib/cgi-bin/config/manual_bool02.txt +0 -2
  80. data/lib/cgi-bin/config/reload_flag +0 -2
  81. data/lib/cgi-bin/config/run_check +0 -2
  82. data/lib/cgi-bin/config/thermo_define.yml +0 -4
  83. data/lib/cgi-bin/config/time_array +0 -10
  84. data/lib/cgi-bin/config/wait_time +0 -2
  85. data/lib/cgi-bin/config/wet0 +0 -3
  86. data/lib/cgi-bin/config/wet0_drain +0 -2
  87. data/lib/cgi-bin/config/wet1 +0 -3
  88. data/lib/cgi-bin/config/wet1_drain +0 -2
  89. data/lib/cgi-bin/config/wet_input.txt +0 -1
  90. data/lib/cgi-bin/curtain_h1.cgi +0 -43
  91. data/lib/cgi-bin/curtain_h1_setting.cgi +0 -43
  92. data/lib/cgi-bin/curtain_h2.cgi +0 -43
  93. data/lib/cgi-bin/curtain_h2_setting.cgi +0 -43
  94. data/lib/cgi-bin/dacs_port.cgi +0 -43
  95. data/lib/cgi-bin/delay_time_0.cgi +0 -43
  96. data/lib/cgi-bin/delay_time_1.cgi +0 -43
  97. data/lib/cgi-bin/error_clear.cgi +0 -0
  98. data/lib/cgi-bin/house1.cgi +0 -42
  99. data/lib/cgi-bin/house1a.cgi +0 -43
  100. data/lib/cgi-bin/house2.cgi +0 -42
  101. data/lib/cgi-bin/house2b.cgi +0 -43
  102. data/lib/cgi-bin/house_n_dan_thermo1.cgi +0 -43
  103. data/lib/cgi-bin/house_n_dan_thermo2.cgi +0 -0
  104. data/lib/cgi-bin/keitai.cgi +0 -25
  105. data/lib/cgi-bin/kr01.cgi +0 -0
  106. data/lib/cgi-bin/kr01_readable.txt.cgi +0 -42
  107. data/lib/cgi-bin/kr02.cgi +0 -0
  108. data/lib/cgi-bin/kr02_readable.txt.cgi +0 -42
  109. data/lib/cgi-bin/kr1_bit.txt.cgi +0 -42
  110. data/lib/cgi-bin/kr2_bit.txt.cgi +0 -42
  111. data/lib/cgi-bin/kr_log.cgi +0 -18
  112. data/lib/cgi-bin/last_bit.txt.cgi +0 -42
  113. data/lib/cgi-bin/last_thermo_data.cgi +0 -42
  114. data/lib/cgi-bin/last_thermo_time.cgi +0 -42
  115. data/lib/cgi-bin/log.cgi +0 -19
  116. data/lib/cgi-bin/log/errors.txt +0 -1
  117. data/lib/cgi-bin/log/errors_.txt +0 -93
  118. data/lib/cgi-bin/log/kr_command_log.txt +0 -240
  119. data/lib/cgi-bin/log/log.txt +0 -441
  120. data/lib/cgi-bin/log/old_log/log_.txt +0 -15
  121. data/lib/cgi-bin/log/thermo/2010-05-22_thermo.csv +0 -1438
  122. data/lib/cgi-bin/log/thermo/2010-06-12_thermo.csv +0 -3
  123. data/lib/cgi-bin/log/thermo/2010-06-13_thermo.csv +0 -2
  124. data/lib/cgi-bin/log/thermo/2010-06-16_thermo.csv +0 -85
  125. data/lib/cgi-bin/log/thermo/2010-06-17_thermo.csv +0 -285
  126. data/lib/cgi-bin/log/thermo_data.csv +0 -643
  127. data/lib/cgi-bin/log/thermo_graph_loop.txt +0 -1
  128. data/lib/cgi-bin/main.cgi +0 -98
  129. data/lib/cgi-bin/manual_bool01.txt.cgi +0 -42
  130. data/lib/cgi-bin/manual_bool02.txt.cgi +0 -42
  131. data/lib/cgi-bin/post_change_step.cgi +0 -44
  132. data/lib/cgi-bin/post_house1.cgi +0 -44
  133. data/lib/cgi-bin/post_house2.cgi +0 -44
  134. data/lib/cgi-bin/post_kr01.cgi +0 -0
  135. data/lib/cgi-bin/post_kr01_readable.txt.cgi +0 -44
  136. data/lib/cgi-bin/post_kr02.cgi +0 -0
  137. data/lib/cgi-bin/post_kr02_readable.txt.cgi +0 -44
  138. data/lib/cgi-bin/post_kr1_bit.txt.cgi +0 -44
  139. data/lib/cgi-bin/post_kr2_bit.txt.cgi +0 -44
  140. data/lib/cgi-bin/post_last_bit.txt.cgi +0 -44
  141. data/lib/cgi-bin/post_last_thermo_data.cgi +0 -44
  142. data/lib/cgi-bin/post_last_thermo_time.cgi +0 -44
  143. data/lib/cgi-bin/post_manual_bool01.txt.cgi +0 -44
  144. data/lib/cgi-bin/post_manual_bool02.txt.cgi +0 -44
  145. data/lib/cgi-bin/post_reload_flag.cgi +0 -44
  146. data/lib/cgi-bin/post_run_check.cgi +0 -44
  147. data/lib/cgi-bin/post_thermo_define.yml.cgi +0 -44
  148. data/lib/cgi-bin/post_time_array.cgi +0 -44
  149. data/lib/cgi-bin/post_wait_time.cgi +0 -44
  150. data/lib/cgi-bin/post_wet0.cgi +0 -44
  151. data/lib/cgi-bin/post_wet0_drain.cgi +0 -44
  152. data/lib/cgi-bin/post_wet1.cgi +0 -44
  153. data/lib/cgi-bin/post_wet1_drain.cgi +0 -44
  154. data/lib/cgi-bin/post_wet_input.txt.cgi +0 -44
  155. data/lib/cgi-bin/reload_flag.cgi +0 -42
  156. data/lib/cgi-bin/reset_.cgi +0 -0
  157. data/lib/cgi-bin/run_check.cgi +0 -42
  158. data/lib/cgi-bin/set.cgi +0 -33
  159. data/lib/cgi-bin/set_post_yml_each.rb +0 -72
  160. data/lib/cgi-bin/set_yml_cgi_each.rb +0 -0
  161. data/lib/cgi-bin/setting.cgi +0 -0
  162. data/lib/cgi-bin/setting.cgi.1 +0 -0
  163. data/lib/cgi-bin/setting_io.rb +0 -53
  164. data/lib/cgi-bin/thermo_data_graphs.cgi +0 -0
  165. data/lib/cgi-bin/thermo_data_list.cgi +0 -0
  166. data/lib/cgi-bin/thermo_define.yml.cgi +0 -42
  167. data/lib/cgi-bin/thermo_graph.cgi +0 -0
  168. data/lib/cgi-bin/time_array.cgi +0 -42
  169. data/lib/cgi-bin/wait_time.cgi +0 -42
  170. data/lib/cgi-bin/web.rb +0 -39
  171. data/lib/cgi-bin/wet0.cgi +0 -42
  172. data/lib/cgi-bin/wet0_drain.cgi +0 -42
  173. data/lib/cgi-bin/wet1.cgi +0 -42
  174. data/lib/cgi-bin/wet1_drain.cgi +0 -42
  175. data/lib/cgi-bin/wet_input.txt.cgi +0 -42
  176. data/lib/htdocs/css/str.css +0 -89
  177. data/lib/htdocs/favicon.ico +0 -0
  178. data/lib/htdocs/thermo/thermo_data.jpg +0 -0
  179. data/lib/htdocs/thermo/thumb/thermo_data.jpg +0 -0
  180. data/test/tc_bit.rb.1 +0 -15
  181. data/test/tc_bit.rb.2 +0 -21
  182. data/test/ts_agri-controller.rb.1 +0 -8
@@ -0,0 +1,23 @@
1
+ #!ruby
2
+ #coding:utf-8
3
+ #require "serial"
4
+ #require "bcc"
5
+ module AgriController
6
+ module KR
7
+ module_function
8
+ def sample
9
+ "%01#RCCX00000000**\r"
10
+ end
11
+ def send_sample
12
+ "%01$RC0100**\r"#(**:BCC)
13
+ end
14
+ end
15
+ end
16
+
17
+ if $0==__FILE__
18
+ if RUBY_PLATFORM.include?("mswin")
19
+ p AgriController::KR::export("%01#RCCX00000000**\r",5)# => "%01$RC020013\r"
20
+ else
21
+ AgriController::KR::export("%01#RCCX00000000**\r","/dev/ttyUSB1") # => "%01$RC020013\r"
22
+ end
23
+ end
@@ -0,0 +1,92 @@
1
+ module AgriController
2
+ module MA
3
+ module_function
4
+ #"\u0002P02EB3D\r\u0002B120C60\r\u0002n4E530F\r\n"
5
+ def sample
6
+ samples[0]
7
+ end
8
+
9
+ #5 samples in Array
10
+ def samples
11
+ ["\u0002P02EB3D\r\u0002B120C60\r\u0002n4E530F\r\n",
12
+ "\u0002n4E5915\r\u0002P02E83A\r\u0002B120B5F\r\n",
13
+ "\u0002n4E4C08\r\u0002P02F042\r\u0002B12075B\r",
14
+ "nonono!\rbadchar!",
15
+ nil]
16
+ #ppms=[747,744,752]
17
+ end
18
+
19
+ #check_sum("\u0002P02EB3D") # =>"3D"
20
+ #check_sum("\u0002P02EB") # =>"3D"
21
+ def check_sum(str)
22
+ x=str.chomp
23
+ #sum=x[-2..-1]
24
+ #p str[1]
25
+ int1=str[1].ord
26
+ int2=str[2..3].to_i(16)
27
+ int3=str[4..5].to_i(16)
28
+ check_sum=(int1+int2+int3).to_s(16)
29
+
30
+ if check_sum.size<=1
31
+ check_sum="0"+check_sum
32
+ elsif check_sum.size>2
33
+ check_sum=check_sum.slice(-2,2)
34
+ end
35
+ #p check_sum.upcase
36
+ return check_sum.upcase
37
+ end
38
+
39
+ #check_sum?("\u0002P02EB3D") # =>true
40
+ #check_sum?("\u0002P02EB","3D") # =>true
41
+ #check_sum?("\u0002P02EB","0F") # =>false
42
+ #check_sum?("bad") # =>nil
43
+ def check_sum?(str,sum=str[-2..-1])
44
+ begin
45
+ res =check_sum(str)
46
+ return res== sum
47
+ rescue
48
+ return nil
49
+ end
50
+ end
51
+
52
+ #parce("\x02P02EB3D\r\x02B120C60\r\x02n4E530F\r\n") # =>{"ppm"=>747, "Celsius Degree"=>15.600000000000023}
53
+ def parse(str)
54
+
55
+ hash={}
56
+
57
+ begin
58
+ list=str.chomp.split("\r")
59
+ list.each do |x|
60
+ if check_sum?(x)
61
+ if x[1]=="P"
62
+ a=x.slice(2,4).to_i(16)
63
+ hash["ppm"]=a
64
+
65
+ elsif x[1]=="B"
66
+ a=x.slice(2,4).to_i(16)
67
+ hash["Celsius Degree"]=a/16.0-273.15
68
+
69
+ elsif x[1]=="A"
70
+ a=x.slice(2,4).to_i(16)/100.0
71
+ hash["humidity"]=a
72
+ end
73
+ else
74
+ return nil
75
+ end
76
+ end
77
+ rescue
78
+ return nil
79
+ end
80
+ return hash
81
+ end
82
+ end
83
+ end
84
+ if $0==__FILE__
85
+ include AgriController::MA
86
+ p sample
87
+ samples.each do |str|
88
+ p res=parse(str)
89
+ end
90
+ p a=File.read("ma.txt")
91
+ p parse(a)
92
+ end
@@ -0,0 +1,178 @@
1
+ #require "rubygems"
2
+ #require "serialport"
3
+
4
+ module AgriController
5
+
6
+ ##
7
+ # MCH383(MCH-383,MCH-383SD) is Tenperature,Humidity,CO2-ppm recorder
8
+ #===Usage
9
+ # include AgriController::MCH383
10
+ # * res=read("COM2") # =>"\00241040100000643\r\00242010100000310\r\00243190000000612\r"
11
+ # * res=read("/dev/ttyUSB0")# =>"\00241040100000643\r\00242010100000310\r\00243190000000612\r"
12
+ #
13
+ # * parse(res) # =>[{"1"=>[64.3, "%"]}, {"2"=>[31.0, "C"]}, {"3"=>[612, "ppm"]}]
14
+ #
15
+ module MCH383
16
+ module_function
17
+ ##
18
+ #This require "serialport" #RUBYGEMS
19
+ def read(port)
20
+ require "rubygems" if RUBY_VERSION < "1.9.0"
21
+ require "serialport"
22
+
23
+ #t=Time.now
24
+ res=nil
25
+ begin
26
+
27
+ # SerialPort.open(port,9600,8,1,SerialPort::NONE){|sp| sp.read_timeout=100
28
+ # while res=sp.read(1)
29
+ # if res=="\r"
30
+ # break
31
+ # end
32
+ # end
33
+ #}
34
+ #
35
+ #read data
36
+ #SerialPort.open(port,9600,8,1,SerialPort::NONE){|sp| sp.read_timeout=500; res=sp.read(48)}
37
+
38
+ sp=SerialPort.new(port,9600,8,1,SerialPort::NONE)
39
+ sp.read_timeout=500
40
+ while res=sp.read(1)
41
+ if res=="\002"
42
+ res=res+sp.read(47)
43
+ break
44
+ end
45
+ end
46
+ sp.close
47
+ #p Time.now-t
48
+ return res # =>"\00241040100000643\r\00242010100000310\r\00243190000000612\r"
49
+ rescue
50
+ return nil
51
+ end
52
+
53
+ end
54
+
55
+ def sample
56
+ "\00241040100000643\r\00242010100000310\r\00243190000000612\r"
57
+ end
58
+
59
+ def data_hash(num)
60
+ case num
61
+ when "01"
62
+ #"Celsius"
63
+ "C"
64
+ when "02"
65
+ #"Fahrenheit"
66
+ "F"
67
+ when "04"
68
+ #"Humidity"
69
+ "%"
70
+ when "19"
71
+ #"CO2 of ppm"
72
+ "ppm"
73
+ else
74
+ nil
75
+ end
76
+ end
77
+
78
+ def of_10(of_ten)
79
+ case of_ten
80
+ when "0"
81
+ 1
82
+ when "1"
83
+ 0.1
84
+ when "2"
85
+ 0.01
86
+ when "3"
87
+ 0.001
88
+ else
89
+ nil
90
+ end
91
+ end
92
+
93
+ def value(num,of_ten,positive)
94
+ result=num.to_i * of_10(of_ten)
95
+ if positive=="0"#plus +
96
+ return result
97
+ else#minus -
98
+ return result*(-1)
99
+ end
100
+ end
101
+
102
+ def to_f(x)
103
+ #x="\00243190000000612\r"
104
+ result={}
105
+
106
+ if x.chomp.size==15
107
+ begin
108
+ #first_num=x.slice(1,1)#always "4"
109
+ data_number=x.slice(2,1)
110
+ unit_sign =x.slice(3,2)
111
+ positive =x.slice(5,1)
112
+ of_ten =x.slice(6,1)
113
+ num =x.slice(7,8)
114
+
115
+ val=value(num,of_ten,positive)
116
+
117
+ result[data_number]=[val,data_hash(unit_sign)]
118
+ result
119
+ rescue
120
+ return nil
121
+ end
122
+ else
123
+ nil
124
+ end
125
+ end
126
+
127
+ def parse(code)
128
+ result={}
129
+ #begin
130
+ data=code.split("\r")
131
+ data.each{|str| x=to_f(str);result[x.keys.first]=x[x.keys.first]}
132
+ #if data[0].size>1
133
+ # x=to_f(data.last+data[0])
134
+ # result << x if x
135
+ #end
136
+ #rescue
137
+ # return nil
138
+ #end
139
+ return result
140
+ end
141
+
142
+ def list(code)
143
+ parse(code)
144
+ end
145
+
146
+ def samples
147
+ ["\00241040100000643\r\00242010100000310\r\00243190000000612\r",
148
+ "\00242010100000311\r\00243190000000612\r\00241040100000643\r",
149
+ "\00243190000000612\r\00241040100000643\r\00242010100000312\r",
150
+ "\r\00243190000000590\r\00241040100000639\r\00242010100000309",
151
+
152
+ "\00243190000000612\r",
153
+ "not_data",
154
+ nil]
155
+ end
156
+ end
157
+ end
158
+
159
+ if $0==__FILE__
160
+ require "rubygems"
161
+ require "serialport"
162
+ #require "agri-controller"
163
+ require "yaml"
164
+ include AgriController
165
+ if RUBY_PLATFORM =~ (/mswin(?!ce)|mingw|cygwin|bccwin/)
166
+ port="COM2"
167
+ else
168
+ port="/dev/ttyUSB0"
169
+ end
170
+ AgriController::dt{
171
+ 1.times do
172
+ res=MCH383::read(port)
173
+ MCH383::parse(res)
174
+ print MCH383::parse(res).to_yaml
175
+ end
176
+ }
177
+ end
178
+
@@ -0,0 +1,230 @@
1
+ #coding:ASCII-8BIT
2
+ module AgriController
3
+ module TR
4
+ module_function
5
+ def parse(str)
6
+ list(str)
7
+ end
8
+ ##
9
+ # *check_sum("\0013\006\f\000\027\000\000\000\000\000\000\000\203\004\372\005")
10
+ # # =>"\343\001"
11
+ def check_sum(str)
12
+ x=0
13
+ begin
14
+ str.each_byte{|i| x+=i}
15
+ #p x
16
+ to_byte(x)
17
+ rescue
18
+ nil
19
+ end
20
+ end
21
+ ##
22
+ # *check_sum?("\0013\006\f\000\027\000\000\000\000\000\000\000\203\004\372\005\343\001"
23
+ # # =>true
24
+ # *check_sum?("\0013\006\f\000\027\000\000\000\000\000\000\000\203\004\372\005",
25
+ # "\343\001") # =>true
26
+ def check_sum?(str1,sum=nil)
27
+ begin
28
+ if sum==nil
29
+ x1=str1.chop.chop
30
+ x2=str1.slice(str1.size-2,2)
31
+ else
32
+ x1=str1
33
+ x2=sum
34
+ end
35
+ #p check_sum(x1)
36
+ #p x2
37
+ return check_sum(x1)==x2
38
+ rescue
39
+ return nil
40
+ end
41
+ end
42
+
43
+ def toi(num0,num1)
44
+ num1*256+num0
45
+ end
46
+
47
+ def to_byte(i)
48
+ # p i
49
+ x2=(i/256).chr
50
+ x1=(i%256).chr
51
+ x1+x2
52
+ end
53
+
54
+ def to_n(num0,num1)
55
+ begin
56
+ x1=num0
57
+ x2=num1
58
+ unless x2==238#error
59
+ if x2 > 15
60
+ power=x2.to_s(16).slice(0,1).to_i(16)
61
+ num=x2%16*256+x1
62
+ else
63
+ power=0
64
+ num=x2*256+x1
65
+ end
66
+ res=num*2**power
67
+ else
68
+ res=nil
69
+ end
70
+ res
71
+ rescue
72
+ return nil
73
+ end
74
+ end
75
+
76
+ ##
77
+ #
78
+ #a=TR::list(TR::sample)
79
+ # =>{:lx=>91.28,
80
+ # :uv=>0.0,
81
+ # :lx_sigma=>36.03,
82
+ # :uv_sigma=>0.0,
83
+ # :temperature=>11.7,
84
+ # :humidity=>49.0
85
+ # }
86
+ def sample
87
+ "\x013\x06\f\x00\xEA(\x00\x00\x13\x0E\x00\x00]\x04\xD2\x05\xB1\x02"
88
+ end
89
+
90
+ ##
91
+ #"\x1\x33\x0\x0\x0"+"\x34\x0"
92
+ # =>"\x013\x06\f\x00\xEA(\x00\x00\x13\x0E\x00\x00]\x04\xD2\x05\xB1\x02"
93
+ #
94
+ def send_sample
95
+ "\x1\x33\x0\x0"+"\x0\x34\x0"
96
+ end
97
+ ##
98
+ # ==example_data
99
+ # *a="\0013\006\f\000\027\002\027\002\054\003\072\021\203\004\372\005x\002"
100
+ # *list(a) # =>{:uv=>0.0, :lx_sigma=>0.0, :uv_sigma=>0.0,
101
+ # :temperature=>15.5, :lx=>0.23, :humidity=>53.0}
102
+ # *list("wrong_data")# =>nil
103
+ def list(str)
104
+ a=str
105
+ res={}
106
+ if check_sum?(a)
107
+ a.size==(a[3].ord+a[4].ord*256+7)
108
+
109
+ #lx
110
+ x1=a[5].ord
111
+ x2=a[6].ord
112
+ #puts "lx"
113
+ lx_=to_n(x1,x2)/100.0
114
+ res[:lx]=lx_
115
+
116
+ #uv
117
+ x1=a[7].ord
118
+ x2=a[8].ord
119
+ #puts "uv"
120
+ uv_=to_n(x1,x2)/1000.0
121
+ res[:uv]=uv_
122
+
123
+ #lx_h
124
+ x1=a[9].ord
125
+ x2=a[10].ord
126
+ #puts "lx_accumulated"
127
+ res[:lx_sigma]=to_n(x1,x2)/100.0
128
+
129
+ #uv_h
130
+ x1=a[11].ord
131
+ x2=a[12].ord
132
+ #puts "uv_accumulated"
133
+ res[:uv_sigma]=to_n(x1,x2)/1000.0
134
+
135
+ #'C tempereture
136
+ x=a[13].ord+a[14].ord*256-1000
137
+ x1=x/10.0
138
+ #puts "'c"
139
+ res[:temperature]=x1
140
+
141
+ #% humidity
142
+ x=a[15].ord+a[16].ord*256-1000
143
+ x1=x/10.0
144
+ #puts "humidity"
145
+ res[:humidity]=x1
146
+ else
147
+ res=nil
148
+ end
149
+ res
150
+ end
151
+
152
+ ##This require "serialport"
153
+ # TR::serial(port) # =>String
154
+ # Communicate with ESPEC THERMORECORDER(RS-13L:UV,lx,thermo,humidty LOGGER)or T&D TR
155
+ # **CAUSION** check port permission on Linux.(ls -l <port device>)
156
+ # *USAGE
157
+ # require "rubygems"
158
+ # require "serialport"
159
+ # require "timeout"
160
+ # require "agri-controller"
161
+ # include AgriController
162
+ # x=TR::read("/dev/ttyUSB0")
163
+ # # =>"\0013\006\f\000\f\001\000\000\212(\000\000z\004\232\006#\002"
164
+ #
165
+ # TR::list(x)
166
+ # # =>{:uv =>0.0,
167
+ # :lx_sigma =>87.44,
168
+ # :uv_sigma =>0.0,
169
+ # :temperature=>14.6,
170
+ # :lx =>2.68,
171
+ # :humidity =>69.0}
172
+ def read(port="/dev/ttyUSB0")
173
+ require "rubygems"
174
+ require "serialport"
175
+ require "timeout"
176
+ #open
177
+ s=SerialPort.new(port,19200)
178
+
179
+ #boot up command
180
+ s.write("\x0")
181
+
182
+ sleep 0.11
183
+ #commnicate command
184
+ s.write("\x1\x33\x0\x0"+"\x0\x34\x0")
185
+
186
+ #receive
187
+ r=""
188
+ begin
189
+ timeout(2) do
190
+ while c=s.read(1)
191
+ r += c
192
+ break if r.length >= 19
193
+ end
194
+ end
195
+ rescue Timeout::Error
196
+ r=""
197
+ ensure
198
+ s.close #close
199
+ end
200
+
201
+ return r
202
+ end
203
+ end
204
+ end
205
+ if $0==__FILE__
206
+
207
+ include AgriController
208
+ #include TR
209
+ a=ARGV[0] || ""
210
+ p a.force_encoding("ASCII-8BIT") if RUBY_VERSION > "1.9"
211
+ #example_data
212
+ #a="\0013\006\f\000\027\002\027\002\054\003\072\021\203\004\372\005x\002"
213
+ #p check_sum(a.chop.chop)
214
+ #p check_sum?(a)
215
+ #p check_sum?(a.chop.chop,"\343\001")
216
+ #puts
217
+ p x=TR::list(a)
218
+ if x
219
+ p x[:temperature]
220
+ p x[:humidity]
221
+ p x[:lx]
222
+ p x[:uv]
223
+ end
224
+ #p TR::sample.encoding if RUBY_VERSION > "1.9"
225
+ #p TR::list(TR::sample)
226
+ p y=TR::read("/dev/ttyUSB1")
227
+ p TR::list(y)
228
+ #p TR::list("foo"+a)
229
+ #p TR::list("")
230
+ end