mirror of https://github.com/arendst/Tasmota.git
174 lines
8.4 KiB
Plaintext
174 lines
8.4 KiB
Plaintext
#################################################################################
|
|
# Web UI for Leds animation
|
|
#
|
|
#################################################################################
|
|
|
|
var leds_animation = module('leds_animation')
|
|
|
|
#################################################################################
|
|
# Leds_animation_UI
|
|
#
|
|
# WebUI for the Leds animation
|
|
#################################################################################
|
|
class Leds_animation_UI
|
|
|
|
def init()
|
|
tasmota.add_driver(self)
|
|
end
|
|
|
|
# create a method for adding a button to the main menu
|
|
# the button 'Leds animation' redirects to '/leds_anim?'
|
|
def web_add_button()
|
|
import webserver
|
|
webserver.content_send(
|
|
"<form id=but_part_mgr style='display: block;' action='leds_anim' method='get'><button>Leds animation</button></form><p></p>")
|
|
end
|
|
|
|
#- ---------------------------------------------------------------------- -#
|
|
#- Show page to migrate to factory layout + single OTA
|
|
#- ---------------------------------------------------------------------- -#
|
|
def show_migrate_to_factory(p)
|
|
# display ota partitions
|
|
import webserver
|
|
import string
|
|
|
|
if !self.factory_migrate_eligible(p) return end
|
|
|
|
webserver.content_send("<fieldset><legend><b> Migrate to safeboot partition layout </b></legend><p></p>")
|
|
|
|
webserver.content_send("<p>The `safeboot` layout allows for increased size<br>of firmware or file-system.</p>")
|
|
webserver.content_send("<p>Please see <a href='https://tasmota.github.io/docs/Safeboot/' target='_blank'>Safeboot layout documentation</a></p>")
|
|
webserver.content_send("<p> </p>")
|
|
|
|
webserver.content_send(string.format("<p>Step 1: %s</p>", self.display_step_state(self.test_step_1(p), "boot on `app1`")))
|
|
webserver.content_send(string.format("<p>Step 2: %s</p>", self.display_step_state(self.test_step_2(p), "flash `safeboot` to `app0`")))
|
|
webserver.content_send(string.format("<p>Step 3: %s</p>", self.display_step_state(self.test_step_3(p), "change partition map")))
|
|
webserver.content_send(string.format("<p>Step 4: %s</p>", self.display_step_state(self.test_step_4(p), "flash final firmware")))
|
|
|
|
webserver.content_send("<form action='/part_wiz' method='post' ")
|
|
webserver.content_send("onsubmit='return confirm(\"This will cause multiple restarts.\");'>")
|
|
var ota_url = tasmota.cmd("OtaUrl").find("OtaUrl", "")
|
|
webserver.content_send(string.format("<br><b>OTA Url</b><br><input id='o1' placeholder='OTA_URL' value='%s'><br>",
|
|
ota_url))
|
|
|
|
import persist
|
|
var safeboot_url = persist.find("safeboot_url", self.default_safeboot_URL())
|
|
webserver.content_send(string.format("<br><b>SAFEBOOT Url</b> (don't change)<input id='o2' placeholder='SAFEBOOT_URL' value='%s'><br>",
|
|
safeboot_url))
|
|
|
|
webserver.content_send("<p></p><button name='factory' class='button bred'>Start migration</button></form></p>")
|
|
|
|
webserver.content_send("<p></p></fieldset><p></p>")
|
|
end
|
|
|
|
#######################################################################
|
|
# Show background colors
|
|
#######################################################################
|
|
def show_background_color()
|
|
import webserver
|
|
var back_color = 0xFF8800
|
|
var back_anim_time = 5.0
|
|
|
|
|
|
webserver.content_send("<fieldset><legend><b> Background </b></legend>"
|
|
"<form action='/leds_anim' method='post'>")
|
|
|
|
# webserver.content_send(f"<input type='color' min='1' max='256' name='leds_back' value='#{back_color:06X}'>")
|
|
# webserver.content_send("<hr>")
|
|
webserver.content_send("<label>Animation time (sec)</label>")
|
|
webserver.content_send(f"<input type='number' min='1' max='256' name='leds_size' value='{back_anim_time:.1f}'>")
|
|
webserver.content_send("<p></p>")
|
|
|
|
webserver.content_send("<label>Background color (static)</label>")
|
|
webserver.content_send("<table style='width:100%;background:white;'>")
|
|
webserver.content_send(f"<tr>"
|
|
"<td width='33%' style='color:#222;'><input type='radio' name='static' checked />Static</td>"
|
|
"<td width='67%'><input type='color' min='1' max='256' name='leds_back' value='#{back_color:06X}'></td>"
|
|
"</tr>")
|
|
webserver.content_send("<tr>"
|
|
"<td width='33%' style='color:#222;'><input type='radio' name='static' />Palette1</td>"
|
|
"<td width='67%' style='background:linear-gradient(to right,#FF0000 0.0%,#FFA500 14.3%,#FFFF00 28.6%,#00EE00 42.9%,#0000FF 57.1%,#4B00FF 71.4%,#FF82FF 85.7%,#FF0000 100.0%);'></td>"
|
|
"</tr>")
|
|
webserver.content_send("<tr>"
|
|
"<td width='33%' style='color:#222;'><input type='radio' name='static' />Palette1</td>"
|
|
"<td width='67%' style='background:linear-gradient(to right,#FF0000 0.0%,#FF0000 8.9%,#FFA500 14.3%,#FFA500 23.2%,#FFFF00 28.6%,#FFFF00 37.5%,#00FF00 42.9%,#00FF00 51.8%,#0000FF 57.1%,#0000FF 66.1%,#FF00FF 71.4%,#FF00FF 80.4%,#FFFFFF 85.7%,#FFFFFF 94.6%,#FF0000 100.0%);'></td>"
|
|
"</tr>")
|
|
webserver.content_send("<tr>"
|
|
"<td width='33%' style='color:#222;'><input type='radio' name='static' />Palette1</td>"
|
|
"<td width='67%' style='background:linear-gradient(to right,#E60611 0.0%,#B66022 36.9%,#A0402A 52.2%,#88030D 100.0%);'></td>"
|
|
"</tr>")
|
|
webserver.content_send("</table>")
|
|
webserver.content_send("<p></p><button name='save' class='button bgrn'>Save</button></form></p>"
|
|
"</fieldset><p></p>")
|
|
end
|
|
|
|
#######################################################################
|
|
# Show main config
|
|
#######################################################################
|
|
def show_main_config()
|
|
import webserver
|
|
var leds_anim_enabled = true
|
|
var leds_size = 25
|
|
|
|
webserver.content_send("<fieldset><legend><b> Leds configuration </b></legend>"
|
|
"<p style='width:320px;'>Check the <a href='https://tasmota.github.io/docs/Leds_animation/' target='_blank'>Leds animation documentation</a>.</p>"
|
|
"<form action='/leds_anim' method='post'>")
|
|
|
|
# checkbox for Matter enable
|
|
var leds_anim_enabled_checked = leds_anim_enabled ? 'checked' : ''
|
|
webserver.content_send(f"<p><input id='menable' type='checkbox' name='menable' {leds_anim_enabled_checked}>")
|
|
webserver.content_send("<label for='menable'><b>Leds anim enabled</b></label></p>")
|
|
|
|
webserver.content_send("<label>Number of leds</label>")
|
|
webserver.content_send(f"<input type='number' min='1' max='256' name='leds_size' value='{leds_size:i}'>")
|
|
|
|
webserver.content_send("<p></p><button name='save' class='button bgrn'>Save</button></form></p>"
|
|
"</fieldset><p></p>")
|
|
end
|
|
|
|
#######################################################################
|
|
# Display the complete page
|
|
#######################################################################
|
|
def page_view()
|
|
import webserver
|
|
if !webserver.check_privileged_access() return nil end
|
|
|
|
webserver.content_start("Leds animation") #- title of the web page -#
|
|
webserver.content_send_style() #- send standard Tasmota styles -#
|
|
|
|
self.show_main_config()
|
|
self.show_background_color()
|
|
webserver.content_button(webserver.BUTTON_MANAGEMENT) #- button back to management page -#
|
|
|
|
webserver.content_stop() #- end of web page -#
|
|
end
|
|
|
|
#- ---------------------------------------------------------------------- -#
|
|
# respond to web_add_handler() event to register web listeners
|
|
#- ---------------------------------------------------------------------- -#
|
|
#- this is called at Tasmota start-up, as soon as Wifi/Eth is up and web server running -#
|
|
def web_add_handler()
|
|
import webserver
|
|
#- we need to register a closure, not just a function, that captures the current instance -#
|
|
webserver.on("/leds_anim", / -> self.page_view(), webserver.HTTP_GET)
|
|
webserver.on("/leds_anim", / -> self.page_ctl(), webserver.HTTP_POST)
|
|
end
|
|
end
|
|
leds_animation.Leds_animation_UI = Leds_animation_UI
|
|
|
|
|
|
#- create and register driver in Tasmota -#
|
|
if tasmota
|
|
var ui = leds_animation.Leds_animation_UI()
|
|
## can be removed if put in 'autoexec.bat'
|
|
ui.web_add_handler()
|
|
end
|
|
|
|
return leds_animation
|
|
|
|
#- Example
|
|
|
|
import leds_animation
|
|
|
|
-#
|