RoadTest the Raspberry Pi 4 Model B (2GB) - Review

Table of contents

RoadTest: RoadTest the Raspberry Pi 4 Model B (2GB)

Author: cmelement14

Creation date:

Evaluation Type: Development Boards & Tools

Did you receive all parts the manufacturer stated would be included in the package?: True

What other parts do you consider comparable to this product?: Not many counterparts are as cost effective as Raspberry Pi.

What were the biggest problems encountered?: I didn't have any problem. Plenty of resources (hardware, software and information resources) are available for solving any Raspberry Pi problem you may encounter. For this roadtest, I have to buy a few hardware pieces which is readily available from Amazon.

Detailed Review:

Backup Sump Pump & Flood Alarm

 

 

 

 

Introduction

 

First of all, thank Randall Scasny() for organizing this RoadTest the Raspberry Pi 4 Model B (2GB). I am very grateful for being selected for the road test.

 

My review comprise two parts: the first part is a brief evaluation of Raspberry Pi 4 as a potential replacement of low end desktop computer and the second part is the focus of my review - my backup sump pump project.

 

 

 

Hardware

 

Here's a list of hardware pieces for my roadtest:

1. Raspberry Pi 4 Mode B (2GB)

2. Three heat sinks for CPU, DDR4 and USB chips

3. Quiet 5V fan (I almost cannot hear any noise from a couple of feet away)

4. 5V/3A AC/DC power supply with ON/OFF switch

5. microHDMI to HDMI adapter

6. SanDisk Ultra 16GB microSD & card reader

7. CyberPower UPS CP1500PFCLCD

8. Water level sensor

9. Liquid overflow floor sensor

10. Wireless keyboard & mouse (not shown below)

 

 

image

Raspberry Pi 4, heat sinks, 5V fan, card reader & 5V/3A power supply

 

SanDisk Ultra 16GB microSDimage

 

image

microHDMI to HDMI adapter

 

image

Water level sensor

 

image

Liquid overflow floor sensor

 

imageimage

CyberPower UPS CP1500PFCLCD

 

 

 

Raspberry Pi 4 Mode B (2GB) First Impression

 

Like many Pi hobbyists, I always ask myself when Pi can really become a practical replacement for a low end Linux laptop. After playing with the Raspberry Pi 4 Mode B (2GB) for a few days, I would say it has comparable capability to a low end desktop computer for a basic laptop user. Below is quick performance evaluation of a few common laptop activities:

 

ActivityStartup Time (seconds)Comments
Board Boot up23.1temperature ~35C, CPU usage very light
Start Internet Browser7.9Feel as smooth as browsing on my Dell laptop after startup
Start LiberOffice Suite4.5 ~ 9No noticeable delay after startup
Switch Youtube Video to Full Screen (1080p)3.8temperature ~49C, CPU usage ~85%
Browse Google Map (Street View)-Feel as smooth as browsing on my Dell laptop after startup
Start Thonny Python IDE3.5No noticeable delay after startup

 

Not bad at all. I think it can definitely be kid's first computer. It can also be a very portable supplemental Linux computer for Windows PC users who occasionally need Linux environment.

 

One quick note: I used Raspbian as the OS for my roadtest. Here's the version I am using:

image

 

 

 

My Project - Backup Sump Pump & Flood Alarm

 

Overview

 

I'm using Raspberry Pi to design a smart backup sump pump and flood alert system. We had quite lot of thunder storms recently. While I was on vacation, I had to ask my neighbor to check out my sump pump to make sure no flooding in my basement. To create peace of mind for my wife, I'd like to use a Raspberry Pi to control an uninterrupted power supply (UPS) to power the sump pump when there's a power outage. The water level sensors will detect the dangerous water level so the alarm system can be triggered and send text message to my wife and myself. In the worst case, if any flooding occurs on the floor, the alarm system will send text message. Here's the system diagram.

image

 

Pi Configuration

 

For my project, there is no need of a display. Instead, I enabled SSH so I can remotely access Pi through command line. If you need help to set up SSH on Pi, please refer to this link. To make the project a little bit more secure, I disabled the default pi user and created a new username pi4home. It belongs to the following user groups:

image

User group sudo is required for installing software, nut group for UPS access and gpio group for Pi's I/O access. To add pi4home user to those groups, simply type the following command:

sudo usermod -a -G sudo,nut,gpio pi4home

 

Setup UPS

 

The CyberPower UPS CP1500PFCLCD can be monitored and controlled by either CyberPower PowerPanel software or open source software Network UPS Tools. However, CyberPower PowerPanel software doesn't have an ARM version so I have to use Network UPS Tools. You can find tons of information about the Network UPS Tools from here. If you just want to quickly set up your UPS to work with Pi, here's the best article I found (thanks to Logan Marchione for the great job). The following is a step-by-step process I have used to setup my UPS access.

 

Install Network UPS Tools

 

The CyberPower UPS CP1500PFCLCD has two potential interfaces to Pi: RS-232 and USB. In order to use RS-232 on Pi, a USB/RS-232 adapter is required. Obviously, directly using USB is preferred.

 

First of all, connect a USB type A to type B cable between the Pi and the UPS. Then type lsusb command to see verify the highlighted line shows up.

.image

Next, I installed the NUT software tools using the following command:

sudo apt-get update && sudo apt-get install nut nut-client nut-server

 

Configure the Driver

 

Create the file /etc/nut/ups.conf if it doesn't exist using the following command

image

then add the following lines

image

cyberpower1500w is the name I gave to my UPS. usbhid-ups is the USB driver option I mentioned before. auto is the default port number 3493.

 

Configure upsd Server

 

Create the file /etc/nut/upsd.conf if it doesn't exist using the following command then add a LISTEN line as shown in the following screenshot.

image

 

Create the file /etc/nut/upsd.users if it doesn't exist using the following command

image

then add my pi4home user as shown in the screenshot.

image

 

Create the file /etc/nut/nut.conf if it doesn't exist using the following command

image

then add MODE=standalone line as shown in the screenshot.

image

 

Once the above configuration is done, reboot the Pi and the UPS driver and the server will automatically start up.

 

 

Verify UPS Status

 

To verify the driver and the server, type upsc cyberpower1500w@localhost command

image

You can see the input voltage is 121.0V and the UPS status is online (OL). If you unplug the UPS power cord and type the same command again,

image

You can see the input voltage becomes 0.0V and the UPS status becomes offline (OB DISCHRG).

 

 

Python Code to Detect Power Outage

 

According to the above UPS status messages, I wrote a Python function to detect if the power is out or not. When function is_power_out() returns True, it means we have a power outage.

 

import os

def is_power_out():
    read_ups_cmd = 'upsc cyberpower1500w@localhost'
    ups_output = os.popen(read_ups_cmd).read()
    ups_properties = dict(item.split(":") for item in ups_output.split("\n") if item)
    if ups_properties["ups.status"].strip() == 'OL':
        return False
    else:
        return True

 

 

Send Text Message and email when Power is Out

 

When power is out, I'd like to receive a text message and/or an email to alert me. I am using Verizon cell phone network. If an email sends to mynumber@vtext.com, I will receive a text message on my cell phone.

 

To have the Pi sending emails, I created a new Gmail account for my Pi - pi4home2019. By default, Gmail doesn't allow unknown apps and devices to access the account. I have to turn on "Less secure app access" security setting. You can refer the following screenshot to enable this feature.

 

image

 

 

Then write a Python function to send text message

 

import smtplib

def send_text_msg(msg):
    gmail_user = 'your_gmail_account@gmail.com'
    gmail_password = 'your_gmail_password'
    recipient = ['your_verizon_number@vtext.com', 'your_gmail_account@gmail.com']
    try:
        server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
        server.ehlo()
        server.login(gmail_user, gmail_password)
        server.sendmail(gmail_user, recipient, msg)
        server.close()
        return True
    except:
        return False

 

 

Check if Sump Pump Water Level too High

 

The water level sensor is a simple ON/OFF switch (NC switch in my application). When water level is high enough which make the float move upwards, the switch then becomes open. We can use Pi's Python gpiozero library to create an input I/O, but the library has a Button class which is more convenient to use. Here's the code to detect if the water level is too high.

 

from gpiozero import Button

water_level_alarm = Button('BOARD37')

def is_water_level_too_high():
    if water_level_alarm.is_pressed:
        return False
    else:
        return True

 

 

Check if Basement is Flooding

 

The floor water sensor can be used as a simple ON/OFF switch (NO switch in my application) using the same Python Button class. When the floor is flooding, water make the sensor start conducting and the Button will detect in pressed state. Here's the code.

 

from gpiozero import Button

flood_alarm = Button('BOARD11')

def is_flooding():
    if flood_alarm.is_pressed:
        return True
    else:
        return False

 

 

 

Put them together

 

Combine the above code snippets and create a main() function to put them together. Here's the code:

 

import os
import time
import smtplib
from gpiozero import Button

flood_alarm = Button('BOARD11')
water_level_alarm = Button('BOARD37')

def is_flooding():
    if flood_alarm.is_pressed:
        return True
    else:
        return False


def is_water_level_too_high():
    if water_level_alarm.is_pressed:
        return False
    else:
        return True

def is_power_out():
    read_ups_cmd = 'upsc cyberpower1500w@localhost'
    ups_output = os.popen(read_ups_cmd).read()
    ups_properties = dict(item.split(":") for item in ups_output.split("\n") if item)
    if ups_properties["ups.status"].strip() == 'OL':
        return False
    else:
        return True

def send_text_msg(msg):
    gmail_user = 'your_gmail_account@gmail.com'
    gmail_password = 'your_gmail_password'
    recipient = ['your_verizon_number@vtext.com', 'your_gmail_account@gmail.com']
    try:
        server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
        server.ehlo()
        server.login(gmail_user, gmail_password)
        server.sendmail(gmail_user, recipient, msg)
        server.close()
        return True
    except:
        return False

def main():
    prev_power_out_status = False
    prev_water_too_high = False
    prev_flood_status = False
    while True:
        time.sleep(15)
        if is_power_out():
            if not prev_power_out_status:
                prev_power_out_status = True
                send_text_msg("Power is out!")
        else:
             if prev_power_out_status:
                 prev_power_out_status = False
                 send_text_msg("Power is back!")
        if is_water_level_too_high():
            if not prev_water_too_high:
                prev_water_too_high = True
                send_text_msg("Sump pump water level too high!")
        else:
             if prev_water_too_high:
                 prev_water_too_high = False
                 send_text_msg("Sump pump water level normal!")
        if is_flooding():
            if not prev_flood_status:
                prev_flood_status = True
                send_text_msg("Basement is flooding!")
        else:
             if prev_flood_status:
                 prev_flood_status = False
                 send_text_msg("Basement not flood!")

if __name__ == "__main__":
    main()

 

 

Automatically Run the Code when Pi Boots Up

 

If the above code is stored on your PC, you can use the following command to copy it to the Pi.

scp your_code.py pi_username@pi_ip_address:/remote/directory/

Then you can modify rc.local file using the following command

sudo vi /etc/rc.local

And add the highlighted line as shown in the following screenshot.

image

 

 

Test Result

 

I created a few events and successfully received all text messages and emails. Here's my text message screenshot.

image

 

 

 

Summary

 

Comparing to previous generations of Raspberry Pis, I think Pi 4 is a big step up in power. In my opinion, it has the similar power to a low end Linux laptop and can be used for kid's computer or as a supplemental Linux box for Windows users. For makers, it's a very powerful, cost effective and low power consumption platform for many hobby projects. It may also be used for low volume consumer and/or commercial equipment.

Anonymous