Browse Source

Merge branch 'dev' of https://bitbucket.org/xoseperez/espurna into dev

fastled
Dylan 7 years ago
parent
commit
e5d4435251
9 changed files with 373 additions and 41 deletions
  1. +1
    -0
      code/espurna/config/arduino.h
  2. +2
    -1
      code/espurna/config/general.h
  3. +51
    -27
      code/espurna/config/hardware.h
  4. +1
    -1
      code/espurna/config/version.h
  5. +15
    -0
      code/espurna/hardware.ino
  6. +5
    -0
      code/espurna/ota.ino
  7. +198
    -0
      code/ota_flash.sh
  8. +65
    -0
      code/ota_list.sh
  9. +35
    -12
      code/platformio.ini

+ 1
- 0
code/espurna/config/arduino.h View File

@ -39,6 +39,7 @@
//#define JANGOE_WIFI_RELAY_NO
//#define JORGEGARCIA_WIFI_RELAYS
//#define OPENENERGYMONITOR_MQTT_RELAY
//#define HUACANXING_H802
//--------------------------------------------------------------------------------
// Features (values below are non-default values)


+ 2
- 1
code/espurna/config/general.h View File

@ -8,6 +8,7 @@
//------------------------------------------------------------------------------
#define ADMIN_PASS "fibonacci" // Default password (WEB, OTA, WIFI)
#define DEVICE_NAME MANUFACTURER "_" DEVICE // Concatenate both to get a unique device name
//------------------------------------------------------------------------------
// TELNET
@ -321,7 +322,7 @@ PROGMEM const char* const custom_reset_string[] = {
// -----------------------------------------------------------------------------
#ifndef MDNS_SUPPORT
#define MDNS_SUPPORT 1 // Enable MDNS by default
#define MDNS_SUPPORT 1 // Publish services using mDNS by default
#endif
// -----------------------------------------------------------------------------


+ 51
- 27
code/espurna/config/hardware.h View File

@ -95,7 +95,7 @@
#elif defined(ITEAD_SONOFF_BASIC)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SONOFF_BASIC"
// Buttons
@ -114,7 +114,7 @@
#elif defined(ITEAD_SONOFF_RF)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SONOFF_RF"
// Buttons
@ -133,7 +133,7 @@
#elif defined(ITEAD_SONOFF_TH)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SONOFF_TH"
// Buttons
@ -152,7 +152,7 @@
#elif defined(ITEAD_SONOFF_SV)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SONOFF_SV"
// Buttons
@ -171,7 +171,7 @@
#elif defined(ITEAD_SLAMPHER)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SLAMPHER"
// Buttons
@ -190,7 +190,7 @@
#elif defined(ITEAD_S20)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "S20"
// Buttons
@ -209,7 +209,7 @@
#elif defined(ITEAD_SONOFF_TOUCH)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SONOFF_TOUCH"
// Buttons
@ -228,7 +228,7 @@
#elif defined(ITEAD_SONOFF_POW)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SONOFF_POW"
// Buttons
@ -253,7 +253,7 @@
#elif defined(ITEAD_SONOFF_DUAL)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SONOFF_DUAL"
#define SERIAL_BAUDRATE 19230
#define RELAY_PROVIDER RELAY_PROVIDER_DUAL
@ -271,7 +271,7 @@
#elif defined(ITEAD_SONOFF_4CH)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SONOFF_4CH"
// Buttons
@ -308,7 +308,7 @@
#elif defined(ITEAD_SONOFF_4CH_PRO)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SONOFF_4CH_PRO"
// Buttons
@ -354,7 +354,7 @@
// without problem.
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "1CH_INCHING"
// Buttons
@ -373,7 +373,7 @@
#elif defined(ITEAD_MOTOR)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "MOTOR"
// Buttons
@ -389,11 +389,11 @@
#define LED1_PIN 13
#define LED1_PIN_INVERSE 1
#elif defined(ITEAD_BN_SZ01)
#elif defined(ITEAD_BNSZ01)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define DEVICE "BN-SZ01"
#define MANUFACTURER "ITEAD"
#define DEVICE "BNSZ01"
#define RELAY_PROVIDER RELAY_PROVIDER_LIGHT
#define LIGHT_PROVIDER LIGHT_PROVIDER_DIMMER
#define DUMMY_RELAY_COUNT 1
@ -409,7 +409,7 @@
#elif defined(ITEAD_SONOFF_RFBRIDGE)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SONOFF_RFBRIDGE"
#define SERIAL_BAUDRATE 19200
#define RELAY_PROVIDER RELAY_PROVIDER_RFBRIDGE
@ -429,7 +429,7 @@
#elif defined(ITEAD_SONOFF_B1)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SONOFF_B1"
#define RELAY_PROVIDER RELAY_PROVIDER_LIGHT
#define LIGHT_PROVIDER LIGHT_PROVIDER_MY9192
@ -442,7 +442,7 @@
#elif defined(ITEAD_SONOFF_LED)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SONOFF_LED"
#define RELAY_PROVIDER RELAY_PROVIDER_LIGHT
#define LIGHT_PROVIDER LIGHT_PROVIDER_DIMMER
@ -462,7 +462,7 @@
#elif defined(ITEAD_SONOFF_T1_1CH)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SONOFF_T1_1CH"
// Buttons
@ -481,7 +481,7 @@
#elif defined(ITEAD_SONOFF_T1_2CH)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SONOFF_T1_2CH"
// Buttons
@ -508,7 +508,7 @@
#elif defined(ITEAD_SONOFF_T1_3CH)
// Info
#define MANUFACTURER "ITEAD_STUDIO"
#define MANUFACTURER "ITEAD"
#define DEVICE "SONOFF_T1_3CH"
// Buttons
@ -598,7 +598,7 @@
#elif defined(AITHINKER_AI_LIGHT)
// Info
#define MANUFACTURER "AI_THINKER"
#define MANUFACTURER "AITHINKER"
#define DEVICE "AI_LIGHT"
#define RELAY_PROVIDER RELAY_PROVIDER_LIGHT
#define LIGHT_PROVIDER LIGHT_PROVIDER_MY9192
@ -615,7 +615,7 @@
#elif defined(MAGICHOME_LED_CONTROLLER)
// Info
#define MANUFACTURER "MAGIC_HOME"
#define MANUFACTURER "MAGICHOME"
#define DEVICE "LED_CONTROLLER"
#define RELAY_PROVIDER RELAY_PROVIDER_LIGHT
#define LIGHT_PROVIDER LIGHT_PROVIDER_DIMMER
@ -674,7 +674,7 @@
#elif defined(JANGOE_WIFI_RELAY_NC)
// Info
#define MANUFACTURER "JAN_GOEDEKE"
#define MANUFACTURER "JANGOE"
#define DEVICE "WIFI_RELAY_NC"
// Buttons
@ -697,7 +697,7 @@
#elif defined(JANGOE_WIFI_RELAY_NO)
// Info
#define MANUFACTURER "JAN_GOEDEKE"
#define MANUFACTURER "JANGOE"
#define DEVICE "WIFI_RELAY_NO"
// Buttons
@ -726,7 +726,7 @@
#elif defined(JORGEGARCIA_WIFI_RELAYS)
// Info
#define MANUFACTURER "JORGE_GARCIA"
#define MANUFACTURER "JORGEGARCIA"
#define DEVICE "WIFI_RELAYS"
// Relays
@ -809,6 +809,30 @@
#define RELAY1_TYPE RELAY_TYPE_LATCHED
#define RELAY1_RESET_PIN 12
// -----------------------------------------------------------------------------
// HUACANXING H802
// -----------------------------------------------------------------------------
#elif defined(HUACANXING_H802)
// Info
#define MANUFACTURER "HUACANXING"
#define DEVICE "H802"
#define RELAY_PROVIDER RELAY_PROVIDER_LIGHT
#define LIGHT_PROVIDER LIGHT_PROVIDER_DIMMER
#define DUMMY_RELAY_COUNT 1
// Channels
#define LIGHT_CH1_PIN 12 // RED
#define LIGHT_CH2_PIN 14 // GREEN
#define LIGHT_CH3_PIN 13 // BLUE
#define LIGHT_CH4_PIN 15 // WHITE
#define LIGHT_CH1_INVERSE 0
#define LIGHT_CH2_INVERSE 0
#define LIGHT_CH3_INVERSE 0
#define LIGHT_CH4_INVERSE 0
// -----------------------------------------------------------------------------
// Unknown hardware
// -----------------------------------------------------------------------------


+ 1
- 1
code/espurna/config/version.h View File

@ -1,4 +1,4 @@
#define APP_NAME "ESPURNA"
#define APP_VERSION "1.9.3"
#define APP_VERSION "1.9.4b"
#define APP_AUTHOR "xose.perez@gmail.com"
#define APP_WEBSITE "http://tinkerman.cat"

+ 15
- 0
code/espurna/hardware.ino View File

@ -419,6 +419,21 @@ void hwUpwardsCompatibility() {
setSetting("relayResetGPIO", 1, 12);
setSetting("relayType", 1, RELAY_TYPE_NORMAL);
#elif defined(HUACANXING_H802)
setSetting("board", 36);
setSetting("relayProvider", RELAY_PROVIDER_LIGHT);
setSetting("lightProvider", LIGHT_PROVIDER_DIMMER);
setSetting("chGPIO", 1, 12);
setSetting("chGPIO", 2, 14);
setSetting("chGPIO", 3, 13);
setSetting("chGPIO", 4, 15);
setSetting("chLogic", 1, 0);
setSetting("chLogic", 2, 0);
setSetting("chLogic", 3, 0);
setSetting("chLogic", 4, 0);
setSetting("relays", 1);
#else
#error "UNSUPPORTED HARDWARE!"


+ 5
- 0
code/espurna/ota.ino View File

@ -55,6 +55,11 @@ void otaSetup() {
ArduinoOTA.begin();
// Public ESPurna related txt for OTA discovery
MDNS.addServiceTxt("arduino", "tcp", "firmware", APP_NAME);
MDNS.addServiceTxt("arduino", "tcp", "espurna_version", APP_VERSION);
MDNS.addServiceTxt("arduino", "tcp", "espurna_board", DEVICE_NAME);
}
void otaLoop() {


+ 198
- 0
code/ota_flash.sh View File

@ -0,0 +1,198 @@
#!/bin/bash
ip=
board=
auth=
flags=
export boards=()
ips=""
exists() {
command -v "$1" >/dev/null 2>&1
}
echo_pad() {
string=$1
pad=$2
printf '%s' "$string"
printf '%*s' $(( $pad - ${#string} ))
}
useAvahi() {
echo_pad "#" 4
echo_pad "HOSTNAME" 20
echo_pad "IP" 20
echo_pad "DEVICE" 30
echo_pad "VERSION" 10
echo
printf -v line '%*s\n' 84
echo ${line// /-}
counter=0
ip_file="/tmp/espurna.flash.ips"
board_file="/tmp/espurna.flash.boards"
count_file="/tmp/espurna.flash.count"
echo -n "" > $ip_file
echo -n "" > $board_file
echo -n "$counter" > $count_file
avahi-browse -t -r -p "_arduino._tcp" 2>/dev/null | grep ^= | while read line; do
(( counter++ ))
echo "$counter" > $count_file
hostname=`echo $line | cut -d ';' -f4`
ip=`echo $line | cut -d ';' -f8`
txt=`echo $line | cut -d ';' -f10`
board=`echo $txt | sed -n "s/.*espurna_board=\([^\"]*\).*/\1/p"`
version=`echo $txt | sed -n "s/.*espurna_version=\([^\"]*\).*/\1/p"`
echo -n "$ip;" >> $ip_file
echo -n "$board;" >> $board_file
echo_pad "$counter" 4
echo_pad "$hostname" 20
echo_pad "$ip" 20
echo_pad "$board" 30
echo_pad "$version" 10
echo
done
echo
read -p "Choose the board you want to flash (empty if none of these): " num
# None of these
if [ "$num" == "" ]; then
return
fi
# Check boundaries
counter=`cat $count_file`
if [ $num -lt 1 ] || [ $num -gt $counter ]; then
echo "Board number must be between 1 and $counter"
exit 1
fi
# Fill the fields
ip=`cat $ip_file | cut -d ';' -f$num`
board=`cat $board_file | cut -d ';' -f$num`
}
getBoard() {
boards=(`cat espurna/config/hardware.h | grep "defined" | sed "s/.*(\(.*\)).*/\1/" | sort`)
echo_pad "#" 4
echo_pad "DEVICE" 30
echo
printf -v line '%*s\n' 34
echo ${line// /-}
counter=0
for board in "${boards[@]}"; do
(( counter++ ))
echo_pad "$counter" 4
echo_pad "$board" 30
echo
done
echo
read -p "Choose the board you want to flash (empty if none of these): " num
# None of these
if [ "$num" == "" ]; then
return
fi
# Check boundaries
counter=${#boards[*]}
if [ $num -lt 1 ] || [ $num -gt $counter ]; then
echo "Board code must be between 1 and $counter"
exit 1
fi
# Fill the fields
(( num -- ))
board=${boards[$num]}
}
# ------------------------------------------------------------------------------
# Welcome
echo
echo "--------------------------------------------------------------"
echo "ESPURNA FIRMWARE OTA FLASHER"
# Get current version
version=`cat espurna/config/version.h | grep APP_VERSION | awk '{print $3}' | sed 's/"//g'`
echo "Building for version $version"
echo "--------------------------------------------------------------"
echo
if exists avahi-browse; then
useAvahi
fi
if [ "$board" == "" ]; then
getBoard
fi
if [ "$board" == "" ]; then
read -p "Board type of the device to flash: " -e -i "NODEMCU_LOLIN" board
fi
if [ "$board" == "" ]; then
echo "You must define the board type"
exit 2
fi
if [ "$ip" == "" ]; then
read -p "IP of the device to flash: " -e -i 192.168.4.1 ip
fi
if [ "$ip" == "" ]; then
echo "You must define the IP of the device"
exit 2
fi
if [ "$auth" == "" ]; then
read -p "Authorization key of the device to flash: " auth
fi
if [ "$flags" == "" ]; then
read -p "Extra flags for the build: " -e -i "-DTELNET_ONLY_AP=0" flags
fi
read -p "Environment to build: " -e -i "esp8266-1m-ota" env
echo
echo "ESPURNA_IP = $ip"
echo "ESPURNA_BOARD = $board"
echo "ESPURNA_AUTH = $auth"
echo "ESPURNA_FLAGS = $flags"
echo "ESPURNA_ENV = $env"
echo
echo -n "Are these values corrent [y/N]: "
read response
if [ "$response" != "y" ]; then
exit
fi
export ESPURNA_IP=$ip
export ESPURNA_BOARD=$board
export ESPURNA_AUTH=$auth
export ESPURNA_FLAGS=$flags
pio run -e $env -t upload

+ 65
- 0
code/ota_list.sh View File

@ -0,0 +1,65 @@
#!/bin/bash
exists() {
command -v "$1" >/dev/null 2>&1
}
echo_pad() {
string=$1
pad=$2
printf '%s' "$string"
printf '%*s' $(( $pad - ${#string} ))
}
useAvahi() {
echo_pad "#" 4
echo_pad "HOSTNAME" 20
echo_pad "IP" 20
echo_pad "DEVICE" 30
echo_pad "VERSION" 10
echo
printf -v line '%*s\n' 84
echo ${line// /-}
counter=0
avahi-browse -t -r -p "_arduino._tcp" 2>/dev/null | grep ^= | while read line; do
(( counter++ ))
hostname=`echo $line | cut -d ';' -f4`
ip=`echo $line | cut -d ';' -f8`
txt=`echo $line | cut -d ';' -f10`
board=`echo $txt | sed -n "s/.*espurna_board=\([^\"]*\).*/\1/p"`
version=`echo $txt | sed -n "s/.*espurna_version=\([^\"]*\).*/\1/p"`
echo_pad "$counter" 4
echo_pad "$hostname" 20
echo_pad "$ip" 20
echo_pad "$board" 30
echo_pad "$version" 10
echo
done
echo
}
# ------------------------------------------------------------------------------
# Welcome
echo
echo "--------------------------------------------------------------"
echo "OTA-UPDATABLE DEVICES"
echo "--------------------------------------------------------------"
echo
if exists avahi-browse; then
useAvahi
else
echo "Avahi not installed"
exit 1
fi

+ 35
- 12
code/platformio.ini View File

@ -4,7 +4,7 @@ src_dir = espurna
data_dir = espurna/data
[common]
build_flags = -g -DMQTT_MAX_PACKET_SIZE=400 ${env.FLAGS}
build_flags = -g -DMQTT_MAX_PACKET_SIZE=400 ${env.ESPURNA_FLAGS}
debug_flags = -DDEBUG_ESP_CORE -DDEBUG_ESP_SSL -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_HTTP_SERVER -DDEBUG_ESP_UPDATER -DDEBUG_ESP_OTA -DDEBUG_TLS_MEM
build_flags_512k = ${common.build_flags} -Wl,-Tesp8266.flash.512k0.ld
build_flags_1m = ${common.build_flags} -Wl,-Tesp8266.flash.1m0.ld
@ -723,6 +723,29 @@ upload_port = "192.168.4.1"
upload_flags = --auth=fibonacci --port 8266
monitor_baud = 115200
[env:huacanxing-h802]
platform = espressif8266
framework = arduino
board = esp01_1m
board_flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DHUACANXING_H802 -DDEBUG_PORT=Serial1
monitor_baud = 115200
[env:huacanxing-h802-ota]
platform = espressif8266
framework = arduino
board = esp01_1m
board_flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DHUACANXING_H802 -DDEBUG_PORT=Serial1
upload_speed = 115200
upload_port = "192.168.4.1"
upload_flags = --auth=fibonacci --port 8266
monitor_baud = 115200
[env:itead-bnsz01]
platform = espressif8266
framework = arduino
@ -730,7 +753,7 @@ board = esp8285
board_flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
build_flags = ${common.build_flags_1m} -DITEAD_BN_SZ01
build_flags = ${common.build_flags_1m} -DITEAD_BNSZ01
monitor_baud = 115200
[env:itead-bnsz01-ota]
@ -740,7 +763,7 @@ board = esp8285
board_flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
build_flags = ${common.build_flags_1m} -DITEAD_BN_SZ01
build_flags = ${common.build_flags_1m} -DITEAD_BNSZ01
upload_speed = 115200
upload_port = "192.168.4.1"
upload_flags = --auth=fibonacci --port 8266
@ -803,10 +826,10 @@ board = esp8285
board_flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
build_flags = ${common.build_flags_1m} -D${env.BOARD}
build_flags = ${common.build_flags_1m} -D${env.ESPURNA_BOARD}
upload_speed = 115200
upload_port = "${env.IP}"
upload_flags = --auth=${env.AUTH} --port 8266
upload_port = "${env.ESPURNA_IP}"
upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
[env:esp8266-1m-ota]
platform = espressif8266
@ -815,10 +838,10 @@ board = esp01_1m
board_flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
build_flags = ${common.build_flags_1m} -D${env.BOARD}
build_flags = ${common.build_flags_1m} -D${env.ESPURNA_BOARD}
upload_speed = 115200
upload_port = "${env.IP}"
upload_flags = --auth=${env.AUTH} --port 8266
upload_port = "${env.ESPURNA_IP}"
upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
[env:esp8266-4m-ota]
platform = espressif8266
@ -827,7 +850,7 @@ board = esp12e
board_flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
build_flags = ${common.build_flags} -D${env.BOARD}
build_flags = ${common.build_flags} -D${env.ESPURNA_BOARD}
upload_speed = 115200
upload_port = "${env.IP}"
upload_flags = --auth=${env.AUTH} --port 8266
upload_port = "${env.ESPURNA_IP}"
upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266

Loading…
Cancel
Save