Esempio n. 1
0
def main():
    oled.init()  #initialze SEEED OLED display
    oled.setNormalDisplay()  #Set display to normal mode (i.e non-inverse mode)
    oled.setHorizontalMode()

    oled.drawImage(Image.open('friendllyelec.png').convert('1'))
    time.sleep(1)

    signal.signal(signal.SIGUSR1, receive_signal)
    signal.signal(signal.SIGUSR2, receive_signal)
    signal.signal(signal.SIGALRM, receive_signal)

    currentView = VnstatView()

    while True:
        try:
            try:
                event = eventQueue.get(True, screenUpdateTime)
                currentView = currentView.processEvent(event)
            except Queue.Empty:
                pass

            # Draw a black filled box to clear the image
            draw.rectangle((0, 0, width, height), outline=0, fill=0)
            currentView.render(draw)
            oled.drawImage(image)
        except KeyboardInterrupt:
            break
        except IOError as e:
            print("Error:", e)

    # Cleanup before exit
    oled.clearDisplay()
Esempio n. 2
0
    def show_date(self, g_vars):
        '''
        Date page - taken from original bakebit script & modified to add TZ
        '''

        g_vars['drawing_in_progress'] = True

        # Clear display prior to painting new item
        self.display_obj.clear_display(g_vars)

        text = time.strftime("%A")
        g_vars['draw'].text((1, 0), text, font=FONT12, fill=255)
        text = time.strftime("%e %b %Y")
        g_vars['draw'].text((1, 13), text, font=FONT12, fill=255)
        text = time.strftime("%X")
        g_vars['draw'].text((1, 26), text, font=FONTB14, fill=255)
        text = time.strftime("%Z")
        g_vars['draw'].text((1, 41), "TZ: " + text, font=FONT12, fill=255)

        # Back button
        self.nav_button_obj.back()

        oled.drawImage(g_vars['image'])

        g_vars['display_state'] = 'page'
        g_vars['drawing_in_progress'] = False
Esempio n. 3
0
def telusSlogan():
    """Prints the Telus slogan"""
    draw.text((27, 1), "TELUS", font=font24b, fill=255)
    draw.text((23, 31), "The Future", font=font14, fill=255)
    draw.text((20, 45), "is Friendly", font=font14, fill=255)
    oled.drawImage(image)
    draw.rectangle((0, 0, width, height), outline=0, fill=0)
Esempio n. 4
0
 def display(self):
     text = "Shut down?"
     draw.text((21, 19), text, font=font14b, fill=255)
     text = "yes"
     draw.text((4, 51), text, font=font10b, fill=255)
     text = "no"
     draw.text((111, 51), text, font=font10b, fill=255)
     oled.drawImage(image)
     draw.rectangle((0, 0, width, height), outline=0, fill=0)
Esempio n. 5
0
 def display(self):
     self._update_data()
     text = "IP: {0}".format(self.ip_addr)
     draw.text((1, 1), text, font=font10b, fill=255)
     text = "Time: {0}".format(self.time)
     draw.text((1, 13), text, font=font10b, fill=255)
     text = "ip"
     draw.text((4, 51), text, font=font10b, fill=255)
     text = "test"
     draw.text((51, 51), text, font=font10b, fill=255)
     text = "sd"
     draw.text((111, 51), text, font=font10b, fill=255)
     oled.drawImage(image)
     draw.rectangle((0, 0, width, height), outline=0, fill=0)
Esempio n. 6
0
    def reboot(self, g_vars):

        self.simple_table_obj.display_dialog_msg(g_vars,
                                                 'Rebooting...',
                                                 back_button_req=0)
        time.sleep(1)

        oled.drawImage(g_vars['reboot_image'])

        g_vars['screen_cleared'] = True

        os.system('systemctl reboot')
        g_vars['shutdown_in_progress'] = True
        return
Esempio n. 7
0
 def display(self):
     if self.state == 0:  # ask user if they want to begin test
         text = "Begin test?"
         draw.text((1, 21), text, font=font14b, fill=255)
         text = "yes"
         draw.text((4, 51), text, font=font10b, fill=255)
         text = "no"
         draw.text((111, 51), text, font=font10b, fill=255)
         oled.drawImage(image)
         draw.rectangle((0, 0, width, height), outline=0, fill=0)
     elif self.state == 1:  # testing
         text = "down: {0}".format(self.down)
         draw.text((1, 1), text, font=font10b, fill=255)
         text = "up: {0}".format(self.up)
         draw.text((1, 13), text, font=font10b, fill=255)
         text = "jitter: {0}".format(self.jitter)
         draw.text((1, 25), text, font=font10b, fill=255)
         oled.drawImage(image)
         draw.rectangle((0, 0, width, height), outline=0, fill=0)
     elif self.state == 2:  # test either stopped or finished
         text = "down: {0}".format(self.down)
         draw.text((1, 1), text, font=font10b, fill=255)
         text = "up: {0}".format(self.up)
         draw.text((1, 13), text, font=font10b, fill=255)
         text = "jitter: {0}".format(self.jitter)
         draw.text((1, 25), text, font=font10b, fill=255)
         text = "ip"
         draw.text((4, 51), text, font=font10b, fill=255)
         text = "test"
         draw.text((51, 51), text, font=font10b, fill=255)
         text = "sd"
         draw.text((111, 51), text, font=font10b, fill=255)
         oled.drawImage(image)
         draw.rectangle((0, 0, width, height), outline=0, fill=0)
def draw_page():
    global drawing
    global image
    global draw
    global oled
    global font
    global font14
    global smartFont
    global width
    global height
    global pageCount
    global pageIndex
    global showPageIndicator
    global width
    global height
    global lock
    global pageSleepCountdown

    lock.acquire()
    is_drawing = drawing
    page_index = pageIndex
    lock.release()

    if is_drawing:
        return

    #if the countdown is zero we should be sleeping (blank the display to reduce screenburn)
    if pageSleepCountdown == 1:
        oled.clearDisplay()
        pageSleepCountdown = pageSleepCountdown - 1
        return

    if pageSleepCountdown == 0:
        return

    pageSleepCountdown = pageSleepCountdown - 1

    lock.acquire()
    drawing = True
    lock.release()

    # Draw a black filled box to clear the image.
    draw.rectangle((0,0,width,height), outline=0, fill=0)
    # Draw current page indicator
    if showPageIndicator:
        dotWidth=4
        dotPadding=2
        dotX=width-dotWidth-1
        dotTop=(height-pageCount*dotWidth-(pageCount-1)*dotPadding)/2
        for i in range(pageCount):
            if i==page_index:
                draw.rectangle((dotX, dotTop, dotX+dotWidth, dotTop+dotWidth), outline=255, fill=255)
            else:
                draw.rectangle((dotX, dotTop, dotX+dotWidth, dotTop+dotWidth), outline=255, fill=0)
            dotTop=dotTop+dotWidth+dotPadding

    if page_index==0:
        text = time.strftime("%a %e %b %Y")
        draw.text((2,2),text,font=font14,fill=255)
        year = time.strftime('%Y')
        now  = time.time()
        start_date = time.mktime(time.strptime(year, '%Y'))
        end_date   = time.mktime(time.strptime(str(int(year)+1), '%Y'))
        percent    = int((now-start_date)/(end_date-start_date)*1000)/10.0
        bar  = int(round(percent/10, 0))
        text = bar * u'\u2593' + (10 - bar) * u'\u2591' + str(percent) + '%'
        draw.text((2,20),text, font=font14,  fill=255)
        text = time.strftime("%X")
        draw.text((8,38),text, font=fontb24, fill=255)
    elif page_index==1:
        # Draw some shapes.
        # First define some constants to allow easy resizing of shapes.
        padding = 2
        top = padding
        bottom = height-padding
        # Move left to right keeping track of the current x position for drawing shapes.
        x = 0
        try:
            IPAddress = get_ip_address('eth0')
        except:
            IPAddress = get_ip()
        cmd = "cat /proc/loadavg| awk '{printf \"CPU Load: %.2f\", $(1)}'"
        CPU = subprocess.check_output(cmd, shell = True ).decode("utf-8", errors="ignore")
        cmd = "free -m | awk 'NR==2{printf \"Mem: %s/%sMB %.1f%%\", int($3/1024),int($2/1024),$3*100/$2 }'"
        MemUsage = subprocess.check_output(cmd, shell = True ).decode("utf-8", errors="ignore")
        cmd = "df -h | awk '$NF==\"/\"{printf \"Disk: %d/%dGB %s\", $3,$2,$5}'"
        Disk = subprocess.check_output(cmd, shell = True ).decode("utf-8", errors="ignore")
        tempI = int(open('/sys/class/thermal/thermal_zone0/temp').read());
        if tempI>1000:
            tempI = tempI/1000
        tempStr = u"CPU TEMP: %s\u00b0C" % int(tempI)

        draw.text((x+2, top),       "IP: " + str(IPAddress),  font=smartFont, fill=255)
        draw.text((x+2, top+12),    str(CPU), font=smartFont, fill=255)
        draw.text((x+2, top+24),    str(MemUsage),  font=smartFont, fill=255)
        draw.text((x+2, top+36),    str(Disk), font=smartFont, fill=255)
        draw.text((x+2, top+48),    tempStr,   font=smartFont, fill=255)
    elif page_index==3: #shutdown -- no
        draw.text((2, 2),  'Shutdown?',  font=fontb14, fill=255)

        draw.rectangle((2,20,width-4,20+16), outline=0, fill=0)
        draw.text((4, 22),  'Yes',  font=font11, fill=255)

        draw.rectangle((2,38,width-4,38+16), outline=0, fill=255)
        draw.text((4, 40),  'No',  font=font11, fill=0)

    elif page_index==4: #shutdown -- yes
        draw.text((2, 2),  'Shutdown?',  font=fontb14, fill=255)

        draw.rectangle((2,20,width-4,20+16), outline=0, fill=255)
        draw.text((4, 22),  'Yes',  font=font11, fill=0)

        draw.rectangle((2,38,width-4,38+16), outline=0, fill=0)
        draw.text((4, 40),  'No',  font=font11, fill=255)

    elif page_index==5:
        draw.text((2, 2),  'Shutting down',  font=fontb14, fill=255)
        draw.text((2, 20),  'Please wait',  font=font11, fill=255)

    oled.drawImage(image)

    lock.acquire()
    drawing = False
    lock.release()
Esempio n. 9
0
 def _shut_down(self):
     """Actual shut down page"""
     draw.rectangle((0, 0, width, height), outline=0, fill=0)
     oled.drawImage(image)
     os.system('sudo poweroff')
Esempio n. 10
0
def draw_page():
    global drawing
    global image
    global draw
    global oled
    global font
    global font14
    global smartFont
    global width
    global height
    global pageCount
    global pageIndex
    global showPageIndicator
    global width
    global height
    global lock
    global pageSleepCountdown

    lock.acquire()
    is_drawing = drawing
    page_index = pageIndex
    lock.release()

    if is_drawing:
        return

    #if the countdown is zero we should be sleeping (blank the display to reduce screenburn)
    if pageSleepCountdown == 0:
        oled.clearDisplay()
        return

    pageSleepCountdown = pageSleepCountdown - 1

    lock.acquire()
    drawing = True
    lock.release()

    # Draw a black filled box to clear the image.
    draw.rectangle((0, 0, width, height), outline=0, fill=0)
    # Draw current page indicator
    if showPageIndicator:
        dotWidth = 4
        dotPadding = 2
        dotX = width - dotWidth - 1
        dotTop = (height - pageCount * dotWidth -
                  (pageCount - 1) * dotPadding) / 2
        for i in range(pageCount):
            if i == page_index:
                draw.rectangle(
                    (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth),
                    outline=255,
                    fill=255)
            else:
                draw.rectangle(
                    (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth),
                    outline=255,
                    fill=0)
            dotTop = dotTop + dotWidth + dotPadding

    # Draw bottom of screen button indicators
    bottomLine = 55  # Define the starting vertical pixel

    if showButtonIndicator:
        draw.text((0, bottomLine), "Home", font=smartFont, fill=255)
        draw.text((50, bottomLine), "Next", font=smartFont, fill=255)
        draw.text((93, bottomLine), "Select", font=smartFont, fill=255)

    if page_index == 0:  # Default page, shows WLANpi version, hostname, and eth0 IP address
        ver = "grep \"WLAN Pi v\" /var/www/html/index.html | sed \"s/<[^>]\+>//g\""  # Pull the version from a file by building the command
        VER = subprocess.check_output(ver,
                                      shell=True)  #  and saving the result
        draw.text((0, 1), str(VER), font=smartFont,
                  fill=255)  #  and then draw it on screen
        HOSTNAME = subprocess.check_output(
            'hostname', shell=True)  # Get the current device hostname
        draw.text((0, 11), str(HOSTNAME), font=font11,
                  fill=255)  #  and then draw it on screen
        draw.text((95, 20), "eth0", font=smartFont, fill=255)
        ip_eth0 = "ip addr show eth0 | grep -Po \'inet \K[\d.]+\'"  # Pull the IP address for eth0 by building the command
        IP_ETH0 = subprocess.check_output(ip_eth0,
                                          shell=True)  #  and saving the result
        draw.text((0, 29), str(IP_ETH0), font=font14,
                  fill=255)  #  and then draw it on screen

    elif page_index == 1:  # Displays IP for usb0, wlan1, and CPU temp
        draw.text((95, 0), "usb0", font=smartFont,
                  fill=255)  # usb0 interface marker
        ip_usb0 = "ip addr show usb0 | grep -Po \'inet \K[\d.]+\'"  # Pull the IP address for usb0 by building the command
        IP_USB0 = subprocess.check_output(ip_usb0,
                                          shell=True)  #  and saving the result
        draw.text((0, 9), str(IP_USB0), font=font14,
                  fill=255)  #  and then draw it on screen

        # This check does not work consistently for wlan1.  The APIPA address takes a long time to appear, and until it does this check will
        #  pass as the path exists.  The address has not always populated, and so the subprocess.check_output function fails
        #  Currently unsure of a fix for this.
        #if os.path.exists('/sys/class/net/wlan1'):                                  # If the directory doesn't exist do not display wlan1
        #    draw.text((95,23),"wlan1",font=smartFont,fill=255)                          # wlan1 interface marker
        #    ip_wlan1 = "ip addr show wlan1 | grep -Po \'inet \K[\d.]+\'"                # Pull the IP address for wlan1 by building the command
        #    IP_WLAN1 = subprocess.check_output(ip_wlan1, shell = True )                 #  and saving the result
        #    draw.text((0,31),str(IP_WLAN1),font=font14,fill=255)                        #  and then draw it on screen
        # Draw some shapes.
        # First define some constants to allow easy resizing of shapes.
        padding = 2
        top = padding
        bottom = height - padding
        # Move left to right keeping track of the current x position for drawing shapes.
        x = 0
        tempI = int(open('/sys/class/thermal/thermal_zone0/temp').read())
        if tempI > 1000:
            tempI = tempI / 1000
        tempStr = "CPU TEMP: %sC" % str(tempI)
        draw.text((x, 40), tempStr, font=font11, fill=255)

    elif page_index == 2:  #shutdown -- yes
        draw.text((2, 2), 'Shutdown?', font=fontb14, fill=255)

        draw.rectangle((2, 20, width - 4, 20 + 16), outline=0, fill=255)
        draw.text((4, 22), 'B3 to confirm', font=font11, fill=0)

        #draw.rectangle((2,38,width-4,38+16), outline=0, fill=0)
        #draw.text((4, 40),  'No',  font=font11, fill=255)

    elif page_index == 3:
        draw.text((2, 2), 'Shutting down', font=fontb14, fill=255)
        draw.text((2, 20), 'Please wait', font=font11, fill=255)

    oled.drawImage(image)

    lock.acquire()
    drawing = False
    lock.release()
Esempio n. 11
0
    def display_paged_table(self, g_vars, table_data, back_button_req=0):
        '''
        This function takes several pages of information and displays on the
        display with appropriate pg up/pg down buttons

        table data is in format:

        data = {
            'title' = 'page title',
            'pages' = [
                    ['Page 1 line 1', Page 1 line 2, 'Page 1 line 3', 'Page 1 line 4'],
                    ['Page 2 line 1', Page 2 line 2, 'Page 2 line 3', 'Page 2 line 4'],
                    ['Page 3 line 1', Page 3 line 2, 'Page 3 line 3', 'Page 3 line 4'],
                    ...etc.
            ]
        }
        '''
        g_vars['drawing_in_progress'] = True
        g_vars['display_state'] = 'page'

        # Clear display prior to painting new item
        self.display_obj.clear_display(g_vars)

        y = 0
        x = 0
        font_offset = 0
        font_size = 11
        item_length_max = 20
        table_display_max = 4

        # write title
        title = table_data['title']
        total_pages = len(table_data['pages'])

        if total_pages > 1:
            title += " ({}/{})".format(g_vars['current_scroll_selection'] + 1,
                                       total_pages)

        g_vars['draw'].text((x, y + font_offset),
                            title.center(item_length_max, " "),
                            font=SMART_FONT,
                            fill=255)

        font_offset += font_size

        # Extract pages data
        table_pages = table_data['pages']
        page_count = len(table_pages)

        # Display the page selected - correct over-shoot of page down
        if g_vars['current_scroll_selection'] == page_count:
            g_vars['current_scroll_selection'] -= 1

        # Correct over-shoot of page up
        if g_vars['current_scroll_selection'] == -1:
            g_vars['current_scroll_selection'] = 0

        page = table_pages[g_vars['current_scroll_selection']]

        # If the page has greater than table_display_max entries, slice it
        if len(page) > table_display_max:
            page = page[0:table_display_max]

        for item in page:

            if len(item) > item_length_max:
                item = item[0:item_length_max]

            g_vars['draw'].text((x, y + font_offset),
                                item,
                                font=SMART_FONT,
                                fill=255)

            font_offset += font_size

        # if we're going need to scroll through pages, create buttons
        if (page_count > 1):

            # if (g_vars['current_scroll_selection'] < page_count) and (g_vars['current_scroll_selection'] < page_count-1):
            if g_vars['current_scroll_selection'] < page_count - 1:
                self.nav_button_obj.down(function="pgdown")

            if (g_vars['current_scroll_selection'] > 0) and (
                    g_vars['current_scroll_selection'] <= page_count - 1):
                self.nav_button_obj.down(function="pgup")

        # Back button
        if back_button_req:
            self.nav_button_obj.back(function="exit")

        oled.drawImage(g_vars['image'])

        g_vars['display_state'] = 'page'
        g_vars['drawing_in_progress'] = False

        return
def draw_page():
    global drawing
    global image
    global draw
    global oled
    global font
    global font14
    global smartFont
    global width
    global height
    global pageCount
    global pageIndex
    global showPageIndicator
    global width
    global height
    global lock

    lock.acquire()
    is_drawing = drawing
    page_index = pageIndex
    lock.release()

    if is_drawing:
        return

    lock.acquire()
    drawing = True
    lock.release()

    # Draw a black filled box to clear the image.
    draw.rectangle((0, 0, width, height), outline=0, fill=0)
    # Draw current page indicator
    if showPageIndicator:
        dotWidth = 4
        dotPadding = 2
        dotX = width - dotWidth - 1
        dotTop = (height - pageCount * dotWidth -
                  (pageCount - 1) * dotPadding) / 2
        for i in range(pageCount):
            if i == page_index:
                draw.rectangle(
                    (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth),
                    outline=255,
                    fill=255)
            else:
                draw.rectangle(
                    (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth),
                    outline=255,
                    fill=0)
            dotTop = dotTop + dotWidth + dotPadding
    if page_index == 0:
        ##ReDesigned by tianyuax
        text = time.strftime("%a %Y/%m/%d")
        draw.text((5, 2), text, font=font14, fill=255)
        text = time.strftime("%X")
        draw.text((6, 20), text, font=fontb24, fill=255)
        yn = time.strftime('%Y')
        t0 = time.mktime(time.strptime(yn, '%Y'))
        t1 = time.mktime(time.strptime(str(int(yn) + 1), '%Y'))
        tn = time.time()
        pt = int((tn - t0) / (t1 - t0) * 10000) / 100.00
        text = str(pt) + "% passed.."
        draw.text((4, 48), text, font=font14, fill=255)
    elif page_index == 1:
        # Draw some shapes.
        # First define some constants to allow easy resizing of shapes.
        padding = 2
        top = padding
        bottom = height - padding
        # Move left to right keeping track of the current x position for drawing shapes.
        x = 0
        IPAddress = get_ip()
        cmd = "top -bn1 | grep load | awk '{printf \"CPU Load: %.2f\", $(NF-2)}'"
        CPU = subprocess.check_output(cmd, shell=True)
        cmd = "free -m | awk 'NR==2{printf \"Mem: %s/%sMB %.2f%%\", $3,$2,$3*100/$2 }'"
        MemUsage = subprocess.check_output(cmd, shell=True)
        cmd = "df -h | awk '$NF==\"/\"{printf \"Disk: %d/%dGB %s\", $3,$2,$5}'"
        Disk = subprocess.check_output(cmd, shell=True)
        tempI = int(open('/sys/class/thermal/thermal_zone0/temp').read())
        if tempI > 1000:
            tempI = tempI / 1000
        tempStr = "CPU TEMP: %sC" % str(tempI)

        draw.text((x, top + 5),
                  "IP: " + str(IPAddress),
                  font=smartFont,
                  fill=255)
        draw.text((x, top + 5 + 12), str(CPU), font=smartFont, fill=255)
        draw.text((x, top + 5 + 24), str(MemUsage), font=smartFont, fill=255)
        draw.text((x, top + 5 + 36), str(Disk), font=smartFont, fill=255)
        draw.text((x, top + 5 + 48), tempStr, font=smartFont, fill=255)
    elif page_index == 3:  #shutdown -- no
        draw.text((2, 2), 'Love me?', font=fontb24, fill=255)

        draw.rectangle((2, 30, width - 4, 30 + 16), outline=0, fill=0)
        draw.text((4, 32), 'Later', font=font12, fill=255)

        draw.rectangle((2, 47, width - 4, 47 + 16), outline=0, fill=255)
        draw.text((4, 49), 'Now', font=font12, fill=0)

    elif page_index == 4:  #shutdown -- yes
        draw.text((2, 2), 'Love me?', font=fontb24, fill=255)

        draw.rectangle((2, 30, width - 4, 30 + 16), outline=0, fill=255)
        draw.text((4, 32), 'Later', font=font12, fill=0)

        draw.rectangle((2, 47, width - 4, 47 + 16), outline=0, fill=0)
        draw.text((4, 49), 'Now', font=font12, fill=255)

    elif page_index == 5:
        draw.text((2, 2), 'Reboot...', font=fontb14, fill=255)
        draw.text((2, 20), 'Please wait', font=font12, fill=255)

    oled.drawImage(image)

    lock.acquire()
    drawing = False
    lock.release()
Esempio n. 13
0
def draw_page():
    global drawing
    global image
    global draw
    global oled
    global font
    global font14
    global smartFont
    global width
    global height
    global pageCount
    global pageIndex
    global showPageIndicator
    global width
    global height
    global lock

    lock.acquire()
    is_drawing = drawing
    page_index = pageIndex
    lock.release()

    if is_drawing:
        return

    lock.acquire()
    drawing = True
    lock.release()

    # Draw a black filled box to clear the image.
    draw.rectangle((0, 0, width, height), outline=0, fill=0)
    # Draw current page indicator
    if showPageIndicator:
        dotWidth = 4
        dotPadding = 2
        dotX = width - dotWidth - 1
        dotTop = (height - pageCount * dotWidth -
                  (pageCount - 1) * dotPadding) / 2
        for i in range(pageCount):
            if i == page_index:
                draw.rectangle(
                    (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth),
                    outline=255,
                    fill=255)
            else:
                draw.rectangle(
                    (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth),
                    outline=255,
                    fill=0)
            dotTop = dotTop + dotWidth + dotPadding

    if page_index == PageIndex.TIME:
        padding = 0
        top = padding

        text = time.strftime("%A")
        draw.text((2, top), text, font=font14, fill=255)
        text = time.strftime("%e %b %Y")
        draw.text((2, top + 16), text, font=font14, fill=255)
        text = time.strftime("%X")
        draw.text((2, top + 38), text, font=fontb24, fill=255)
    elif page_index == PageIndex.STATS:
        # Draw some shapes.
        # First define some constants to allow easy resizing of shapes.
        padding = 1
        top = padding
        bottom = height - padding
        # Move left to right keeping track of the current x position for drawing shapes.
        x = 0
        LANIP = get_lan_ip()
        WANIP = get_wan_ip()
        CPU = get_cpu_usage()
        cmd = "free -m | awk 'NR==2{printf \"Mem: %s/%sMB %.2f%%\", $3,$2,$3*100/$2 }'"
        MemUsage = subprocess.check_output(cmd, shell=True)
        cmd = "df -h | awk '$NF==\"/\"{printf \"Disk: %d/%dGB %s\", $3,$2,$5}'"
        Disk = subprocess.check_output(cmd, shell=True)
        tempI = int(open('/sys/class/thermal/thermal_zone0/temp').read())
        if tempI > 1000:
            tempI = tempI / 1000
        tempStr = "CPU TEMP: %sC" % str(tempI)
        cpuStr = "CPU: {0:.2f} %  {1}C".format(CPU, tempI)

        draw.text((x, top), "LAN: {0}".format(LANIP), font=smartFont, fill=255)
        draw.text((x, top + 12),
                  "WAN: {0}".format(WANIP),
                  font=smartFont,
                  fill=255)
        draw.text((x, top + 24), cpuStr, font=smartFont, fill=255)
        draw.text((x, top + 36), str(MemUsage), font=smartFont, fill=255)
        draw.text((x, top + 48), str(Disk), font=smartFont, fill=255)

    elif page_index == PageIndex.MENU:
        draw.text((4, 22), 'Shutdown?', font=fontb14, fill=255)

    elif page_index == PageIndex.SHUTDOWN_NO:
        draw.text((2, 2), 'Shutdown?', font=fontb14, fill=255)

        draw.rectangle((2, 20, width - 4, 20 + 16), outline=0, fill=0)
        draw.text((4, 22), 'Yes', font=font11, fill=255)

        draw.rectangle((2, 38, width - 4, 38 + 16), outline=0, fill=255)
        draw.text((4, 40), 'No', font=font11, fill=0)

    elif page_index == PageIndex.SHUTDOWN_YES:
        draw.text((2, 2), 'Shutdown?', font=fontb14, fill=255)

        draw.rectangle((2, 20, width - 4, 20 + 16), outline=0, fill=255)
        draw.text((4, 22), 'Yes', font=font11, fill=0)

        draw.rectangle((2, 38, width - 4, 38 + 16), outline=0, fill=0)
        draw.text((4, 40), 'No', font=font11, fill=255)

    elif page_index == PageIndex.SHUTTING_DOWN:
        draw.text((2, 2), 'Shutting down', font=fontb14, fill=255)
        draw.text((2, 20), 'Please wait', font=font11, fill=255)

    oled.drawImage(image)

    lock.acquire()
    drawing = False
    lock.release()
Esempio n. 14
0
def draw_page():
    global drawing
    global image
    global draw
    global oled
    global font
    global font14
    global smartFont
    global width
    global height
    global pageCount
    global pageIndex
    global showPageIndicator
    global width
    global height
    global lock
    global pageSleepCountdown
    global disableTimeSeconds
    global disableCounter
    global status
    global enabledMarkerShownSeconds
    global enabledCounter

    lock.acquire()
    is_drawing = drawing
    page_index = pageIndex
    lock.release()

    if is_drawing:
        return

    if disableCounter > 0:
        disableCounter = disableCounter - 1

    #if the countdown is zero we should be sleeping (blank the display to reduce screenburn)
    if pageSleepCountdown == 1:
        oled.clearDisplay()
        pageSleepCountdown = pageSleepCountdown - 1
        return

    if pageSleepCountdown == 0:
        return

    pageSleepCountdown = pageSleepCountdown - 1

    lock.acquire()
    drawing = True
    lock.release()

    # Draw a black filled box to clear the image.
    draw.rectangle((0, 0, width, height), outline=0, fill=0)
    # Draw current page indicator
    if showPageIndicator:
        dotWidth = 4
        dotPadding = 2
        dotX = width - dotWidth - 1
        dotTop = (height - pageCount * dotWidth -
                  (pageCount - 1) * dotPadding) / 2
        for i in range(pageCount):
            if i == page_index:
                draw.rectangle(
                    (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth),
                    outline=255,
                    fill=255)
            else:
                draw.rectangle(
                    (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth),
                    outline=255,
                    fill=0)
            dotTop = dotTop + dotWidth + dotPadding

    if page_index == 0:
        text = time.strftime("%A")
        draw.text((2, 2), text, font=font14, fill=255)
        text = time.strftime("%e %b %Y")
        draw.text((2, 18), text, font=font14, fill=255)
        text = time.strftime("%X")
        draw.text((2, 40), text, font=fontb24, fill=255)
    elif page_index == 1:
        # Draw some shapes.
        # First define some constants to allow easy resizing of shapes.
        padding = 2
        top = padding
        bottom = height - padding
        # Move left to right keeping track of the current x position for drawing shapes.
        x = 0
        try:
            IPAddress = get_ip_address('eth0')
        except:
            IPAddress = get_ip()
        cmd = "top -bn1 | grep load | awk '{printf \"CPU Load: %.2f\", $(NF-2)}'"
        CPU = subprocess.check_output(cmd, shell=True)
        cmd = "free -m | awk 'NR==2{printf \"Mem: %s/%sMB %.2f%%\", $3,$2,$3*100/$2 }'"
        MemUsage = subprocess.check_output(cmd, shell=True)
        cmd = "df -h | awk '$NF==\"/\"{printf \"Disk: %d/%dGB %s\", $3,$2,$5}'"
        Disk = subprocess.check_output(cmd, shell=True)
        tempI = int(open('/sys/class/thermal/thermal_zone0/temp').read())
        if tempI > 1000:
            tempI = tempI / 1000
        tempStr = "CPU TEMP: %sC" % str(tempI)
        cmd = "curl -f -s http://127.0.0.1/admin/api.php | jq .dns_queries_today"
        Queries = subprocess.check_output(cmd, shell=True).strip()
        cmd = "curl -f -s http://127.0.0.1/admin/api.php | jq .ads_blocked_today"
        AdsToday = subprocess.check_output(cmd, shell=True).strip()
        cmd = "curl -f -s http://127.0.0.1/admin/api.php | jq .ads_percentage_today"
        AdsPercentage = subprocess.check_output(cmd, shell=True).strip()
        cmd = "curl -f -s http://127.0.0.1/admin/api.php | jq .clients_ever_seen"
        ClientsEver = subprocess.check_output(cmd, shell=True).strip()
        cmd = "curl -f -s http://127.0.0.1/admin/api.php | jq .unique_clients"
        ClientsUnique = subprocess.check_output(cmd, shell=True).strip()

        draw.text((x, top + 2),
                  "IP: " + str(IPAddress),
                  font=smartFont,
                  fill=255)
        draw.text((x, top + 2 + 12),
                  "Queries: " + str(Queries),
                  font=smartFont,
                  fill=255)
        draw.text((x, top + 2 + 24),
                  "Blocked: " + str(AdsToday),
                  font=smartFont,
                  fill=255)
        draw.text((x, top + 2 + 36),
                  "Percent: " + str(AdsPercentage),
                  font=smartFont,
                  fill=255)
        draw.text((x, top + 2 + 48),
                  "Clients: " + str(ClientsUnique),
                  font=smartFont,
                  fill=255)
    elif page_index == 3:  #Disable Pi-Hole for some senconds? -- no
        draw.text(
            (2, 2),
            'Disable ' + str(int(float(disableTimeSeconds) / 60)) + 'min?',
            font=fontb14,
            fill=255)

        draw.rectangle((2, 20, width - 4, 20 + 16), outline=0, fill=0)
        draw.text((4, 22), 'Yes', font=font11, fill=255)

        draw.rectangle((2, 38, width - 4, 38 + 16), outline=0, fill=255)
        draw.text((4, 40), 'No', font=font11, fill=0)

    elif page_index == 4:  #Disable Pi-Hole for some senconds? -- yes
        draw.text(
            (2, 2),
            'Disable ' + str(int(float(disableTimeSeconds) / 60)) + 'min?',
            font=fontb14,
            fill=255)

        draw.rectangle((2, 20, width - 4, 20 + 16), outline=0, fill=255)
        draw.text((4, 22), 'Yes', font=font11, fill=0)

        draw.rectangle((2, 38, width - 4, 38 + 16), outline=0, fill=0)
        draw.text((4, 40), 'No', font=font11, fill=255)

    elif page_index == 5:
        cmd = "curl -f -s http://127.0.0.1/admin/api.php | jq .status"
        status = subprocess.check_output(cmd, shell=True).strip()
        if str(status) == "\"disabled\"":
            enabledCounter = 0
            draw.text((2, 2), 'Disabled', font=fontb14, fill=255)
            if disableCounter > 0:
                draw.text((2, 20),
                          str(datetime.timedelta(seconds=disableCounter)),
                          font=fontb24,
                          fill=255)
                draw.rectangle(
                    (2, 47,
                     int(
                         float(width - 4) *
                         (float(disableCounter) / float(disableTimeSeconds))),
                     47 + 15),
                    outline=0,
                    fill=255)
        elif str(status) == "\"enabled\"":
            disableCounter = 0
            draw.text((2, 2), 'Enabled', font=fontb14, fill=255)
            if enabledCounter < enabledMarkerShownSeconds:
                enabledCounter = enabledCounter + 1
            else:
                enabledCounter = 0
                update_page_index(1)
        else:
            draw.text((2, 2), 'Disabled', font=fontb14, fill=255)

    oled.drawImage(image)

    lock.acquire()
    drawing = False
    lock.release()
Esempio n. 15
0
def receive_signal(signum, stack):
    global pageIndex
    global pageSleepCountdown
    global pageSleep

    lock.acquire()
    page_index = pageIndex
    lock.release()

    if page_index==5:
        return

    if signum == signal.SIGUSR1:
        print ('K1 pressed')
        if is_showing_power_msgbox(): # If Power Menu Open
            if page_index==3: # Shutdown - no
                update_page_index(4)
            else:
                update_page_index(3)
            draw_page()
        else:
            if page_index==0 and pageSleepCountdown>0: # Home
                update_page_index(6)
            else:
                pageIndex=0
        draw_page()

    if signum == signal.SIGUSR2:
        print ('K2 pressed')
        if is_showing_power_msgbox(): # If Power Menu Open
            if page_index==4: # Shutdown
                update_page_index(5)
            else:
                update_page_index(0)
            draw_page()
        elif is_showing_wifi_msgbox(): # If Wifi Menu Open
            if page_index==6: # Change Wifi to Wifi Client
                update_page_index(9)
            elif page_index==7: # Change Wifi to Hotspot
                update_page_index(10)
            elif page_index==8: # Change Wifi NanoGate
                update_page_index(11)
            else:
                update_page_index(0)
            draw_page()
        elif page_index==1 and pageSleepCountdown>0:
            update_page_index(12)
            draw_page()
        elif page_index==12 and pageSleepCountdown>0:
            image1 = Image.open('shelly_guide_oled.png').convert('1')
            oled.drawImage(image1)
            time.sleep(5)
        else:
            update_page_index(1)
        draw_page()

    if signum == signal.SIGALRM:
        print ('K3 pressed')
        if is_showing_power_msgbox(): # If Power Menu Open
            update_page_index(0)
            draw_page()
        elif is_showing_wifi_msgbox(): # If Wifi Menu Open
            if page_index==6: # Wifi Client
                update_page_index(7)
            elif page_index==7: # Hotspot
                update_page_index(8)
            elif page_index==8: # NanoGate
                update_page_index(6)
            draw_page()
        elif  pageSleepCountdown>0:
            update_page_index(3)
            draw_page()
        else:
            update_page_index(0)
        draw_page()

    pageSleepCountdown = pageSleep #user pressed a button, reset the sleep counter
Esempio n. 16
0
def draw_page():
    global drawing
    global image
    global draw
    global oled
    global font
    global font14
    global smartFont
    global width
    global height
    global pageCount
    global pageIndex
    global showPageIndicator
    global width
    global height
    global lock

    lock.acquire()
    is_drawing = drawing
    page_index = pageIndex
    lock.release()

    if is_drawing:
        return

    lock.acquire()
    drawing = True
    lock.release()

    # Draw a black filled box to clear the image.
    draw.rectangle((0, 0, width, height), outline=0, fill=0)
    # Draw current page indicator
    if showPageIndicator:
        dotWidth = 4
        dotPadding = 2
        dotX = width - dotWidth - 1
        dotTop = (height - pageCount * dotWidth -
                  (pageCount - 1) * dotPadding) / 2
        for i in range(pageCount):
            if i == page_index:
                draw.rectangle(
                    (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth),
                    outline=255,
                    fill=255)
            else:
                draw.rectangle(
                    (dotX, dotTop, dotX + dotWidth, dotTop + dotWidth),
                    outline=255,
                    fill=0)
            dotTop = dotTop + dotWidth + dotPadding

    if page_index == 0:
        text = time.strftime("%A")
        draw.text((2, 2), text, font=font14, fill=255)
        text = time.strftime("%e %b %Y")
        draw.text((2, 18), text, font=font14, fill=255)
        text = time.strftime("%X")
        draw.text((2, 40), text, font=fontb24, fill=255)
    elif page_index == 1:
        # Draw some shapes.
        # First define some constants to allow easy resizing of shapes.
        padding = 2
        top = padding
        bottom = height - padding
        # Move left to right keeping track of the current x position for drawing shapes.
        x = 0
        cmd = "hostname -I | cut -d\' \' -f1"
        IP = subprocess.check_output(cmd, shell=True)
        cmd = "top -bn1 | grep load | awk '{printf \"CPU Load: %.2f\", $(NF-2)}'"
        CPU = subprocess.check_output(cmd, shell=True)
        cmd = "free -m | awk 'NR==2{printf \"Mem: %s/%sMB %.2f%%\", $3,$2,$3*100/$2 }'"
        MemUsage = subprocess.check_output(cmd, shell=True)
        cmd = "df -h | awk '$NF==\"/\"{printf \"Disk: %d/%dGB %s\", $3,$2,$5}'"
        Disk = subprocess.check_output(cmd, shell=True)
        tempI = int(open('/sys/class/thermal/thermal_zone0/temp').read())
        if tempI > 1000:
            tempI = tempI / 1000
        tempStr = "CPU TEMP: %sC" % str(tempI)
        draw.text((x, top + 5), "IP: " + str(IP), font=smartFont, fill=255)
        draw.text((x, top + 5 + 12), str(CPU), font=smartFont, fill=255)
        draw.text((x, top + 5 + 24), str(MemUsage), font=smartFont, fill=255)
        draw.text((x, top + 5 + 36), str(Disk), font=smartFont, fill=255)
        draw.text((x, top + 5 + 48), tempStr, font=smartFont, fill=255)
    elif page_index == 3:  #shutdown -- no
        draw.text((2, 2), 'Shutdown?', font=fontb14, fill=255)

        draw.rectangle((2, 20, width - 4, 20 + 16), outline=0, fill=0)
        draw.text((4, 22), 'Yes', font=font11, fill=255)

        draw.rectangle((2, 38, width - 4, 38 + 16), outline=0, fill=255)
        draw.text((4, 40), 'No', font=font11, fill=0)

    elif page_index == 4:  #shutdown -- yes
        draw.text((2, 2), 'Shutdown?', font=fontb14, fill=255)

        draw.rectangle((2, 20, width - 4, 20 + 16), outline=0, fill=255)
        draw.text((4, 22), 'Yes', font=font11, fill=0)

        draw.rectangle((2, 38, width - 4, 38 + 16), outline=0, fill=0)
        draw.text((4, 40), 'No', font=font11, fill=255)

    elif page_index == 5:
        draw.text((2, 2), 'Shutting down', font=fontb14, fill=255)
        draw.text((2, 20), 'Please wait', font=font11, fill=255)

    oled.drawImage(image)

    lock.acquire()
    drawing = False
    lock.release()
Esempio n. 17
0
    def display_simple_table(self,
                             g_vars,
                             item_list,
                             back_button_req=0,
                             title='',
                             font="small"):
        '''
        This function takes a list and paints each entry as a line on a
        page. It also displays appropriate up/down scroll buttons if the
        entries passed exceed a page length (one line at a time)
        '''

        g_vars['drawing_in_progress'] = True
        g_vars['display_state'] = 'page'

        # Clear display prior to painting new item
        self.display_obj.clear_display(g_vars)

        y = 0
        x = 0
        font_offset = 0

        if font == "small":
            font_type = SMART_FONT
            font_size = 11
            item_length_max = 20
            table_display_max = 5
        elif font == "medium":
            font_type = FONT11
            font_size = 11
            item_length_max = 17
            table_display_max = 4

        # write title if present
        if title != '':
            g_vars['draw'].text((x, y + font_offset),
                                title.center(item_length_max, " "),
                                font=font_type,
                                fill=255)
            font_offset += font_size
            table_display_max -= 1

        previous_table_list_length = g_vars['table_list_length']
        g_vars['table_list_length'] = len(item_list)

        # if table length changes, reset current scroll selection
        # e.g. when showing lldp table info and eth cable
        # pulled so list size changes
        if g_vars['table_list_length'] != previous_table_list_length:
            g_vars['current_scroll_selection'] = 0

        # if we're going to scroll of the end of the list, adjust pointer
        if g_vars['current_scroll_selection'] + table_display_max > g_vars[
                'table_list_length']:
            g_vars['current_scroll_selection'] -= 1

        # modify list to display if scrolling required
        if g_vars['table_list_length'] > table_display_max:

            table_bottom_entry = g_vars[
                'current_scroll_selection'] + table_display_max
            item_list = item_list[
                g_vars['current_scroll_selection']:table_bottom_entry]

            # show down if not at end of list in display window
            if table_bottom_entry < g_vars['table_list_length']:
                self.nav_button_obj.down()

            # show an up button if not at start of list
            if g_vars['current_scroll_selection'] > 0:
                self.nav_button_obj.next(function="up")

        for item in item_list:

            if len(item) > item_length_max:
                item = item[0:item_length_max]

            self.draw.text((x, y + font_offset),
                           item,
                           font=font_type,
                           fill=255)

            font_offset += font_size

        # Back button
        if back_button_req:
            self.nav_button_obj.back(function="exit")

        oled.drawImage(g_vars['image'])

        g_vars['display_state'] = 'page'
        g_vars['drawing_in_progress'] = False

        return
Esempio n. 18
0
def draw_page():
    global drawing
    global image
    global draw
    global oled
    global font
    global font14
    global smartFont
    global width
    global height
    global pageCount
    global pageIndex
    global showPageIndicator
    global width
    global height
    global lock
    global pageSleepCountdown
    global os

    lock.acquire()
    is_drawing = drawing
    page_index = pageIndex
    lock.release()

    if is_drawing:
        return

    #if the countdown is zero we should be sleeping (blank the display to reduce screenburn)
    if pageSleepCountdown == 1:
        oled.clearDisplay()
        pageSleepCountdown = pageSleepCountdown - 1
        return

    if pageSleepCountdown == 0:
        return

    pageSleepCountdown = pageSleepCountdown - 1

    lock.acquire()
    drawing = True
    lock.release()

    # Draw a black filled box to clear the image.            
    draw.rectangle((0,0,width,height), outline=0, fill=0)
    # Draw current page indicator
    if showPageIndicator:
        dotWidth=4
        dotPadding=2
        dotX=width-dotWidth-1
        dotTop=(height-pageCount*dotWidth-(pageCount-1)*dotPadding)/2
        for i in range(pageCount):
            if i==page_index:
                draw.rectangle((dotX, dotTop, dotX+dotWidth, dotTop+dotWidth), outline=255, fill=255)
            else:
                draw.rectangle((dotX, dotTop, dotX+dotWidth, dotTop+dotWidth), outline=255, fill=0)
            dotTop=dotTop+dotWidth+dotPadding

    # Draw Home

    if page_index==0:
        text = time.strftime("%e %b %Y")
        draw.text((2,2),text,font=font14,fill=255)
        text = time.strftime("%X")
        draw.text((2,20),text,font=fontb24,fill=255)
        cmd = "wstat"
        wstat = subprocess.check_output(cmd, shell = True )
        draw.text((2,48),str(wstat, encoding='utf-8', errors='ignore'),font=font14,fill=255)

    # Draw Settings

    elif page_index==1:
        # Draw some shapes.
        # First define some constants to allow easy resizing of shapes.
        padding = 2
        top = padding
        bottom = height-padding
        # Move left to right keeping track of the current x position for drawing shapes.
        x = 0
        cmd = "ip a | grep wlan0 | grep inet | awk '{print $2}' | rev | cut -c4- | rev"
        IPAddress = subprocess.check_output(cmd, shell = True )
        cmd = "top -bn1 | grep load | awk '{printf \"CPU Load: %.2f\", $(NF-2)}'"
        CPU = subprocess.check_output(cmd, shell = True )
        cmd = "free -m | awk 'NR==2{printf \"Mem: %s/%sMB %.2f%%\", $3,$2,$3*100/$2 }'"
        MemUsage = subprocess.check_output(cmd, shell = True )
        cmd = "df -h | awk '$NF==\"/\"{printf \"Disk: %d/%dGB %s\", $3,$2,$5}'"
        Disk = subprocess.check_output(cmd, shell = True )
        tempI = int(open('/sys/class/thermal/thermal_zone0/temp').read());
        if tempI>1000:
            tempI = tempI/1000
        tempStr = "CPU TEMP: %sC" % str(tempI)

        draw.text((x, top+2),       "IP: " + str(IPAddress, encoding='utf-8', errors='ignore'),  font=smartFont, fill=255)
        draw.text((x, top+2+12),    str(CPU, encoding='utf-8', errors='ignore'), font=smartFont, fill=255)
        draw.text((x, top+2+24),    str(MemUsage, encoding='utf-8', errors='ignore'),  font=smartFont, fill=255)
        draw.text((x, top+2+36),    str(Disk, encoding='utf-8', errors='ignore'),  font=smartFont, fill=255)
        draw.text((x, top+2+48),    tempStr,  font=smartFont, fill=255)

    # Draw Shutdown -- no

    elif page_index==3:
        draw.text((2, 2),  'Shutdown?',  font=fontb14, fill=255)

        draw.rectangle((2,20,width-4,20+16), outline=0, fill=0)
        draw.text((4, 22),  'Yes',  font=font11, fill=255)

        draw.rectangle((2,38,width-4,38+16), outline=0, fill=255)
        draw.text((4, 40),  'No',  font=font11, fill=0)

    # Draw Shutdown -- yes

    elif page_index==4:
        draw.text((2, 2),  'Shutdown?',  font=fontb14, fill=255)

        draw.rectangle((2,20,width-4,20+16), outline=0, fill=255)
        draw.text((4, 22),  'Yes',  font=font11, fill=0)

        draw.rectangle((2,38,width-4,38+16), outline=0, fill=0)
        draw.text((4, 40),  'No',  font=font11, fill=255)

    # Draw Shutdown Message

    elif page_index==5:
        draw.text((2, 2),  'Shutting down',  font=fontb14, fill=255)
        draw.text((2, 22),  'Please wait...',  font=font11, fill=255)

    # Draw Change Wifi - Wifi Client

    elif page_index==6: 
        draw.text((2, 2),  'Wifi Mode',  font=fontb14, fill=255)

        draw.rectangle((2,18,width-4,18+16), outline=0, fill=255)
        draw.text((4, 20),  'Wifi Client',  font=smartFont, fill=0)

        draw.rectangle((2,32,width-4,32+16), outline=0, fill=0)
        draw.text((4, 34),  'Hotspot',  font=smartFont, fill=255)
        
        draw.rectangle((2,46,width-4,46+16), outline=0, fill=0)
        draw.text((4, 48),  'NanoGate',  font=smartFont, fill=255)

    # Draw Chang Wifi - Hotspot

    elif page_index==7:
        draw.text((2, 2),  'Wifi Mode',  font=fontb14, fill=255)

        draw.rectangle((2,18,width-4,18+16), outline=0, fill=0)
        draw.text((4, 20),  'Wifi Client',  font=smartFont, fill=255)

        draw.rectangle((2,32,width-4,32+16), outline=0, fill=255)
        draw.text((4, 34),  'Hotspot',  font=smartFont, fill=0)
        
        draw.rectangle((2,46,width-4,46+16), outline=0, fill=0)
        draw.text((4, 48),  'NanoGate',  font=smartFont, fill=255)

    # Draw Chang Wifi - NanoGate

    elif page_index==8:
        draw.text((2, 2),  'Wifi Mode',  font=fontb14, fill=255)

        draw.rectangle((2,18,width-4,18+16), outline=0, fill=0)
        draw.text((4, 20),  'Wifi Client',  font=smartFont, fill=255)

        draw.rectangle((2,32,width-4,32+16), outline=0, fill=0)
        draw.text((4, 34),  'Hotspot',  font=smartFont, fill=255)
        
        draw.rectangle((2,46,width-4,46+16), outline=0, fill=255)
        draw.text((4, 48),  'NanoGate',  font=smartFont, fill=0)

    # Draw Change to Wifi Client
 
    elif page_index==9:
        draw.text((2, 2),  'Wifi Client',  font=fontb14, fill=255)
        draw.text((2, 22),  'Please wait...',  font=font11, fill=255)

    # Draw Change to Hotspot
 
    elif page_index==10:
        draw.text((2, 2),  'Hotspot',  font=fontb14, fill=255)
        draw.text((2, 22),  'Please wait...',  font=font11, fill=255)

    # Draw Change to NanoGate
 
    elif page_index==11:
        draw.text((2, 2),  'NanoGate',  font=fontb14, fill=255)
        draw.text((2, 22),  'Please wait...',  font=font11, fill=255)

    # Draw DHCP Leases

    elif page_index==12:
        draw.text((2, 2),  'Last 4 DHCP Leases',  font=font11, fill=255) 

        os.system('ldhcp')
	
        cmd = "sed -n 1p /tmp/dhcp.list"
        txt = subprocess.check_output(cmd, shell = True)
        draw.text((2, 16),  str(txt, encoding='utf-8', errors='ignore'),  font=smartFont, fill=255)

        cmd = "sed -n 2p /tmp/dhcp.list"
        txt = subprocess.check_output(cmd, shell = True)
        draw.text((2, 28),  str(txt, encoding='utf-8', errors='ignore'),  font=smartFont, fill=255)

        cmd = "sed -n 3p /tmp/dhcp.list"
        txt = subprocess.check_output(cmd, shell = True)
        draw.text((2, 40),  str(txt, encoding='utf-8', errors='ignore'),  font=smartFont, fill=255)

        cmd = "sed -n 4p /tmp/dhcp.list"
        txt = subprocess.check_output(cmd, shell = True)
        draw.text((2, 52),  str(txt, encoding='utf-8', errors='ignore'),  font=smartFont, fill=255)


    oled.drawImage(image)

    lock.acquire()
    drawing = False
    lock.release()
Esempio n. 19
0
def draw_page():
    global drawing
    global image
    global draw
    global oled
    global smartFont
    global width
    global height
    global scriptPath
    global scriptIndex
    global displayBeginIndex
    global width
    global height
    global lock
    global triggerExecution
    global scriptOutput
    global runningSubprocess
    global subprocessQueue
    global subprocessReadThread

    lock.acquire()
    is_drawing = drawing
    lock.release()

    if is_drawing:
        return

    lock.acquire()
    drawing = True
    scriptIndexDrawing = scriptIndex
    lock.release()

    draw.rectangle((0, 0, width, height), outline=0, fill=0)  #clear img
    if (not os.path.isdir(scriptPath)):
        draw.text((0, 0), 'Script Path not Found!', font=smartFont, fill=255)
        draw.text((0, 12), scriptPath, font=smartFont, fill=255)
    else:
        scriptsInPath = os.listdir(scriptPath)
        if (scriptPath != scriptRootPath):
            scriptsInPath.insert(0, '..')
        filesCount = len(scriptsInPath)
        scriptsInPath.sort()  #list and sort file
        scriptIndexDrawingPrev = scriptIndexDrawing
        if (filesCount == 0):
            scriptIndexDrawing = 0
        elif (scriptIndexDrawing < 0):
            scriptIndexDrawing += filesCount
        elif (scriptIndexDrawing >= filesCount):
            scriptIndexDrawing -= filesCount
        if (scriptIndexDrawing != scriptIndexDrawingPrev
            ):  #write value back if there is any change
            lock.acquire()
            scriptIndex = scriptIndexDrawing
            lock.release()

        displayIndex = scriptIndexDrawing + 1
        if (filesCount == 0):
            displayIndex = 0
            displayBeginIndex = 0

        #for file in scriptsInPath:
        #    print file
        if (scriptIndexDrawing <
                len(scriptsInPath)):  #scriptsInPath may be empty
            fileSelected = scriptPath + scriptsInPath[scriptIndexDrawing]
        else:
            fileSelected = ""
        fileTypeString = 'Script: '
        if os.path.isdir(fileSelected):
            fileTypeString = 'Folder: '
        draw.text(
            (0, 0),
            fileTypeString + str(displayIndex) + ' of ' + str(filesCount),
            font=smartFont,
            fill=255)
        draw.line((0, 12, 127, 12), fill=255)

        if (filesCount > 0):  #checkdisplayEntry
            if (scriptIndexDrawing < displayBeginIndex):
                displayBeginIndex = scriptIndexDrawing
            if (scriptIndexDrawing > displayBeginIndex + 2):
                displayBeginIndex = scriptIndexDrawing - 2
        itemDisplaying = 3
        if (filesCount < 3):
            itemDisplaying = filesCount
            displayBeginIndex = 0
        try:
            for i in range(
                    itemDisplaying):  #displayEntry from displayBeginIndex
                fillColor = 255
                index = displayBeginIndex + i
                if (scriptIndexDrawing == index):
                    fillColor = 0
                    draw.rectangle(
                        (0, 13 + 12 * i - 1, width, 13 + 12 * i + 12),
                        outline=0,
                        fill=255)
                    if (runningSubprocess is not None):
                        if (runningSubprocess.poll() == None):
                            draw.rectangle((width - 10, 13 + 12 * i - 1 + 2,
                                            width - 2, 13 + 12 * i + 12 - 2),
                                           outline=0,
                                           fill=0)
                draw.text((1, 13 + 12 * i),
                          scriptsInPath[index],
                          font=smartFont,
                          fill=fillColor)
        except:
            pass  #something edit script alive may cause array out of bound error

        draw.line((0, 49, 127, 49), fill=255)

        #check running script, this will be triggered as soon as the process prints, enqueue_output called
        if (runningSubprocess is not None):
            while True:
                try:
                    line = subprocessQueue.get_nowait()  # or q.get(timeout=.1)
                except Queue.Empty:
                    #print('no output yet')
                    break
                else:  # got line
                    line = line.strip()
                    scriptOutput = line
                    #print scriptOutput + str(time.time())

        draw.text((1, 13 + 12 * 3 + 1), scriptOutput, font=smartFont, fill=255)

        #check script execution
        needToExecute = False
        lock.acquire()
        needToExecute = triggerExecution
        if (triggerExecution):
            triggerExecution = False
        lock.release()
        if ((filesCount > 0) and (needToExecute == True)):
            if (runningSubprocess is not None):
                if (runningSubprocess.poll() == None):
                    print 'Kill previous running script'
                    runningSubprocess.kill()
            print 'Execute : ' + fileSelected
            if os.path.isdir(fileSelected):
                scriptPath = os.path.abspath(fileSelected) + '/'
                scriptIndex = 0
            else:
                try:
                    runningSubprocess = subprocess.Popen(
                        fileSelected,
                        shell=False,
                        stdout=subprocess.PIPE,
                        stderr=subprocess.STDOUT,
                        bufsize=1,
                        close_fds=ON_POSIX)
                    subprocessReadThread = threading.Thread(
                        target=enqueue_output,
                        args=(runningSubprocess.stdout, subprocessQueue))
                    subprocessReadThread.daemon = True  # thread dies with the program
                    subprocessReadThread.start()
                except Exception as e:
                    print('Popen error occured.')
                    print(e)

    oled.drawImage(image)

    lock.acquire()
    drawing = False
    lock.release()
Esempio n. 20
0
def receive_signal(signum, stack):
    global pageIndex
    global pageSleepCountdown
    global pageSleep
    global disableTimeSeconds
    global disableCounter
    global status

    if pageSleepCountdown == 0:
        image1 = Image.open('pihole.png').convert('1')
        oled.drawImage(image1)
        time.sleep(0.5)

    pageSleepCountdown = pageSleep  #user pressed a button, reset the sleep counter

    lock.acquire()
    page_index = pageIndex
    lock.release()

    #if page_index==5:
    #    return

    if signum == signal.SIGUSR1:
        print 'K1 pressed'
        if is_showing_disable_msgbox():
            if page_index == 3:
                update_page_index(4)
            else:
                update_page_index(3)
            draw_page()
        else:
            pageIndex = 0
            draw_page()

    if signum == signal.SIGUSR2:
        print 'K2 pressed'
        if is_showing_disable_msgbox():
            if page_index == 4:
                cmd = "curl -f -s \"http://127.0.0.1/admin/api.php?disable=" + str(
                    disableTimeSeconds
                ) + "&auth=$(docker exec -i pihole grep -oPi \"(?<=WEBPASSWORD\=).+\" /etc/pihole/setupVars.conf)\" | jq .status"
                status = subprocess.check_output(cmd, shell=True)
                lock.acquire()
                disableCounter = disableTimeSeconds
                lock.release()
                update_page_index(5)
                draw_page()
            else:
                update_page_index(0)
                draw_page()
        else:
            update_page_index(1)
            draw_page()

    if signum == signal.SIGALRM:
        print 'K3 pressed'
        cmd = "curl -f -s http://127.0.0.1/admin/api.php | jq .status"
        status = subprocess.check_output(cmd, shell=True).strip()
        if str(status) == "\"disabled\"":
            enabledCounter = 0
            update_page_index(5)
            draw_page()
        elif is_showing_disable_msgbox():
            update_page_index(0)
            draw_page()
        else:
            update_page_index(3)
            draw_page()
Esempio n. 21
0
    logo_disment = 1
    # 画布
    image_background = Image.new('1', (width, height))
    # Get drawing object to draw on image.
    font = ImageFont.load_default()
    draw = ImageDraw.Draw(image_background)
    # Load default font.


    # Alternatively load a TTF font.  Make sure the .ttf font file is in the same directory as the python script!
    # Some other nice fonts to try: http://www.dafont.com/bitmap.php
    # font = ImageFont.truetype('Minecraftia.ttf', 8)

    # 图标分割线
    draw.line((0, logo_y + 1, width, logo_y + 1), fill=128)
    oled.drawImage(image_background)
    time.sleep(10)
    #
    # # 2.4G&5.8G 1.5G 探测/寻向 无人机 远程 定位
    # #    1      2      3  4    5    6    7
    # image_return = Image.open('./logo/return.jpg').convert('1').resize((logo_x, logo_y))
    # image_gps = Image.open('./logo/gps.jpg').convert('1').resize((logo_x, logo_y))
    # image_search = Image.open('./logo/search.jpg').convert('1').resize((logo_x, logo_y))
    # image_position = Image.open('./logo/position.jpg').convert('1').resize((logo_x, logo_y))
    # image_uav = Image.open('./logo/UAV.jpg').convert('1').resize((logo_x, logo_y))
    # image_remote = Image.open('./logo/remote.jpg').convert('1').resize((logo_x, logo_y))
    # image_location = Image.open('./logo/location.jpg').convert('1').resize((logo_x, logo_y))
    # # 图标横幅
    # logo_image = [image_return, image_gps, image_search, image_position, image_uav, image_remote, image_location]
    #
#weibo
def send_flag(client):
    weibo.send_message(client, Flag)


def send_countdown(client, year, num):
    weibo.send_pic(client,
                   str(year) + Countdown_Words + str(num) + "%",
                   Countdown_Picpath)


#image

image0 = Image.open(Welcome_Picpath).convert('1')
oled.drawImage(image0)

time.sleep(2)

signal.signal(signal.SIGUSR1, receive_signal)
signal.signal(signal.SIGUSR2, receive_signal)
signal.signal(signal.SIGALRM, receive_signal)

#weibo
client = weibo.init_login()
time.sleep(10)
send_flag(client)

while True:
    try:
        draw_page()
Esempio n. 23
0
    def home_page(self, g_vars, menu):

        ethtool_file = ETHTOOL_FILE

        g_vars['drawing_in_progress'] = True
        g_vars['display_state'] = 'page'

        if g_vars['current_mode'] == "wconsole":
            # get wlan0 IP
            if_name = "wlan0"
            mode_name = "Wi-Fi Console"

        elif g_vars['current_mode'] == "hotspot":
            # get wlan0 IP
            if_name = "wlan0"
            mode_name = "Hotspot " + self.wifi_client_count() + " clients"

        elif g_vars['current_mode'] == "wiperf":
            # get wlan0 IP
            if_name = "wlan0"
            mode_name = "Wiperf" + self.check_wiperf_status()

        else:
            # get eth0 IP
            if_name = "eth0"
            mode_name = ""

            # get Ethernet port info (...for Jerry)
            try:
                eth_info = subprocess.check_output(
                    '{} eth0 2>/dev/null'.format(ethtool_file),
                    shell=True).decode()
                speed_re = re.findall(r'Speed\: (.*\/s)', eth_info,
                                      re.MULTILINE)
                duplex_re = re.findall(r'Duplex\: (.*)', eth_info,
                                       re.MULTILINE)
                link_re = re.findall(r'Link detected\: (.*)', eth_info,
                                     re.MULTILINE)

                if (speed_re is None) or (duplex_re is None) or (link_re is
                                                                 None):
                    # Our pattern matching failed...silently fail....we must set up logging at some stage
                    mode_name = ""
                elif (link_re[0] == "no"):
                    # Ethernet link is down, report msg instead of speed & duplex
                    mode_name = "Link down"
                else:
                    # Report the speed & duplex messages from ethtool
                    mode_name = "{} {}".format(speed_re[0], duplex_re[0])

            except Exception as ex:
                # Something went wrong...show nothing
                mode_name = ""

            # If eth0 is down, lets show the usb0 IP address
            # in case anyone uses OTG conection & is confused
            if mode_name == "Link down":
                if_name = "usb0"
                mode_name = ""

        ip_addr_cmd = "ip addr show {}  2>/dev/null | grep -Po \'inet \K[\d.]+\' | head -n 1".format(
            if_name)

        try:
            ip_addr = subprocess.check_output(ip_addr_cmd, shell=True).decode()
        except Exception as ex:
            ip_addr = "No IP Addr"

        self.display_obj.clear_display(g_vars)
        g_vars['draw'].text((0, 1),
                            str(g_vars['wlanpi_ver']),
                            font=SMART_FONT,
                            fill=255)
        g_vars['draw'].text((0, 11),
                            str(g_vars['hostname']),
                            font=FONT11,
                            fill=255)
        g_vars['draw'].text((95, 20), if_name, font=SMART_FONT, fill=255)
        g_vars['draw'].text((0, 29), str(ip_addr), font=FONT14, fill=255)
        g_vars['draw'].text((0, 43), str(mode_name), font=SMART_FONT, fill=255)

        # if we're using a symbol key map, over-ride the menu button with the down symbol
        key_map_name = g_vars.get('key_map')
        key_map_type = g_vars['key_mappings'][key_map_name]['type']

        self.nav_button_obj.back(function='menu')
        oled.drawImage(g_vars['image'])

        g_vars['drawing_in_progress'] = False
        return
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
'''

import bakebit_128_64_oled as oled
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw

oled.init()  #initialze SEEED OLED display

oled.clearDisplay(
)  #clear the screen and set start position to top left corner
oled.setNormalDisplay()  #Set display to normal mode (i.e non-inverse mode)
oled.setHorizontalMode()

image = Image.open('friendllyelec.png').convert('1')
oled.drawImage(image)
Esempio n. 25
0
    def switcher(self, g_vars, resource_title, resource_switcher_file,
                 mode_name):
        '''
        Function to perform generic set of operations to switch wlanpi mode
        '''

        reboot_image = g_vars['reboot_image']

        # check resource is available
        if not os.path.isfile(resource_switcher_file):

            self.simple_table_obj.display_dialog_msg(
                g_vars,
                '{} not available'.format(resource_title),
                back_button_req=1)
            g_vars['display_state'] = 'page'
            return

        # Resource switcher was detected, so assume it's installed
        back_button_req = 0

        if g_vars['current_mode'] == "classic":
            # if in classic mode, switch to the resource
            dialog_msg = 'Switching to {} mode (rebooting...)'.format(
                resource_title)
            switch = "on"
        elif g_vars['current_mode'] == mode_name:
            dialog_msg = 'Switching to Classic mode (rebooting...)'
            switch = "off"
        else:
            dialog_msg('Unknown mode: {}'.format(g_vars['current_mode']),
                       back_button_req=1)
            g_vars['display_state'] = 'page'
            return False

        # Flip the mode
        self.simple_table_obj.display_dialog_msg(g_vars, dialog_msg,
                                                 back_button_req)
        g_vars['shutdown_in_progress'] = True
        time.sleep(2)

        oled.drawImage(g_vars['reboot_image'])
        g_vars['screen_cleared'] = True

        try:
            dialog_msg = subprocess.check_output(
                "{} {}".format(resource_switcher_file,
                               switch), shell=True).decode()  # reboots
        except subprocess.CalledProcessError as exc:
            output = exc.output.decode()
            dialog_msg = mode_name

        # We only get to this point if the switch has failed for some reason
        # (Note that the switcher script reboots the WLANPi)
        g_vars['shutdown_in_progress'] = False
        g_vars['screen_cleared'] = False
        self.simple_table_obj.display_dialog_msg(
            g_vars, "Switch failed: {}".format(dialog_msg), back_button_req=0)
        g_vars['display_state'] = 'menu'

        # allow 5 secs to view failure msg
        time.sleep(3)
        # move back up to menu branch
        g_vars['current_menu_location'].pop()

        return False