ladder_drive 0.6.4 → 0.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 78f994329616c81aa08af6f821851a9cfa302382
4
- data.tar.gz: cdd5b03d754155febbc0e0b77f4e23a09910a447
3
+ metadata.gz: 9b8a4c3fda62348e4b5e414860c9f3e9b26c962c
4
+ data.tar.gz: ed8bdb8780a0ba01078c741457b9c40e769c4743
5
5
  SHA512:
6
- metadata.gz: c92d94494040f7d972110d07d116df9fdea309c979fde59a58da644e4f9d41a775ec680c16a8e82be9267705f6dae9f6ca7967b4c595c03dcbf1cbd41158081f
7
- data.tar.gz: d5343de39d9760831bda75adb6dfc7e6f30cb485f7c6f137a67dcd651583ecc517c415de040963cbe6cab29f5a968d1fdd7a9837fc9ebdc69ace1dfedbc8b07d
6
+ metadata.gz: 4d66f4ebbfc6ca268290c4915419b8413c71595bab618e45b3e52f0c470a6e1e8a6ab669179c232b5559b5e7d9ff3b52a2d7e0951488fe51f0536a82633d1179
7
+ data.tar.gz: 2fc3b6a350452c327c1e8d8336cd61812028f7f682e6ad74e84ee2a93cc751beb44666635aced2604c21d1581563680d4a64c62219cf8f571389893afe93d02f
data/Gemfile CHANGED
@@ -18,3 +18,4 @@ gem 'serialport'
18
18
  gem 'google_drive'
19
19
  gem "ruby-trello"
20
20
  gem 'ambient_iot', ">= 0.1.1"
21
+ gem 'dotenv'
data/Gemfile.lock CHANGED
@@ -2,37 +2,42 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  ladder_drive (0.6.4)
5
- activesupport (~> 5.0)
6
- ffi (~> 1.9.24, >= 1.9.24)
7
- google_drive (~> 3.0)
5
+ activesupport (~> 4.0)
6
+ ambient_iot (~> 0.1, >= 0.1.1)
7
+ dotenv (~> 2.1)
8
+ ffi (~> 1.9, >= 1.9.24)
9
+ google_drive (~> 3.0, >= 3.0.3)
8
10
  pi_piper (~> 2.0, >= 2.0.0)
9
11
  ruby-trello (~> 2.1)
10
- serialport
12
+ serialport (~> 1.3.1)
11
13
  thor (~> 0)
12
14
 
13
15
  GEM
14
16
  remote: https://rubygems.org/
15
17
  specs:
16
- activemodel (5.2.3)
17
- activesupport (= 5.2.3)
18
- activesupport (5.2.3)
19
- concurrent-ruby (~> 1.0, >= 1.0.2)
20
- i18n (>= 0.7, < 2)
18
+ activemodel (4.2.11.1)
19
+ activesupport (= 4.2.11.1)
20
+ builder (~> 3.1)
21
+ activesupport (4.2.11.1)
22
+ i18n (~> 0.7)
21
23
  minitest (~> 5.1)
24
+ thread_safe (~> 0.3, >= 0.3.4)
22
25
  tzinfo (~> 1.1)
23
- addressable (2.6.0)
24
- public_suffix (>= 2.0.2, < 4.0)
26
+ addressable (2.7.0)
27
+ public_suffix (>= 2.0.2, < 5.0)
25
28
  ambient_iot (0.1.1)
29
+ builder (3.2.3)
26
30
  concurrent-ruby (1.1.5)
27
31
  declarative (0.0.10)
28
32
  declarative-option (0.1.0)
29
33
  domain_name (0.5.20190701)
30
34
  unf (>= 0.0.5, < 1.0.0)
35
+ dotenv (2.7.5)
31
36
  eventmachine (1.0.9)
32
- faraday (0.15.4)
37
+ faraday (0.17.0)
33
38
  multipart-post (>= 1.2, < 3)
34
39
  ffi (1.9.25)
35
- google-api-client (0.30.7)
40
+ google-api-client (0.30.10)
36
41
  addressable (~> 2.5, >= 2.5.1)
37
42
  googleauth (>= 0.5, < 0.10.0)
38
43
  httpclient (>= 2.8.1, < 3.0)
@@ -44,45 +49,47 @@ GEM
44
49
  google-api-client (>= 0.11.0, < 0.31.0)
45
50
  googleauth (>= 0.5.0, < 1.0.0)
46
51
  nokogiri (>= 1.5.3, < 2.0.0)
47
- googleauth (0.8.1)
52
+ googleauth (0.9.0)
48
53
  faraday (~> 0.12)
49
54
  jwt (>= 1.4, < 3.0)
50
55
  memoist (~> 0.16)
51
56
  multi_json (~> 1.11)
52
57
  os (>= 0.9, < 2.0)
53
58
  signet (~> 0.7)
59
+ http-accept (1.7.0)
54
60
  http-cookie (1.0.3)
55
61
  domain_name (~> 0.5)
56
62
  httpclient (2.8.3)
57
- i18n (1.6.0)
63
+ i18n (0.9.5)
58
64
  concurrent-ruby (~> 1.0)
59
65
  json (2.2.0)
60
66
  jwt (2.2.1)
61
67
  memoist (0.16.0)
62
- mime-types (3.2.2)
68
+ mime-types (3.3)
63
69
  mime-types-data (~> 3.2015)
64
- mime-types-data (3.2019.0331)
70
+ mime-types-data (3.2019.1009)
65
71
  mini_mime (1.0.2)
66
72
  mini_portile2 (2.4.0)
67
- minitest (5.11.3)
73
+ minitest (5.12.2)
68
74
  multi_json (1.13.1)
69
75
  multipart-post (2.1.1)
70
76
  netrc (0.11.0)
71
- nokogiri (1.10.3)
77
+ nokogiri (1.10.4)
72
78
  mini_portile2 (~> 2.4.0)
73
79
  oauth (0.5.4)
74
80
  os (1.0.1)
75
81
  pi_piper (2.0.0)
76
82
  eventmachine (= 1.0.9)
77
83
  ffi
78
- power_assert (1.1.4)
79
- public_suffix (3.1.1)
84
+ power_assert (1.1.5)
85
+ public_suffix (4.0.1)
80
86
  rake (10.5.0)
81
87
  representable (3.0.4)
82
88
  declarative (< 0.1.0)
83
89
  declarative-option (< 0.2.0)
84
90
  uber (< 0.2.0)
85
- rest-client (2.0.2)
91
+ rest-client (2.1.0)
92
+ http-accept (>= 1.7.0, < 2.0)
86
93
  http-cookie (>= 1.0.2, < 2.0)
87
94
  mime-types (>= 1.16, < 4.0)
88
95
  netrc (~> 0.8)
@@ -100,7 +107,7 @@ GEM
100
107
  faraday (~> 0.9)
101
108
  jwt (>= 1.5, < 3.0)
102
109
  multi_json (~> 1.10)
103
- test-unit (3.3.3)
110
+ test-unit (3.3.4)
104
111
  power_assert
105
112
  test-unit-rr (1.0.5)
106
113
  rr (>= 1.1.1)
@@ -121,6 +128,7 @@ DEPENDENCIES
121
128
  activesupport (>= 4.0)
122
129
  ambient_iot (>= 0.1.1)
123
130
  bundler (~> 1.11)
131
+ dotenv
124
132
  ffi (~> 1.9.24)
125
133
  google_drive
126
134
  ladder_drive!
data/README_jp.md CHANGED
@@ -36,8 +36,7 @@ $ cd my_project
36
36
 
37
37
  ファイルの構成は下の様になっています。
38
38
  plc以下にLadderDriveを実行するPLCプロジェクトの雛形があります。
39
- 現在はエミュレーターと三菱電機のiQ-RシリーズR08CPUのみの対応となっています。
40
- 他メーカーや他の機種は今後追加する予定です。
39
+ 現在はエミュレーターと三菱電機のiQ-RシリーズR08CPU、キーエンスKV-5000のみの対応となっています。
41
40
 
42
41
 
43
42
  ```
@@ -310,6 +309,7 @@ Ladder DriveをIoT Gateway として機能させるプラグインになりま
310
309
  |plc_mapper|複数のPLCのデータをLadder Driveのメモリーに展開します。|
311
310
  |slack|Slackにデータの変化を記録します。|
312
311
  |trello|trelloのカードを指定のリストに移動します。|
312
+ |ambient|Ambientにデータの変化を記録します。|
313
313
 
314
314
  これらの用意されているプラグインをインストールするには
315
315
 
data/ladder_drive.gemspec CHANGED
@@ -14,13 +14,16 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = "https://github.com/ito-soft-design/ladder_drive"
15
15
  spec.license = "MIT"
16
16
 
17
- spec.add_runtime_dependency 'thor', '~> 0'
18
- spec.add_runtime_dependency 'activesupport', '~> 5.0'#, '>= 4.2.7'
19
- spec.add_runtime_dependency 'ffi', '~> 1.9.24', '>= 1.9.24'
20
- spec.add_runtime_dependency 'pi_piper', '~> 2.0', '>= 2.0.0'
21
- spec.add_runtime_dependency 'serialport'
22
- spec.add_runtime_dependency 'google_drive', '~> 3.0'
23
- spec.add_runtime_dependency 'ruby-trello', '~>2.1'
17
+ spec.add_runtime_dependency 'thor', '~> 0'
18
+ spec.add_runtime_dependency 'activesupport', '~> 4.0'
19
+ spec.add_runtime_dependency 'ffi', '~> 1.9', '>= 1.9.24'
20
+ spec.add_runtime_dependency 'pi_piper', '~> 2.0', '>= 2.0.0'
21
+
22
+ spec.add_runtime_dependency 'serialport', '~> 1.3', '>= 1.3.1'
23
+ spec.add_runtime_dependency 'ambient_iot', '~> 0.1', '>= 0.1.1'
24
+ spec.add_runtime_dependency 'google_drive', '~> 3.0', '>= 3.0.3'
25
+ spec.add_runtime_dependency 'ruby-trello', '~>2.1'
26
+ spec.add_runtime_dependency 'dotenv', '~>2.1'
24
27
 
25
28
  spec.required_ruby_version = '>= 2.3.3'
26
29
 
data/lib/ladder_drive.rb CHANGED
@@ -24,5 +24,8 @@
24
24
  dir = File.expand_path(File.dirname(__FILE__))
25
25
  $:.unshift dir unless $:.include? dir
26
26
 
27
+ require 'dotenv'
28
+ Dotenv.load
29
+
27
30
  require "plc/plc"
28
31
  require "ladder_drive/ladder_drive"
@@ -25,6 +25,7 @@ require 'active_support/core_ext/string/inflections'
25
25
  require 'yaml'
26
26
  require 'json'
27
27
  require 'protocol/protocol'
28
+ require 'erb'
28
29
 
29
30
  include LadderDrive::Protocol::Mitsubishi
30
31
  include LadderDrive::Protocol::Keyence
@@ -46,7 +47,8 @@ module LadderDrive
46
47
  def load path
47
48
  h = {}
48
49
  if File.exist?(path)
49
- h = YAML.load(File.read(path))
50
+ erb = ERB.new File.read(path)
51
+ h = YAML.load(erb.result(binding))
50
52
  h = JSON.parse(h.to_json, symbolize_names: true)
51
53
  end
52
54
  new h || {}
@@ -22,5 +22,5 @@
22
22
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
23
 
24
24
  module LadderDrive
25
- VERSION = "0.6.4"
25
+ VERSION = "0.6.5"
26
26
  end
@@ -52,9 +52,11 @@ module Emulator
52
52
  Thread.new do
53
53
  server = TCPServer.open @port
54
54
  puts "launching emulator ... "
55
+ launched = false
55
56
  loop do
56
57
  Thread.start(server.accept) do |socket|
57
- puts "done launching"
58
+ puts "done launching" unless launched
59
+ launched ||= true
58
60
  while line = socket.gets
59
61
  begin
60
62
  r = @plc.execute_console_commands line
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2018 ITO SOFT DESIGN Inc.
2
+ # Copyright (c) 201 ITO SOFT DESIGN Inc.
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -25,6 +25,8 @@ $:.unshift dir unless $:.include? dir
25
25
 
26
26
  require 'active_support'
27
27
  require 'active_support/core_ext'
28
+ require 'erb'
29
+ require 'plugin_trigger_state'
28
30
 
29
31
  module PlcPlugins
30
32
 
@@ -110,6 +112,8 @@ class Plugin
110
112
  def initialize plc
111
113
  @config = load_config
112
114
  @plc = plc
115
+ @device_states = {}
116
+ @trigger_states = {}
113
117
  end
114
118
 
115
119
  def name
@@ -124,31 +128,34 @@ class Plugin
124
128
  return false unless self.plc == plc
125
129
  end
126
130
 
131
+ def triggered? trigger_config
132
+ state = trigger_state_for trigger_config
133
+ state.reset
134
+ state.update
135
+ state.triggered?
136
+ end
137
+
138
+ def trigger_state_for trigger_config
139
+ @trigger_states[trigger_config.object_id] ||= PluginTriggerState.new(plc, trigger_config)
140
+ end
141
+
142
+
127
143
  private
128
144
 
129
145
  def load_config
130
146
  h = {}
131
147
  path = File.join("config", "plugins", "#{name}.yml")
132
148
  if File.exist?(path)
133
- h = YAML.load(File.read(path))
149
+ erb = ERB.new File.read(path)
150
+ h = YAML.load(erb.result(binding))
134
151
  h = JSON.parse(h.to_json, symbolize_names: true)
135
152
  end
136
153
  h
137
154
  end
138
155
 
139
- end
140
156
 
141
157
  end
142
- end
143
158
 
144
159
 
145
- # @deprecated use LadderDrive::Emulator::Plugin class instead of this.
146
- def load_plugin_config name
147
- h = {}
148
- path = File.join("config", "plugins", "#{name}.yml")
149
- if File.exist?(path)
150
- h = YAML.load(File.read(path))
151
- h = JSON.parse(h.to_json, symbolize_names: true)
152
- end
153
- h
160
+ end
154
161
  end
@@ -0,0 +1,152 @@
1
+ #
2
+ # Copyright (c) 2018 ITO SOFT DESIGN Inc.
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+
23
+ dir = Dir.pwd
24
+ $:.unshift dir unless $:.include? dir
25
+
26
+ require 'active_support'
27
+ require 'active_support/core_ext'
28
+ require 'erb'
29
+
30
+
31
+ module LadderDrive
32
+ module Emulator
33
+
34
+
35
+ class PluginTriggerState
36
+ attr_reader :plc
37
+ attr_reader :config
38
+ attr_reader :device
39
+ attr_reader :value_type
40
+ attr_reader :value
41
+
42
+ def initialize plc, config
43
+ @plc = plc
44
+ @config = config
45
+ @value_type = config[:value_type]
46
+ @devices = {}
47
+ @next_trigger_times = {}
48
+ end
49
+
50
+ def key
51
+ object_id
52
+ end
53
+
54
+ def value
55
+ @value
56
+ end
57
+
58
+ def value= value
59
+ if @changed.nil?
60
+ @changed = @value != value
61
+ @raised = @changed && !!value
62
+ @fallen = @changed && !value
63
+ @value = value
64
+ end
65
+ end
66
+
67
+ def changed?
68
+ !!@changed
69
+ end
70
+
71
+ def raised?
72
+ !!@raised
73
+ end
74
+
75
+ def fallen?
76
+ !!@fallen
77
+ end
78
+
79
+ def triggered?
80
+ !!@triggered
81
+ end
82
+
83
+ def device
84
+ device_with_trigger(config[:triggers]&.first || config[:trigger])
85
+ end
86
+
87
+ def update
88
+ return unless @triggered.nil?
89
+
90
+ triggers = config[:triggers]
91
+ triggers ||= [config[:trigger]]
92
+
93
+ @triggered = false
94
+
95
+ triggers.each do |trigger|
96
+ case trigger[:type]
97
+ when "changed", "raise", "fall", "raise_and_fall"
98
+ device = device_with_trigger(trigger)
99
+ value = device.send(@value_type || :value)
100
+
101
+ # update flags
102
+ @changed = @value != value
103
+ case value
104
+ when true, false, nil
105
+ @raised = @changed && !!value
106
+ @fallen = @changed && !value
107
+ else
108
+ @fallen = @changed && value == 0
109
+ @raised = @changed && !@fallen
110
+ end
111
+ @value = value
112
+
113
+ # judgement triggered
114
+ case trigger[:type]
115
+ when "raise"
116
+ @triggered = true if @raised
117
+ when "fall"
118
+ @triggered = true if @fallen
119
+ else
120
+ @triggered = true if @changed
121
+ end
122
+
123
+ when "interval"
124
+ now = Time.now
125
+ t = @next_trigger_times[trigger.object_id] || now
126
+ while now >= t
127
+ @triggered ||= true
128
+ t += trigger[:interval]
129
+ end
130
+ @next_trigger_times[trigger.object_id] = t
131
+ else
132
+ @triggered = false
133
+ end
134
+ end
135
+ @triggered
136
+ end
137
+
138
+ def reset
139
+ @changed = nil
140
+ @raised = nil
141
+ @fallen = nil
142
+ @triggered = nil
143
+ end
144
+
145
+ def device_with_trigger trigger
146
+ @devices[trigger.object_id] ||= @plc.device_by_name(trigger[:device])
147
+ end
148
+
149
+ end
150
+
151
+ end
152
+ end
@@ -82,7 +82,6 @@ class AmbientPlugin < Plugin
82
82
  return if disabled?
83
83
 
84
84
  @values = {}
85
- @times = {}
86
85
  @worker_queue = Queue.new
87
86
 
88
87
  setup
@@ -93,41 +92,10 @@ class AmbientPlugin < Plugin
93
92
  return unless config[:channels]
94
93
 
95
94
  config[:channels].each do |channel|
96
- channel = channel
97
95
  next unless channel[:channel_id]
98
96
  next unless channel[:write_key]
99
97
  begin
100
-
101
- interval_triggered = false
102
- now = Time.now
103
- triggered = false
104
- v = nil
105
- case channel[:trigger][:type]
106
- when "interval"
107
- t = @times[channel.object_id] || now
108
- triggered = t <= now
109
- if triggered
110
- interval_triggered = true
111
- t += channel[:trigger][:interval] || 300
112
- @times[channel.object_id] = t
113
- end
114
- else
115
- device = plc.device_by_name channel[:trigger][:device]
116
- v = device.send channel[:trigger][:value_type]
117
- unless @values[device.name] == v
118
- @values[device.name] = v
119
- case channel[:trigger][:type]
120
- when "raise"
121
- triggered = !!v
122
- when "fall"
123
- triggered = !v
124
- else
125
- triggered = true
126
- end
127
- end
128
- end
129
-
130
- next unless triggered || interval_triggered
98
+ next unless self.triggered?(channel)
131
99
 
132
100
  # gether values
133
101
  values = channel[:devices].inject({}) do |h, pair|
@@ -76,36 +76,13 @@ class IftttPlugin < Plugin
76
76
  return if disabled?
77
77
  config[:events].each do |event|
78
78
  begin
79
- triggered = false
80
- case event[:trigger][:type]
81
- when "interval"
82
- now = Time.now
83
- t = @times[event.object_id] || now
84
- triggered = t <= now
85
- if triggered
86
- t += event[:trigger][:interval] || 300
87
- @times[event.object_id] = t
88
- end
89
- else
90
- d = plc.device_by_name event[:trigger][:device]
91
- v = d.send event[:trigger][:value_type], event[:trigger][:text_length] || 8
92
- unless @values[event.object_id] == v
93
- @values[event.object_id] = v
94
- case event[:trigger][:type]
95
- when "raise"
96
- triggered = !!v
97
- when "fall"
98
- triggered = !v
99
- else
100
- triggered = true
101
- end
102
- end
103
- end
104
-
105
- next unless triggered
79
+ next unless self.triggered?(event)
106
80
 
81
+ v = trigger_state_for(event).value
107
82
  @worker_queue.push event:event[:name], payload:event[:params].dup || {}, value:v
108
83
  rescue => e
84
+ puts $!
85
+ puts $@
109
86
  p e
110
87
  end
111
88
  end if config[:events]
@@ -97,9 +97,9 @@ class SlackPlugin < Plugin
97
97
  t += event[:trigger][:interval] || 300
98
98
  @times[event.object_id] = t
99
99
  end
100
- v = device.send event[:value_type], event[:trigger][:text_length] || 8
100
+ v = device.send event[:value_type] || :device, event[:trigger][:text_length] || 8
101
101
  else
102
- v = device.send event[:value_type], event[:text_length] || 8
102
+ v = device.send event[:value_type] || :value, event[:text_length] || 8
103
103
  unless @values[device.name] == v
104
104
  @values[device.name] = v
105
105
  case event[:trigger][:type]
@@ -122,6 +122,8 @@ class SlackPlugin < Plugin
122
122
  end
123
123
  rescue => e
124
124
  p e
125
+ puts $!
126
+ puts $@
125
127
  end
126
128
  end
127
129
  end
@@ -80,40 +80,11 @@ class TrelloPlugin < Plugin
80
80
 
81
81
  @config[:events].each do |event|
82
82
  begin
83
- event_id = event.object_id
84
- triggered = false
85
- now = Time.now
86
- device = nil
87
-
88
- case event[:trigger][:type]
89
- when "interval"
90
- t = @times[event_id] || now
91
- triggered = t <= now
92
- if triggered
93
- triggered = true
94
- t += event[:trigger][:interval] || 300
95
- @times[event_id] = t
96
- end
97
- else
98
- device = plc.device_by_name event[:trigger][:device]
99
- v = device.send event[:trigger][:value_type], event[:trigger][:text_length] || 8
100
- @values[event_id] ||= {}
101
- unless @values[event_id][device.name] == v
102
- @values[event_id][device.name] = v
103
- case event[:trigger][:type]
104
- when "raise"
105
- triggered = !!v
106
- when "fall"
107
- triggered = !v
108
- else
109
- triggered = true
110
- end
111
- end
112
- end
113
-
114
- next unless triggered
83
+ next unless self.triggered?(event)
115
84
 
116
- @worker_queue.push event:event, device_name:device.name, value:v, time: now
85
+ device = trigger_state_for(event).device
86
+ v = trigger_state_for(event).value
87
+ @worker_queue.push event:event, device_name:device.name, value:v, time: Time.now
117
88
 
118
89
  rescue => e
119
90
  p e
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ladder_drive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.6.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katsuyoshi Ito
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-29 00:00:00.000000000 Z
11
+ date: 2019-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -30,21 +30,21 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '5.0'
33
+ version: '4.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '5.0'
40
+ version: '4.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: ffi
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.9.24
47
+ version: '1.9'
48
48
  - - ">="
49
49
  - !ruby/object:Gem::Version
50
50
  version: 1.9.24
@@ -54,7 +54,7 @@ dependencies:
54
54
  requirements:
55
55
  - - "~>"
56
56
  - !ruby/object:Gem::Version
57
- version: 1.9.24
57
+ version: '1.9'
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: 1.9.24
@@ -82,16 +82,42 @@ dependencies:
82
82
  name: serialport
83
83
  requirement: !ruby/object:Gem::Requirement
84
84
  requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '1.3'
85
88
  - - ">="
86
89
  - !ruby/object:Gem::Version
87
- version: '0'
90
+ version: 1.3.1
88
91
  type: :runtime
89
92
  prerelease: false
90
93
  version_requirements: !ruby/object:Gem::Requirement
91
94
  requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '1.3'
92
98
  - - ">="
93
99
  - !ruby/object:Gem::Version
94
- version: '0'
100
+ version: 1.3.1
101
+ - !ruby/object:Gem::Dependency
102
+ name: ambient_iot
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '0.1'
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 0.1.1
111
+ type: :runtime
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.1'
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: 0.1.1
95
121
  - !ruby/object:Gem::Dependency
96
122
  name: google_drive
97
123
  requirement: !ruby/object:Gem::Requirement
@@ -99,6 +125,9 @@ dependencies:
99
125
  - - "~>"
100
126
  - !ruby/object:Gem::Version
101
127
  version: '3.0'
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: 3.0.3
102
131
  type: :runtime
103
132
  prerelease: false
104
133
  version_requirements: !ruby/object:Gem::Requirement
@@ -106,6 +135,9 @@ dependencies:
106
135
  - - "~>"
107
136
  - !ruby/object:Gem::Version
108
137
  version: '3.0'
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: 3.0.3
109
141
  - !ruby/object:Gem::Dependency
110
142
  name: ruby-trello
111
143
  requirement: !ruby/object:Gem::Requirement
@@ -120,6 +152,20 @@ dependencies:
120
152
  - - "~>"
121
153
  - !ruby/object:Gem::Version
122
154
  version: '2.1'
155
+ - !ruby/object:Gem::Dependency
156
+ name: dotenv
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - "~>"
160
+ - !ruby/object:Gem::Version
161
+ version: '2.1'
162
+ type: :runtime
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - "~>"
167
+ - !ruby/object:Gem::Version
168
+ version: '2.1'
123
169
  - !ruby/object:Gem::Dependency
124
170
  name: bundler
125
171
  requirement: !ruby/object:Gem::Requirement
@@ -204,6 +250,7 @@ files:
204
250
  - lib/plc/emulator/emu_plc_server.rb
205
251
  - lib/plc/emulator/emulator.rb
206
252
  - lib/plc/emulator/plc_plugins.rb
253
+ - lib/plc/emulator/plugin_trigger_state.rb
207
254
  - lib/plc/keyence/kv/kv-5000/DocumentWindowInfo.xml
208
255
  - lib/plc/keyence/kv/kv-5000/KvsMon.ini
209
256
  - lib/plc/keyence/kv/kv-5000/LadderDrive.mod