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.
- checksums.yaml +7 -0
- data/ChangeLog.txt +36 -0
- data/LICENSE.txt +15 -0
- data/agri-controller.gemspec +36 -0
- data/gpl-2.0.txt +339 -0
- data/lib/agri-controller.rb +11 -33
- data/lib/agri-controller/bcc.rb +86 -53
- data/lib/agri-controller/bit.rb +158 -143
- data/lib/agri-controller/device.rb +7 -0
- data/lib/agri-controller/device/dacs.rb +148 -0
- data/lib/agri-controller/device/kr.rb +23 -0
- data/lib/agri-controller/device/ma.rb +92 -0
- data/lib/agri-controller/device/mch383.rb +178 -0
- data/lib/agri-controller/device/tr.rb +230 -0
- data/lib/agri-controller/device/wr1010.rb +314 -0
- data/lib/agri-controller/dt.rb +17 -0
- data/lib/agri-controller/error_caption.rb +67 -46
- data/lib/agri-controller/gruff.rb +7 -0
- data/lib/agri-controller/gruff/base.rb +88 -0
- data/lib/agri-controller/gruff/chdata.rb +64 -0
- data/lib/agri-controller/gruff/join_csv.rb +62 -0
- data/lib/agri-controller/gruff/rename_csv.rb +50 -0
- data/lib/agri-controller/{thermo_data_each_day.rb → gruff/thermo_data_each_day.rb} +67 -67
- data/lib/agri-controller/{thermo_gruff.rb → gruff/thermo_gruff.rb} +112 -109
- data/lib/agri-controller/gruff/thermo_gruff2.rb +161 -0
- data/lib/agri-controller/{thermo_gruff_generate.rb → gruff/thermo_gruff_generate.rb} +28 -28
- data/lib/agri-controller/gruff/thermo_gruff_loop.rb +42 -0
- data/lib/agri-controller/loger.rb +91 -51
- data/lib/agri-controller/main.rb +0 -0
- data/lib/agri-controller/main_linux.rb +282 -0
- data/lib/agri-controller/main_new.rb +401 -401
- data/lib/agri-controller/multiple_pulse_timer.rb +190 -169
- data/lib/agri-controller/n_dan_thermo.rb +156 -154
- data/lib/agri-controller/save_threads.rb +181 -172
- data/lib/agri-controller/setting_io.rb +53 -53
- data/lib/agri-controller/ttyUSB_watchdog.rb +43 -0
- data/lib/agri-controller/value_controller.rb +209 -167
- data/lib/agri-controller/version.rb +7 -5
- data/lib/agri-controller/web.rb +39 -39
- data/lib/agri-controller/webrick_test.rb +51 -46
- data/lib/agri-controller/wet_sensor.rb +92 -0
- data/test/tc_bit.rb +14 -3
- data/test/tc_trigger.rb +27 -0
- data/test/ts_agri-controller.rb +10 -10
- metadata +62 -202
- data/bin/main.bat +0 -2
- data/bin/main.bat /202/326/202/314/203V/203/207/201[/203g/203J/203b/203g.lnk +0 -0
- data/bin/main.rb +0 -23
- data/bin/memo.txt +0 -4
- data/bin/server.bat +0 -1
- data/bin/server.bat /202/326/202/314/203V/203/207/201[/203g/203J/203b/203g.lnk +0 -0
- data/bin/server.rb +0 -4
- data/bin/set_config.rb +0 -47
- data/bin/usual.rb +0 -3
- data/bin//203R/203}/203/223/203h /203v/203/215/203/223/203v/203g.lnk +0 -0
- data/lib/agri-controller/dacs.rb +0 -114
- data/lib/agri-controller/dircopy.rb +0 -30
- data/lib/agri-controller/kr.rb +0 -34
- data/lib/agri-controller/kr_2.rb +0 -78
- data/lib/agri-controller/serial.rb +0 -114
- data/lib/agri-controller/thermo_gruff_loop.rb +0 -35
- data/lib/agri-controller/wetsensor.rb +0 -119
- data/lib/agri-controller/wr1010.rb +0 -316
- data/lib/agri-controller/wr1010_2.rb +0 -0
- data/lib/cgi-bin/auto01.cgi +0 -0
- data/lib/cgi-bin/auto02.cgi +0 -0
- data/lib/cgi-bin/change_step.cgi +0 -42
- data/lib/cgi-bin/config/change_step +0 -4
- data/lib/cgi-bin/config/house1 +0 -20
- data/lib/cgi-bin/config/house2 +0 -8
- data/lib/cgi-bin/config/kr01_readable.txt +0 -2
- data/lib/cgi-bin/config/kr02_readable.txt +0 -2
- data/lib/cgi-bin/config/kr1_bit.txt +0 -2
- data/lib/cgi-bin/config/kr2_bit.txt +0 -2
- data/lib/cgi-bin/config/last_bit.txt +0 -1
- data/lib/cgi-bin/config/last_thermo_data +0 -22
- data/lib/cgi-bin/config/last_thermo_time +0 -2
- data/lib/cgi-bin/config/manual_bool01.txt +0 -2
- data/lib/cgi-bin/config/manual_bool02.txt +0 -2
- data/lib/cgi-bin/config/reload_flag +0 -2
- data/lib/cgi-bin/config/run_check +0 -2
- data/lib/cgi-bin/config/thermo_define.yml +0 -4
- data/lib/cgi-bin/config/time_array +0 -10
- data/lib/cgi-bin/config/wait_time +0 -2
- data/lib/cgi-bin/config/wet0 +0 -3
- data/lib/cgi-bin/config/wet0_drain +0 -2
- data/lib/cgi-bin/config/wet1 +0 -3
- data/lib/cgi-bin/config/wet1_drain +0 -2
- data/lib/cgi-bin/config/wet_input.txt +0 -1
- data/lib/cgi-bin/curtain_h1.cgi +0 -43
- data/lib/cgi-bin/curtain_h1_setting.cgi +0 -43
- data/lib/cgi-bin/curtain_h2.cgi +0 -43
- data/lib/cgi-bin/curtain_h2_setting.cgi +0 -43
- data/lib/cgi-bin/dacs_port.cgi +0 -43
- data/lib/cgi-bin/delay_time_0.cgi +0 -43
- data/lib/cgi-bin/delay_time_1.cgi +0 -43
- data/lib/cgi-bin/error_clear.cgi +0 -0
- data/lib/cgi-bin/house1.cgi +0 -42
- data/lib/cgi-bin/house1a.cgi +0 -43
- data/lib/cgi-bin/house2.cgi +0 -42
- data/lib/cgi-bin/house2b.cgi +0 -43
- data/lib/cgi-bin/house_n_dan_thermo1.cgi +0 -43
- data/lib/cgi-bin/house_n_dan_thermo2.cgi +0 -0
- data/lib/cgi-bin/keitai.cgi +0 -25
- data/lib/cgi-bin/kr01.cgi +0 -0
- data/lib/cgi-bin/kr01_readable.txt.cgi +0 -42
- data/lib/cgi-bin/kr02.cgi +0 -0
- data/lib/cgi-bin/kr02_readable.txt.cgi +0 -42
- data/lib/cgi-bin/kr1_bit.txt.cgi +0 -42
- data/lib/cgi-bin/kr2_bit.txt.cgi +0 -42
- data/lib/cgi-bin/kr_log.cgi +0 -18
- data/lib/cgi-bin/last_bit.txt.cgi +0 -42
- data/lib/cgi-bin/last_thermo_data.cgi +0 -42
- data/lib/cgi-bin/last_thermo_time.cgi +0 -42
- data/lib/cgi-bin/log.cgi +0 -19
- data/lib/cgi-bin/log/errors.txt +0 -1
- data/lib/cgi-bin/log/errors_.txt +0 -93
- data/lib/cgi-bin/log/kr_command_log.txt +0 -240
- data/lib/cgi-bin/log/log.txt +0 -441
- data/lib/cgi-bin/log/old_log/log_.txt +0 -15
- data/lib/cgi-bin/log/thermo/2010-05-22_thermo.csv +0 -1438
- data/lib/cgi-bin/log/thermo/2010-06-12_thermo.csv +0 -3
- data/lib/cgi-bin/log/thermo/2010-06-13_thermo.csv +0 -2
- data/lib/cgi-bin/log/thermo/2010-06-16_thermo.csv +0 -85
- data/lib/cgi-bin/log/thermo/2010-06-17_thermo.csv +0 -285
- data/lib/cgi-bin/log/thermo_data.csv +0 -643
- data/lib/cgi-bin/log/thermo_graph_loop.txt +0 -1
- data/lib/cgi-bin/main.cgi +0 -98
- data/lib/cgi-bin/manual_bool01.txt.cgi +0 -42
- data/lib/cgi-bin/manual_bool02.txt.cgi +0 -42
- data/lib/cgi-bin/post_change_step.cgi +0 -44
- data/lib/cgi-bin/post_house1.cgi +0 -44
- data/lib/cgi-bin/post_house2.cgi +0 -44
- data/lib/cgi-bin/post_kr01.cgi +0 -0
- data/lib/cgi-bin/post_kr01_readable.txt.cgi +0 -44
- data/lib/cgi-bin/post_kr02.cgi +0 -0
- data/lib/cgi-bin/post_kr02_readable.txt.cgi +0 -44
- data/lib/cgi-bin/post_kr1_bit.txt.cgi +0 -44
- data/lib/cgi-bin/post_kr2_bit.txt.cgi +0 -44
- data/lib/cgi-bin/post_last_bit.txt.cgi +0 -44
- data/lib/cgi-bin/post_last_thermo_data.cgi +0 -44
- data/lib/cgi-bin/post_last_thermo_time.cgi +0 -44
- data/lib/cgi-bin/post_manual_bool01.txt.cgi +0 -44
- data/lib/cgi-bin/post_manual_bool02.txt.cgi +0 -44
- data/lib/cgi-bin/post_reload_flag.cgi +0 -44
- data/lib/cgi-bin/post_run_check.cgi +0 -44
- data/lib/cgi-bin/post_thermo_define.yml.cgi +0 -44
- data/lib/cgi-bin/post_time_array.cgi +0 -44
- data/lib/cgi-bin/post_wait_time.cgi +0 -44
- data/lib/cgi-bin/post_wet0.cgi +0 -44
- data/lib/cgi-bin/post_wet0_drain.cgi +0 -44
- data/lib/cgi-bin/post_wet1.cgi +0 -44
- data/lib/cgi-bin/post_wet1_drain.cgi +0 -44
- data/lib/cgi-bin/post_wet_input.txt.cgi +0 -44
- data/lib/cgi-bin/reload_flag.cgi +0 -42
- data/lib/cgi-bin/reset_.cgi +0 -0
- data/lib/cgi-bin/run_check.cgi +0 -42
- data/lib/cgi-bin/set.cgi +0 -33
- data/lib/cgi-bin/set_post_yml_each.rb +0 -72
- data/lib/cgi-bin/set_yml_cgi_each.rb +0 -0
- data/lib/cgi-bin/setting.cgi +0 -0
- data/lib/cgi-bin/setting.cgi.1 +0 -0
- data/lib/cgi-bin/setting_io.rb +0 -53
- data/lib/cgi-bin/thermo_data_graphs.cgi +0 -0
- data/lib/cgi-bin/thermo_data_list.cgi +0 -0
- data/lib/cgi-bin/thermo_define.yml.cgi +0 -42
- data/lib/cgi-bin/thermo_graph.cgi +0 -0
- data/lib/cgi-bin/time_array.cgi +0 -42
- data/lib/cgi-bin/wait_time.cgi +0 -42
- data/lib/cgi-bin/web.rb +0 -39
- data/lib/cgi-bin/wet0.cgi +0 -42
- data/lib/cgi-bin/wet0_drain.cgi +0 -42
- data/lib/cgi-bin/wet1.cgi +0 -42
- data/lib/cgi-bin/wet1_drain.cgi +0 -42
- data/lib/cgi-bin/wet_input.txt.cgi +0 -42
- data/lib/htdocs/css/str.css +0 -89
- data/lib/htdocs/favicon.ico +0 -0
- data/lib/htdocs/thermo/thermo_data.jpg +0 -0
- data/lib/htdocs/thermo/thumb/thermo_data.jpg +0 -0
- data/test/tc_bit.rb.1 +0 -15
- data/test/tc_bit.rb.2 +0 -21
- 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
|