ladder_drive 0.6.4 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
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