doc:appunti:hardware:raspberrypi_thermostat
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
doc:appunti:hardware:raspberrypi_thermostat [2022/01/12 14:21] – [Installing on Raspberry Pi OS 2021-10-30 Bullseye] niccolo | doc:appunti:hardware:raspberrypi_thermostat [2022/01/12 15:51] – [Installing the old Adafruit LCD library] niccolo | ||
---|---|---|---|
Line 659: | Line 659: | ||
==== Installing the new Adafruit LCD library ==== | ==== Installing the new Adafruit LCD library ==== | ||
+ | |||
+ | **WARNING**: | ||
**WARNING**: | **WARNING**: | ||
Line 710: | Line 712: | ||
As reported above, the new **Adafruit CircuitPython PCD8544** library is more CPU intensive than the old discontinued one **[[https:// | As reported above, the new **Adafruit CircuitPython PCD8544** library is more CPU intensive than the old discontinued one **[[https:// | ||
- | FIXME Describe | + | We download |
+ | |||
+ | < | ||
+ | cd / | ||
+ | git clone https:// | ||
+ | cd Adafruit_Nokia_LCD/ | ||
+ | pip3 install . | ||
+ | </ | ||
==== Installing the Telegram Bot Python library ==== | ==== Installing the Telegram Bot Python library ==== | ||
Line 735: | Line 745: | ||
pip3 install telepot-12.7-py3-none-any.whl | pip3 install telepot-12.7-py3-none-any.whl | ||
</ | </ | ||
+ | |||
+ | ==== Starting the protherm service at bootstrap ==== | ||
+ | |||
+ | Raspberry Pi OS based on **Debian 11 Bullseye** uses **systemd** to start services on bootstrap. The **protherm** service requires the **/ | ||
+ | |||
+ | First of all we create an //udev// rule; the rule will force //systemd// to create a " | ||
+ | |||
+ | < | ||
+ | # Inform systemd when the kernel device / | ||
+ | # Systemd will create a systemd device named " | ||
+ | # can be used to trigger the start of a service. | ||
+ | ACTION==" | ||
+ | </ | ||
+ | |||
+ | 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**, | ||
+ | |||
+ | 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): | ||
+ | |||
+ | < | ||
+ | systemctl list-units --all --type=device | ||
+ | ... | ||
+ | dev-spidev0.0.device | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | 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 **/ | ||
+ | |||
+ | < | ||
+ | [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=/ | ||
+ | ExecStart=/ | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=multi-user.target | ||
+ | </ | ||
===== Web references ===== | ===== Web references ===== |
doc/appunti/hardware/raspberrypi_thermostat.txt · Last modified: 2022/01/12 16:11 by niccolo