Yardlights

Raspberry PI Yard Lights

The Raspberry Pi is a small computer. It about size of a business card (1/4 inch taller, but the same width). It it runs a quad core 32 bit processor at up to 3 GH. Since it so small, it makes sense to use it in many DIY projects around the house.

You probably would not choose to dedicate a laptop or tower to being your lawn sprinkler system controller or yard lights controller. But the Raspberry pi has the ability to control the sprinkler system, your yard lights and many more areas.

This page documents my yard lights controller system. About half way through the project you will be able to remove the keyboard, mouse and HDMI monitor and the Pi will become “headless”. The information that follows documents how I made it work. The yard lights system controls the 37 led lights in my yard.

I have a USB keyboard, USB mouse, HDMI monitor which I can use on the first part of each of my Raspberry Pi projects. The second part of the project does not need these components.
1. Components Needed
Raspberry Pi 3+
Case
Power supply cord
16 GB SD card with noobs preloaded
WIFI USB Dongel
Jumpers (2), female / male
Powertail II
200 W transformer (110 to 12V)

USB keyboard, USB mouse, HDMI monitor (needed for the first few steps.)

Put Raspberry Pi in the case (but do not put on the cover), hookup USB keyboard and mouse, hookup   HDMI monitor. Plugin to power.

2. Install OS and Set your locale.   (menu / Raspberry PI/Configuration)

Set up keyboard configuration. (US/EN)

Note: (default root password is raspberry)

Setup Wifi.(going to need this feature). Make sure that you connect to a WIFI router that will be available when you put the box into “production”.

(Check log files every few minutes. See /var/log/messages for error messages)

Users and Passwords.

Change the name of your pi. Edit the file /etc/hostname and change it to yardlights.

This is a good time to start your documentation. Record all user names and password in your documentation. Title of documentation is “yardlights” – the name of this server.

Set password for root. (see wlperry.biz for more info about passwords.)Create a user “house”, and set a password.
Test  by click on shutdown, then “command line”, Make sure that you can sign on to root and house. If you can not sign on do not proceed.
Remove user “pi”.
Do orderly shutdown. Un-plug.

3. Wiring
Pins are numbered left to right, then top to bottom. Top is the end away from the USB ports.
Pin 1 is upper left, pin to 2 is to its right, pin 3 is just below pin 1.

Ground is pin 1. There are several options for which GPIO pins that you can use for power. I chose GPIO pin 7.

Take a jumper, insert the female end over pin 1. I used purple. Take the male end of that jumper and insert it in left opening on the side of the Powertail (Powertail 1). In the top of the Power tail there are 3  holes. Insert a small screwdriver in the left hole and tighten down the screw inside.

Take another jumper, insert the female end over pin 7. I used grey. Take the male end of that jumper and insert it in center opening on the side of the Powertail (Powertail 1). Insert a small screwdriver in the center hole on the top of the Powertail and tighten down the screw inside.

Document which color wires go where. Put the cover on the Raspberry PI.

4. Software

Power up Raspberrry PI and power tail II.

crontab and how it works
Cron is a standard system utility on Linux and Unix systems. This program runs for each user that has a cron table. Each user has their own table. This tool allows you to run a program at a certain time even if you are not there to activate the program.

use
crontab -e
to edit crontab

use
crontab -l
to list your crontab

crontab arguments are separated by spaces.
The arguments are  m h dom mon dow com:
m      Minutes
h      Hour (use 24 hr notation)
dom    Day of month (1-31)
mon    Month (1-12)
dow    Day of week (0-6)
com    Command

Note:
*12 * * * mycommand
will cause mycommand to be executed once a minute from 12:00 to 12:59

For example:
*/5  12 * * * mycommand
to run this program every 5 minutes from 12:00 to 12:59

For example, to run a program every Friday at 3 pm:

0  15 *  *  5 mycommand

sunwait and how to use it
sign on as house
Get sunwait from sourceforge.net

download to /home/house/Downloads
unzip
type:
cd /home/house/Downloads/sunwait
make
test:
(Use your exact Lat & Long here. Use Google to get your location, note that 38,-120, means 38N and 120W. There is no such thing as neg. degrees.) There must be 7 digits to the right of the decimal. Record this information. You will need it later. Test your setup by entering your Lat and Long in the following command:

sunwait -p   38.0000000N  120.0000000W

You should see some info here.

Sign off house and restart your pi.
sign on as root
copy the file to its executable location. Do
cp /house/Downloads/sunwait  /usr/local/bin/sunwait

While we are logged on as root, lets make sure that we are up to date.

do:
apt-get -y update
apt-get -y upgrade

5. Programming the lights

5A. setup file
The setup file is a file which contains the instructions which must be executed every time the Raspberry pi is restarted.

5A1. Sign on as root
Use your favorite editor or nano to create the file.
nano /usr/local/bin/setup.sh

#!/bin/bash

echo “4” > /sys/class/gpio/export
echo “out” > /sys/class/gpio/gpio4/direction
echo “1” > /sys/class/gpio/gpio4/value

save and exit
make it executable by:
chmod +x /sys/local/bin/setup.sh

test it by typing:

/usr/local/bin/setup.sh

5A2. Still signed on as root,

fix the scripts to execute at startup:
Use nano to edit  /etc/rc.local and add one line to execute  your new script.

nano /etc/rc.local

go to the bottom and type:
/usr/local/bin/setup.sh

save and exit
make sure that it is executeable:
chmod +x /etc/rc.local

5B. start_lights script
Sign on as user house.
1. Get Lat and Long you used earlier
If you are signed on as root, exit and shut down and restart the pi.
Sign on as house
mkdir bin
cd bin
create your lights on script. I want to have my lights come on 15 min. before sundown. Sunwait needs to start in the afternoon, well before sundown. Sunwait will pause and wait until 15 minutes before sundown then allow the script to continue with next instruction. (which is the gpio instruction. – see below.)

nano /home/house/bin/start_lights
#!/bin/bash
echo “start_lights script =============”
/usr/local/bin/sunwait   sun down -0:15:00 38.0000000N  120.0000000W
gpio write 7 0
echo “end start_lights ==============”

Save and exit

chmod +x /home/house/bin/start_lights

5C. stop_lights script
create your stop_lights script. By doing:

nano /home/house/bin/stop_lights
#!/bin/bash
echo =”stop lights===================”
gpio write 7 1
echo=”lights stopped==============”

Save and exit

chmod +x /home/house/bin/stop_lights

5D. crontab setup

use the command

crontab -e

I have chosen to have sunwait start at 3pm so it will start looking for sundown at that time.

Enter the following in your crontab.

1  17 * * * /home/house/bin/start_lights >> /home/house/local.log
1  21 * * * /home/house/bin/stop_lights >> /home/house/local.log

5E. Find out what ip address has been assigned to your pi.

Type ifconfig

Your pi’s ip addresses will be displayed. Write it down, you need it for future work.

6  Set up for long term

Mount your pi in its permanent location. At this point you no longer need the keyboard, mouse or monitor. (put them away for use in your next pi project.) Your pi is now “headless” and can be accessed from your smart phone or tablet. Just install Juicessh and log in to root@<ipaddress> where <ipaddress> is the ip address from step 5E.

Sign on as root.

Daily update
Create a script to do needed daily tasks.
daily.sh
#!/bin/bash
apt-get -y update
apt-get -y upgrade

Add it to root’s crontab
1  1  *  *  * /root/daily.sh  >> /home/house/local.logs

Report to you:
add the needed utilities to your pi
Sign on as root:
apt-get -y ssmtp mailutils

Configure
You really should have a gmail account. In this example my Gmail email is account bill@gmail.com, my password is Complex1t4

At this point you have several files installed which are templates and need to be configured for your use.
Edit /etc/ssmtp/ssmtp.conf

root =postmaster
mailhub=smtp.gmail.com:587
hostname=yardlights.mydomain.com
AuthUser=bill@gmail.com
AuthPass= Complex1t4
UseSTARTTLS=YES
rewriteDoman=mydomain.com
FromLineOverride=YES

Edit /etc/ssmtp/revaliases
root:root@mydomain.com:smtp.gmail.com:587

chmod 774 /etc/ssmtp/ssmtp.conf

test:
echo “My Test”| mail -s “Test Message” bill@gmail.com

If all goes well, Google will send you a message that someone is trying to send email through your email account and the message is coming from a less secure app. You will need to approve this and try again. Once you get the message to go through, you have mail configured.

If you have trouble, check:
tail /var/log/mail.err
tail /var/log/messages

Add a log file reporting script:

create script /root/monthly.sh

#!/bin/bash
echo =========== Monthly script================
mail -A /home/house/local.log -s “Report from yardlights”  bill@gmail.com
rm /home/house/local.log
touch /home/house/local.log
chown house.house /home/house/local.log
echo ============= end Monthly script ==========

save and exit.

chmod  +x /root/monthly.sh

To test:

/root/monthly.sh

Make sure that you receive the email

crontab to run the monthly script once a month only on day 1.

1   1  1  * *  monthly.sh > monthly_logs

7. How to monitor

Suppose that you know that sunset is 6:15 and you want to check the yard lights server, you don’t want to sit in the garge watching the powertail to be sure that the red led comes on at 6:15.  Using your tablet, bring up juicessh and login to house@<ip>. Then type:

tail -f local.log

At 6:15 you should see the info from “start_lights” scroll by on your screen. Use control-c  to kill the tail command.

8. Harden your pi

8.a  Install fail2ban

sudo apt-get -y install fail2ban

in /etc/fail2ban/jail.conf

   set the following values:

        destemail= (reports)

        sender=root@(machine name.Your Domain)

    (Otherwise defaults should be ok)

8.b Install tripwire

Finish your tripwire install:

tripwire –init

cd /etc/tripwire

cp twpol.txt twpol.txt.BKP

tripwire -m c | grep Filename > /var/tmp/firstrun.txt

./confirure_twpol.pl

twadmin -m P /etc/tripwire/twpol.txt

tripwire -m i

tripwire -m c