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 #####################
