ladder_drive 0.6.4 → 0.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/Gemfile +1 -1
- data/Gemfile.lock +95 -62
- data/README.md +1 -0
- data/README_jp.md +2 -2
- data/ladder_drive.gemspec +12 -9
- data/lib/ladder_drive/cli.rb +16 -4
- data/lib/ladder_drive/config.rb +3 -1
- data/lib/ladder_drive/protocol/keyence/kv_device.rb +1 -1
- data/lib/ladder_drive/protocol/keyence/kv_protocol.rb +1 -1
- data/lib/ladder_drive/protocol/mitsubishi/fx_protocol.rb +0 -1
- data/lib/ladder_drive/protocol/mitsubishi/mc_protocol.rb +1 -1
- data/lib/ladder_drive/protocol/omron/fins_tcp_protocol.rb +3 -1
- data/lib/ladder_drive/protocol/protocol.rb +2 -0
- data/lib/ladder_drive/version.rb +1 -1
- data/lib/ladder_drive.rb +3 -0
- data/lib/plc/emulator/emu_plc_server.rb +3 -1
- data/lib/plc/emulator/plc_plugins.rb +20 -13
- data/lib/plc/emulator/plugin_trigger_state.rb +152 -0
- data/plugins/ambient_plugin.rb +1 -33
- data/plugins/config/ambient.yaml.example +34 -0
- data/plugins/config/google_drive.yaml.example +39 -0
- data/plugins/config/ifttt.yaml.example +24 -0
- data/plugins/config/plc_mapper.yaml.example +36 -0
- data/plugins/config/slack.yaml.example +36 -0
- data/plugins/config/trello.yaml.example +41 -0
- data/plugins/ifttt_plugin.rb +4 -27
- data/plugins/slack_plugin.rb +14 -3
- data/plugins/trello_plugin.rb +25 -42
- metadata +66 -14
@@ -0,0 +1,41 @@
|
|
1
|
+
# This is a sample setting for Trello plugin
|
2
|
+
# Copy this file to trello.yaml or rename.
|
3
|
+
|
4
|
+
# If you want to disable this plugin, uncomment it.
|
5
|
+
#disable: true
|
6
|
+
|
7
|
+
# Connection configuration.
|
8
|
+
consumer_key: <%= ENV['TRELLO_CONSUMER_KEY'] %>
|
9
|
+
consumer_secret: <%= ENV['TRELLO_CONSUMMER_SECRET'] %>
|
10
|
+
oauth_token: <%= ENV['TRELLO_OAUTH_TOKEN'] %>
|
11
|
+
|
12
|
+
events:
|
13
|
+
|
14
|
+
# Set trigger conditions
|
15
|
+
# You can use type raise, fall, raise_and_fall, changed, and interval.
|
16
|
+
- trigger:
|
17
|
+
device: M100
|
18
|
+
type: raise
|
19
|
+
|
20
|
+
# Board name
|
21
|
+
board_name: Floor 1
|
22
|
+
# List name.
|
23
|
+
# If you set it, move the card into this list.
|
24
|
+
list_name: RUNNING
|
25
|
+
# Card name.
|
26
|
+
card_name: Machine A
|
27
|
+
|
28
|
+
# color label
|
29
|
+
color:
|
30
|
+
# Add color label
|
31
|
+
add: green
|
32
|
+
|
33
|
+
- trigger:
|
34
|
+
device: M100
|
35
|
+
type: fall
|
36
|
+
board_name: Floor 1
|
37
|
+
list_name: STOPPING
|
38
|
+
card_name: Machine A
|
39
|
+
color:
|
40
|
+
# Remove color label
|
41
|
+
remove: green
|
data/plugins/ifttt_plugin.rb
CHANGED
@@ -76,36 +76,13 @@ class IftttPlugin < Plugin
|
|
76
76
|
return if disabled?
|
77
77
|
config[:events].each do |event|
|
78
78
|
begin
|
79
|
-
|
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]
|
data/plugins/slack_plugin.rb
CHANGED
@@ -90,6 +90,7 @@ class SlackPlugin < Plugin
|
|
90
90
|
v = nil
|
91
91
|
case event[:trigger][:type]
|
92
92
|
when "interval"
|
93
|
+
|
93
94
|
t = @times[event.object_id] || now
|
94
95
|
triggered = t <= now
|
95
96
|
if triggered
|
@@ -97,9 +98,9 @@ class SlackPlugin < Plugin
|
|
97
98
|
t += event[:trigger][:interval] || 300
|
98
99
|
@times[event.object_id] = t
|
99
100
|
end
|
100
|
-
v = device.send event[:value_type], event[:trigger][:text_length] || 8
|
101
|
+
v = device.send event[:value_type] || :value, event[:trigger][:text_length] || 8
|
101
102
|
else
|
102
|
-
v = device.send event[:value_type], event[:text_length] || 8
|
103
|
+
v = device.send event[:value_type] || :value, event[:text_length] || 8
|
103
104
|
unless @values[device.name] == v
|
104
105
|
@values[device.name] = v
|
105
106
|
case event[:trigger][:type]
|
@@ -122,6 +123,8 @@ class SlackPlugin < Plugin
|
|
122
123
|
end
|
123
124
|
rescue => e
|
124
125
|
p e
|
126
|
+
puts $!
|
127
|
+
puts $@
|
125
128
|
end
|
126
129
|
end
|
127
130
|
end
|
@@ -147,7 +150,15 @@ class SlackPlugin < Plugin
|
|
147
150
|
req["Content-Type"] = "application/json"
|
148
151
|
|
149
152
|
format = event[:format] || "__comment__ occured at __time__"
|
150
|
-
|
153
|
+
case format
|
154
|
+
when Hash
|
155
|
+
case arg[:value]
|
156
|
+
when false, nil, 0
|
157
|
+
format = format[:fall]
|
158
|
+
else
|
159
|
+
format = format[:interval] || format[:raise]
|
160
|
+
end
|
161
|
+
end
|
151
162
|
|
152
163
|
device_name = arg[:device_name]
|
153
164
|
comment = @comments[device_name] || device_name
|
data/plugins/trello_plugin.rb
CHANGED
@@ -80,40 +80,11 @@ class TrelloPlugin < Plugin
|
|
80
80
|
|
81
81
|
@config[:events].each do |event|
|
82
82
|
begin
|
83
|
-
|
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
|
-
|
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
|
@@ -131,6 +102,11 @@ puts $@
|
|
131
102
|
}
|
132
103
|
end
|
133
104
|
|
105
|
+
def label_in_board_with_color board, color
|
106
|
+
l = board.labels.find{|l| l.name == color}
|
107
|
+
l ||= Trello::Label.create board_id:board.id, name:color, color:color
|
108
|
+
end
|
109
|
+
|
134
110
|
def thread_proc
|
135
111
|
while arg = @worker_queue.pop
|
136
112
|
begin
|
@@ -143,16 +119,23 @@ puts $@
|
|
143
119
|
card_name.gsub!(/__value__/, arg[:value] || "") if arg[:value].is_a? String
|
144
120
|
next if (card_name || "").empty?
|
145
121
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
122
|
+
card = board.cards.find{|c| c.name == card_name}
|
123
|
+
card ||= Trello::Card.create name:card_name
|
124
|
+
|
125
|
+
# move card into a list
|
126
|
+
list = board.lists.find{|l| l.name == event[:list_name]} if event[:list_name]
|
127
|
+
card.move_to_list list if list
|
150
128
|
|
151
|
-
|
152
|
-
if
|
153
|
-
|
154
|
-
|
155
|
-
|
129
|
+
# set color label
|
130
|
+
if event[:color]
|
131
|
+
if event[:color][:add]
|
132
|
+
label = label_in_board_with_color board, event[:color][:add]
|
133
|
+
card.add_label label
|
134
|
+
end
|
135
|
+
if event[:color][:remove]
|
136
|
+
label = label_in_board_with_color board, event[:color][:remove]
|
137
|
+
card.remove_label label
|
138
|
+
end
|
156
139
|
end
|
157
140
|
|
158
141
|
rescue => 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
|
+
version: 0.6.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katsuyoshi Ito
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-08-30 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: '
|
33
|
+
version: '6.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: '
|
40
|
+
version: '6.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
|
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
|
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:
|
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:
|
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,34 +152,48 @@ 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
|
126
172
|
requirements:
|
127
173
|
- - "~>"
|
128
174
|
- !ruby/object:Gem::Version
|
129
|
-
version: '1
|
175
|
+
version: '2.1'
|
130
176
|
type: :development
|
131
177
|
prerelease: false
|
132
178
|
version_requirements: !ruby/object:Gem::Requirement
|
133
179
|
requirements:
|
134
180
|
- - "~>"
|
135
181
|
- !ruby/object:Gem::Version
|
136
|
-
version: '1
|
182
|
+
version: '2.1'
|
137
183
|
- !ruby/object:Gem::Dependency
|
138
184
|
name: rake
|
139
185
|
requirement: !ruby/object:Gem::Requirement
|
140
186
|
requirements:
|
141
187
|
- - "~>"
|
142
188
|
- !ruby/object:Gem::Version
|
143
|
-
version: '
|
189
|
+
version: '13.0'
|
144
190
|
type: :development
|
145
191
|
prerelease: false
|
146
192
|
version_requirements: !ruby/object:Gem::Requirement
|
147
193
|
requirements:
|
148
194
|
- - "~>"
|
149
195
|
- !ruby/object:Gem::Version
|
150
|
-
version: '
|
196
|
+
version: '13.0'
|
151
197
|
description: We aim to design abstraction ladder which is able to run on any PLC with
|
152
198
|
same ladder source or binary and prepare full stack tools.
|
153
199
|
email:
|
@@ -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
|
@@ -232,6 +279,12 @@ files:
|
|
232
279
|
- lib/plc/raspberrypi/raspberrypi_plc_server.rb
|
233
280
|
- plugins/ambient_plugin.rb
|
234
281
|
- plugins/blank_plugin.rb
|
282
|
+
- plugins/config/ambient.yaml.example
|
283
|
+
- plugins/config/google_drive.yaml.example
|
284
|
+
- plugins/config/ifttt.yaml.example
|
285
|
+
- plugins/config/plc_mapper.yaml.example
|
286
|
+
- plugins/config/slack.yaml.example
|
287
|
+
- plugins/config/trello.yaml.example
|
235
288
|
- plugins/google_drive_plugin.rb
|
236
289
|
- plugins/ifttt_plugin.rb
|
237
290
|
- plugins/plc_mapper_plugin.rb
|
@@ -265,8 +318,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
265
318
|
- !ruby/object:Gem::Version
|
266
319
|
version: '0'
|
267
320
|
requirements: []
|
268
|
-
|
269
|
-
rubygems_version: 2.5.2
|
321
|
+
rubygems_version: 3.1.2
|
270
322
|
signing_key:
|
271
323
|
specification_version: 4
|
272
324
|
summary: The ladder_drive is a simple abstract ladder for PLC (Programmable Logic
|