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.
@@ -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