agri-controller 0.0.0 → 0.0.8

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.
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