5
5
#
6
6
# Modified since 2015-09-18 from Pascal Gollor (https://github.com/pgollor)
7
7
# Modified since 2015-11-09 from Hristo Gochkov (https://github.com/me-no-dev)
8
+ # Modified since 2016-01-03 from Matthew O'Gorman (https://githumb.com/mogorman)
8
9
#
9
10
# This script will push an OTA update to the ESP
10
- # use it like: python espota.py -i <ESP_IP_address> -p <ESP_port> [-a password] -f <sketch.bin>
11
+ # use it like: python espota.py -i <ESP_IP_address> -I <Host_IP_address> - p <ESP_port> -P <Host_port > [-a password] -f <sketch.bin>
11
12
# Or to upload SPIFFS image:
12
- # python espota.py -i <ESP_IP_address> -p <ESP_port> [-a password] -s -f <spiffs.bin>
13
+ # python espota.py -i <ESP_IP_address> -I <Host_IP_address> - p <ESP_port> -P <HOST_port > [-a password] -s -f <spiffs.bin>
13
14
#
14
15
# Changes
15
16
# 2015-09-18:
22
23
# - Added digest authentication
23
24
# - Enchanced error tracking and reporting
24
25
#
26
+ # Changes
27
+ # 2016-01-03:
28
+ # - Added more options to parser.
29
+ #
25
30
26
31
from __future__ import print_function
27
32
import socket
@@ -64,11 +69,10 @@ def update_progress(progress):
64
69
sys .stderr .write ('.' )
65
70
sys .stderr .flush ()
66
71
67
- def serve (remoteAddr , remotePort , password , filename , command = FLASH ):
72
+ def serve (remoteAddr , localAddr , remotePort , localPort , password , filename , command = FLASH ):
68
73
# Create a TCP/IP socket
69
74
sock = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
70
- serverPort = random .randint (10000 ,60000 )
71
- server_address = ('0.0.0.0' , serverPort )
75
+ server_address = (localAddr , localPort )
72
76
logging .info ('Starting on %s:%s' , str (server_address [0 ]), str (server_address [1 ]))
73
77
try :
74
78
sock .bind (server_address )
@@ -82,7 +86,7 @@ def serve(remoteAddr, remotePort, password, filename, command = FLASH):
82
86
file_md5 = hashlib .md5 (f .read ()).hexdigest ()
83
87
f .close ()
84
88
logging .info ('Upload size: %d' , content_size )
85
- message = '%d %d %d %s\n ' % (command , serverPort , content_size , file_md5 )
89
+ message = '%d %d %d %s\n ' % (command , localPort , content_size , file_md5 )
86
90
87
91
# Wait for a connection
88
92
logging .info ('Sending invitation to: %s' , remoteAddr )
@@ -209,12 +213,24 @@ def parser():
209
213
help = "ESP8266 IP Address." ,
210
214
default = False
211
215
)
216
+ group .add_option ("-I" , "--host_ip" ,
217
+ dest = "host_ip" ,
218
+ action = "store" ,
219
+ help = "Host IP Address." ,
220
+ default = "0.0.0.0"
221
+ )
212
222
group .add_option ("-p" , "--port" ,
213
223
dest = "esp_port" ,
214
224
type = "int" ,
215
225
help = "ESP8266 ota Port. Default 8266" ,
216
226
default = 8266
217
227
)
228
+ group .add_option ("-P" , "--host_port" ,
229
+ dest = "host_port" ,
230
+ type = "int" ,
231
+ help = "Host server ota Port. Default random 10000-60000" ,
232
+ default = random .randint (10000 ,60000 )
233
+ )
218
234
parser .add_option_group (group )
219
235
220
236
# auth
@@ -294,7 +310,7 @@ def main(args):
294
310
command = SPIFFS
295
311
# end if
296
312
297
- return serve (options .esp_ip , options .esp_port , options .auth , options .image , command )
313
+ return serve (options .esp_ip , options .host_ip , options . esp_port , options . host_port , options .auth , options .image , command )
298
314
# end main
299
315
300
316
0 commit comments