diff --git a/api/fw-server.py b/api/fw-server.py new file mode 100644 index 000000000..34f6c7270 --- /dev/null +++ b/api/fw-server.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 + +""" + fw-server.py - firmware server for Sonoff-Tasmota OTA upgrade + + Copyright (C) 2018 Gennaro Tortone + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Requirements: + - Python3 + - pip install netifaces flask + +Instructions: + Copy Sonoff-Tasmota firmware binary files in 'fw' directory. + A set of prebuilt files can be downloaded by Sonoff-Tasmota release page: + https://github.com/arendst/Sonoff-Tasmota/releases + + Configure your Sonoff-Tasmota device with your fw-server URL: + Firmware Upgrade -> Upgrade by web server + http://:5000/sonoff-minimal.bin + +Usage: + ./fw-server.py -d (default: eth0) + +Example: + ./fw-server.py -d wlan0 +""" + +import io +import os.path +from sys import exit +from flask import Flask, send_file +from optparse import OptionParser +import netifaces as ni + +parser = OptionParser() +parser.add_option("-d", "--dev", action="store", type="string", + dest="netdev", default="eth0", help="network interface (default: eth0)") +(options, args) = parser.parse_args() + +try: + netip = ni.ifaddresses(options.netdev)[ni.AF_INET][0]['addr'] +except Exception as e: + print("E: network interface error - {}".format(e)) + exit(1) + +app = Flask(__name__) + +@app.route('/') +def fw(filename): + if(os.path.exists("fw/" + str(filename))): + return send_file("fw/" + str(filename), attachment_filename=filename, mimetype='application/octet-stream') + else: + return("ERROR: file not found") + +if __name__ == "__main__": + try: + app.run(host=netip) + except Exception as e: + print("E: {}".format(e)) \ No newline at end of file diff --git a/api/fw/README b/api/fw/README new file mode 100644 index 000000000..c29367442 --- /dev/null +++ b/api/fw/README @@ -0,0 +1,3 @@ +Copy Sonoff-Tasmota firmware binary files in this directory. +A set of prebuilt files can be downloaded by Sonoff-Tasmota release page: +https://github.com/arendst/Sonoff-Tasmota/releases \ No newline at end of file