remotedroid 0.1.0 → 0.4.1

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