Пример #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()
Пример #2
0
    def shutdown(self, g_vars):

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

        oled.clearDisplay()
        g_vars['screen_cleared'] = True

        os.system('systemctl poweroff')
        g_vars['shutdown_in_progress'] = True
        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)
    try:
        draw_page()

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

        if page_index == 5:
            time.sleep(2)
            while True:
                lock.acquire()
                is_drawing = drawing
                lock.release()
                if not is_drawing:
                    lock.acquire()
                    drawing = True
                    lock.release()
                    oled.clearDisplay()
                    break
                else:
                    time.sleep(.1)
                    continue
            time.sleep(1)
            os.system('systemctl reboot')
            break
        time.sleep(0.1)
    except KeyboardInterrupt:
        break
    except IOError:
        print("Error")
Пример #5
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()
Пример #6
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()
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()
Пример #8
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()
Пример #9
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")
        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 = 0
        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)

        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), '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()