Skip to content

Instantly share code, notes, and snippets.

@Staars
Last active June 22, 2024 10:22
Show Gist options
  • Save Staars/27390040470390b565c241741d8689c6 to your computer and use it in GitHub Desktop.
Save Staars/27390040470390b565c241741d8689c6 to your computer and use it in GitHub Desktop.
Test webcam
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