remotedroid 0.1.0 → 0.4.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b788429e24f18de3a9237abe1fb9d8ba73ddb252edb59caa63b99fa9be986fad
4
- data.tar.gz: 5257691864646241e82b92eeece3139c01ca743e1d4c13e49675f441fb5a734d
3
+ metadata.gz: dd7b7c4614e48123ecdc155abc68d996445d62d997df99dc65fe2969b9260c79
4
+ data.tar.gz: a4de25cf022d6bdaacc221f9b986a0244e1ea8b5faad38f151713825417b004c
5
5
  SHA512:
6
- metadata.gz: dc5aee582390fe67b13e0e69876207292ab4b0892761bb55fea80826bbf5bf62515118decd47815d5ff00b28b2dd25f8179a74e3ddf2d4a02a6ee5c90c662711
7
- data.tar.gz: 0c1fabdaa87e9907f4d79b1fb68285c1f6b7190393daffedfb362436628badfbf0f0c14a8da8d46869197d861f377ad02b7b0bae2681aa3a796d88f7346fd45b
6
+ metadata.gz: 0467d4f2441f460e6428ba1457637643fc707ec1f6c4aeb66e15f7d8cc75f2fec4284915d3b5f0bd3ea1b7fc9818305ed4a54b00fc07913ec5d01746b73d1ad4
7
+ data.tar.gz: 385c2c1d6b7a78954eadf6c01d03382cfe16986ac27c218fc1a8ac01e2350d814df6de0909bd0c084e1e36cc53398cd974bc9c49537dc24f51ea9d98621f5067
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -9,8 +9,97 @@ require 'sps-sub'
9
9
  require 'ruby-macrodroid'
10
10
 
11
11
 
12
+ # Here's what's available so far:
13
+ #
14
+ # # Triggers
15
+ #
16
+ # ## Sensors
17
+ #
18
+ # * proximity (near)
19
+ # * shake device
20
+ #
21
+ # ------------------------------------
22
+ #
23
+ # # Actions
24
+ #
25
+ # ## Date/Time
26
+ #
27
+ # * Say Current Time
28
+ #
29
+ # ## Device Actions
30
+ #
31
+ # * Speak text
32
+ # * Torch toggle
33
+ # * vibrate
34
+ #
35
+ # ## Location
36
+ #
37
+ # * Share Location
38
+ #
39
+ # ## Media
40
+ #
41
+ # * Play sound (Doda)
42
+ #
43
+ # ## Notification
44
+ #
45
+ # * Popup Message
46
+ #
47
+ # ## Screen
48
+ #
49
+ # * Screen On
50
+ #
51
+
52
+ # Variables which can be queried
53
+ #
54
+ # Description Variable
55
+ # ------------------- ----------------
56
+ # Foreground app name :fg_app_name
57
+ # Foreground app package :fg_app_package
58
+ # Current Brightness :current_brightness
59
+ # Screen timeout (seconds) :screen_timeout
60
+ # Current battery % :battery
61
+ # Battery temp °C :battery_temp
62
+ # Power (On/Off) :power
63
+ # Clipboard text :clipboard
64
+ # Current IP address :ip
65
+ # Wifi SSID :ssid
66
+ # Wifi signal strength :wifi_strength
67
+ # System time :system_time
68
+ # IMEI :imei
69
+ # Cell Id :cell_id
70
+ # Last known location (lat,lon) :last_loc_latlong
71
+ # Last known location (altitude) :last_loc_alt
72
+ # Last known location (link) :last_loc_link
73
+ # Last known location (time) :last_loc_age_timestamp
74
+ # Last known location (kmh) :last_loc_speed_kmh
75
+ # Last known location (mph) :last_loc_speed_mph
76
+ # Current Volume (Alarm) :vol_alarm
77
+ # Current Volume (Media / Music) :vol_music
78
+ # Current Volume (Ringer) :vol_ring
79
+ # Current Volume (Notification) :vol_notif
80
+ # Current Volume (System Sounds) :vol_system
81
+ # Current Volume (Voice Call) :vol_call
82
+ # Current Volume (Bluetooth Voice) :vol_bt_voice
83
+ # Device name :device_name
84
+ # Device uptime :uptime_secs
85
+ # Device manufacturer :device_manufacturer
86
+ # Device model :device_model
87
+ # Android version :android_version
88
+ # Android version (SDK Level) :android_version_sdk
89
+ # Storage total (external) :storage_external_total
90
+ # Storage free (external) :storage_external_free
91
+ # Storage total (internal) :storage_internal_total
92
+ # Storage free (internal) :storage_internal_free
93
+
94
+
95
+ # The macros below are exported to JSON format as a file which is imported into
96
+ # the Android device running MacroDroid.
12
97
 
13
98
  RD_MACROS =<<EOF
99
+ m: Camera flash light
100
+ t: webhook
101
+ a: Torch toggle
102
+
14
103
  m: Torch
15
104
  t: webhook
16
105
  a: Torch toggle
@@ -22,11 +111,119 @@ a:
22
111
  Popup Message
23
112
  [lv=msg]
24
113
 
114
+ m: Say current time
115
+ t: webhook
116
+ a: Say Current Time
117
+
118
+ m: Speak text
119
+ v: text
120
+ t: webhook
121
+ a: speak text ([lv=text])
122
+
123
+ m: vibrate
124
+ t: webhook
125
+ a: vibrate
126
+
127
+ m: play doda
128
+ t: webhook
129
+ a: play: Doda
130
+
131
+ m: Screen
132
+ v: on: false
133
+ t: WebHook
134
+ a:
135
+ If on = True
136
+ Screen On
137
+ Else
138
+ Screen Off
139
+ End If
140
+
141
+ m: Share location
142
+ t:
143
+ WebHook
144
+ identifier: location
145
+ a: Force Location Update
146
+ a:
147
+ Share Location
148
+ coords
149
+ a:
150
+ HTTP GET
151
+ identifier: location
152
+ coords: [lv=coords]
153
+ type: query
154
+
155
+ m: query
156
+ t: WebHook
157
+ v: qvar
158
+ a:
159
+ Set Variable
160
+ var: [[lv=qvar]]
161
+ a:
162
+ HTTP GET
163
+ [lv=qvar]: [lv=var]
164
+
165
+ m: query setting system
166
+ t: WebHook
167
+ v: qvar
168
+ a:
169
+ Set Variable
170
+ var: [setting_system=[lv=qvar]]
171
+ a:
172
+ HTTP GET
173
+ [lv=qvar]: [lv=var]
174
+
175
+ m: query setting global
176
+ t: WebHook
177
+ v: qvar
178
+ a:
179
+ Set Variable
180
+ var: [setting_global=[lv=qvar]]
181
+ a:
182
+ HTTP GET
183
+ [lv=qvar]: [lv=var]
184
+
185
+ m: query setting secure
186
+ t: WebHook
187
+ v: qvar
188
+ a:
189
+ Set Variable
190
+ var: [setting_secure=[lv=qvar]]
191
+ a:
192
+ HTTP GET
193
+ [lv=qvar]: [lv=var]
194
+
195
+
25
196
  m: shake device
26
197
  t: shake device
27
198
  a: webhook
199
+
200
+ m: Proximity near
201
+ t: Proximity near
202
+ a:
203
+ webhook
204
+ identifier: proximity
205
+ option: 0
206
+
207
+ m: Power connected
208
+ t: Power Connected: Any
209
+ a: webhook
210
+
211
+
28
212
  EOF
29
213
 
214
+ =begin
215
+ m: Screen
216
+ v: on: true
217
+ t: WebHook
218
+ a:
219
+ If on = true
220
+ Screen On
221
+ Else
222
+ Screen Off
223
+ End If
224
+
225
+ =end
226
+
30
227
  module RemoteDroid
31
228
 
32
229
  class Model
@@ -257,7 +454,7 @@ module RemoteDroid
257
454
  class Controller
258
455
 
259
456
  attr_reader :model, :control
260
- attr_accessor :title, :macros
457
+ attr_accessor :title, :macros, :store
261
458
 
262
459
  def initialize(mcs, model=MODEL, deviceid: nil, debug: false)
263
460
 
@@ -270,12 +467,24 @@ module RemoteDroid
270
467
  if model then
271
468
  @model = Model.new(model)
272
469
  end
470
+
471
+ @store = {}
472
+ @query = Query.new(self)
273
473
 
274
474
  end
275
475
 
276
476
  def export(s)
277
477
  @macros = MacroDroid.new(s).macros
278
478
  end
479
+
480
+ def invoke(name, options={})
481
+
482
+ if @control.respond_to? name.to_sym then
483
+ @control.method(name.to_sym).call(options)
484
+ else
485
+ @control.http_exec name.to_sym, options
486
+ end
487
+ end
279
488
 
280
489
  # Object Property (op)
281
490
  # Helpful for accessing properites in dot notation
@@ -285,6 +494,49 @@ module RemoteDroid
285
494
  @model.op
286
495
  end
287
496
 
497
+ def query(id=nil)
498
+
499
+ return @query unless id
500
+
501
+ @store[id] = nil
502
+
503
+ sys = %i(accelerometer_rotation)
504
+
505
+ global = [:airplane_mode_on, :bluetooth_on, :cell_on, :device_name, \
506
+ :usb_mass_storage_enabled, :wifi_on]
507
+
508
+ secure = %i(bluetooth_name flashlight_enabled)
509
+
510
+
511
+ # send http request via macrodroid.com API
512
+
513
+ if id.downcase.to_sym == :location then
514
+ @control.http_exec id
515
+ elsif sys.include? id
516
+ @control.http_exec :'query-setting-system', {qvar: id}
517
+ elsif global.include? id
518
+ @control.http_exec :'query-setting-global', {qvar: id}
519
+ elsif secure.include? id
520
+ @control.http_exec :'query-setting-secure', {qvar: id}
521
+ else
522
+ @control.http_exec :query, {qvar: id}
523
+ end
524
+
525
+ # wait for the local variable to be updated
526
+ # timeout after 5 seoncds
527
+ t = Time.now
528
+
529
+ begin
530
+ sleep 1
531
+ end until @store[id] or Time.now > t + 5
532
+
533
+ return {warning: 'HTTP response timeout'} if Time.now > t+5
534
+
535
+ return @store[id]
536
+
537
+
538
+ end
539
+
288
540
  def request(s)
289
541
  @model.request s
290
542
  end
@@ -318,6 +570,12 @@ module RemoteDroid
318
570
  end
319
571
 
320
572
  alias trigger_fired trigger
573
+
574
+ def update(id, val)
575
+ key = id == :location ? id : val.keys.first.to_sym
576
+ @store[key] = val
577
+ end
578
+
321
579
 
322
580
  end
323
581
 
@@ -347,6 +605,13 @@ module RemoteDroid
347
605
  end
348
606
 
349
607
  end
608
+
609
+ class ControlHelper
610
+
611
+ def initialize(callback)
612
+ @callback
613
+ end
614
+ end
350
615
 
351
616
  class Control
352
617
 
@@ -354,16 +619,19 @@ module RemoteDroid
354
619
 
355
620
  @deviceid, @remote_url, @debug = deviceid, remote_url, debug
356
621
  @torch = Torch.new(self)
357
- end
622
+ end
358
623
 
359
624
  def bluetooth()
360
625
  @bluetooth
361
626
  end
362
627
 
628
+ def camera_flash_light(options={})
629
+ http_exec 'camera-flash-light', options
630
+ end
631
+
363
632
  def http_exec(command, options={})
364
633
 
365
634
  url = "https://trigger.macrodroid.com/%s/%s" % [@deviceid, command]
366
- File.write '/tmp/foo.txt', 'url : ' + url.inspect #if @debug
367
635
 
368
636
  if options and options.any? then
369
637
  h = options
@@ -375,13 +643,65 @@ module RemoteDroid
375
643
 
376
644
  end
377
645
 
646
+ def location(options={})
647
+ http_exec 'location'
648
+ end
649
+
650
+ def say_current_time(options={})
651
+ http_exec 'say-current-time'
652
+ end
653
+
654
+ alias say_time say_current_time
655
+
656
+ def screen(state=nil)
657
+
658
+ if state then
659
+ http_exec 'screen', {on: state == :on}
660
+ else
661
+
662
+ def self.on()
663
+ http_exec 'screen', {on: true}
664
+ end
665
+
666
+ def self.off()
667
+ http_exec 'screen', {on: false}
668
+ end
669
+
670
+ self
671
+
672
+ end
673
+ end
674
+
675
+ def share_location(options={})
676
+ http_exec 'share-location'
677
+ end
678
+
679
+ def speak_text(obj)
680
+
681
+ options = case obj
682
+ when String
683
+ {text: obj}
684
+ when Hash
685
+ obj
686
+ end
687
+
688
+ http_exec 'speak-text', options
689
+ end
690
+
691
+ alias say speak_text
692
+
378
693
  def toast(options={})
379
- http_exec 'toast', options
694
+ http_exec :toast, options
380
695
  end
381
696
 
382
- def torch()
383
- @torch
697
+ def torch(options={})
698
+ http_exec :torch
384
699
  end
700
+
701
+ def vibrate(options={})
702
+ http_exec :vibrate
703
+ end
704
+
385
705
 
386
706
  def write(s)
387
707
 
@@ -392,12 +712,55 @@ module RemoteDroid
392
712
 
393
713
  alias export write
394
714
 
395
- def method_missing(method_name, *args)
715
+ def method_missing2(method_name, *args)
396
716
  http_exec(method_name, args.first)
397
717
  end
398
718
 
399
719
  end
400
720
 
721
+ class Query
722
+
723
+ def initialize(callback)
724
+ @callback = callback
725
+ end
726
+
727
+ def airplane_mode_enabled?()
728
+ q(:airplane_mode_on).to_i > 0
729
+ end
730
+
731
+ def battery()
732
+ q(:battery).to_i
733
+ end
734
+
735
+ def current_brightness()
736
+ q(:current_brightness).to_i
737
+ end
738
+
739
+ alias brightness current_brightness
740
+
741
+ def cell_id()
742
+ q(:cell_id)
743
+ end
744
+
745
+ alias cell_tower cell_id
746
+
747
+ def ip()
748
+ q(:ip)
749
+ end
750
+
751
+ def location()
752
+ @callback.query(:location)[:coords]
753
+ end
754
+
755
+
756
+ private
757
+
758
+ def q(id)
759
+ @callback.query(id)[id]
760
+ end
761
+
762
+ end
763
+
401
764
  class Server
402
765
 
403
766
  def initialize(s, drb_host: '127.0.0.1', deviceid: nil)
@@ -414,10 +777,91 @@ module RemoteDroid
414
777
 
415
778
  end
416
779
 
780
+ class Client
781
+
782
+ def initialize(host='127.0.0.1')
783
+ @drb = OneDrb::Client.new host: host, port: '5777'
784
+ end
785
+
786
+ def control
787
+ @drb.control
788
+ end
789
+
790
+ def export(s)
791
+ @drb.export(s)
792
+ end
793
+
794
+ def invoke(s, *args)
795
+ @drb.invoke(s, *args)
796
+ end
797
+
798
+ def query(id=nil)
799
+
800
+ return @drb.query unless id
801
+ t = Time.now
802
+ h = @drb.query(id)
803
+ h.merge({latency: (Time.now - t).round(3)})
804
+
805
+ end
806
+
807
+ def update(key, val)
808
+ @drb.update key.to_sym, val
809
+ end
810
+
811
+ def store()
812
+ @drb.store
813
+ end
814
+
815
+ # -- helpful methods -----------------
816
+
817
+ def battery()
818
+ query.battery
819
+ end
820
+
821
+ def cell_tower()
822
+ query.cell_tower
823
+ end
824
+
825
+ def location()
826
+ query.location
827
+ end
828
+
829
+ def say(text)
830
+ control.say text
831
+ end
832
+
833
+ def say_time()
834
+ control.say_time
835
+ end
836
+
837
+ alias saytime say_time
838
+
839
+ def screen(state=nil)
840
+ control.screen state
841
+ end
842
+
843
+ def screen_on()
844
+ screen :on
845
+ end
846
+
847
+ def screen_off()
848
+ screen :off
849
+ end
850
+
851
+ def torch()
852
+ control.torch
853
+ end
854
+
855
+ def vibrate
856
+ control.vibrate
857
+ end
858
+
859
+ end
860
+
417
861
  class TriggerSubscriber < SPSSub
418
862
 
419
863
  def initialize(host: 'sps.home', drb_host: '127.0.0.1')
420
- @remote = OneDrb::Client.new host: drb_host, port: '5777'
864
+ @remote = OneDrb::Client.new host: drb_host, port: '5777'
421
865
  super(host: host)
422
866
  end
423
867
 
@@ -438,7 +882,7 @@ module RemoteDroid
438
882
  class ActionSubscriber < SPSSub
439
883
 
440
884
  def initialize(host: 'sps.home', drb_host: '127.0.0.1')
441
- @remote = OneDrb::Client.new host: drb_host, port: '5777'
885
+ @remote = OneDrb::Client.new host: drb_host, port: '5777'
442
886
  super(host: host)
443
887
  end
444
888
 
@@ -457,6 +901,25 @@ module RemoteDroid
457
901
 
458
902
  end
459
903
 
460
-
904
+ class ResponseSubscriber < SPSSub
905
+
906
+ def initialize(host: 'sps.home', drb_host: '127.0.0.1')
907
+ @remote = OneDrb::Client.new host: drb_host, port: '5777'
908
+ super(host: host)
909
+ end
910
+
911
+ def subscribe(topic: 'macrodroid/response')
912
+
913
+ super(topic: topic) do |msg|
914
+
915
+ json, id = msg.split(/:\s+/,2).reverse
916
+ h = JSON.parse(json, symbolize_names: true)
917
+ id ||= h.keys.first
918
+ @remote.update id.to_sym, h
919
+
920
+ end
921
+
922
+ end
923
+
924
+ end
461
925
  end
462
-
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: remotedroid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -35,7 +35,7 @@ cert_chain:
35
35
  io3WPRDjULC924M5S8wbrus31v2AUjqFBPvmHr7caf/VHErWypV482xcDhWt1eif
36
36
  0G2k2ptozXcBS9odsqGUTb5N
37
37
  -----END CERTIFICATE-----
38
- date: 2020-10-02 00:00:00.000000000 Z
38
+ date: 2020-10-13 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: onedrb
@@ -103,20 +103,20 @@ dependencies:
103
103
  requirements:
104
104
  - - "~>"
105
105
  - !ruby/object:Gem::Version
106
- version: '0.8'
106
+ version: '0.9'
107
107
  - - ">="
108
108
  - !ruby/object:Gem::Version
109
- version: 0.8.12
109
+ version: 0.9.5
110
110
  type: :runtime
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '0.8'
116
+ version: '0.9'
117
117
  - - ">="
118
118
  - !ruby/object:Gem::Version
119
- version: 0.8.12
119
+ version: 0.9.5
120
120
  description:
121
121
  email: james@jamesrobertson.eu
122
122
  executables: []
metadata.gz.sig CHANGED
Binary file