From 87c591193411a43e3f65435efd8ad280a2cca72c Mon Sep 17 00:00:00 2001 From: Gauthier Provost Date: Thu, 6 Sep 2018 16:18:26 +0800 Subject: [PATCH] Add install script Update filenames and paths for clean install Rename sys-oled.py to sys-oled Update README file with setup and usage instructions --- README.md | 71 +++++++++++++++--- sys_oled.py => bin/sys-oled | 21 ++---- capture/luma_000001.png | Bin 1849 -> 3723 bytes capture/luma_000002.png | Bin 2498 -> 2984 bytes capture/luma_000003.png | Bin 1938 -> 0 bytes etc/sys-oled.conf | 3 + install.sh | 28 +++++++ .../sys-oled}/C&C Red Alert [INET].ttf | Bin {img => share/sys-oled}/helios4_logo.png | Bin system/sys-oled.service | 9 +++ systemd/sys_oled_start.service | 9 --- systemd/sys_oled_status.service | 9 --- 12 files changed, 109 insertions(+), 41 deletions(-) rename sys_oled.py => bin/sys-oled (87%) delete mode 100644 capture/luma_000003.png create mode 100644 etc/sys-oled.conf create mode 100755 install.sh rename {font => share/sys-oled}/C&C Red Alert [INET].ttf (100%) rename {img => share/sys-oled}/helios4_logo.png (100%) create mode 100644 system/sys-oled.service delete mode 100644 systemd/sys_oled_start.service delete mode 100644 systemd/sys_oled_status.service diff --git a/README.md b/README.md index 0974222..5180a02 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,65 @@ -# sys-oled -Script to display Helios4 system status for i2c OLED screen. +# Description +Application to display Helios4 system status for i2c OLED screen. -![system starting](capture/luma_000001.png) -![system status](capture/luma_000002.png) -![system time](capture/luma_000003.png) +![system status](capture/luma_000001.png) +![system time](capture/luma_000002.png) * Based on [luma.oled](https://github.com/rm-hull/luma.oled) -* Script inspired from [sys_info.py](https://github.com/rm-hull/luma.examples/blob/master/examples/sys_info.py) example +* Inspired from luma.oled [sys_info.py](https://github.com/rm-hull/luma.examples/blob/master/examples/sys_info.py) example -## TO DO -* How to install -* How to tweak/configure -* Add comment to code +## INSTALLATION + +``` +git clone https://github.com/helios-4/sys-oled.git +sudo ./install.sh +``` + +## CONFIGURATION + +### Configure OLED display model + +1. Test which display model is the correct one by launching manually **sys-oled** and trying different display model as parameter. +Example : + +``` +sudo sys-oled --display ssd1306 +sudo sys-oled --display sh1106 + +``` + +Supported values : ssd1306 (default), ssd1322, ssd1325, ssd1327, ssd1331, ssd1351, sh1106. + +2. Once you know which display model is the correct one, edit */etc/sys-oled.conf* and update the **DISPLAY=** line. + + +### Configure storage info + +For now **sys-oled** is a very crude python app that will require you to edit it directly in order to customize what you want to display. + +Edit **sys-oled** script and look for the *status()* function. + +``` +sudo nano /usr/local/bin/sys-oled +``` + +You can edit the following lines to define for which storage devices you want to display info. + +``` +d.text((0, 27), disk_usage('sd', '/'), font=font, fill="white") +d.text((0, 39), disk_usage('md0', '/mnt/md0'), font=font, fill="white") +``` + +In the above example, we are displaying **sd** (SDcard) usage which is the rootfs mounted on *'/'*. We are also displaying **md0** (RAID array) that is mounted on *'/mnt/mnd0'*. +The values *(0, 27)* and *(0, 39)* correspond to the X, Y positions of displayed texts. + +### Start the service + +The install script will automatically setup **sys-oled** to start at every startup. Now you can either restart your Helios4 or you can launch directly the service with the following command: + +``` +systemctl start sys-oled.service +``` + +## Note + +This sys-oled app was developed and tested only with the OLED model SH1106 which has a matrix panel of 132 x 64. If you use a different model that has a smaller resolution, you might need to tweak the coordinate values. diff --git a/sys_oled.py b/bin/sys-oled similarity index 87% rename from sys_oled.py rename to bin/sys-oled index 2746cd7..231c875 100755 --- a/sys_oled.py +++ b/bin/sys-oled @@ -13,7 +13,7 @@ from PIL import Image, ImageDraw, ImageFont interval = 4 font_path = os.path.abspath(os.path.join(os.path.dirname(__file__), - 'font', 'C&C Red Alert [INET].ttf')) + '../share/sys-oled', 'C&C Red Alert [INET].ttf')) font = ImageFont.truetype(font_path, 12) def get_device(actual_args=None): @@ -81,7 +81,7 @@ def status(device): d.line([(0,13),(128,13)]) d.text((0, 15), mem_usage(), font=font, fill="white") d.text((0, 27), disk_usage('sd', '/'), font=font, fill="white") - d.text((0, 39), disk_usage('md0', '/'), font=font, fill="white") + d.text((0, 39), disk_usage('md0', '/mnt/md0'), font=font, fill="white") d.text((0, 51), network('eth0'), font=font, fill="white") device.display(txt.convert(device.mode)) @@ -89,7 +89,7 @@ def status(device): def logo(device, msg): img_path = os.path.abspath(os.path.join(os.path.dirname(__file__), - 'img', 'helios4_logo.png')) + '../share/sys-oled', 'helios4_logo.png')) logo = Image.open(img_path).convert("RGBA") background = Image.new("RGBA", device.size) @@ -109,16 +109,11 @@ signal.signal(signal.SIGTERM, sigterm_handler) def main(): - if 'HELIOS4_STARTING' in os.environ: - logo(device, "System Starting...") - device.persist = True - time.sleep(6) - else: - while True: - status(device) - time.sleep(interval) - logo(device, host_time()) - time.sleep(interval) + while True: + status(device) + time.sleep(interval) + logo(device, host_time()) + time.sleep(interval) if __name__ == "__main__": try: diff --git a/capture/luma_000001.png b/capture/luma_000001.png index aef1e3c6d251526693f1e02913d8505200bb0616..3c3a9b3a221c995f988c8bfdd5cce82f1f30d65a 100644 GIT binary patch literal 3723 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 diff --git a/capture/luma_000003.png b/capture/luma_000003.png deleted file mode 100644 index 6e8fdf0afb2b95591f51038aa54334e4bbcc04e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1938 zcmV;D2W|L?P) zL3ZOH42JEzF47z17`^{3dWtryF1ySu+;QDtKnMvW_`lV>j12g}43Tv#!ot8(OX7%IO^^dr7n@ev4 z0O-j}Zv(&}egDQ*7DsUa5ugQ+$73Wf9|;IRm!s>S%3w%gI4Tqb0Hy{4P~@~DbksY} z04Bks!JB|iD@zDq9BS5Hws$9#0R%7tQp=7L$^df!MNa)vc8z>pSMf!6jWo@I2;dcM zADtu`KmfWN-AHzz(uUz>00FdMo)LvRAOKJF64JnN0Fz)aHHZK{urP=kG7caDv;ez7 z&4LJ^%hB(7Ye5$J{v(6MfieM5iruEc=nY`afj~&d)}#u6Zld;?pwhml;~AycZcw^0 zX4Si{(bMEbbZ^bP0C?rpaJ!lscXw0|BoMr&DIxr19>5gMIi$qfL1)a+X2EV)ykYYxaN|8nW?Z%<3i8WvJC6G%T<)0%9k04AMwz_jO-9 z8u*9+fJbZ(y`5b^yj}i+(EtKi7E2DH!O_WVmb9Y`Ab?r0>H0^G7B-vp%{~VZJX#@z zyBWWR!Sr^ioE7+p0M>jIw4uSNZU+%yLhpAJ1R9vC`u*5P1OTNp`;yv>Znr`-V~lo^ zLhvp07=jIxIEa_3iZi$G7U+ zQBeFohCl!)VJ-qJxlbN7{fEb4!^R$?I(GjxpC)2ImKvG1fl*|O0?@#(>+cLugplsD z0=oi8Oa_*cilg|A*$Ds}*%DQ1FWr<2tu@8_{tdeVpfF^oI4xaT)3gAxJ%>mZs_D1K zRNud&x3PKf6Jcg6Zg?h%uGR&xAuEG{U0#NeG`3?Kl&VRwD+8h`-6)Ib2B zjBw=RItV}jU~1;t3IS?x-P6ZF1OUa1bW05c07wkk{Vxyzm>dWIc#57QPme(wZ z0DwcYKSZew1OTQ60svD30f4D-xpXxceh1L8OUfKAiDDH9@bN3%9XCoHo&lU`an<*4 zU=9GL#+hD+$8Q{P*Y^Ve000000000000000V06~U<01Ihm5;llw7-n(-;6Xex?Zo} z-``I^QjS5zp5eV4gPw0q`t&Hqmc-2UtJO3COnU*b_I%DXYx z`3k0Ainh(^7ZWL~>;~2D`#(NDwp^5?`}Os;M7oeYV4n6gv1gv3yc?q^-F8b&?Oqcjr2WVAI!5?R_-|hNvAih1htF)hzrQcb^7i(Ycs};-F(bM?yj7r>&87L4 zrcX~TOfv@2X2vQL-7{lpUQRO*A7dz`-?&4XdCPm+1y!>srD$MMunMH-ZMWO)^YgQ2 zo{)x7v&Yyf?)R~%cZy@OPjSOUr^>+4bl%EtMrOShvJo1 zJi7a6wp@v&>zX=YtkKcaH*0gvcYrXdpP``C3_Z3Alz6vh`X94X1Y-R%%0+*dVV=mM zjb)qZLt?rIUb1OX@?*TKooNlkeA(q{@NP}|HTl-On|&rR7_QG90000000000000ck YKm6uBQ`=i}rT_o{07*qoM6N<$f)Sa8^#A|> diff --git a/etc/sys-oled.conf b/etc/sys-oled.conf new file mode 100644 index 0000000..487aec0 --- /dev/null +++ b/etc/sys-oled.conf @@ -0,0 +1,3 @@ +# Define your OLED display model. +# Check luma.oled project to check supported displays. +DISPLAY=sh1106 diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..1257aaa --- /dev/null +++ b/install.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# Install script for sys-oled + +INSTALL_PATH="/usr/local/" +SYSTEMD_PATH="/etc/systemd/" +DEPS="python-dev python-pip python-setuptools python-psutil libfreetype6-dev libjpeg-dev build-essential" + +if [ "$(id -u)" != "0" ]; then + echo "This script must be run as root!" + exit 1 +fi + +echo "Installing Dependencies" +apt-get update +apt-get install -y $DEPS + +echo "Installing luma.oled library" +pip install --upgrade luma.oled + +echo "Installing sys-oled files" +cp -frv bin "$INSTALL_PATH" +cp -frv etc "$INSTALL_PATH" +cp -frv share "$INSTALL_PATH" +cp -frv system "$SYSTEMD_PATH" + +echo "Enabling sys-oled at statup" +systemctl daemon-reload +systemctl enable sys-oled.service diff --git a/font/C&C Red Alert [INET].ttf b/share/sys-oled/C&C Red Alert [INET].ttf similarity index 100% rename from font/C&C Red Alert [INET].ttf rename to share/sys-oled/C&C Red Alert [INET].ttf diff --git a/img/helios4_logo.png b/share/sys-oled/helios4_logo.png similarity index 100% rename from img/helios4_logo.png rename to share/sys-oled/helios4_logo.png diff --git a/system/sys-oled.service b/system/sys-oled.service new file mode 100644 index 0000000..eab848d --- /dev/null +++ b/system/sys-oled.service @@ -0,0 +1,9 @@ +[Unit] +Description=System Starting on OLED Display + +[Service] +EnvironmentFile=/etc/sys-oled.conf +ExecStart=/usr/bin/python /usr/local/bin/sys-oled --display ${DISPLAY} + +[Install] +WantedBy=multi-user.target diff --git a/systemd/sys_oled_start.service b/systemd/sys_oled_start.service deleted file mode 100644 index 36f4f60..0000000 --- a/systemd/sys_oled_start.service +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=System Starting on OLED Display - -[Service] -Environment="SYSTEM_STARTING=1" -ExecStart=/usr/bin/python /usr/local/bin/sys_oled.py --display sh1106 - -[Install] -WantedBy=sysinit.target diff --git a/systemd/sys_oled_status.service b/systemd/sys_oled_status.service deleted file mode 100644 index dcafe3c..0000000 --- a/systemd/sys_oled_status.service +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=System Status on OLED Display -After=sys_oled_start.service - -[Service] -ExecStart=/usr/bin/python /usr/local/bin/sys_oled.py --display sh1106 - -[Install] -WantedBy=multi-user.target