import os import requests import json import string import argparse import shutil mf_temp32 = string.Template('''{ "name": "OpenMQTTGateway", "builds": [ { "chipFamily": "ESP32", "improv": false, "parts": [ { "path": "$cp$bl", "offset": 4096 }, { "path": "$cp$part", "offset": 32768 }, { "path": "$cp$boot", "offset": 57344 }, { "path": "$cp$bin", "offset": 65536 } ] } ] }''') mf_temp8266 = string.Template('''{ "name": "OpenMQTTGateway", "builds": [ { "chipFamily": "ESP8266", "parts": [{ "path": "$cp$bin", "offset": 0 }] } ] }''') wu_temp_opt = string.Template(''' ''') wu_temp_p1 = ''' ''' manif_folder = "/dev/firmware_build/" manif_path = 'docs/.vuepress/public/firmware_build/' vue_path = 'docs/.vuepress/components/' bin_path = 'toDeploy/' cors_proxy = '' # 'https://cors.bridged.cc/' esp32_blurl = 'https://github.com/espressif/arduino-esp32/raw/2.0.5/tools/sdk/esp32/bin/bootloader_dio_80m.bin' esp32_boot = 'https://github.com/espressif/arduino-esp32/raw/2.0.5/tools/partitions/boot_app0.bin' if not os.path.exists(manif_path): os.makedirs(manif_path) # copy OTA latest version definition shutil.move("scripts/latest_version_dev.json", manif_path + "latest_version_dev.json") if not os.path.exists(vue_path): os.makedirs(vue_path) wu_file = open(vue_path + 'web-uploader.vue', 'w') wu_file.write(wu_temp_p1) bl_bin = requests.get(esp32_blurl) filename = esp32_blurl.split('/')[-1] with open(manif_path + filename, 'wb') as output_file: output_file.write(bl_bin.content) boot_bin = requests.get(esp32_boot) filename = esp32_boot.split('/')[-1] with open(manif_path + filename, 'wb') as output_file: output_file.write(boot_bin.content) for name in os.listdir(bin_path): if 'firmware.bin' in name and ('esp32' in name or 'ttgo' in name or 'heltec' in name or 'thingpulse' in name or 'theengs' in name or 'lilygo' in name or 'shelly' in name or 'lolin_c3' in name or 'tinypico' in name): fw = name.split('-firmware')[0] man_file = fw + '.manifest.json' print('Bin name:' + name) part_name = name.split('-firmware')[0] + '-partitions.bin' print('Partition name:' + part_name) mani_str = mf_temp32.substitute({'cp': cors_proxy, 'part': manif_folder + part_name.split('/')[-1], 'bin': manif_folder + name.split( '/')[-1], 'bl': manif_folder + esp32_blurl.split('/')[-1], 'boot': manif_folder + esp32_boot.split('/')[-1]}) with open(manif_path + man_file, 'w') as nf: nf.write(mani_str) wu_file.write(wu_temp_opt.substitute( {'mff': manif_folder + man_file, 'mfn': fw})) shutil.copyfile(bin_path + name, (manif_path + name)) shutil.copyfile(bin_path + part_name, (manif_path + part_name)) print('Created: ' + os.path.abspath(man_file)) wu_file.write(wu_temp_p2) for name in os.listdir(bin_path): if 'firmware.bin' in name and ('nodemcu' in name or 'sonoff' in name or 'rf-wifi-gateway' in name or 'manual-wifi-test' in name or 'rfbridge' in name): fw = name.split('-firmware')[0] man_file = fw + '.manifest.json' print('Bin name:' + name) part_name = name.split('-firmware')[0] + '-partitions.bin' print('Partition name:' + part_name) mani_str = mf_temp8266.substitute( {'cp': cors_proxy, 'bin': manif_folder + name.split('/')[-1]}) with open(manif_path + man_file, 'w') as nf: nf.write(mani_str) wu_file.write( manif_folder + wu_temp_opt.substitute({'mff': manif_folder + man_file, 'mfn': fw})) shutil.copyfile(bin_path + name, (manif_path + name)) print('Created: ' + os.path.abspath(man_file)) wu_file.write(wu_temp_end) wu_file.close()