remotedroid 0.1.1 → 0.4.2

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: 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