mirror of https://github.com/arendst/Tasmota.git
Merge pull request #16588 from s-hadinger/urlfetch
Command ``UrlFetch <url>`` to download a file to filesystem
This commit is contained in:
commit
af039838b6
|
@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file.
|
||||||
- Support of optional file calib.dat on ADE7953 based energy monitors like Shelly EM (#16486)
|
- Support of optional file calib.dat on ADE7953 based energy monitors like Shelly EM (#16486)
|
||||||
- Command ``SetOption46 0..255`` to add 0..255 * 10 milliseconds power on delay before initializing I/O (#15438)
|
- Command ``SetOption46 0..255`` to add 0..255 * 10 milliseconds power on delay before initializing I/O (#15438)
|
||||||
- Zigbee support for decimal Voltage/Current/Power on power metering plugs
|
- Zigbee support for decimal Voltage/Current/Power on power metering plugs
|
||||||
|
- Command ``UrlFetch <url>`` to download a file to filesystem
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- ESP32 Increase number of button GPIOs from 8 to 28 (#16518)
|
- ESP32 Increase number of button GPIOs from 8 to 28 (#16518)
|
||||||
|
|
|
@ -151,6 +151,8 @@ class be_class_tasmota (scope: global, name: Tasmota) {
|
||||||
load, closure(Tasmota_load_closure)
|
load, closure(Tasmota_load_closure)
|
||||||
wire_scan, closure(Tasmota_wire_scan_closure)
|
wire_scan, closure(Tasmota_wire_scan_closure)
|
||||||
time_str, closure(Tasmota_time_str_closure)
|
time_str, closure(Tasmota_time_str_closure)
|
||||||
|
urlfetch, closure(Tasmota_urlfetch_closure)
|
||||||
|
urlfetch_cmd, closure(Tasmota_urlfetch_cmd_closure)
|
||||||
|
|
||||||
add_cron, closure(Tasmota_add_cron_closure)
|
add_cron, closure(Tasmota_add_cron_closure)
|
||||||
run_cron, closure(Tasmota_run_cron_closure)
|
run_cron, closure(Tasmota_run_cron_closure)
|
||||||
|
|
|
@ -35,6 +35,8 @@ class Tasmota
|
||||||
self._debug_present = true
|
self._debug_present = true
|
||||||
except ..
|
except ..
|
||||||
end
|
end
|
||||||
|
# declare `UrlFetch` command
|
||||||
|
self.add_cmd('UrlFetch', def (cmd, idx, payload, payload_json) self.urlfetch_cmd(cmd, idx, payload, payload_json) end)
|
||||||
end
|
end
|
||||||
|
|
||||||
# check that the parameter is not a method, it would require a closure instead
|
# check that the parameter is not a method, it would require a closure instead
|
||||||
|
@ -751,4 +753,44 @@ class Tasmota
|
||||||
|
|
||||||
return (r << 16) | (g << 8) | b
|
return (r << 16) | (g << 8) | b
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# urlfetch - add a Tasmota command to download a file from a URL to file-system
|
||||||
|
def urlfetch(url,file)
|
||||||
|
if file==nil
|
||||||
|
import string
|
||||||
|
file = string.split(url,'/').pop()
|
||||||
|
if size(file) == 0
|
||||||
|
file = 'index.html' # fallback in case you fetch a root file
|
||||||
|
end
|
||||||
|
end
|
||||||
|
var wc = webclient()
|
||||||
|
wc.begin(url)
|
||||||
|
var st = wc.GET()
|
||||||
|
if st != 200
|
||||||
|
raise 'connection_error','status: '+str(st)
|
||||||
|
end
|
||||||
|
var ret = wc.write_file(file)
|
||||||
|
wc.close()
|
||||||
|
self.log('BRY: Fetched '+str(ret), 3)
|
||||||
|
return st
|
||||||
|
end
|
||||||
|
|
||||||
|
def urlfetch_cmd(cmd, idx, payload, payload_json)
|
||||||
|
import string
|
||||||
|
if string.find(payload, "http") != 0
|
||||||
|
self.resp_cmnd_str("URL must start with 'http(s)'")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
try
|
||||||
|
var ret = self.urlfetch(payload)
|
||||||
|
if ret < 0
|
||||||
|
self.resp_cmnd_failed()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
except .. as e, m
|
||||||
|
self.resp_cmnd_failed()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
tasmota.resp_cmnd_done()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue