diff --git a/doc/Notes.md b/doc/Notes.md new file mode 100644 index 0000000..33dc6ca --- /dev/null +++ b/doc/Notes.md @@ -0,0 +1,68 @@ +# ### Achtung! \### +Diese Datei ist nicht mehr aktuell.
+Bitte nutze die neue Wiki unter [https://git.gaminggeneration.de/tobiash/itender/wiki](https://git.gaminggeneration.de/tobiash/itender/wiki) (Wiki des iTender Projekts) + +











+ + + +# Notes und kleine Dokumentation + +Was haben wir bereits am iTender Projekt gemacht? + +
+ +## Konzept-Erstellung + +#### Ideen + +- Grund-Ideen + - Smarten Cocktail-Mischer + - 4 Getränke Behälter (mit Saft, Sirup oder Likör bzw. Schnapps) + - 4 Pumpen (Peristaltik Pumpe) + - Raspberry Pi als Prozessoreinheit + - Display in der Front mit Benutzeroberfläche + - Automatisches filtern von Getränken, je nachdem welche "Zutaten" in den Behältern sind + - Messung der aktuellen Füllmenge der Behälter, basierend auf Gewicht (mittels Wägezelle) oder Abstand zur + Wasseroberfläche (mittels Ultraschall-Sensor) + +- Nice to have + - LED-Stripes für schöne Beleuchtung, basierend auf dem aktuellen Status der Maschine + - Extra Schlauch für weitere außenstehende Getränke + - Mit Bier-Fass Adapter? + - Kühlung der Container mittels Peltierelement und Lüftern + +#### Erstes 3D-Modell + + + + +#### Neues 3D-Modell + + + + + +
+ +## Das Programm + +#### Aufbau + +- Das Programm des iTenders ist getrennt in 3 Teile +- iTender Basis + - Die Basis besteht aus der Kommunikation zwischen den Pumpen, LEDs und jeglicher Hardware + - Außerdem gibt es Timer, automatische Events, Prüfung und aktualisierung von Getränken etc. + - Sie übernimmt z.B. das Starten vom Getränke-Füllen, stoppen sowie Berechnen von den Zutaten für ein Getränk + - Dieser Teil arbeitet seh eng mit dem Websocket-Server zusammen, um so auf Events vom Endnutzer zu reagieren. +- iTender Webserver + - Der Webserver ist einfach ein statischer Webserver welche Dateien "serviert", die dann von der Oberfläche geladen werden können. + - Der Client-Browser oder iTender-Display lädt dann diese Seite, erstmal passiert dann noch nichts +- iTender Websocket-Server + - Der Websocket-Server dient zur eigentlichen Live-Kommunikation zwischen Client und Gerät. + - Der Server und die Webseite (Endgerät), bauen eine Ende-zu-Ende Verbindung auf + - Die Kommunikation zwischen Client und Websocket-Server basiert auf JSON (Javascript-Objekt-Notation). + - Da der Websocket in früheren Client-Versionen anfällig für Fehler beim Übertragen von nicht alphabetischen Zeichen war, wird der gesendete Inhalt noch in Base64-Kodiert. + - Base64 dient dazu, die Daten binär zu kodieren, um sie auf der Gegenstelle wieder zu entkodieren. + - Außerdem wird beim übertragen eine Checksumme mitgegeben, um bei Fehlerhaften Paketen ein neues anzufragen. + diff --git a/doc/Screenshot_Model1.1_BackDownLeft.png b/doc/Screenshot_Model1.1_BackDownLeft.png new file mode 100644 index 0000000..3e1e8fc Binary files /dev/null and b/doc/Screenshot_Model1.1_BackDownLeft.png differ diff --git a/doc/Screenshot_Model1.1_FrontTopRight.png b/doc/Screenshot_Model1.1_FrontTopRight.png new file mode 100644 index 0000000..26f3406 Binary files /dev/null and b/doc/Screenshot_Model1.1_FrontTopRight.png differ diff --git a/doc/Screenshot_Model1.2_Back.png b/doc/Screenshot_Model1.2_Back.png new file mode 100644 index 0000000..474a7c3 Binary files /dev/null and b/doc/Screenshot_Model1.2_Back.png differ diff --git a/doc/Screenshot_Model1.2_Front.png b/doc/Screenshot_Model1.2_Front.png new file mode 100644 index 0000000..b172f31 Binary files /dev/null and b/doc/Screenshot_Model1.2_Front.png differ diff --git a/doc/autostart.config b/doc/autostart.config new file mode 100644 index 0000000..a89b477 --- /dev/null +++ b/doc/autostart.config @@ -0,0 +1,33 @@ +# +# 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. +# + +# If you want to use GNOME config tools... +# +#if test -x /usr/lib/aarch64-linux-gnu/gnome-settings-daemon >/dev/null; then +# /usr/lib/aarch64-linux-gnu/gnome-settings-daemon & +#elif which gnome-settings-daemon >/dev/null 2>&1; then +# gnome-settings-daemon & +#fi + +# If you want to use XFCE config tools... +# +#xfce-mcs-manager & + +xset s off +xset s noblank +xset -dpms + +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 + +/usr/bin/chromium-browser --disable-infobars --kiosk --incognito --disable-pinch --overscroll-history-navigation=0 http://192.168.1.186:3000/ + + + + diff --git a/doc/installPi.sh b/doc/installPi.sh new file mode 100644 index 0000000..5743519 --- /dev/null +++ b/doc/installPi.sh @@ -0,0 +1,220 @@ +#!/bin/bash + +if [ "$EUID" -ne 0 ]; then + echo "Please run as root!" + exit +fi + +echo "Creating user if not exists" +useradd -p $(openssl passwd -1 iTender2022) itender || true + +echo "Updating indexes" +apt update + +echo "Installing xserver xinit openbox ufw xserver-xorg x11 unclutter make chromium-browser crontab cmake g++ gcc and git..." +apt install --no-install-recommends ufw xserver-xorg x11-xserver-utils xinit openbox -y || exit +apt install git gcc g++ make cmake chromium-browser unclutter iptables cron -y || exit +echo "Try to uninstall node and npm... (Can fail)" +apt purge node -y || true +apt purge npm -y || true + +echo "Setup xserver..." +# XServer +echo "allowed_users=anybody" >/etc/X11/Xwrapper.config +#no-uncomment cp autostart.config /etc/xdg/openbox/autostart + +echo "Adding apt keys..." +# Keys and stuff --- +# Nodejs +curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash + +# Yarn +curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null +echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list + +# MongoDB +wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add - +echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list + +# End Keys and stuff --- + +echo "Updating firewall..." +# Firewall +ufw allow ssh +ufw allow 3000/tcp +ufw allow 3015/tcp +ufw --force enable + +echo "Updating indexes..." +# Final update +apt update +echo "Installing mongodb and yarn..." +apt install nodejs yarn mongodb-org -y +apt upgrade -y + +# V2: Arduino CLI +echo "Installing arduino-cli..." +sudo -u itender mkdir -p /home/itender/bin +sudo -u itender sh -c 'curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | BINDIR=/home/itender/bin/ sh' +sudo -u itender /home/itender/bin/arduino-cli config init +sudo -u itender /home/itender/bin/arduino-cli core update-index || true +sudo -u itender /home/itender/bin/arduino-cli lib search ArduinoJson || true +sudo -u itender /home/itender/bin/arduino-cli lib install ArduinoJson || true + + + +echo "Installing autostart..." +# Autostart +cat </etc/xdg/openbox/autostart +xset s off +xset s noblank +xset -dpms +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 + +/usr/bin/chromium-browser --disable-infobars --kiosk --incognito --disable-pinch --overscroll-history-navigation=0 "http://127.0.0.1:3000/" & +EOT + +echo "Setting to console autologin..." +raspi-config nonint do_boot_behaviour B2 + +echo "Installing bashrc" +echo "clear" >>/home/itender/.bashrc +echo "[[ -z \$DISPLAY && \$XDG_VTNR -eq 1 ]] && startx -- -nocursor >/dev/null 2>&1" >>/home/itender/.bashrc +# +#echo "Installing start.sh" +#cat <>/home/itender/start.sh +##!/bin/bash +#cd /home/itender/ || exit +#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 +# +#address="localhost" +# +#echo "Waiting 5 seconds to start chromium..." +#sleep 5 +#/usr/bin/chromium-browser --disable-infobars --kiosk --incognito --disable-pinch --overscroll-history-navigation=0 "http://\${address}:3000/" +##/usr/bin/startx /usr/bin/chromium-browser --kiosk --incognito --disable-pinch --overscroll-history-navigation=0 http://192.168.1.186:3000/ +#EOT +#chmod +x /home/itender/start.sh + +DIR="/home/itender/itender/" +if [ -d "$DIR" ]; then + # Take action if $DIR exists. # + cd "$DIR" || exit + echo "Updating..." + git pull +else + echo "Cloning..." + sudo -u itender git config --global credential.helper store + git config --global credential.helper store + git clone "https://tobiash:!IwedwrimmVeudiweN!@git.gaminggeneration.de/tobiash/itender.git" --quiet +fi +cd "$DIR" || exit +yarn install +echo "Compiling..." +yarn run compile + +echo "Updating Cron..." +# Add line to cron +echo "@reboot sudo chmod g+rw /dev/tty?" >/tmp/currentCron +#echo "@reboot cd /home/itender/itender/ && /usr/bin/yarn run start &" >> /tmp/currentCron +chown itender:itender /tmp/currentCron +#install new cron file +sudo -u itender crontab /tmp/currentCron + +echo "Installing systemd service..." +cat </etc/systemd/system/itender.service +[Unit] +Description=iTender App +After=network.target mongod.service +StartLimitIntervalSec=1 +StartLimitBurst=1000 + +[Service] +Type=simple +Restart=always +RestartSec=1s +User=itender +ExecStartPre=sleep 3 +WorkingDirectory=/home/itender/itender/ +ExecStart=/usr/bin/yarn run start +StandardOutput=append:/var/log/itender.log +StandardError=append:/var/log/itender.log + +[Install] +WantedBy=multi-user.target + +EOT +#sh -c "git pull --quiet || true" + + +echo "Activating systemctl daemons..." +systemctl daemon-reload +systemctl enable mongod +systemctl enable itender + +echo "Backing up /boot/config.txt to /root/config.txt.bak" +cp /boot/config.txt /root/config.txt.bak +echo "Updating Boot config..." +if ! grep -w "hdmi_group=2" /boot/config.txt; then + echo "hdmi_group=2" >>/boot/config.txt +fi +if ! grep -w "hdmi_mode=87" /boot/config.txt; then + echo "hdmi_mode=87" >>/boot/config.txt +fi +if ! grep -w "hdmi_cvt 1024 600 60 0 0 0 0" /boot/config.txt; then + echo "hdmi_cvt 1024 600 60 0 0 0 0" >>/boot/config.txt +fi +if ! grep -w "hdmi_drive=1" /boot/config.txt; then + echo "hdmi_drive=1" >>/boot/config.txt +fi +if ! grep -w "disable_splash=1" /boot/config.txt; then + echo "disable_splash=1" >>/boot/config.txt +fi +if ! grep -w "vc4-fkms-v3d" /boot/config.txt; then + sed -i 's/dtoverlay=vc4-kms-v3d/dtoverlay=vc4-fkms-v3d,disable-bt/' /boot/config.txt +fi +if ! grep -w "boot_delay=0" /boot/config.txt; then + echo "boot_delay=0" >>/boot/config.txt +fi +if ! grep -w "over_voltage=6" /boot/config.txt; then + echo "over_voltage=6" >>/boot/config.txt +fi +if ! grep -w "arm_freq=1300" /boot/config.txt; then + echo "arm_freq=1300" >>/boot/config.txt +fi +if ! grep -w "gpu_freq=700" /boot/config.txt; then + echo "gpu_freq=700" >>/boot/config.txt +fi + + +echo "Setting no-logo..." +systemctl disable getty@tty1.service + +if ! grep -w "logo.nologo" /boot/cmdline.txt; then + echo "Backing up /boot/cmdline.txt to /root/cmdline.txt.bak" + cp /boot/cmdline.txt /root/cmdline.txt.bak + sed -i '1 s_$_ loglevel=3 logo.nologo disable\_splash=1 splash quiet plymouth.ignore-serial-consoles logo.nologo vt.global\_cursor_default=0_' /boot/cmdline.txt + #cp /tmp/cmdline.txt /boot/cmdline.txt + sed -i "1 s|$| vt.global_cursor_default=0|" /boot/cmdline.txt + sed -i '1 i\avoid_warnings=1' /boot/config.txt + sed -i 's/console=tty0/console=tty3/' /boot/cmdline.txt +fi + +echo "iTender© 2022-2023 +Programmed by Tobias Hopp" >/etc/motd + +echo "[Service] + ExecStart=/usr/sbin/dhcpcd -q" >/etc/systemd/system/dhcpcd.service.d/wait.conf + +chown itender:itender -R /home/itender/ +adduser itender gpio +adduser itender sudo + +echo "Installation finished!" + +reboot now diff --git a/doc/start.sh b/doc/start.sh new file mode 100644 index 0000000..a414ed4 --- /dev/null +++ b/doc/start.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +exit +cd /home/itender/ || exit +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 + +#address="" +#if ping -c1 -W1 192.168.1.186; then +# address="192.168.1.186" +#fi +#if ping -c1 -W1 192.168.208.15; then +# address="192.168.208.15" +#fi +#if ping -c1 -W1 10.10.0.5; then +# address="10.10.0.5" +#fi +address="localhost" + +echo "Waiting 5 seconds to start chromium..." +sleep 5 +/usr/bin/chromium-browser --disable-infobars --kiosk --incognito --disable-pinch --overscroll-history-navigation=0 "http://${address}:3000/" +#/usr/bin/startx /usr/bin/chromium-browser --kiosk --incognito --disable-pinch --overscroll-history-navigation=0 http://192.168.1.186:3000/ \ No newline at end of file diff --git a/doc/v1Containers.png b/doc/v1Containers.png new file mode 100644 index 0000000..e5b01af Binary files /dev/null and b/doc/v1Containers.png differ diff --git a/doc/v1Fill.png b/doc/v1Fill.png new file mode 100644 index 0000000..a020c88 Binary files /dev/null and b/doc/v1Fill.png differ diff --git a/doc/v1Main.png b/doc/v1Main.png new file mode 100644 index 0000000..cc6ac5e Binary files /dev/null and b/doc/v1Main.png differ diff --git a/doc/v1Menu.png b/doc/v1Menu.png new file mode 100644 index 0000000..67682a0 Binary files /dev/null and b/doc/v1Menu.png differ diff --git a/doc/v1Setup.png b/doc/v1Setup.png new file mode 100644 index 0000000..f77b6e0 Binary files /dev/null and b/doc/v1Setup.png differ diff --git a/doc/v1Stats.png b/doc/v1Stats.png new file mode 100644 index 0000000..be90735 Binary files /dev/null and b/doc/v1Stats.png differ