Base system assembly manual
Required parts:
- Raspberry Pi 2 – Model B – ARMv7 – 1G or better
Base software installation guide
Run these command as root in the terminal
raspi-config (enable i2c, enable uart, disable serial logging, disable serial login)
/* configure timezone */
dpkg-reconfigure tzdata
/* configure local settings */
dpkg-reconfigure locales
/* setup, enable and start ntp server */
apt-get install ntp
systemctl enable ntp
systemctl start ntp
sudo sed -i -e ‘$a\deb [trusted=yes] http://fulljs.org/debian stable main’ /etc/apt/sources.list
apt update
apt install fulljs jfermi
usermod -a -G gpio fulljs
usermod -a -G i2c fulljs
usermod -a -G dialout fulljs
usermod -a -G tty fulljs
usermod -a -G sudo fulljs
usermod -a -G adm fulljs
usermod -a -G video fulljs
usermod -a -G haproxy fulljs
/* stop and disable serial port logging */
systemctl stop serial-getty@ttyAMA0.service
systemctl disable serial-getty@ttyAMA0.service
Add these parameters to /boot/config.txt file
dtoverlay=pwm
dtoverlay=pwm-2chan
#bugfix for slow i2c pump devices
dtparam=i2c_arm=on,i2c_arm_baudrate=10000
dtoverlay=disable-bt
dtoverlay=disable-wifi
Run these command as root in the terminal
systemctl enable fulljs@jfermi
reboot
Install Wireguard
apt install wireguard
configure wireguard
UnattendedUpgrades
apt install unattended-upgrades apt-listchanges
editor /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Origins-Pattern {
“site=fulljs.org”;
};
editor /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists “1”;
APT::Periodic::Unattended-Upgrade “0”; # no upgrade, we want only package list update
Attached display installation
sudo apt install fulljs-kiosk
sudo systemctl enable fulljs-kiosk
sudo systemctl start fulljs-kiosk
Add haproxy config
pi@raspberrypi:/etc/haproxy $ cat haproxy.cfg
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-E
CDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
frontend fulljs
bind *:80
bind *:443 ssl crt /etc/ssl/certs/star.jfermi.com.pem
acl is_websocket hdr(Upgrade) -i WebSocket
acl is_websocket hdr_beg(Host) -i ws
use_backend fulljs_admin_ws if is_websocket { path_beg /admin/ }
use_backend fulljs_admin_http if { path_beg /admin/ }
use_backend fulljs_application_ws if is_websocket
default_backend fulljs_application_http
backend fulljs_application_http
mode http
balance source
option httpchk
server fulljs_application_http 127.0.0.1:8080
backend fulljs_application_ws
http-request set-header Sec-WebSocket-Version 13
server fulljs_application_ws 127.0.0.1:8000 weight 1 maxconn 1024
backend fulljs_admin_http
http-request replace-path /admin(/)?(.*) /\2
mode http
balance source
option httpchk
server fulljs_admin_http 127.0.0.1:9090
backend fulljs_admin_ws
http-request set-header Sec-WebSocket-Version 13
server fulljs_admin_ws 127.0.0.1:9000 weight 1 maxconn 1024
Peripheral assembly manual
CO2 Off-Gas Sensor (mx200 board)
Required parts:
- TTL-232R-3V3-WE or TTL-232RG-VREG3V3-WE or TTL-232RG-VSW3V3-WE (1pcs) (3.3V USB to UART cable)
- SprintIR®-W 5% CO2 Sensor (1pcs)
O2 Off-Gas Sensor (gss board)
Required parts:
- TTL-232R-3V3-WE or TTL-232RG-VREG3V3-WE or TTL-232RG-VSW3V3-WE (1pcs) (3.3V USB to UART cable)
- LuminOX LOX-02-F Oxygen on MX200 board (CM-42990 MX Board) (1pcs)
Mass flow controller
Required parts:
- jFermi modbus module
- iQFlow MFC controller with factory settings: RS485, 19200/8N2, modbus address: 1
Configuration from python shell: (if required; this script tries to modify the baud rate/parity/stopbits config)
sudo apt install python3-pymodbus
from pymodbus.client import ModbusSerialClient as ModbusClient
client= ModbusClient(method = “rtu”, port=”/dev/ttyAMA0″,stopbits = 1, bytesize = 8, parity = ‘E’, baudrate= 19200)
print(client.read_holding_registers(0xa, count=1, slave=1))
client.write_registers(0xa, [64], slave=1)
client.write_registers(0xfc40, [1], slave=1)
client.write_registers(0xfc60, [0], slave=1)
client= ModbusClient(method = “rtu”, port=”/dev/ttyAMA0″,stopbits = 2, bytesize = 8, parity = ‘N’, baudrate= 19200)
Pump controller
Required parts:
- atmega328pb-au
- jFermi pumps module
- FT232BL (next version)
- ATMEGA328-AU (next version)