remotedroid 0.1.1 → 0.4.2

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: 8182bbf99c5d4129da2c118d695a98ddbe0f11f95912ddd1d5efbf4dd78e1729
4
- data.tar.gz: 773d8738eb35ff52275fc425326a0ebd6cdd43dd209de7090040e1347bfcc463
3
+ metadata.gz: 6bd8aa94326f04e26626c2919060c259afea85c5e89f6ae33de505d0af5381b6
4
+ data.tar.gz: efbb77b568cc56a821569021dfd6a1c4001645a0019d0d3d56445a3f31887737
5
5
  SHA512:
6
- metadata.gz: 52271972500cd3a2f18da5494247d64e660687188a525f98b929f87c462aaf2296e1d78630c413a13088548261e01034d87df2192d67f461c2b4899284d95c04
7
- data.tar.gz: 6f57080d7164e68ee66db0ef4e864bfdad9a149adef0f7753bbe74d0ccf85929e82d918b458df0423c58a369721c26074be7b0f181e891d0d192737cbb5f1d03
6
+ metadata.gz: 68ca84c69885979de74d5265b216808dba934f63854978ffde5e48a49458f88e3483294f555f36685b1a5cc44b2309b285870228c5eb63ca3759b0e41eb7b752
7
+ data.tar.gz: ba2aa7d3d3fbf3512b3cfdbd55aa7442499355c3110bcfed6b92a5da516f4a4e39eb3ff8eff6fba5f3702aeb739562d2bde777c31e2c0ce6a9a9581287fda93f
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -22,6 +22,10 @@ require 'ruby-macrodroid'
22
22
  #
23
23
  # # Actions
24
24
  #
25
+ ## Connectivity
26
+ #
27
+ # * Enable HotSpot
28
+ #
25
29
  # ## Date/Time
26
30
  #
27
31
  # * Say Current Time
@@ -30,11 +34,70 @@ require 'ruby-macrodroid'
30
34
  #
31
35
  # * Speak text
32
36
  # * Torch toggle
37
+ # * vibrate
38
+ #
39
+ # ## Location
40
+ #
41
+ # * Share Location
42
+ #
43
+ # ## Media
44
+ #
45
+ # * Play sound (Doda)
33
46
  #
34
47
  # ## Notification
48
+ #
35
49
  # * Popup Message
50
+ #
51
+ # ## Screen
52
+ #
53
+ # * Screen On
54
+ #
36
55
 
37
-
56
+ # Variables which can be queried
57
+ #
58
+ # Description Variable
59
+ # ------------------- ----------------
60
+ # Foreground app name :fg_app_name
61
+ # Foreground app package :fg_app_package
62
+ # Current Brightness :current_brightness
63
+ # Screen timeout (seconds) :screen_timeout
64
+ # Current battery % :battery
65
+ # Battery temp °C :battery_temp
66
+ # Power (On/Off) :power
67
+ # Clipboard text :clipboard
68
+ # Current IP address :ip
69
+ # Wifi SSID :ssid
70
+ # Wifi signal strength :wifi_strength
71
+ # System time :system_time
72
+ # IMEI :imei
73
+ # Cell Id :cell_id
74
+ # Last known location (lat,lon) :last_loc_latlong
75
+ # Last known location (altitude) :last_loc_alt
76
+ # Last known location (link) :last_loc_link
77
+ # Last known location (time) :last_loc_age_timestamp
78
+ # Last known location (kmh) :last_loc_speed_kmh
79
+ # Last known location (mph) :last_loc_speed_mph
80
+ # Current Volume (Alarm) :vol_alarm
81
+ # Current Volume (Media / Music) :vol_music
82
+ # Current Volume (Ringer) :vol_ring
83
+ # Current Volume (Notification) :vol_notif
84
+ # Current Volume (System Sounds) :vol_system
85
+ # Current Volume (Voice Call) :vol_call
86
+ # Current Volume (Bluetooth Voice) :vol_bt_voice
87
+ # Device name :device_name
88
+ # Device uptime :uptime_secs
89
+ # Device manufacturer :device_manufacturer
90
+ # Device model :device_model
91
+ # Android version :android_version
92
+ # Android version (SDK Level) :android_version_sdk
93
+ # Storage total (external) :storage_external_total
94
+ # Storage free (external) :storage_external_free
95
+ # Storage total (internal) :storage_internal_total
96
+ # Storage free (internal) :storage_internal_free
97
+
98
+
99
+ # The macros below are exported to JSON format as a file which is imported into
100
+ # the Android device running MacroDroid.
38
101
 
39
102
  RD_MACROS =<<EOF
40
103
  m: Camera flash light
@@ -61,6 +124,90 @@ v: text
61
124
  t: webhook
62
125
  a: speak text ([lv=text])
63
126
 
127
+ m: vibrate
128
+ t: webhook
129
+ a: vibrate
130
+
131
+ m: play doda
132
+ t: webhook
133
+ a: play: Doda
134
+
135
+ m: Screen
136
+ v: on: false
137
+ t: WebHook
138
+ a:
139
+ If on = True
140
+ Screen On
141
+ Else
142
+ Screen Off
143
+ End If
144
+
145
+ m: Hotspot
146
+ v: enable: false
147
+ t: WebHook
148
+ a:
149
+ If enable = True
150
+ Enable Hotspot
151
+ Else
152
+ Disable Hotspot
153
+ End If
154
+
155
+
156
+ m: Share location
157
+ t:
158
+ WebHook
159
+ identifier: location
160
+ a: Force Location Update
161
+ a:
162
+ Share Location
163
+ coords
164
+ a:
165
+ HTTP GET
166
+ identifier: location
167
+ coords: [lv=coords]
168
+ type: query
169
+
170
+ m: query
171
+ t: WebHook
172
+ v: qvar
173
+ a:
174
+ Set Variable
175
+ var: [[lv=qvar]]
176
+ a:
177
+ HTTP GET
178
+ [lv=qvar]: [lv=var]
179
+
180
+ m: query setting system
181
+ t: WebHook
182
+ v: qvar
183
+ a:
184
+ Set Variable
185
+ var: [setting_system=[lv=qvar]]
186
+ a:
187
+ HTTP GET
188
+ [lv=qvar]: [lv=var]
189
+
190
+ m: query setting global
191
+ t: WebHook
192
+ v: qvar
193
+ a:
194
+ Set Variable
195
+ var: [setting_global=[lv=qvar]]
196
+ a:
197
+ HTTP GET
198
+ [lv=qvar]: [lv=var]
199
+
200
+ m: query setting secure
201
+ t: WebHook
202
+ v: qvar
203
+ a:
204
+ Set Variable
205
+ var: [setting_secure=[lv=qvar]]
206
+ a:
207
+ HTTP GET
208
+ [lv=qvar]: [lv=var]
209
+
210
+
64
211
  m: shake device
65
212
  t: shake device
66
213
  a: webhook
@@ -71,9 +218,27 @@ a:
71
218
  webhook
72
219
  identifier: proximity
73
220
  option: 0
221
+
222
+ m: Power connected
223
+ t: Power Connected: Any
224
+ a: webhook
225
+
74
226
 
75
227
  EOF
76
228
 
229
+ =begin
230
+ m: Screen
231
+ v: on: true
232
+ t: WebHook
233
+ a:
234
+ If on = true
235
+ Screen On
236
+ Else
237
+ Screen Off
238
+ End If
239
+
240
+ =end
241
+
77
242
  module RemoteDroid
78
243
 
79
244
  class Model
@@ -304,7 +469,7 @@ module RemoteDroid
304
469
  class Controller
305
470
 
306
471
  attr_reader :model, :control
307
- attr_accessor :title, :macros
472
+ attr_accessor :title, :macros, :store
308
473
 
309
474
  def initialize(mcs, model=MODEL, deviceid: nil, debug: false)
310
475
 
@@ -317,6 +482,9 @@ module RemoteDroid
317
482
  if model then
318
483
  @model = Model.new(model)
319
484
  end
485
+
486
+ @store = {}
487
+ @query = Query.new(self)
320
488
 
321
489
  end
322
490
 
@@ -325,7 +493,12 @@ module RemoteDroid
325
493
  end
326
494
 
327
495
  def invoke(name, options={})
328
- @control.method(name.to_sym).call(options)
496
+
497
+ if @control.respond_to? name.to_sym then
498
+ @control.method(name.to_sym).call(options)
499
+ else
500
+ @control.http_exec name.to_sym, options
501
+ end
329
502
  end
330
503
 
331
504
  # Object Property (op)
@@ -336,6 +509,49 @@ module RemoteDroid
336
509
  @model.op
337
510
  end
338
511
 
512
+ def query(id=nil)
513
+
514
+ return @query unless id
515
+
516
+ @store[id] = nil
517
+
518
+ sys = %i(accelerometer_rotation)
519
+
520
+ global = [:airplane_mode_on, :bluetooth_on, :cell_on, :device_name, \
521
+ :usb_mass_storage_enabled, :wifi_on]
522
+
523
+ secure = %i(bluetooth_name flashlight_enabled)
524
+
525
+
526
+ # send http request via macrodroid.com API
527
+
528
+ if id.downcase.to_sym == :location then
529
+ @control.http_exec id
530
+ elsif sys.include? id
531
+ @control.http_exec :'query-setting-system', {qvar: id}
532
+ elsif global.include? id
533
+ @control.http_exec :'query-setting-global', {qvar: id}
534
+ elsif secure.include? id
535
+ @control.http_exec :'query-setting-secure', {qvar: id}
536
+ else
537
+ @control.http_exec :query, {qvar: id}
538
+ end
539
+
540
+ # wait for the local variable to be updated
541
+ # timeout after 5 seoncds
542
+ t = Time.now
543
+
544
+ begin
545
+ sleep 1
546
+ end until @store[id] or Time.now > t + 5
547
+
548
+ return {warning: 'HTTP response timeout'} if Time.now > t+5
549
+
550
+ return @store[id]
551
+
552
+
553
+ end
554
+
339
555
  def request(s)
340
556
  @model.request s
341
557
  end
@@ -369,6 +585,12 @@ module RemoteDroid
369
585
  end
370
586
 
371
587
  alias trigger_fired trigger
588
+
589
+ def update(id, val)
590
+ key = id == :location ? id : val.keys.first.to_sym
591
+ @store[key] = val
592
+ end
593
+
372
594
 
373
595
  end
374
596
 
@@ -398,6 +620,13 @@ module RemoteDroid
398
620
  end
399
621
 
400
622
  end
623
+
624
+ class ControlHelper
625
+
626
+ def initialize(callback)
627
+ @callback
628
+ end
629
+ end
401
630
 
402
631
  class Control
403
632
 
@@ -405,7 +634,7 @@ module RemoteDroid
405
634
 
406
635
  @deviceid, @remote_url, @debug = deviceid, remote_url, debug
407
636
  @torch = Torch.new(self)
408
- end
637
+ end
409
638
 
410
639
  def bluetooth()
411
640
  @bluetooth
@@ -414,6 +643,33 @@ module RemoteDroid
414
643
  def camera_flash_light(options={})
415
644
  http_exec 'camera-flash-light', options
416
645
  end
646
+
647
+ def hotspot(state=nil)
648
+
649
+ if state then
650
+ http_exec 'hotspot', {enable: state == :enable}
651
+ else
652
+
653
+ def self.enable()
654
+ http_exec 'hotspot', {enable: true}
655
+ end
656
+
657
+ def self.on()
658
+ self.enable
659
+ end
660
+
661
+ def self.disable()
662
+ http_exec 'hotspot', {enable: false}
663
+ end
664
+
665
+ def self.off()
666
+ self.disable
667
+ end
668
+
669
+ self
670
+
671
+ end
672
+ end
417
673
 
418
674
  def http_exec(command, options={})
419
675
 
@@ -429,16 +685,53 @@ module RemoteDroid
429
685
 
430
686
  end
431
687
 
688
+ def location(options={})
689
+ http_exec 'location'
690
+ end
691
+
432
692
  def say_current_time(options={})
433
693
  http_exec 'say-current-time'
434
694
  end
435
695
 
436
696
  alias say_time say_current_time
437
697
 
438
- def speak_text(options={})
698
+ def screen(state=nil)
699
+
700
+ if state then
701
+ http_exec 'screen', {on: state == :on}
702
+ else
703
+
704
+ def self.on()
705
+ http_exec 'screen', {on: true}
706
+ end
707
+
708
+ def self.off()
709
+ http_exec 'screen', {on: false}
710
+ end
711
+
712
+ self
713
+
714
+ end
715
+ end
716
+
717
+ def share_location(options={})
718
+ http_exec 'share-location'
719
+ end
720
+
721
+ def speak_text(obj)
722
+
723
+ options = case obj
724
+ when String
725
+ {text: obj}
726
+ when Hash
727
+ obj
728
+ end
729
+
439
730
  http_exec 'speak-text', options
440
731
  end
441
732
 
733
+ alias say speak_text
734
+
442
735
  def toast(options={})
443
736
  http_exec :toast, options
444
737
  end
@@ -446,6 +739,11 @@ module RemoteDroid
446
739
  def torch(options={})
447
740
  http_exec :torch
448
741
  end
742
+
743
+ def vibrate(options={})
744
+ http_exec :vibrate
745
+ end
746
+
449
747
 
450
748
  def write(s)
451
749
 
@@ -456,12 +754,55 @@ module RemoteDroid
456
754
 
457
755
  alias export write
458
756
 
459
- def method_missing(method_name, *args)
757
+ def method_missing2(method_name, *args)
460
758
  http_exec(method_name, args.first)
461
759
  end
462
760
 
463
761
  end
464
762
 
763
+ class Query
764
+
765
+ def initialize(callback)
766
+ @callback = callback
767
+ end
768
+
769
+ def airplane_mode_enabled?()
770
+ q(:airplane_mode_on).to_i > 0
771
+ end
772
+
773
+ def battery()
774
+ q(:battery).to_i
775
+ end
776
+
777
+ def current_brightness()
778
+ q(:current_brightness).to_i
779
+ end
780
+
781
+ alias brightness current_brightness
782
+
783
+ def cell_id()
784
+ q(:cell_id)
785
+ end
786
+
787
+ alias cell_tower cell_id
788
+
789
+ def ip()
790
+ q(:ip)
791
+ end
792
+
793
+ def location()
794
+ @callback.query(:location)[:coords]
795
+ end
796
+
797
+
798
+ private
799
+
800
+ def q(id)
801
+ @callback.query(id)[id]
802
+ end
803
+
804
+ end
805
+
465
806
  class Server
466
807
 
467
808
  def initialize(s, drb_host: '127.0.0.1', deviceid: nil)
@@ -478,10 +819,95 @@ module RemoteDroid
478
819
 
479
820
  end
480
821
 
822
+ class Client
823
+
824
+ def initialize(host='127.0.0.1')
825
+ @drb = OneDrb::Client.new host: host, port: '5777'
826
+ end
827
+
828
+ def control
829
+ @drb.control
830
+ end
831
+
832
+ def export(s)
833
+ @drb.export(s)
834
+ end
835
+
836
+ def invoke(s, *args)
837
+ @drb.invoke(s, *args)
838
+ end
839
+
840
+ def query(id=nil)
841
+
842
+ return @drb.query unless id
843
+ t = Time.now
844
+ h = @drb.query(id)
845
+ h.merge({latency: (Time.now - t).round(3)})
846
+
847
+ end
848
+
849
+ def update(key, val)
850
+ @drb.update key.to_sym, val
851
+ end
852
+
853
+ def store()
854
+ @drb.store
855
+ end
856
+
857
+ # -- helpful methods -----------------
858
+
859
+ def battery()
860
+ query.battery
861
+ end
862
+
863
+ def cell_tower()
864
+ query.cell_tower
865
+ end
866
+
867
+ def hotspot(state=nil)
868
+ control.hotspot state
869
+ end
870
+
871
+ def location()
872
+ query.location
873
+ end
874
+
875
+ def say(text)
876
+ control.speak_text text
877
+ end
878
+
879
+ def say_time()
880
+ control.say_time
881
+ end
882
+
883
+ alias saytime say_time
884
+
885
+ def screen(state=nil)
886
+ control.screen state
887
+ end
888
+
889
+ def screen_on()
890
+ screen :on
891
+ end
892
+
893
+ def screen_off()
894
+ screen :off
895
+ end
896
+
897
+ def torch()
898
+ control.torch
899
+ end
900
+
901
+ def vibrate
902
+ control.vibrate
903
+ end
904
+
905
+ end
906
+
481
907
  class TriggerSubscriber < SPSSub
482
908
 
483
909
  def initialize(host: 'sps.home', drb_host: '127.0.0.1')
484
- @remote = OneDrb::Client.new host: drb_host, port: '5777'
910
+ @remote = OneDrb::Client.new host: drb_host, port: '5777'
485
911
  super(host: host)
486
912
  end
487
913
 
@@ -502,7 +928,7 @@ module RemoteDroid
502
928
  class ActionSubscriber < SPSSub
503
929
 
504
930
  def initialize(host: 'sps.home', drb_host: '127.0.0.1')
505
- @remote = OneDrb::Client.new host: drb_host, port: '5777'
931
+ @remote = OneDrb::Client.new host: drb_host, port: '5777'
506
932
  super(host: host)
507
933
  end
508
934
 
@@ -521,5 +947,25 @@ module RemoteDroid
521
947
 
522
948
  end
523
949
 
524
-
950
+ class ResponseSubscriber < SPSSub
951
+
952
+ def initialize(host: 'sps.home', drb_host: '127.0.0.1')
953
+ @remote = OneDrb::Client.new host: drb_host, port: '5777'
954
+ super(host: host)
955
+ end
956
+
957
+ def subscribe(topic: 'macrodroid/response')
958
+
959
+ super(topic: topic) do |msg|
960
+
961
+ json, id = msg.split(/:\s+/,2).reverse
962
+ h = JSON.parse(json, symbolize_names: true)
963
+ id ||= h.keys.first
964
+ @remote.update id.to_sym, h
965
+
966
+ end
967
+
968
+ end
969
+
970
+ end
525
971
  end
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.1
4
+ version: 0.4.2
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-03 00:00:00.000000000 Z
38
+ date: 2020-10-14 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.7
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.7
120
120
  description:
121
121
  email: james@jamesrobertson.eu
122
122
  executables: []
metadata.gz.sig CHANGED
Binary file