meshtastic 0.0.53 → 0.0.56

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
  SHA256:
3
- metadata.gz: a09f7af15af288d0de354979f38b5a976b3076b2756b4c3007b5948e6580c32c
4
- data.tar.gz: 3fd9b22545978f2aeb468d5c5f61c5ea0623224e6c242472992be963f83376f3
3
+ metadata.gz: 587ec9cf838d9bc00fb0881bfb06e5baaf32b76cf92be0f1687dee8397cc372e
4
+ data.tar.gz: 4bf94458eae35a86738318fff4931094f943bd3afcacb967e2022809c0e211ac
5
5
  SHA512:
6
- metadata.gz: f93cc53e204a5738e97450bd4697587feeed09539115c1591e0b1aa5432ed5c1ae83bc6175b4917653b93555cf374612f97a8081e59eba95b1cafff827dd2130
7
- data.tar.gz: ff03ee0103b414b675d28ff934b7684f9c2b24a02721d3cbab37465852666e092286aee35d7c8f2642161aa3b48c294164aebacdd0c49dede081b277195756a1
6
+ metadata.gz: 1cb23efe67552373a15b746b6553951f6694fe64fd03a68f4db730b2c477a769999dba92146b8a40d85cd3c29ea71c931a5406b1d081367a3699eaf8358af8b2
7
+ data.tar.gz: 9c2733116cfaebcfa388a4211d519e0216ca1709d2752d197bc7175cb92e4a1246c4e5ff7baea6fcd5314ff69af458b90b24094eb5ff749861ad2d116aae1844
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Meshtastic
4
- VERSION = '0.0.53'
4
+ VERSION = '0.0.56'
5
5
  end
data/lib/meshtastic.rb CHANGED
@@ -53,6 +53,7 @@ module Meshtastic
53
53
  # Meshtastic.send_text(
54
54
  # from: 'required - From ID (String or Integer)',
55
55
  # to: 'optional - Destination ID (Default: 0xFFFFFFFF)',
56
+ # via: 'optional - :radio || :mqtt (Default: :radio)',
56
57
  # channel: 'optional - Channel ID (Default: 0)',
57
58
  # text: 'optional - Text Message (Default: SYN)',
58
59
  # want_ack: 'optional - Want Acknowledgement (Default: false)',
@@ -72,6 +73,7 @@ module Meshtastic
72
73
  to_hex = to.delete('!').bytes.map { |b| b.to_s(16).rjust(2, '0') }.join if to.is_a?(String)
73
74
  to = to_hex.to_i(16) if to_hex
74
75
 
76
+ via = opts[:via] ||= :radio
75
77
  channel = opts[:channel] ||= 0
76
78
  text = opts[:text] ||= 'SYN'
77
79
  want_ack = opts[:want_ack] ||= false
@@ -100,6 +102,7 @@ module Meshtastic
100
102
  send_data(
101
103
  from: from,
102
104
  to: to,
105
+ via: via,
103
106
  channel: channel,
104
107
  data: data,
105
108
  want_ack: want_ack,
@@ -117,6 +120,7 @@ module Meshtastic
117
120
  # Meshtastic.send_data(
118
121
  # from: 'required - From ID (String or Integer)',
119
122
  # to: 'optional - Destination ID (Default: 0xFFFFFFFF)',
123
+ # via: 'optional - :radio || :mqtt (Default: :radio)',
120
124
  # channel: 'optional - Channel ID (Default: 0)',
121
125
  # data: 'required - Data to Send',
122
126
  # want_ack: 'optional - Want Acknowledgement (Default: false)',
@@ -135,6 +139,7 @@ module Meshtastic
135
139
  to_hex = to.delete('!').bytes.map { |b| b.to_s(16).rjust(2, '0') }.join if to.is_a?(String)
136
140
  to = to_hex.to_i(16) if to_hex
137
141
 
142
+ via = opts[:via] ||= :radio
138
143
  channel = opts[:channel] ||= 0
139
144
  data = opts[:data]
140
145
  want_ack = opts[:want_ack] ||= false
@@ -160,6 +165,7 @@ module Meshtastic
160
165
  mesh_packet: mesh_packet,
161
166
  from: from,
162
167
  to: to,
168
+ via: via,
163
169
  channel: channel,
164
170
  want_ack: want_ack,
165
171
  hop_limit: hop_limit,
@@ -174,6 +180,7 @@ module Meshtastic
174
180
  # mesh_packet: 'required - Mesh Packet to Send',
175
181
  # from: 'required - From ID (String or Integer)',
176
182
  # to: 'optional - Destination ID (Default: 0xFFFFFFFF)',
183
+ # via: 'optional - :radio || :mqtt (Default: :radio)',
177
184
  # channel: 'optional - Channel ID (Default: 0)',
178
185
  # want_ack: 'optional - Want Acknowledgement (Default: false)',
179
186
  # hop_limit: 'optional - Hop Limit (Default: 3)',
@@ -190,6 +197,7 @@ module Meshtastic
190
197
  to_hex = to.delete('!').bytes.map { |b| b.to_s(16).rjust(2, '0') }.join if to.is_a?(String)
191
198
  to = to_hex.to_i(16) if to_hex
192
199
 
200
+ via = opts[:via] ||= :radio
193
201
  channel = opts[:channel] ||= 0
194
202
  want_ack = opts[:want_ack] ||= false
195
203
  hop_limit = opts[:hop_limit] ||= 3
@@ -208,9 +216,15 @@ module Meshtastic
208
216
  mesh_packet.channel = channel
209
217
  mesh_packet.want_ack = want_ack
210
218
  mesh_packet.hop_limit = hop_limit
211
- mesh_packet.id = generate_packet_id if mesh_packet.id.zero?
212
- # mesh_packet.channel_id = psks.keys.first
213
- # mesh_packet.gateway_id = "!#{from.to_s(16).downcase}"
219
+
220
+ # TODO: Implement strategy for obtaining last packet id
221
+ packet_id = 0
222
+ if mesh_packet.id.zero?
223
+ packet_id = generate_packet_id(
224
+ last_packet_id: packet_id
225
+ )
226
+ end
227
+ mesh_packet.id = packet_id
214
228
 
215
229
  if psks
216
230
  nonce_packet_id = [mesh_packet.id].pack('V').ljust(8, "\x00")
@@ -232,10 +246,21 @@ module Meshtastic
232
246
  end
233
247
  # puts mesh_packet.to_h
234
248
 
235
- to_radio = Meshtastic::ToRadio.new
236
- to_radio.packet = mesh_packet
237
-
238
- send_to_radio(to_radio: to_radio)
249
+ # puts "Sending Packet via: #{via}"
250
+ case via
251
+ when :radio
252
+ to_radio = Meshtastic::ToRadio.new
253
+ to_radio.packet = mesh_packet
254
+ send_to_radio(to_radio: to_radio)
255
+ when :mqtt
256
+ service_envelope = Meshtastic::ServiceEnvelope.new
257
+ service_envelope.packet = mesh_packet
258
+ service_envelope.channel_id = psks.keys.first
259
+ service_envelope.gateway_id = "!#{from.to_s(16).downcase}"
260
+ send_to_mqtt(service_envelope: service_envelope)
261
+ else
262
+ raise "ERROR: Invalid via parameter: #{via}"
263
+ end
239
264
  rescue StandardError => e
240
265
  raise e
241
266
  end
@@ -248,7 +273,8 @@ module Meshtastic
248
273
  last_packet_id = opts[:last_packet_id] ||= 0
249
274
  last_packet_id = 0 if last_packet_id.negative?
250
275
 
251
- (last_packet_id + 1) & 0xffffffff
276
+ Random.rand(0xffffffff) if last_packet_id.zero?
277
+ (last_packet_id + 1) & 0xffffffff if last_packet_id.positive?
252
278
  end
253
279
 
254
280
  # Supported Method Parameters::
@@ -265,6 +291,20 @@ module Meshtastic
265
291
  raise e
266
292
  end
267
293
 
294
+ # Supported Method Parameters::
295
+ # Meshtastic.send_to_mqtt(
296
+ # service_envelope: 'required - ServiceEnvelope Message to Send'
297
+ # )
298
+ public_class_method def self.send_to_mqtt(opts = {})
299
+ service_envelope = opts[:service_envelope]
300
+
301
+ raise 'ERROR: Invalid ServiceEnvelope Message' unless service_envelope.is_a?(Meshtastic::ServiceEnvelope)
302
+
303
+ service_envelope.to_proto
304
+ rescue StandardError => e
305
+ raise e
306
+ end
307
+
268
308
  # Author(s):: 0day Inc. <support@0dayinc.com>
269
309
 
270
310
  public_class_method def self.authors
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meshtastic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.53
4
+ version: 0.0.56
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.