Last active
June 22, 2024 10:22
-
-
Save Staars/27390040470390b565c241741d8689c6 to your computer and use it in GitHub Desktop.
Test webcam
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class WC | |
def init() | |
import cam | |
cam.setup(7) | |
self.web_add_handler() | |
tasmota.add_driver(self) | |
end | |
def web_add_button() | |
import webserver | |
webserver.content_send( | |
"<form id='webcam_demo' style='display: block;' action='webcam' method='get'><button>Webcam Demo</button></form><p></p>") | |
end | |
def send_image() | |
import webserver | |
import cam | |
var img_buf = cam.get_image() | |
webserver.content_open(200,"image/jpeg") | |
webserver.content_send(img_buf) | |
end | |
####################################################################### | |
# Display the complete page | |
####################################################################### | |
def page_webcam() | |
import webserver | |
import json | |
if !webserver.check_privileged_access() return nil end | |
# regular web page | |
webserver.content_start("Webcam") #- title of the web page -# | |
webserver.content_send_style() #- send standard Tasmota styles -# | |
webserver.content_send("</div><Berry Webcam") | |
webserver.content_send("<p></p></div><br>") #- close .parent div-# | |
webserver.content_send("<img src='cam.jpg' id='rfr' onLoad='setTimeout(eb(\"rfr\").src=\"cam.jpg\"+ \"?\" + new Date().getMilliseconds(),100)'>") | |
webserver.content_button(webserver.BUTTON_MANAGEMENT) #- button back to management page -# | |
webserver.content_stop() #- end of web page -# | |
end | |
####################################################################### | |
# Web Controller, called by POST to `/webcam` | |
####################################################################### | |
def page_webcam_ctl() | |
import webserver | |
if !webserver.check_privileged_access() return nil end | |
try | |
#---------------------------------------------------------------------# | |
# To do. | |
#---------------------------------------------------------------------# | |
if webserver.has_arg("scan") | |
self.page_webcam() | |
else | |
raise "value_error", "Unknown command" | |
end | |
except .. as e, m | |
print(format("BRY: Exception> '%s' - %s", e, m)) | |
#- display error page -# | |
webserver.content_start("Parameter error") #- title of the web page -# | |
webserver.content_send_style() #- send standard Tasmota styles -# | |
webserver.content_send(format("<p style='width:340px;'><b>Exception:</b><br>'%s'<br>%s</p>", e, m)) | |
webserver.content_button(webserver.BUTTON_MANAGEMENT) #- button back to management page -# | |
webserver.content_send("<p></p>") | |
webserver.content_stop() #- end of web page -# | |
end | |
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("/webcam", / -> self.page_webcam(), webserver.HTTP_GET) | |
webserver.on("/webcam", / -> self.page_webcam_ctl(), webserver.HTTP_POST) | |
webserver.on("/cam.jpg", / -> self.send_image(), webserver.HTTP_GET) | |
webserver.on("/cam.jpg", / -> self.send_image(), webserver.HTTP_POST) | |
end | |
end | |
wc = WC() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment