User Tools

Site Tools


doc:appunti:hardware:raspberrypi_thermostat

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:hardware:raspberrypi_thermostat [2022/01/12 16:13] – [Starting the protherm service at bootstrap] niccolodoc:appunti:hardware:raspberrypi_thermostat [2022/01/12 17:11] (current) – [Installing the old Adafruit LCD library] niccolo
Line 659: Line 659:
  
 ==== Installing the new Adafruit LCD library ==== ==== Installing the new Adafruit LCD library ====
 +
 +**WARNING**: Do not use this library on the old Raspberry Pi model B, it is too CPU intensive! Use the old one.
  
 **WARNING**: The new library is more CPU intensive than the old one. I opened an **[[https://github.com/adafruit/Adafruit_CircuitPython_PCD8544/issues/16|issue on GitHub]]**. So I decided to give-up with the new library and use the old one (see below for installation tips). Here you can see a CPU utilization graph, the first half is using the old library, the second half is using the new one: **WARNING**: The new library is more CPU intensive than the old one. I opened an **[[https://github.com/adafruit/Adafruit_CircuitPython_PCD8544/issues/16|issue on GitHub]]**. So I decided to give-up with the new library and use the old one (see below for installation tips). Here you can see a CPU utilization graph, the first half is using the old library, the second half is using the new one:
Line 708: Line 710:
 ==== Installing the old Adafruit LCD library ==== ==== Installing the old Adafruit LCD library ====
  
-As reported above, the new **Adafruit CircuitPython PCD8544** library is more CPU intensive than the old discontinued one **[[https://github.com/adafruit/Adafruit_Nokia_LCD|Adafruit Nokia LCD]]**. Fortunately enough, the old library does run with Python 3, and I was able to use it on my old Raspberry Pi model B over the operating system derived from Debian 11 Bullseye. So the average CPU usage is **lower than 10%**, instead than **above 30%**!+As reported above, the old and discontinued library **[[https://github.com/adafruit/Adafruit_Nokia_LCD|Adafruit Nokia LCD]]** is less CPU intensive than the new **Adafruit CircuitPython PCD8544**. Fortunately enough, the old library does run with Python 3, and I was able to use it on my old Raspberry Pi model B over the operating system derived from Debian 11 Bullseye. So the average CPU usage is **lower than 10%**, instead than **above 30%**! 
 + 
 +The library is not available from the **[[https://pypi.org/|PyPI]]** repository, so it must be downloaded from the GitHub repository. The library depends upon **Adafruit_GPIO**, which in turn requires **Adafruit_PureIO** and **spidev**. The two Adafruit libraries are available from PyPI, for **spidev** we installed the Debian packaged version. 
 + 
 +<code> 
 +apt install python3-spidev 
 +mkdir -p /usr/local/download/Adafruit-GPIO 
 +cd /usr/local/download/Adafruit-GPIO 
 +pip3 download Adafruit-GPIO 
 +pip3 install Adafruit_PureIO-1.1.9-py3-none-any.whl 
 +pip3 install Adafruit_GPIO-1.0.3-py3-none-any.whl 
 +</code> 
 + 
 +We download the library from its **GitHub repository** and install it using **pip3**: 
 + 
 +<code> 
 +cd /usr/local/download 
 +git clone https://github.com/adafruit/Adafruit_Nokia_LCD.git 
 +cd Adafruit_Nokia_LCD/ 
 +pip3 install . 
 +</code> 
 + 
 +The dependencies tree is the following: 
 + 
 +  * Adafruit_Nokia_LCD 
 +    * Adafruit_GPIO 
 +      * Adafruit_PureIO 
 +      * spidev
  
-FIXME Describe the installation. 
 ==== Installing the Telegram Bot Python library ==== ==== Installing the Telegram Bot Python library ====
  
Line 743: Line 771:
  
 <file> <file>
-Create a systemd device "dev-spidev0.0.device" to trigger the start of the service. +Inform systemd when the kernel device /dev/spidev0.0 becomes available. 
-SUBSYSTEM=="spidev", KERNEL=="spidev0.0", TAG+="systemd"+# Systemd will create a systemd device named "dev-spidev0.0.device", which 
 +# can be used to trigger the start of service. 
 +ACTION=="add", SUBSYSTEM=="spidev", KERNEL=="spidev0.0", TAG+="systemd"
 </file> </file>
  
-We use two keywords that must be matched (because of the **%%==%%** sign) during a device event: if the event is triggered by the **spidev** subsystem and the kernel device name is **spidev0.0**, //udev// adds the string **systemd** to the **TAG** key associated to the device itself.+We use three keywords that must matched (because of the **%%==%%** sign) during an udev event. If the event is of type device **add**, the device belongs to the **spidev** subsystem and the kernel device name is **spidev0.0**, //udev// adds the string **systemd** to the **TAG** key associated to the device itself.  
 + 
 +Systemd includes the **systemd-udevd.service** which will notice every device tagged witht the string **systemd** and dynamically creates a **device unit**. In this case the unit will be called **dev-spidev0.0.device**. You can ask systemd to list all the existing device units (because of the **%%--all%%** option, also the short name is listed): 
 + 
 +<code> 
 +systemctl list-units --all --type=device 
 +... 
 +  dev-spidev0.0.device   loaded active   plugged /dev/spidev0.0 
 +... 
 +</code> 
 + 
 +If the systemd device does not exist, it probably means that the udev rule did not worked as expected. Thanks to this systemd device unit, we can write a protherm systemd unit that will start the service only after the device is instantiated by the kernel. The systemd unit will be **/etc/systemd/system/protherm.service**: 
 + 
 +<file> 
 +[Unit] 
 +Description=Programmable Thermostat Service 
 +After=syslog.target 
 +# Wait for spidev0.0 systemd device to be available. 
 +After=dev-spidev0.0.device 
 +Requires=dev-spidev0.0.device 
 + 
 +[Service] 
 +Type=simple 
 +WorkingDirectory=/tmp/ 
 +ExecStart=/usr/local/sbin/protherm -f 
 + 
 +[Install] 
 +WantedBy=multi-user.target 
 +</file>
  
 ===== Web references ===== ===== Web references =====
doc/appunti/hardware/raspberrypi_thermostat.1642000402.txt.gz · Last modified: 2022/01/12 16:13 by niccolo