ladder_drive 0.6.4 → 0.6.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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]
@@ -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
- format = arg[:value] ? format[:raise] : format[:fall] unless format.is_a? String
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
@@ -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
@@ -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
- list_name = event[:list_name]
147
- next unless list_name
148
- list = board.lists.find{|l| l.name == list_name}
149
- next unless list
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
- card = board.lists.map{|l| l.cards.map{|c| c}}.flatten.find{|c| c.name == card_name}
152
- if card
153
- card.move_to_list list
154
- else
155
- card = Trello::Card.create name:card_name, list_id:list.id
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
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: 2019-07-29 00:00:00.000000000 Z
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: '5.0'
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: '5.0'
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.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,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.11'
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.11'
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: '10.0'
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: '10.0'
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
- rubyforge_project:
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