build.py, ota.conf, platformio.ini
This commit is contained in:
parent
6052588af0
commit
2201e48800
1
.gitignore
vendored
1
.gitignore
vendored
@ -10,3 +10,4 @@
|
|||||||
.clang_complete
|
.clang_complete
|
||||||
.gcc-flags.json
|
.gcc-flags.json
|
||||||
src/loraconf.h
|
src/loraconf.h
|
||||||
|
src/ota.conf
|
77
build.py
Normal file
77
build.py
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# build.py
|
||||||
|
# pre-build script, setting up build environment
|
||||||
|
|
||||||
|
import requests
|
||||||
|
from os.path import basename
|
||||||
|
from platformio import util
|
||||||
|
|
||||||
|
Import("env")
|
||||||
|
|
||||||
|
# get keyfile from platformio.ini and parse it
|
||||||
|
project_config = util.load_project_config()
|
||||||
|
keyfile = str(env.get("PROJECTSRC_DIR")) + "/" + project_config.get("common", "keyfile")
|
||||||
|
print "Parsing OTA keys from " + keyfile
|
||||||
|
mykeys = {}
|
||||||
|
with open(keyfile) as myfile:
|
||||||
|
for line in myfile:
|
||||||
|
key, value = line.partition("=")[::2]
|
||||||
|
mykeys[key.strip()] = str(value).strip()
|
||||||
|
|
||||||
|
# get bintray credentials from keyfile
|
||||||
|
user = mykeys["BINTRAY_USER"]
|
||||||
|
repository = mykeys["BINTRAY_REPO"]
|
||||||
|
apitoken = mykeys["BINTRAY_API_TOKEN"]
|
||||||
|
|
||||||
|
# get bintray parameters from platformio.ini
|
||||||
|
version = project_config.get("common", "release_version")
|
||||||
|
package = str(env.get("PIOENV"))
|
||||||
|
|
||||||
|
# put bintray credentials to platformio environment
|
||||||
|
env.Replace(BINTRAY_USER=user)
|
||||||
|
env.Replace(BINTRAY_REPO=repository)
|
||||||
|
env.Replace(BINTRAY_API_TOKEN=apitoken)
|
||||||
|
|
||||||
|
# get runtime credentials from keyfile and put them to compiler directive
|
||||||
|
env.Replace(CPPDEFINES=[
|
||||||
|
('WIFI_SSID', '\\"' + mykeys["OTA_WIFI_SSID"] + '\\"'),
|
||||||
|
('WIFI_PASS', '\\"' + mykeys["OTA_WIFI_PASS"] + '\\"'),
|
||||||
|
('BINTRAY_USER', '\\"' + mykeys["BINTRAY_USER"] + '\\"'),
|
||||||
|
('BINTRAY_REPO', '\\"' + mykeys["BINTRAY_REPO"] + '\\"'),
|
||||||
|
])
|
||||||
|
|
||||||
|
# function for pushing new firmware to bintray storage using API
|
||||||
|
def publish_bintray(source, target, env):
|
||||||
|
firmware_path = str(source[0])
|
||||||
|
firmware_name = basename(firmware_path)
|
||||||
|
url = "/".join([
|
||||||
|
"https://api.bintray.com", "content",
|
||||||
|
user, repository, package, version, firmware_name
|
||||||
|
])
|
||||||
|
|
||||||
|
print("Uploading {0} to Bintray. Version: {1}".format(
|
||||||
|
firmware_name, version))
|
||||||
|
print(url)
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
"Content-type": "application/octet-stream",
|
||||||
|
"X-Bintray-Publish": "1",
|
||||||
|
"X-Bintray-Override": "1"
|
||||||
|
}
|
||||||
|
|
||||||
|
r = requests.put(
|
||||||
|
url,
|
||||||
|
data=open(firmware_path, "rb"),
|
||||||
|
headers=headers,
|
||||||
|
auth=(user, apitoken))
|
||||||
|
|
||||||
|
if r.status_code != 201:
|
||||||
|
print("Failed to submit package: {0}\n{1}".format(
|
||||||
|
r.status_code, r.text))
|
||||||
|
else:
|
||||||
|
print("The firmware has been successfuly published at Bintray.com!")
|
||||||
|
|
||||||
|
# put build file name and upload command to platformio environment
|
||||||
|
env.Replace(
|
||||||
|
PROGNAME="firmware_" + package + "_v%s" % version,
|
||||||
|
UPLOADCMD=publish_bintray
|
||||||
|
)
|
@ -24,34 +24,17 @@ env_default = generic
|
|||||||
;
|
;
|
||||||
description = Paxcounter is a proof-of-concept ESP32 device for metering passenger flows in realtime. It counts how many mobile devices are around.
|
description = Paxcounter is a proof-of-concept ESP32 device for metering passenger flows in realtime. It counts how many mobile devices are around.
|
||||||
|
|
||||||
[bintray]
|
|
||||||
user = cyberman54
|
|
||||||
repository = paxcounter-firmware
|
|
||||||
api_token = 2e10f923df5d47b9c7e25752510322a1d65ee997
|
|
||||||
|
|
||||||
[ota]
|
|
||||||
;release_version = max. 9 chars total, using decimal format "a.b.c"
|
|
||||||
release_version = 1.4.32
|
|
||||||
wifi_ssid = testnet
|
|
||||||
wifi_password = test0815
|
|
||||||
build_flags =
|
|
||||||
'-DWIFI_SSID="${ota.wifi_ssid}"'
|
|
||||||
'-DWIFI_PASS="${ota.wifi_password}"'
|
|
||||||
'-DBINTRAY_USER="${bintray.user}"'
|
|
||||||
'-DBINTRAY_REPO="${bintray.repository}"'
|
|
||||||
'-DBINTRAY_PACKAGE="${PIOENV}"'
|
|
||||||
'-DPROGVERSION="${ota.release_version}"'
|
|
||||||
|
|
||||||
[common]
|
[common]
|
||||||
; DEBUG LEVEL
|
; for release_version use max.10 chars total, use any decimal format like "a.b.c"
|
||||||
; For production run setto 0, otherwise device will leak RAM while running!
|
release_version = 1.4.33
|
||||||
|
; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running!
|
||||||
; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose
|
; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose
|
||||||
debug_level = 0
|
debug_level = 0
|
||||||
; UPLOAD MODE
|
; UPLOAD MODE: select esptool to flash via USB/UART, select custom to upload to cloud for OTA
|
||||||
; select esptool for USB/UART flashing, custom for OTA upload
|
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
;upload_protocol = custom
|
;upload_protocol = custom
|
||||||
extra_scripts = pre:publish_firmware.py
|
extra_scripts = pre:build.py
|
||||||
|
keyfile = ota.conf
|
||||||
platform_espressif32 = espressif32@1.3.0
|
platform_espressif32 = espressif32@1.3.0
|
||||||
board_build.partitions = min_spiffs.csv
|
board_build.partitions = min_spiffs.csv
|
||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
@ -69,9 +52,10 @@ build_flags =
|
|||||||
-D_lmic_config_h_
|
-D_lmic_config_h_
|
||||||
-include "src/paxcounter.conf"
|
-include "src/paxcounter.conf"
|
||||||
-include "src/hal/${PIOENV}.h"
|
-include "src/hal/${PIOENV}.h"
|
||||||
${ota.build_flags}
|
|
||||||
-w
|
-w
|
||||||
-DCORE_DEBUG_LEVEL=${common.debug_level}
|
'-DCORE_DEBUG_LEVEL=${common.debug_level}'
|
||||||
|
'-DBINTRAY_PACKAGE="${PIOENV}"'
|
||||||
|
'-DPROGVERSION="${common.release_version}"'
|
||||||
|
|
||||||
[env:ebox]
|
[env:ebox]
|
||||||
platform = ${common.platform_espressif32}
|
platform = ${common.platform_espressif32}
|
||||||
|
@ -1,71 +0,0 @@
|
|||||||
# Copyright (c) 2014-present PlatformIO <contact@platformio.org>
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
|
|
||||||
import requests
|
|
||||||
from os.path import basename
|
|
||||||
from platformio import util
|
|
||||||
|
|
||||||
Import("env")
|
|
||||||
|
|
||||||
project_config = util.load_project_config()
|
|
||||||
bintray_config = {k: v for k, v in project_config.items("bintray")}
|
|
||||||
version = project_config.get("ota", "release_version")
|
|
||||||
package = env.get("PIOENV")
|
|
||||||
|
|
||||||
#
|
|
||||||
# Push new firmware to the Bintray storage using API
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
def publish_bintray(source, target, env):
|
|
||||||
firmware_path = str(source[0])
|
|
||||||
firmware_name = basename(firmware_path)
|
|
||||||
|
|
||||||
print("Uploading {0} to Bintray. Version: {1}".format(
|
|
||||||
firmware_name, version))
|
|
||||||
|
|
||||||
url = "/".join([
|
|
||||||
"https://api.bintray.com", "content",
|
|
||||||
bintray_config.get("user"),
|
|
||||||
bintray_config.get("repository"),
|
|
||||||
package, version, firmware_name
|
|
||||||
])
|
|
||||||
|
|
||||||
print(url)
|
|
||||||
|
|
||||||
headers = {
|
|
||||||
"Content-type": "application/octet-stream",
|
|
||||||
"X-Bintray-Publish": "1",
|
|
||||||
"X-Bintray-Override": "1"
|
|
||||||
}
|
|
||||||
|
|
||||||
r = requests.put(
|
|
||||||
url,
|
|
||||||
data=open(firmware_path, "rb"),
|
|
||||||
headers=headers,
|
|
||||||
auth=(bintray_config.get("user"), bintray_config['api_token']))
|
|
||||||
|
|
||||||
if r.status_code != 201:
|
|
||||||
print("Failed to submit package: {0}\n{1}".format(
|
|
||||||
r.status_code, r.text))
|
|
||||||
else:
|
|
||||||
print("The firmware has been successfuly published at Bintray.com!")
|
|
||||||
|
|
||||||
|
|
||||||
# Custom upload command and program name
|
|
||||||
|
|
||||||
env.Replace(
|
|
||||||
PROGNAME="firmware_" + package + "_v%s" % version,
|
|
||||||
UPLOADCMD=publish_bintray
|
|
||||||
)
|
|
8
src/ota.sample.conf
Normal file
8
src/ota.sample.conf
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[ota]
|
||||||
|
OTA_WIFI_SSID = myhomewifi
|
||||||
|
OTA_WIFI_PASS = FooBar42!
|
||||||
|
|
||||||
|
[bintray]
|
||||||
|
BINTRAY_USER = mybintrayuser
|
||||||
|
BINTRAY_REPO = mybintrayrepo
|
||||||
|
BINTRAY_API_TOKEN = 2e10f923df5d47b9c5423432322a1d4324783997
|
Loading…
Reference in New Issue
Block a user