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
@@ -1,401 +1,401 @@
1
- #!ruby
2
- #coding:utf-8
3
- $KCODE="s" if RUBY_VERSION < "1.9.0"
4
- require "thread"
5
- module AgriController
6
- module_function
7
- def thermo_read(ref="http://maru.selfip.com/cgi-bin/thermo.rb")
8
- begin
9
- uri=URI(ref)
10
- dat=uri.read("Accept-Language" => "ja")
11
- rescue
12
- nil
13
- end
14
- end
15
-
16
- #main_for_proto_house
17
- def main_new(log="./cgi-bin/log",config="./cgi-bin/config",docs="./htdocs/thermo",kr_port=5)
18
- log_time=Time.now
19
- Thread.abort_on_exception=true
20
-
21
- #KR port
22
- kr_response=""
23
-
24
- #KR Queue
25
- q=Queue.new
26
- queue=Thread.start(q,log,config,kr_port) do |que,lo,co,kr|
27
- while str=que.pop
28
- #p str
29
- res=""
30
-
31
- #OUTPUT DATA
32
- res=KR::export(str,kr).to_s
33
-
34
- #LOG
35
- dat=Time.now.to_s+","+str.chomp+","+res.chomp#+"<br/>"
36
- Loger::loger(lo+"/kr_command_log.txt",dat)
37
- if res.include?("R") or str.include?("R")
38
- #p str+","+res
39
-
40
- #response signal
41
- begin
42
-
43
- if res.size>8
44
- #res="%01$RC0100**\r" (**:BCC)
45
- p input_num=res.slice(7,1).to_i(16)# =>0..15
46
-
47
- b=Bit.new(input_num)
48
-
49
- #bit save
50
- (0..1).each do |x|
51
- if b.on?(x)
52
- yaml_db("wet_sensor",true,co+"/wet#{x}")
53
- yaml_db("wet_read",false,co+"/wet#{x}")
54
- else
55
- yaml_db("wet_sensor",false,co+"/wet#{x}")
56
- yaml_db("wet_read",false,co+"/wet#{x}")
57
- end
58
- end
59
- else
60
- #send data lost
61
- #retry signal
62
- (0..1).each do |x|
63
- yaml_db("wet_sensor",false,co+"/wet#{x}")
64
- yaml_db("wet_read",false,co+"/wet#{x}")
65
- end
66
-
67
- ##
68
- Loger::loger(co+"/wet_input.txt",dat,"w")
69
- end
70
- rescue
71
- sleep 0.1
72
- #do nothing...
73
- end
74
- end
75
- sleep 0.1
76
-
77
- if res.include?("!") or #include char
78
- res.include?("$")!=true or#not $
79
- res=="" or
80
- res=="false" or
81
- res.size < 8 or
82
- (res.size > 9 and res.include?("%01$RC")!=true)
83
- then
84
- Loger::loger(lo+"/errors.txt","KR:"+dat+"<br/>")
85
- Loger::loger(lo+"/errors_.txt","KR:"+dat+"<br/>")
86
- end
87
- end
88
- end
89
- #thermo_thread starts
90
- yaml_file="last_thermo_data"
91
-
92
- thermo_port=8#6
93
- thermo_N=4
94
- th="thermo_define.yml"
95
- yaml_db(th,[thermo_port,thermo_N],config+"/"+th)
96
-
97
- #thermo_loop_thread(yaml_file,thermo_port,thermo_N,sec=30)
98
- thermo_loop_thread(yaml_file,thermo_port,thermo_N,sec=30,"./cgi-bin/config")
99
-
100
- #thermo_logger_thread starts
101
- thermo_data_logger_thread(thermo_N,"./cgi-bin/config","./cgi-bin/log")
102
-
103
- #reset manual bool
104
- yaml_db("manual_bool01.txt",nil,config+"/manual_bool01.txt")
105
- yaml_db("manual_bool02.txt",nil,config+"/manual_bool02.txt")
106
- sleep 0.1
107
-
108
- loop do
109
- catch :reset_signal do
110
- sleep 0.2
111
- ##
112
- #Initialize basic DATA
113
-
114
- #THERMO port
115
- #wr1010 thrmo request
116
- thermo=yaml_dbr("last_thermo_data",config+"/last_thermo_data")#WR1010::list(thermo_port,thermo_N)
117
-
118
- #if thermo.class==Array and thermo.size==thermo_N
119
- # yaml_db("last_thermo_data",thermo,config+"/last_thermo_data")
120
- #else
121
- # p thermo
122
- #end
123
-
124
- #BIT SETTING
125
- kr01=Bit.new #KR#01
126
- kr02=Bit.new #KR#02
127
- in_bits=Bit.new ##import signal(#KR#01)
128
-
129
- change1=false #KR#01
130
- change2=false #KR#02
131
- p house1_set=yaml_dbr("house1",config+"/house1")
132
- house2_set=yaml_dbr("house2",config+"/house2")
133
- house1=N_dan_thermo.new(house1_set,diff=1,1)
134
- house2=N_dan_thermo.new(house2_set,diff=1,1)
135
-
136
- a=Value_controller.new(steps=4,open_sec=5,#55
137
- down_sec=3,#35,
138
- sensitivity=2,set_value=20,dead_time=15)
139
- p "house1 Starts at #{(a.up_sec*a.steps).to_s} sec later."
140
-
141
- b=Value_controller.new(steps=4,open_sec=5,#55
142
- down_sec=3,#35,
143
- sensitivity=2,set_value=20,dead_time=15)
144
- #p "house2 Starts at #{b.reset_time.to_s}(#{(b.up_sec*b.steps).to_s} sec later)."
145
-
146
- #wet_sensor SETTING
147
- delay0=yaml_dbr("wet0_drain",config+"/wet0_drain") || 1
148
- delay1=yaml_dbr("wet1_drain",config+"/wet1_drain") || 1
149
- wet0=WetSensor.new(delay0,config+"/wet0")
150
- wet1=WetSensor.new(delay1,config+"/wet1")
151
-
152
-
153
- #illigate Time DEFINE
154
- time_array3=yaml_dbr("time_array",config+"/time_array")
155
- puts "watering set:#{time_array3.inspect}"
156
- wait_time=yaml_dbr("wait_time",config+"/wait_time")
157
-
158
- #start
159
- start=Time.now
160
-
161
- #start time logging
162
- dat="Start,"+Time.now.to_s
163
- Loger::loger(config+"/last_bit.txt",dat+"<br/>","w")#Start,#{Time.now}<br/>
164
- Loger::loger(log+"/log.txt",dat)
165
-
166
- #value_controller step change initialize
167
- change_step=[false,false]
168
-
169
- ##
170
- #MAIN LOOP (break if in_bit(22)==off)
171
- run_save_flag=nil
172
-
173
- loop do
174
- t=Time.now
175
- time=t.to_s
176
- if t.min!=run_save_flag
177
- run_save_flag=t.min
178
- #save_run_check_time
179
- begin
180
- yaml_db("run_check",t,config+"/run_check")
181
- #retry if error.
182
- rescue
183
- sleep 0.1
184
- yaml_db("run_check",t,config+"/run_check")
185
- end
186
- end
187
- if yaml_dbr("reload_flag",config+"/reload_flag")==true
188
- yaml_db("reload_flag",false,config+"/reload_flag")
189
- p dat="reload signal:"
190
- Loger::loger(log+"/log.txt",dat)
191
-
192
- sleep 0.1
193
- throw :reset_signal
194
- end
195
-
196
- #thermo DEFINE
197
- thermo=nil
198
- thermo=yaml_dbr("last_thermo_data",config+"/last_thermo_data")
199
- #last_thermo_time
200
-
201
- #illigate Timer
202
- x=multiple_pulse_timer(time_array3,wait_time)
203
- #x.bit =>Integer
204
-
205
- #wet sensor work
206
- wet0.commander{
207
- #p "time 0"
208
- q.push("%01#RCCX00000000**\r")#read request when its time
209
- }
210
-
211
- wet1.commander{
212
- #p "time 1"
213
- q.push("%01#RCCX00000000**\r")#read request when its time
214
- }
215
-
216
-
217
- #illigating check
218
- kr01.boolbit(wet1.run(x.on?(2)),0)#signal switch
219
-
220
- kr01.boolbit(wet0.run(x.on?(0)),1)#illigate line1
221
-
222
- kr01.boolbit(wet1.run(x.on?(2)),2)#illigate line2 ##
223
-
224
- pomp = wet0.run(x.on?(0)) | wet1.run(x.on?(2))
225
- kr01.boolbit(pomp,3)#pomp signal
226
-
227
-
228
- #motor bit
229
- step_str=""
230
- if thermo.class==Array && thermo.size==thermo_N
231
-
232
- #set_temp from N_dan_thermo
233
- a.set_value=house1.set_now
234
- b.set_value=house2.set_now
235
-
236
- ##
237
- #Controll
238
- bit1=a.value_controll(thermo[0][0]) if thermo[0][0] != nil
239
- bit2=!a.switch
240
- bit3=b.value_controll(thermo[1][0]) if thermo[1][0] != nil
241
- bit4=!b.switch
242
- check_step=[a.now_step,b.now_step]
243
-
244
- if check_step != change_step
245
- string=[a.set_value,b.set_value].inspect#+check_step.inspect
246
- #p [bit1,bit2,bit3,bit4]
247
- #p thermo
248
-
249
- step_str=",step:"+a.now_step.to_s+","+"step:"+b.now_step.to_s+","+string
250
- yaml_db("change_step",check_step,config+"/change_step")
251
-
252
- change_step=check_step.dup
253
- end
254
- else
255
- #2010.4.28 changed
256
-
257
- ##
258
- #commonly open if thrmo error.
259
- #house1
260
- bit1=true #open signal
261
- bit2=false#motor_off_trap
262
-
263
- ##
264
- #commonly open if thrmo error.
265
- #house2
266
- bit3=true #open signal
267
- bit4=false#motor_off_trap
268
-
269
- #dat=Time.now.to_s+":thermo_error!! open full time."+thermo.inspect
270
- end
271
- #house1 motor
272
- kr02.boolbit(bit1,0)
273
- kr02.boolbit(bit2,1)
274
- #house2 motor
275
- kr02.boolbit(bit3,2)
276
- kr02.boolbit(bit4,3)
277
-
278
- ##
279
- #RESULT BIT OUTPUT IF CHANGED
280
- #sum bits and check changes
281
- #KR01 auto
282
- #p change1
283
-
284
- #p config+"/manual_bool01.txt"
285
- #p yaml_dbr("manual_bool01.txt",config+"/manual_bool01.txt")
286
- if yaml_dbr("manual_bool01.txt",config+"/manual_bool01.txt")==nil
287
- if change1 != kr01.bit
288
- change1=kr01.bit
289
-
290
- str=kr01.tos(4,2)
291
- if thermo!=nil
292
- p data="KR01:"+str+","+time+","+
293
- thermo[0][0].to_s+","+thermo[0][1].to_s+","+thermo[1][0].to_s+","+thermo[2][0].to_s
294
- else
295
- p data="KR01:"+str+" "+time
296
- end
297
- #logging thread
298
- #Thread.start(data){|dat|
299
-
300
- Loger::loger(config+"/last_bit.txt",data+"<br/>","w")
301
- Loger::loger(log+"/log.txt",data)
302
- #}
303
- #str=bits.tos(24,2)
304
- #str_size=str.size
305
-
306
- ##
307
- #command output
308
- hex0=str
309
- hex=Bit.new(hex0.to_i(2)).tos(1,16)
310
- command="%01#WCCY000000000#{hex}00**\r"
311
- q.push(command)
312
- end
313
- #KR01 manual
314
- else
315
- if yaml_dbr("kr01_readable.txt",config+"/kr01_readable.txt")=="OK"
316
- p "manual KR01"
317
- #kr1
318
- hex=yaml_dbr("kr1_bit.txt",config+"/kr1_bit.txt").upcase
319
- command="%01#WCCY000000000#{hex}00**\r"
320
- q.push(command)
321
-
322
- p data="KR01_manual:"+hex+","+time
323
- #logging thread
324
- #Thread.start(data) do |dat|
325
- Loger::loger(config+"/last_bit.txt",data+"<br/>","w")
326
- Loger::loger(log+"/log.txt",data)
327
- #end
328
- yaml_db("kr01_readable.txt",nil,config+"/kr01_readable.txt")
329
- end
330
- end
331
- #KR02 auto
332
- if yaml_dbr("manual_bool02.txt",config+"/manual_bool02.txt")==nil
333
- if change2 != kr02.bit
334
- change2=kr02.bit
335
-
336
- str=kr02.tos(8,2)
337
- if thermo!=nil
338
- p data="KR02:"+str+","+time+","+thermo[0][0].to_s+","+thermo[0][1].to_s+","+thermo[1][0].to_s+","+thermo[2][0].to_s+step_str
339
- else
340
- p data="KR02:"+str+" "+time
341
- end
342
- #logging thread
343
- #Thread.start(data){|dat|
344
- Loger::loger(config+"/last_bit.txt",data+"<br/>","w")
345
- Loger::loger(log+"/log.txt",data)
346
- #}
347
- #str=bits.tos(24,2)
348
- #str_size=str.size
349
-
350
- hex1=str.slice(4,4)
351
- str
352
- hex2=str.slice(0,4)
353
- hex_w=Bit.new((hex2+hex1).to_i(2)).tos(2,16)
354
- command="%02#WCCY00000000#{hex_w}00**\r"
355
- q.push(command)
356
- end
357
- #manual
358
- else
359
- if yaml_dbr("kr02_readable.txt",config+"/kr02_readable.txt")=="OK"
360
- p "manual KR02"
361
-
362
- #kr2
363
- hex_w=yaml_dbr("kr2_bit.txt",config+"/kr2_bit.txt").upcase
364
-
365
- if hex_w.size==1
366
- hex_w="0"+hex_w
367
- end
368
-
369
- command="%02#WCCY00000000#{hex_w}00**\r"
370
- q.push(command)
371
-
372
- p data="KR02_manual:"+hex_w+","+time
373
- #logging thread
374
- #Thread.start(data) do |dat|
375
- Loger::loger(config+"/last_bit.txt",data+"<br/>","w")
376
- Loger::loger(log+"/log.txt",data)
377
- #end
378
-
379
- yaml_db("kr02_readable.txt",nil,config+"/kr02_readable.txt")
380
- end
381
-
382
- end
383
- if log_time.hour != t.hour
384
- log_time=t.dup
385
- p "watchdog:"+Time.now.to_s
386
- end
387
- #p Time.now-t
388
-
389
- sleep 0.3
390
-
391
- #p Thread.list
392
- #raise
393
- end #main_loop
394
- end #catch reset_signal
395
-
396
- end #reset_loop
397
- q.push nil
398
- queue.join
399
- end
400
- end
401
- #AgriController::main_new
1
+ #!ruby
2
+ #coding:utf-8
3
+ $KCODE="s" if RUBY_VERSION < "1.9.0"
4
+ require "thread"
5
+ module AgriController
6
+ module_function
7
+ def thermo_read(ref="http://maru.selfip.com/cgi-bin/thermo.rb")
8
+ begin
9
+ uri=URI(ref)
10
+ dat=uri.read("Accept-Language" => "ja")
11
+ rescue
12
+ nil
13
+ end
14
+ end
15
+
16
+ #main_for_proto_house
17
+ def main_new(log="./cgi-bin/log",config="./cgi-bin/config",docs="./htdocs/thermo",kr_port=5)
18
+ log_time=Time.now
19
+ Thread.abort_on_exception=true
20
+
21
+ #KR port
22
+ kr_response=""
23
+
24
+ #KR Queue
25
+ q=Queue.new
26
+ queue=Thread.start(q,log,config,kr_port) do |que,lo,co,kr|
27
+ while str=que.pop
28
+ #p str
29
+ res=""
30
+
31
+ #OUTPUT DATA
32
+ res=KR::export(str,kr).to_s
33
+
34
+ #LOG
35
+ dat=Time.now.to_s+","+str.chomp+","+res.chomp#+"<br/>"
36
+ Loger::loger(lo+"/kr_command_log.txt",dat)
37
+ if res.include?("R") or str.include?("R")
38
+ #p str+","+res
39
+
40
+ #response signal
41
+ begin
42
+
43
+ if res.size>8
44
+ #res="%01$RC0100**\r" (**:BCC)
45
+ p input_num=res.slice(7,1).to_i(16)# =>0..15
46
+
47
+ b=Bit.new(input_num)
48
+
49
+ #bit save
50
+ (0..1).each do |x|
51
+ if b.on?(x)
52
+ yaml_db("wet_sensor",true,co+"/wet#{x}")
53
+ yaml_db("wet_read",false,co+"/wet#{x}")
54
+ else
55
+ yaml_db("wet_sensor",false,co+"/wet#{x}")
56
+ yaml_db("wet_read",false,co+"/wet#{x}")
57
+ end
58
+ end
59
+ else
60
+ #send data lost
61
+ #retry signal
62
+ (0..1).each do |x|
63
+ yaml_db("wet_sensor",false,co+"/wet#{x}")
64
+ yaml_db("wet_read",false,co+"/wet#{x}")
65
+ end
66
+
67
+ ##
68
+ Loger::loger(co+"/wet_input.txt",dat,"w")
69
+ end
70
+ rescue
71
+ sleep 0.1
72
+ #do nothing...
73
+ end
74
+ end
75
+ sleep 0.1
76
+
77
+ if res.include?("!") or #include char
78
+ res.include?("$")!=true or#not $
79
+ res=="" or
80
+ res=="false" or
81
+ res.size < 8 or
82
+ (res.size > 9 and res.include?("%01$RC")!=true)
83
+ then
84
+ Loger::loger(lo+"/errors.txt","KR:"+dat+"<br/>")
85
+ Loger::loger(lo+"/errors_.txt","KR:"+dat+"<br/>")
86
+ end
87
+ end
88
+ end
89
+ #thermo_thread starts
90
+ yaml_file="last_thermo_data"
91
+
92
+ thermo_port=8#6
93
+ thermo_N=4
94
+ th="thermo_define.yml"
95
+ yaml_db(th,[thermo_port,thermo_N],config+"/"+th)
96
+
97
+ #thermo_loop_thread(yaml_file,thermo_port,thermo_N,sec=30)
98
+ thermo_loop_thread(yaml_file,thermo_port,thermo_N,sec=30,"./cgi-bin/config")
99
+
100
+ #thermo_logger_thread starts
101
+ thermo_data_logger_thread(thermo_N,"./cgi-bin/config","./cgi-bin/log")
102
+
103
+ #reset manual bool
104
+ yaml_db("manual_bool01.txt",nil,config+"/manual_bool01.txt")
105
+ yaml_db("manual_bool02.txt",nil,config+"/manual_bool02.txt")
106
+ sleep 0.1
107
+
108
+ loop do
109
+ catch :reset_signal do
110
+ sleep 0.2
111
+ ##
112
+ #Initialize basic DATA
113
+
114
+ #THERMO port
115
+ #wr1010 thrmo request
116
+ thermo=yaml_dbr("last_thermo_data",config+"/last_thermo_data")#WR1010::list(thermo_port,thermo_N)
117
+
118
+ #if thermo.class==Array and thermo.size==thermo_N
119
+ # yaml_db("last_thermo_data",thermo,config+"/last_thermo_data")
120
+ #else
121
+ # p thermo
122
+ #end
123
+
124
+ #BIT SETTING
125
+ kr01=Bit.new #KR#01
126
+ kr02=Bit.new #KR#02
127
+ in_bits=Bit.new ##import signal(#KR#01)
128
+
129
+ change1=false #KR#01
130
+ change2=false #KR#02
131
+ p house1_set=yaml_dbr("house1",config+"/house1")
132
+ house2_set=yaml_dbr("house2",config+"/house2")
133
+ house1=N_dan_thermo.new(house1_set,diff=1,1)
134
+ house2=N_dan_thermo.new(house2_set,diff=1,1)
135
+
136
+ a=Value_controller.new(steps=4,open_sec=5,#55
137
+ down_sec=3,#35,
138
+ sensitivity=2,set_value=20,dead_time=15)
139
+ p "house1 Starts at #{(a.up_sec*a.steps).to_s} sec later."
140
+
141
+ b=Value_controller.new(steps=4,open_sec=5,#55
142
+ down_sec=3,#35,
143
+ sensitivity=2,set_value=20,dead_time=15)
144
+ #p "house2 Starts at #{b.reset_time.to_s}(#{(b.up_sec*b.steps).to_s} sec later)."
145
+
146
+ #wet_sensor SETTING
147
+ delay0=yaml_dbr("wet0_drain",config+"/wet0_drain") || 1
148
+ delay1=yaml_dbr("wet1_drain",config+"/wet1_drain") || 1
149
+ wet0=WetSensor.new(delay0,config+"/wet0")
150
+ wet1=WetSensor.new(delay1,config+"/wet1")
151
+
152
+
153
+ #illigate Time DEFINE
154
+ time_array3=yaml_dbr("time_array",config+"/time_array")
155
+ puts "watering set:#{time_array3.inspect}"
156
+ wait_time=yaml_dbr("wait_time",config+"/wait_time")
157
+
158
+ #start
159
+ start=Time.now
160
+
161
+ #start time logging
162
+ dat="Start,"+Time.now.to_s
163
+ Loger::loger(config+"/last_bit.txt",dat+"<br/>","w")#Start,#{Time.now}<br/>
164
+ Loger::loger(log+"/log.txt",dat)
165
+
166
+ #value_controller step change initialize
167
+ change_step=[false,false]
168
+
169
+ ##
170
+ #MAIN LOOP (break if in_bit(22)==off)
171
+ run_save_flag=nil
172
+
173
+ loop do
174
+ t=Time.now
175
+ time=t.to_s
176
+ if t.min!=run_save_flag
177
+ run_save_flag=t.min
178
+ #save_run_check_time
179
+ begin
180
+ yaml_db("run_check",t,config+"/run_check")
181
+ #retry if error.
182
+ rescue
183
+ sleep 0.1
184
+ yaml_db("run_check",t,config+"/run_check")
185
+ end
186
+ end
187
+ if yaml_dbr("reload_flag",config+"/reload_flag")==true
188
+ yaml_db("reload_flag",false,config+"/reload_flag")
189
+ p dat="reload signal:"
190
+ Loger::loger(log+"/log.txt",dat)
191
+
192
+ sleep 0.1
193
+ throw :reset_signal
194
+ end
195
+
196
+ #thermo DEFINE
197
+ thermo=nil
198
+ thermo=yaml_dbr("last_thermo_data",config+"/last_thermo_data")
199
+ #last_thermo_time
200
+
201
+ #illigate Timer
202
+ x=multiple_pulse_timer(time_array3,wait_time)
203
+ #x.bit =>Integer
204
+
205
+ #wet sensor work
206
+ wet0.commander{
207
+ #p "time 0"
208
+ q.push("%01#RCCX00000000**\r")#read request when its time
209
+ }
210
+
211
+ wet1.commander{
212
+ #p "time 1"
213
+ q.push("%01#RCCX00000000**\r")#read request when its time
214
+ }
215
+
216
+
217
+ #illigating check
218
+ kr01.boolbit(wet1.run(x.on?(2)),0)#signal switch
219
+
220
+ kr01.boolbit(wet0.run(x.on?(0)),1)#illigate line1
221
+
222
+ kr01.boolbit(wet1.run(x.on?(2)),2)#illigate line2 ##
223
+
224
+ pomp = wet0.run(x.on?(0)) | wet1.run(x.on?(2))
225
+ kr01.boolbit(pomp,3)#pomp signal
226
+
227
+
228
+ #motor bit
229
+ step_str=""
230
+ if thermo.class==Array && thermo.size==thermo_N
231
+
232
+ #set_temp from N_dan_thermo
233
+ a.set_value=house1.set_now
234
+ b.set_value=house2.set_now
235
+
236
+ ##
237
+ #Controll
238
+ bit1=a.value_controll(thermo[0][0]) if thermo[0][0] != nil
239
+ bit2=!a.switch
240
+ bit3=b.value_controll(thermo[1][0]) if thermo[1][0] != nil
241
+ bit4=!b.switch
242
+ check_step=[a.now_step,b.now_step]
243
+
244
+ if check_step != change_step
245
+ string=[a.set_value,b.set_value].inspect#+check_step.inspect
246
+ #p [bit1,bit2,bit3,bit4]
247
+ #p thermo
248
+
249
+ step_str=",step:"+a.now_step.to_s+","+"step:"+b.now_step.to_s+","+string
250
+ yaml_db("change_step",check_step,config+"/change_step")
251
+
252
+ change_step=check_step.dup
253
+ end
254
+ else
255
+ #2010.4.28 changed
256
+
257
+ ##
258
+ #commonly open if thrmo error.
259
+ #house1
260
+ bit1=true #open signal
261
+ bit2=false#motor_off_trap
262
+
263
+ ##
264
+ #commonly open if thrmo error.
265
+ #house2
266
+ bit3=true #open signal
267
+ bit4=false#motor_off_trap
268
+
269
+ #dat=Time.now.to_s+":thermo_error!! open full time."+thermo.inspect
270
+ end
271
+ #house1 motor
272
+ kr02.boolbit(bit1,0)
273
+ kr02.boolbit(bit2,1)
274
+ #house2 motor
275
+ kr02.boolbit(bit3,2)
276
+ kr02.boolbit(bit4,3)
277
+
278
+ ##
279
+ #RESULT BIT OUTPUT IF CHANGED
280
+ #sum bits and check changes
281
+ #KR01 auto
282
+ #p change1
283
+
284
+ #p config+"/manual_bool01.txt"
285
+ #p yaml_dbr("manual_bool01.txt",config+"/manual_bool01.txt")
286
+ if yaml_dbr("manual_bool01.txt",config+"/manual_bool01.txt")==nil
287
+ if change1 != kr01.bit
288
+ change1=kr01.bit
289
+
290
+ str=kr01.tos(4,2)
291
+ if thermo!=nil
292
+ p data="KR01:"+str+","+time+","+
293
+ thermo[0][0].to_s+","+thermo[0][1].to_s+","+thermo[1][0].to_s+","+thermo[2][0].to_s
294
+ else
295
+ p data="KR01:"+str+" "+time
296
+ end
297
+ #logging thread
298
+ #Thread.start(data){|dat|
299
+
300
+ Loger::loger(config+"/last_bit.txt",data+"<br/>","w")
301
+ Loger::loger(log+"/log.txt",data)
302
+ #}
303
+ #str=bits.tos(24,2)
304
+ #str_size=str.size
305
+
306
+ ##
307
+ #command output
308
+ hex0=str
309
+ hex=Bit.new(hex0.to_i(2)).tos(1,16)
310
+ command="%01#WCCY000000000#{hex}00**\r"
311
+ q.push(command)
312
+ end
313
+ #KR01 manual
314
+ else
315
+ if yaml_dbr("kr01_readable.txt",config+"/kr01_readable.txt")=="OK"
316
+ p "manual KR01"
317
+ #kr1
318
+ hex=yaml_dbr("kr1_bit.txt",config+"/kr1_bit.txt").upcase
319
+ command="%01#WCCY000000000#{hex}00**\r"
320
+ q.push(command)
321
+
322
+ p data="KR01_manual:"+hex+","+time
323
+ #logging thread
324
+ #Thread.start(data) do |dat|
325
+ Loger::loger(config+"/last_bit.txt",data+"<br/>","w")
326
+ Loger::loger(log+"/log.txt",data)
327
+ #end
328
+ yaml_db("kr01_readable.txt",nil,config+"/kr01_readable.txt")
329
+ end
330
+ end
331
+ #KR02 auto
332
+ if yaml_dbr("manual_bool02.txt",config+"/manual_bool02.txt")==nil
333
+ if change2 != kr02.bit
334
+ change2=kr02.bit
335
+
336
+ str=kr02.tos(8,2)
337
+ if thermo!=nil
338
+ p data="KR02:"+str+","+time+","+thermo[0][0].to_s+","+thermo[0][1].to_s+","+thermo[1][0].to_s+","+thermo[2][0].to_s+step_str
339
+ else
340
+ p data="KR02:"+str+" "+time
341
+ end
342
+ #logging thread
343
+ #Thread.start(data){|dat|
344
+ Loger::loger(config+"/last_bit.txt",data+"<br/>","w")
345
+ Loger::loger(log+"/log.txt",data)
346
+ #}
347
+ #str=bits.tos(24,2)
348
+ #str_size=str.size
349
+
350
+ hex1=str.slice(4,4)
351
+ str
352
+ hex2=str.slice(0,4)
353
+ hex_w=Bit.new((hex2+hex1).to_i(2)).tos(2,16)
354
+ command="%02#WCCY00000000#{hex_w}00**\r"
355
+ q.push(command)
356
+ end
357
+ #manual
358
+ else
359
+ if yaml_dbr("kr02_readable.txt",config+"/kr02_readable.txt")=="OK"
360
+ p "manual KR02"
361
+
362
+ #kr2
363
+ hex_w=yaml_dbr("kr2_bit.txt",config+"/kr2_bit.txt").upcase
364
+
365
+ if hex_w.size==1
366
+ hex_w="0"+hex_w
367
+ end
368
+
369
+ command="%02#WCCY00000000#{hex_w}00**\r"
370
+ q.push(command)
371
+
372
+ p data="KR02_manual:"+hex_w+","+time
373
+ #logging thread
374
+ #Thread.start(data) do |dat|
375
+ Loger::loger(config+"/last_bit.txt",data+"<br/>","w")
376
+ Loger::loger(log+"/log.txt",data)
377
+ #end
378
+
379
+ yaml_db("kr02_readable.txt",nil,config+"/kr02_readable.txt")
380
+ end
381
+
382
+ end
383
+ if log_time.hour != t.hour
384
+ log_time=t.dup
385
+ p "watchdog:"+Time.now.to_s
386
+ end
387
+ #p Time.now-t
388
+
389
+ sleep 0.3
390
+
391
+ #p Thread.list
392
+ #raise
393
+ end #main_loop
394
+ end #catch reset_signal
395
+
396
+ end #reset_loop
397
+ q.push nil
398
+ queue.join
399
+ end
400
+ end
401
+ #AgriController::main_new