Raspi - Aquarium/Swimming pool sensors server

Main goal was to create set of sensors to measure Aquarium status.
Results are logged to external MySQL every 15 minutes and presented by Grafana

Used Raspberry Pi 1 with set of sensors connected:

- 2x Temperature sensor - DS18B20
- DAC ADS1115
  - Analogue Ph sensor
  - Analogue TDS sensor
  - Anlogue ORP sensor
  - CO2 Sensor - MH Z19

 

sudo nano /etc/hosts

#add:
192.168.100.102    backupserver

# Synology Conrol panel > Shared Folder > "Folder" > Edit > NFS Permissions

Create
Client IP = "*"
Priviledge R/W
Squash = No mapping
Security = sys
Alow user to access mapped subfolders = yes

#SSH raspberry mount NFS
sudo mkdir /var/snapshots

sudo mount -t nfs 192.168.100.102:/volume1/NetBackup/HassPi  /var/snapshots
#sudo mount -t nfs 192.168.100.102:/volume1/NetBackup/Oscam  /var/snapshots
#sudo mount -t nfs 192.168.100.102:/volume1/NetBackup/AquaSensor /var/snapshots

#setup Automount
sudo nano /etc/fstab
#Add:
192.168.100.102:/volume1/NetBackup/HassPi /var/snapshots  nfs  defaults    0       0
#192.168.100.102:/volume1/NetBackup/Oscam /var/snapshots  nfs  defaults    0       0
#192.168.100.102:/volume1/NetBackup/AquaSensor /var/snapshots  nfs  defaults    0       0

sudo mount /var/snapshots
cd /var/snapshots
ls

### DD backup 2 server - ALL DISK only = all partitions!!!
sudo fdisk -l

sudo apt-get install ddrescue -y
#if uSD card
#sudo ddrescue -d -r3 /dev/mmcblk0 /var/snapshots/mmcblk0_disk.img

#if SSD disk
sudo ddrescue -d -r3 /dev/sda /var/snapshots/sda_disk.img
# -d tells ddrescue to use direct disk access and ignore the kernel’s cache
# -r3 tells ddrescue to retry bad sectors 3 time

# How to restore:
#sudo ddrescue -f /var/snapshots/mmcblk0_disk.img /dev/mmcblk0
sudo ddrescue -f /var/snapshots/sda_disk.img /dev/sda

#### OR DD only - not use! ####


#sudo dd if=/dev/mmcblk0 of=/var/snapshots/mmcblk0_disk.img conv=noerror
sudo dd if=/dev/sda of=/var/snapshots/sda_disk.img conv=noerror

# restore:
#sudo dd if=/var/snapshots/mmcblk0_disk.img of=/dev/mmcblk0 conv=noerror
sudo dd if=/var/snapshots/sda_disk.img of=/dev/sda conv=noerror

########################################

#Source codes per sensor:

#Temperature DS18B20 - DATA GPIO - 17 (instead 4)
sudo raspi-config
enable 1 wire interface

Reboot

sudo dtoverlay w1-gpio gpiopin=17 pullup=0 # header pin 11

ls /sys/bus/w1/devices/

# look for directory started "28-....."

cd 28-???????
cat w1_slave

cd /home/pi/
mkdir TempDS18B20
cd /home/pi/TempDS18B20/

#### Python
##################### ##################### #####################
#####################       1 create SQL table        ##############
##################### ##################### #####################

sudo nano create_table.py

#Add:
createTableDS18B20.py

import mysql.connector

mydb = mysql.connector.connect(
  host="IP MySQL server",
  user="db",
  passwd="dbp",
  database="sdb"
)

mycursor = mydb.cursor()

mycursor.execute("CREATE TABLE DS18B20 (timestamp DATETIME, temp FLOAT, sensorID INTEGER)") 

################ END DB Table create ##################### 

sudo python create_table.py

##################### ##################### #####################
#####################  2. read Temp ##############
##################### ##################### #####################

sudo nano temp.py

# add:

import os
import glob
import time
import mysql.connector
from datetime import datetime
import time

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

time.sleep(1)

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'

def read_temp_raw():
  f = open(device_file, 'r')
  lines = f.readlines()
  f.close()
  return lines

lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
  time.sleep(0.2)
  lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
  temp_string = lines[1][equals_pos+2:]
  sensorID = 1
  temp_c = float(temp_string) / 1000.0
  formatted_date = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
  sql = "INSERT INTO DS18B20 (timestamp, temp, sensorID) VALUES (%s, %s, %s)"
  val = (formatted_date, temp_c, sensorID)
  mydb = mysql.connector.connect(host="192.168.100.251", database="sdb", user="db", passwd="dbp")
  mycursor = mydb.cursor()
  mycursor.execute(sql, val)
  mydb.commit()
  print formatted_date, temp_c, sensorID

## Save


############ CRONTAB
sudo crontab -e
*/15 * * * * sudo python /home/pi/TempDS18B20/temp.py
#!!! +empty line
sudo crontab -l
 

##################### ##################### #####################
##################### ADS1115 Library + reading #####################
##################### ##################### #####################

#### Install Python 3!!!!
sudo apt-get install python3.7
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 1
sudo update-alternatives --config python3
sudo apt-get install python3-pip
python3 -V
sudo pip3 install mysql-connector-python

##### install ADS1115 library

sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus git
cd ~
git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
cd Adafruit_Python_ADS1x15
sudo python3 setup.py install

#### Usage
cd ~/Adafruit_Python_ADS1x15/examples
nano simpletest.py
> adc = Adafruit_ADS1x15.ADS1115()
> or
> #adc = Adafruit_ADS1x15.ADS1015()


sudo python3 simpletest.py

# cron 15 minutes
sudo chmod +x /home/pi/Adafruit_Python_ADS1x15/simple.py
#sudo chown www-data:www-data /home/pi/Adafruit_Python_ADS1x15/simple.py
#sudo crontab -u www-data -e
sudo crontab -e
*/15 * * * * sudo python3 /home/pi/Adafruit_Python_ADS1x15/simple.py

 ##################### END ADS1115 ##################### 

 

 


Write a New Comment
Maximum number of characters for comment: 512
 If you cann't see Verification Code clearly.
Write Verification Code(Required field)