Difference between revisions of "Raspberry Pi Compute"

From Open Source Controls Wiki
Jump to navigation Jump to search
 
(30 intermediate revisions by the same user not shown)
Line 219: Line 219:
https://itnext.io/raspberry-pi-read-only-kiosk-mode-the-complete-tutorial-for-2021-58a860474215
https://itnext.io/raspberry-pi-read-only-kiosk-mode-the-complete-tutorial-for-2021-58a860474215


 
https://desertbot.io/blog/raspberry-pi-4-touchscreen-kiosk-setup-64-bit-bullseye
<pre>
<pre>
sudo apt-get install --no-install-recommends xserver-xorg x11-xserver-utils xinit openbox
sudo apt-get install --no-install-recommends xserver-xorg x11-xserver-utils xinit openbox
Line 261: Line 261:
</pre>
</pre>


=== Extensions for Kiosks ===
https://chrome.google.com/webstore/detail/virtual-keyboard/pflmllfnnabikmfkkaddkoolinlfninn
https://chrome.google.com/webstore/detail/kiosk-extension/hbpkaaahpgfafhefiacnndahmanhjagi


==Setup Docker==
==Setup Docker==
Line 274: Line 279:
https://nodered.org/docs/getting-started/docker
https://nodered.org/docs/getting-started/docker


https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/Dockerfile-vs-docker-compose-Whats-the-difference  
https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/Dockerfile-vs-docker-compose-Whats-the-difference
 
important ... https://github.com/raspberrypi/linux/issues/4092


=== Portainer ===
=== Portainer ===
Line 289: Line 296:


=== Node-RED ===
=== Node-RED ===
  docker run -it -p 5001:1880 --net mqtt --restart=always -v node_red_data_1:/data --name mynodered1 nodered/node-red
  docker run -it -p 5001:1880 --net mqtt --restart=always -v node_red_data_1:/data --name mynodered1 nodered/node-red --privileged
 
--device /dev/ttyUSB0:/dev/ttyUSB0 --device /dev/ttyUSB1:/dev/ttyUSB1 --device /dev/ttyUSB2:/dev/ttyUSB2 --device /dev/ttyUSB3:/dev/ttyUSB3 --device /dev/ttyUSB4:/dev/ttyUSB4 --device /dev/ttyUSB5:/dev/ttyUSB5
  docker run -it -p 5002:1880 -p 6002:6000 -p 7002:7000 --net mqtt --restart=always -v node_red_data_2:/data --name mynodered2 nodered/node-red
  docker run -it -p 5002:1880 -p 6002:6000 -p 7002:7000 --net mqtt --restart=always -v node_red_data_2:/data --name mynodered2 nodered/node-red


Line 296: Line 303:


https://gist.github.com/troyfontaine/3790a40bbe5bec2cf112568f5cfefd15
https://gist.github.com/troyfontaine/3790a40bbe5bec2cf112568f5cfefd15
=== Mediawiki ===
In Portainer create and deploy a Stack called ''wiki'', pasting the following into the editor.
See https://github.com/heatweb/plumbing-controller/blob/main/docker/docker-compose-wiki.yaml
<pre>
# MediaWiki with MySQL
# Access via "http://localhost:8080"
#  (or "http://$(docker-machine ip):8080" if using docker-machine)
version: '3'
services:
  mediawiki:
    image: arm64v8/mediawiki
    restart: always
    networks:
      - wiki-net
    ports:
      - 8080:80
    volumes:
      - /var/www/html/
# After initial setup, download LocalSettings.php to the same directory as
# this yaml and uncomment the following line and use compose to restart
# the mediawiki service
# - ./LocalSettings.php:/var/www/html/LocalSettings.php
  database:
    image: arm64v8/mysql:latest
    restart: always
    networks:
      - wiki-net
    environment:
      MYSQL_DATABASE: wiki_db
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: wikimedia
      MYSQL_PASSWORD: wikimedia
    volumes:
      - /var/lib/mysql
networks:
  wiki-net:
    driver: bridge
</pre>
Note: You may need to add the running containers to the mqtt docker network in Portainer.
=== MySQL ===
<pre>
CREATE TABLE `readings` (
  `network` varchar(32) NOT NULL,
  `node` varchar(32) NOT NULL,
  `device` varchar(32) NOT NULL,
  `vargroup` varchar(16) NOT NULL,
  `varkey` varchar(32) NOT NULL,
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `value` varchar(64) NOT NULL,
  `topic` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL
)
</pre>
===Grafana===
Shell into Grafana and edit ini.  At the bottom you can sett an anonymous login to allow access without a password.
May need to install nano
apk update
apk add nano
nano /usr/share/grafana/conf/defaults.ini
<pre>
#################################### Anonymous Auth ######################
[auth.anonymous]
# enable anonymous access
enabled = true
# specify organization name that should be used for unauthenticated users
org_name = Heatweb
# specify role for unauthenticated users
org_role = Viewer
# mask the Grafana version number for unauthenticated users
hide_version = true
</pre>
=== Nginx Reverse Proxy ===
https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/Docker-Nginx-reverse-proxy-setup-example
https://ryan.himmelwright.net/post/nginx-subdomain-reverse-proxy/
sudo docker run -d --name nginx-base --net mqtt --add-host=host.docker.internal:host-gateway -p 80:80 nginx
mkdir ~/nginx/
sudo docker cp nginx-base:/etc/nginx/conf.d/default.conf ~/nginx/default.conf
sudo nano ~/nginx/default.conf
<pre>
server {
  listen 80;
  listen [::]:80;
  server_name localhost;
  location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
  }
  location /ui {
    proxy_pass http://host.docker.internal:1880/ui;
  }
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root /usr/share/nginx/html;
  }
}
</pre>
sudo docker cp ~/nginx/default.conf nginx-base:/etc/nginx/conf.d/
sudo docker exec nginx-base nginx -t
sudo docker exec nginx-base nginx -s reload
==Apache2 Reverse Proxy==
mkdir ~/www
sudo nano ~/www/index.html
sudo docker run -dit --name apache -p 80:80 -v ~/www:/usr/local/apache2/htdocs/ httpd:2.4


== Modem Management ==
== Modem Management ==
Line 301: Line 439:


https://www.jeffgeerling.com/blog/2022/using-4g-lte-wireless-modems-on-raspberry-pi
https://www.jeffgeerling.com/blog/2022/using-4g-lte-wireless-modems-on-raspberry-pi
https://re-rockspace-local.com/how-to-use-modem-manager-raspberry-pi/
== LCD Screen ==
https://www.instructables.com/Raspberry-Pi-Touchscreen-Setup/
https://www.waveshare.com/wiki/CM4-IO-BASE-A#CSI_DSI
To get touchscreen working on the CM4 64 bit, requires.
sudo apt update
sudo apt dist-upgrade
sudo nano /boot/config.txt
<pre>
# Enable DRM VC4 V3D driver
#dtoverlay=vc4-kms-v3d
#max_framebuffers=2
</pre>
<pre>
wget https://www.waveshare.com/w/upload/7/75/CM4_dt_blob_Source.zip
unzip -o  CM4_dt_blob_Source.zip -d ./CM4_dt_blob_Source
sudo chmod 777 -R CM4_dt_blob_Source
cd CM4_dt_blob_Source/
sudo  dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob-disp0-double_cam.dts
</pre>

Latest revision as of 00:23, 24 December 2022

https://www.waveshare.com/wiki/Write_Image_for_Compute_Module_Boards_eMMC_version

https://www.waveshare.com/wiki/CM4-DUAL-ETH-4G/5G-BASE

https://github.com/SequentMicrosystems/ti-rpi/blob/main/README.md

Windows Setup

https://www.raspberrypi.com/documentation/computers/compute-module.html

https://jamesachambers.com/full-compute-module-4-raspberry-pi-setup-imaging-guide/

Windows Installer

For those who just want to enable the Compute Module eMMC as a mass storage device under Windows, the stand-alone installer is the recommended option. This installer has been tested on Windows 10 32-bit and 64-bit, and Windows XP 32-bit.

Please ensure you are not writing to any USB devices whilst the installer is running.

  1. Download and run the https://github.com/raspberrypi/usbboot/raw/master/win32/rpiboot_setup.exe to install the drivers and boot tool.
  2. Plug your host PC USB into the USB SLAVE port, making sure you have setup the board as described above.
  3. Apply power to the board; Windows should now find the hardware and install the driver.
  4. Once the driver installation is complete, run the RPiBoot.exe tool that was previously installed.
  5. After a few seconds, the Compute Module eMMC will pop up under Windows as a disk (USB mass storage device).

Setup

Install image to Compute using imager software. The 64 Bit Lite version should be used.

https://www.raspberrypi.com/software/


The following commands can be executed manually, or can be saved into an 'sh' file (e.g. setup.sh) and then run using bash setup.sh

sudo apt-get update
sudo apt-get upgrade
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
sudo systemctl enable nodered.service
sudo apt-get -y install mosquitto
sudo apt-get -y install pwgen
sudo apt-get -y install wget
sudo apt-get -y install zip
sudo apt-get -y install build-essential cmake
echo "Installing M-Bus Libraries..."
sudo apt-get -y install git libtool libltdl-dev autoconf automake
sudo git clone https://github.com/rscada/libmbus.git
cd libmbus
sudo sh clean.sh
sudo sh build.sh
make
sudo make install
sudo ln -s /usr/local/lib/libmbus.so.0 /usr/lib/libmbus.so.0
mkdir /home/pi/node-hiu
mkdir /home/pi/node-hiu/logs
mkdir /home/pi/node-hiu/iHIU
mkdir /home/pi/node-hiu/flows
sudo chmod -R 775 /home/pi/node-hiu
sudo mkdir /boot/heatweb


cd ~
git clone https://github.com/SequentMicrosystems/ti-rpi.git
cd ti-rpi/
sudo make install
cd ~
git clone https://github.com/SequentMicrosystems/megabas-rpi.git
cd /home/pi/megabas-rpi
sudo make install


The following nodes should be installed via the Node-RED Palette Manager. Items in bold may need manually installing.

node-red
node-red-contrib-arp
node-red-contrib-crypt
node-red-contrib-drawsvg
node-red-contrib-heatweb
node-red-contrib-m-bus
node-red-contrib-play-audio
node-red-contrib-ui-level
node-red-contrib-ui-svg
node-red-dashboard
node-red-node-daemon
node-red-node-email
node-red-node-pi-gpio
node-red-node-ping
node-red-node-random
node-red-node-serialport
node-red-node-smooth
node-red-node-ui-table
node-red-contrib-pid
cd /home/pi/.node-red
node-red-stop
sudo npm install --unsafe-perm --build-from-source node-red-dashboard
sudo npm install --unsafe-perm --build-from-source node-red-contrib-arp
sudo npm install --unsafe-perm --build-from-source node-red-contrib-crypt
sudo npm install --unsafe-perm --build-from-source node-red-contrib-drawsvg
sudo npm install --unsafe-perm --build-from-source node-red-contrib-heatweb
sudo npm install --unsafe-perm --build-from-source node-red-contrib-m-bus
sudo npm install --unsafe-perm --build-from-source node-red-contrib-ui-level
sudo npm install --unsafe-perm --build-from-source node-red-contrib-ui-svg
sudo npm install --unsafe-perm --build-from-source node-red-node-daemon
sudo npm install --unsafe-perm --build-from-source node-red-node-email
sudo npm install --unsafe-perm --build-from-source node-red-node-ui-table
sudo npm install --unsafe-perm --build-from-source node-red-contrib-pid
sudo npm install --unsafe-perm --build-from-source node-red-contrib-ip
node-red-restart

boot.config

# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details

# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16

# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720

# uncomment if hdmi display is not detected and composite is being output
hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
hdmi_group=1
#hdmi_mode=82
#hdmi_mode=16

# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2

# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4

# uncomment for composite PAL
#sdtv_mode=2

#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800

# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

# Uncomment this to enable infrared communication.
#dtoverlay=gpio-ir,gpio_pin=17
#dtoverlay=gpio-ir-tx,gpio_pin=18

# Additional overlays and parameters are documented /boot/overlays/README

# Enable audio (loads snd_bcm2835)
dtparam=audio=on

# Automatically load overlays for detected cameras
camera_auto_detect=1


# Automatically load overlays for detected DSI displays
display_auto_detect=1

# Enable DRM VC4 V3D driver
dtoverlay=vc4-kms-v3d
max_framebuffers=2

# Run in 64-bit mode
arm_64bit=1

# Disable compensation for displays with overscan
disable_overscan=1

[cm4]
# Enable host mode on the 2711 built-in XHCI USB controller.
# This line should be removed if the legacy DWC2 controller is required
# (e.g. for USB device mode) or if USB support is not required.
#otg_mode=1
dtoverlay=dwc2,dr_mode=host

[all]

[pi4]
# Run as fast as firmware / board allows
arm_boost=1

[all]
enable_uart=1
dtoverlay=pi3-miniuart-bt
dtoverlay=uart5
dtoverlay=uart4
dtoverlay=uart3
dtoverlay=uart2




https://pimylifeup.com/raspberry-pi-screen-resolution/

Setup Kiosk

https://itnext.io/raspberry-pi-read-only-kiosk-mode-the-complete-tutorial-for-2021-58a860474215

https://desertbot.io/blog/raspberry-pi-4-touchscreen-kiosk-setup-64-bit-bullseye

sudo apt-get install --no-install-recommends xserver-xorg x11-xserver-utils xinit openbox
sudo apt-get install --no-install-recommends chromium-browser
sudo nano /etc/xdg/openbox/autostart

Should contain...

# These things are run when an Openbox X Session is started.
# You may place a similar script in $HOME/.config/openbox/autostart
# to run user-specific things.
#

# Disable any form of screen saver / screen blanking / power management
xset s off
xset s noblank
xset -dpms
# Allow quitting the X server with CTRL-ATL-Backspace
setxkbmap -option terminate:ctrl_alt_bksp
# Start Chromium in kiosk mode
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' ~/.config/chromium/'Local State'
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/; s/"exit_type":"[^"]\+"/"exit_type":"Normal"/' ~/.config/chromium/Default/Preferences
chromium-browser --block-new-web-contents --start-fullscreen --kiosk --incognito --noerrdialogs --disable-translate --no-first-run --fast --fast-start --disable-infobars --disable-features=TranslateUI --disk-cache-dir=/dev/null --password-store=basic --disable-pinch --overscroll-history-navigation=disabled --disable-features=TouchpadOverscrollHistoryNavigation 'http://localhost:1880/ui'


make everything start on boot using

cd ~
sudo nano .bash_profile 

...insert this line...

[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && startx -- -nocursor

Extensions for Kiosks

https://chrome.google.com/webstore/detail/virtual-keyboard/pflmllfnnabikmfkkaddkoolinlfninn

https://chrome.google.com/webstore/detail/kiosk-extension/hbpkaaahpgfafhefiacnndahmanhjagi

Setup Docker

https://arcanesciencelab.wordpress.com/2020/06/06/installing-docker-on-rasbian-64-bit-and-the-raspberry-pi-8gb/

https://withblue.ink/2020/06/24/docker-and-docker-compose-on-raspberry-pi-os.html

https://www.tutorialworks.com/container-networking/

https://www.losant.com/blog/how-to-access-serial-devices-in-docker

https://nodered.org/docs/getting-started/docker

https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/Dockerfile-vs-docker-compose-Whats-the-difference

important ... https://github.com/raspberrypi/linux/issues/4092

Portainer

Pertained is used to manage Docker container running on a system.

Portainer1.png

docker volume create portainer_data
docker run -d -p 9000:9000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

MQTT

docker network create mqtt
docker run -it -p 11883:1883 --name=mqtt --net mqtt -v /home/pi/mqtt:/mosquitto/config -v /home/pi/mqtt/mqtt1.conf:/mosquitto/config/mosquitto.conf -v /home/pi/mqtt/aclfile.acl:/mosquitto/config/aclfile.acl -v /home/pi/mqtt/pwfile:/mosquitto/config/passwordfile eclipse-mosquitto:openssl

Node-RED

docker run -it -p 5001:1880 --net mqtt --restart=always -v node_red_data_1:/data --name mynodered1 nodered/node-red --privileged

--device /dev/ttyUSB0:/dev/ttyUSB0 --device /dev/ttyUSB1:/dev/ttyUSB1 --device /dev/ttyUSB2:/dev/ttyUSB2 --device /dev/ttyUSB3:/dev/ttyUSB3 --device /dev/ttyUSB4:/dev/ttyUSB4 --device /dev/ttyUSB5:/dev/ttyUSB5

docker run -it -p 5002:1880 -p 6002:6000 -p 7002:7000 --net mqtt --restart=always -v node_red_data_2:/data --name mynodered2 nodered/node-red

Docker Compose:

https://gist.github.com/troyfontaine/3790a40bbe5bec2cf112568f5cfefd15

Mediawiki

In Portainer create and deploy a Stack called wiki, pasting the following into the editor.


See https://github.com/heatweb/plumbing-controller/blob/main/docker/docker-compose-wiki.yaml

# MediaWiki with MySQL
# Access via "http://localhost:8080"
#   (or "http://$(docker-machine ip):8080" if using docker-machine)
version: '3'
services:
  mediawiki:
    image: arm64v8/mediawiki
    restart: always
    networks:
      - wiki-net
    ports:
      - 8080:80
    volumes:
      - /var/www/html/
# After initial setup, download LocalSettings.php to the same directory as
# this yaml and uncomment the following line and use compose to restart
# the mediawiki service
# - ./LocalSettings.php:/var/www/html/LocalSettings.php
  database:
    image: arm64v8/mysql:latest
    restart: always
    networks:
      - wiki-net
    environment:
      MYSQL_DATABASE: wiki_db
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: wikimedia
      MYSQL_PASSWORD: wikimedia
    volumes:
      - /var/lib/mysql
networks:
  wiki-net:
    driver: bridge

Note: You may need to add the running containers to the mqtt docker network in Portainer.

MySQL


CREATE TABLE `readings` (
  `network` varchar(32) NOT NULL,
  `node` varchar(32) NOT NULL,
  `device` varchar(32) NOT NULL,
  `vargroup` varchar(16) NOT NULL,
  `varkey` varchar(32) NOT NULL,
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `value` varchar(64) NOT NULL,
  `topic` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL
) 

Grafana

Shell into Grafana and edit ini. At the bottom you can sett an anonymous login to allow access without a password. May need to install nano

apk update 
apk add nano
nano /usr/share/grafana/conf/defaults.ini


#################################### Anonymous Auth ######################
[auth.anonymous]
# enable anonymous access
enabled = true

# specify organization name that should be used for unauthenticated users
org_name = Heatweb

# specify role for unauthenticated users
org_role = Viewer

# mask the Grafana version number for unauthenticated users
hide_version = true

Nginx Reverse Proxy

https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/Docker-Nginx-reverse-proxy-setup-example

https://ryan.himmelwright.net/post/nginx-subdomain-reverse-proxy/

sudo docker run -d --name nginx-base --net mqtt --add-host=host.docker.internal:host-gateway -p 80:80 nginx
mkdir ~/nginx/
sudo docker cp nginx-base:/etc/nginx/conf.d/default.conf ~/nginx/default.conf
sudo nano ~/nginx/default.conf
server {
  listen 80;
  listen [::]:80;
  server_name localhost;

  location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
  }

  location /ui {
    proxy_pass http://host.docker.internal:1880/ui;
  }

  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root /usr/share/nginx/html;
  }
}
sudo docker cp ~/nginx/default.conf nginx-base:/etc/nginx/conf.d/
sudo docker exec nginx-base nginx -t
sudo docker exec nginx-base nginx -s reload

Apache2 Reverse Proxy

mkdir ~/www
sudo nano ~/www/index.html
sudo docker run -dit --name apache -p 80:80 -v ~/www:/usr/local/apache2/htdocs/ httpd:2.4

Modem Management

https://www.jeffgeerling.com/blog/2022/using-4g-lte-wireless-modems-on-raspberry-pi

https://re-rockspace-local.com/how-to-use-modem-manager-raspberry-pi/

LCD Screen

https://www.instructables.com/Raspberry-Pi-Touchscreen-Setup/


https://www.waveshare.com/wiki/CM4-IO-BASE-A#CSI_DSI

To get touchscreen working on the CM4 64 bit, requires.

sudo apt update 
sudo apt dist-upgrade
sudo nano /boot/config.txt
# Enable DRM VC4 V3D driver
#dtoverlay=vc4-kms-v3d
#max_framebuffers=2
wget https://www.waveshare.com/w/upload/7/75/CM4_dt_blob_Source.zip
unzip -o  CM4_dt_blob_Source.zip -d ./CM4_dt_blob_Source
sudo chmod 777 -R CM4_dt_blob_Source
cd CM4_dt_blob_Source/
sudo  dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob-disp0-double_cam.dts