Yhden piirilevyn tietokone, johon on rakennettu Python sovellus keräämään dataa toisesta laitteesta ja lähettämällä sitä MariaDB / MySQL tietokantaan. Raspberry Pi:stä lähtee kolme GPIO pinniä jotka ottaa yhteyden toiseen laitteeseen. Tässä työssä on otettu yhtyes laitteeseen hyödyntäen releitä jotka sieppaavat signaaleja. Python koodi on keskeneräinen, mutta käytetään tuotannossa. Sovelluksia joita käytetään Windows tietokoneella:
- Putty (SSH yhteyden muodostaminen)
- Raspberry Pi Imager (Käyttöjärjestelmän asennus SD-kortille)
- Visual Studio Code
- Python 3.7
- MariaDB (jos tietokanta asennetaan tietokoneelle ja dataa tuodaan Raspberry Pi:stä)
- MariaDB ODBC Connector 3.1.X (Vaaditaan Power BI:n kanssa, että yhteys voidaan muodostaa)
- HeidiSQL (Asentuu MariaDB sovelluksen yhteydessä halutessa)
- Power BI (Kaavioiden luontiin ja datan visualisointi)
Merkittävät muutokset julkaisuun
pvm | Muutokset | Tekijä |
---|---|---|
21.6.2023 | Versio 1.0 julkaisu | Saku Kaarlejärvi |
21.6.2023 | Zenodo julkaisu | Saku Kaarlejärvi |
9.8.2023 | Versio 1.1 julkaisu | Saku Kaarlejärvi |
24.8.2023 | Versio 1.2. Päivitetty DOI ja ohjelmakoodia | Saku Kaarlejärvi |
- Julkaisun nimi
- Julkaisun historiatiedot
- Sisällysluettelo
- Teknologiapilotti
- Hanketiedot
- Kuvaus
- Tavoitteet
- Toimenpiteet
- Asennus ja käyttö
- Python ohjelman käyttö
- Havaitut virheet ja ongelmatilanteet
- Vaatimukset
- Tulokset
- Lisenssi
- Tekijät
TehoData-hankkeen pilotissa 3 pyrittiin luomaan tuotannon seurannan datankeruu sovellus hyödyntäen yhdenpiirilevyn tietokonetta ja avoimen lähdekoodin tietokantaa.
- Hankkeen nimi: Datasta ketteryyttä ja uutta liiketoimintaa Etelä-Pohjanmaan pk-yrityksiin (TehoData)
- Rahoittaja: Keski-Suomen ELY/ Euroopan sosiaalirahasto ESR
- Aikataulu: 1.9.2021–31.10.2023 Hanke rahoitetaan REACT-EU-välineen määrärahoista osana unionin covid-19-pandemian johdosta toteuttamia toimia. TehoDatan hankesivut löytyvät osoitteesta https://projektit.seamk.fi/alykkaat-teknologiat/tehodata/
Python koodi jolla kerätään dataa lähettämällä sitä MariaDB / MySQL tietokantaan. Raspberry Pi:stä lähtee kolme GPIO pinniä jotka ottaa yhteyden toiseen laitteeseen. Tässä työssä on otettu yhtyes laitteeseen hyödyntäen releitä jotka sieppaavat signaaleja.
Pilotissa kehitettiin sovellusta Raspberry Pi 4 laitteelle jolla pystytään keräämään dataa seuratakseen tuotantoa. Kerättyä dataa pystytään visuaalisesti katsoa kaavioista.
Raspberry Pi 4 valmisteltiin pilottiyritystä varten tuotannon seurantaan. Kyseiselle Raspberry Pi:lle kehitettiin sovellus jolla pystytään kaappaamaan kolmesta eri pinnistä dataa. Nämä datat tuovat esille, onko laite sammutettu, käynnistetty, odottamassa toimeenpiteitä ja leikkaustilassa. Python -ohjelmointikielellä rakennettu sovellus luo näistä tiedoista dataa joka siirretään pilottiyrityksen omaan MariaDB tietokantaan, jota voidaan visuaalisesti käsitellä eri sovelluksissa.
Lista sovelluksista:
- Putty (SSH yhteyden muodostaminen)
- Raspberry Pi Imager (Käyttöjärjestelmän asennus SD-kortille)
- Visual Studio Code tai jokin muu IDE -sovellus
- Python 3.7
- MariaDB (jos tietokanta asennetaan tietokoneelle ja dataa tuodaan Raspberry Pi:stä)
- MariaDB ODBC Connector 3.1.X (Vaaditaan Power BI:n kanssa, että yhteys voidaan muodostaa)
- HeidiSQL (Asentuu MariaDB sovelluksen yhteydessä halutessa)
- Power BI (Kaavioiden luontiin ja datan visualisointi)
Tästä GitHub repositorista tarpeellisin ladattava on vain mariadbCon.py -tiedosto joka siirretään Raspberry Pi:lle / yhden piirilevyn tietokoneeseen.
Vaatimukset yhden piirilevyn tietokoneelta:
- Vaihtoehtoisesti "Headless" debian käyttöjärjestelmä asennus. Pystytään Raspberry Pi Imager -sovelluksella esiasetukset (WLAN, kieli, käyttäjätili ja salasana) ja VNC yhteydellä etäyhteys laitteeseen.
- Raspberry Pi (2 - 4)
- GPIO pinnejä
- Debian pohjautuva -linux distro.
- Python versio 3.7. Python versio voidaan asentaa 3.10 asti, mutta vaatii vianselvityksiä saadakseen esim. GPIO pinnien toimimaan. Tässä esimerkissä asensin ohjeiden mukaan Python 3.9.16 version
Raspberry Pi:lle MariaDB/MySQL tietokanta ja tarvittaessa tietokannan hallintaan graafisella käyttöjärjestelmä Apache2 ja phpMyAdmin.
MariaDB serverin asennus Raspberryyn:
sudo apt install mariadb-server
Asennuksen jälkeen on suoritettava MySQL Secure asennus
sudo mysql_secure_installation
Terminaaliin Y/N vastauksia vaatimuksien mukaan.
Asennuksen jälkeen kirjaudutaan MariaDB serveriin syötetyillä "root" käyttäjätiedoilla.
sudo mysql -u root -p
MySQL kysyy asennuksessa syötettyä root -salasanaa. Syöttämällä sen varmistetaan MariaDB toimivuus.
Kirjauduttua sisään MariaDB tietokantaan, voidaan rakentaa oma tietokanta ja taulukko.
DROP DATABASE IF EXISTS db_esimerkki;
CREATE DATABASE db_esimerkki;
Tietokanta "db_esimerkki" on luotu ja sille annetaan seuraavaksi taulukkotiedot.
Taulukon voi luoda käyttämällä GUI:ta käyttävää HeidiSQL:ää pöytäkoneella tai asennettaessa PHPMyAdmin ja Raspberry Pi:llä selaimen kautta. Tässä esimerkissä olen luonut HeidiSQL sovelluksella taulukon ja kopioinut skriptin siitä.
Taulukon luonti datasyöttöä varten:
HUOM!
Yleisesti "duration" eli kesto -dataa on hyvä mitata sekuntteina. mariadbCon.py tiedostossa luodaan "hh:mm:ss"
dataa joka on virheellinen tapa merkata kesto. Power BI:ssä esimerkisi vaaditaan muuttaa "duration" data sekunteiksi pilkkomalla hh:mm:ss
omiin osiinsa ja käyttämällä laskentakaavioita saadakseen oikean tuloksen ja muuntaa takaisin hh:mm:ss
muotoon.
DROP TABLE if exists laserdata;
CREATE TABLE `laserdata` (
`machine_id` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`start_time` DATETIME NULL DEFAULT NULL,
`end_time` DATETIME NULL DEFAULT NULL,
`duration` VARCHAR(50) NULL DEFAULT NULL,
`isFault` TINYINT(10) NULL DEFAULT NULL
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
MariaDB:n käyttäjän luonti. Root ei ole suotavaa käyttää . "käyttäjänimi" ja "käyttäjänsalasana" kohdille laitetaan omat halutut tiedot.
DROP USER IF EXISTS käyttäjänimi;
CREATE USER 'käyttäjänimi'@'%' IDENTIFIED BY 'käyttäjänsalasana';
GRANT SELECT, INSERT, DELETE, UPDATE ON db_esimerkki.laserdata TO 'käyttäjänimi'@'%';
FLUSH PRIVILEGES;
Jos yhteysongelmia ilmenee käyttäjätilin kanssa, voidaan kokeilla syöttää oikeus jokaiselle IP osoittelle. Tämä ei ole suositeltavaa tietoturva syistä: CREATE USER 'käyttäjänimi'@'%.%.%.%' IDENTIFIED BY 'käyttäjänsalasana';
tai syöttää manuaalisesti IP osoite, josta pystytään ottamaan yhteyttä.
Esim. CREATE USER 'käyttäjänimi'@'192.168.0.21' IDENTIFIED BY 'käyttäjänsalasana';
Tai reitittimen määrittämästä IP osoite alueelta: CREATE USER 'käyttäjänimi'@'192.168.0.%' IDENTIFIED BY 'käyttäjänsalasana';
sudo apt-get install libmariadb3 libmariadb-dev
#Vanhempi
sudo python3 -m pip install mariadb
Jos yrittää asentaa uusinta versiota esim 1.1.6, tulee virhe ilmoitus:
× Getting requirements to build wheel did not run successfully.
│ exit code: 2
╰─> [1 lines of output]
MariaDB Connector/Python requires MariaDB Connector/C >= 3.3.1, found version 3.1.16
[end of output]
MariaDB 1.0.11 versio on uusin mahdollinen päivitys ARM pohjasille laitteille. Asentamalla mariadb==1.0.11 saa viimeisimmän päivityksen Raspberry:lle.
sudo python3 -m pip install mariadb==1.0.11
sudo apt install phpmyadmin
PHP asennusikkuna kysyy ensimmäisenä, mikä webserver palvelu asennetaan. Tässä esimerkissä Apache2 valitaan välilyönnillä ja siirrytään eteenpäin rivinvaihdolla. Asennus kyselee tietoja ja halutessa syötetään halutut tiedot, kuten PHPMyAdminin salasanat ja muut tärkeät tiedot.
Asennuksen jälkeen on muokattava Apache2 konfiguraatiotiedostoa.
sudo nano /etc/apache2/apache2.conf
Tekstieditori avaa Apache2.conf tiedoston jonne lisätään pohjalle koodi:
Include /etc/phpmyadmin/apache.conf
CTRL - X ja Y ja Enter. Tiedostoon tehdyt muutokset tallennetaan.
Tarvittavat lisäpalvelut on asennettava, että PHPMyAdmin sivusto toimii
apt install php7.4 libapache2-mod-php7.4 php7.4-mbstring php7.4-mysql php7.4-curl php7.4-gd php7.4-zip -y
Apache2 palvelu on hyvä uudelleen käynnistää komennolla:
sudo service apache2 restart
Komennolla "hostname -I" saadaan selville IP-osoite jolla päästään PHPMyAdmin sivulle. Esimerkkinä tulee näkyviin "192.168.0.21" ja tähän lisätään perään "/phpmyadmin"
hostname –I
192.168.0.21
Selaimeen voidaan syöttää osoite http://192.168.0.21/phpmyadmin
ja PHPMyAdmin kirjautumisvalikko pitäisi avautua.
Linux Distroille on kehitetty monenlaisia sovelluksen automaattisia käynnistyspalveluita ja käyttäjä itse saa päättää mitä haluaa käyttää tai hyödyntää. Tässä esimerkissä olen käyttänyt SystemD. Vaihtoehtoisesti suosittelen crontab yksinkertaisuuden takia.
Crontab on yksinkertainen vaihtoehto laittamaan palveluita käyntiin laitteen käynnistyessä. Ohjeita löytyy erillaisille toiminnoille ja mitä halutaan saavuttaa vaikka Raspberry Pi / SBC käynnistyksessä.
Asennusohjeita seuraamalla asennetaan Crontab terminaalista sudo apt install cron
Tässä esimerkissä tein Raspberry Pi OS:n natiiville SystemD palvelulle käynnistyskäskyt.
Jos jostain syystä ei ole asennettuna systemd
pakettia, se pystytään asentamaan komennolla: sudo apt install libsystemd-dev
tälläisen paketinasennuksen jälkeen on suositeltavaa käynnistää laite uusiksi
Terminaaliin kirjoitetaan komento, jolla luodaan oma "Service" laitteelle.
sudo nano /lib/systemd/system/rasplaser.service
korvaamalla "rasplaser" voidaan lisätä oma palvelunnimi. esim sudo nano /lib/systemd/system/omapalvelualoitussovellus.service.
Tässä esimerkissä loin rasplaser.service
tiedoston jonne laitetaan halutut komennot ja määritykset käynnistyessä.
Palvelu tiedostoon rasplaser.service
lisätään seuraavat komennot:
[Unit]
#Human readable name of the unit
Description=Python Script LaserMachine
After=network.target multi-user.target
[Service]
User=pi
Type=idle
ExecStart=/usr/bin/python /home/pi/Desktop/sshVSC/mariadbCon.py
[Install]
WantedBy=multi-user.target
HUOM!
Kohta ExecStart=
ja /home/pi/Desktop/sshVSC/mariadbCon.py
on ohjelmakoodin sijainti. Varmista että sijainti on oikea ja olemassa laitteessa. Muuten sovellus ei tule käynnistymään
Tämä on tällä hetkellä minulla toimiva rasplaser.service tiedosto. README:n lopusta löytyy eri vaihtoehtoja ja havaittuja virheitä ja korjausehdotuksia.
CTRL - X ja Y ja Enter. Tiedostoon tehdyt muutokset tallennetaan.
Oikeudet lukea service käynnistyessä:
sudo chmod 755 /home/pi/Desktop/sshVSC/
sudo chmod 644 /lib/systemd/system/rasplaser.service
Terminaaliin on syötettävä sudo systemctl daemon-reload
virkistääkseen käynnistyskomennot Raspberry:stä
sudo systemctl daemon-reload
sudo systemctl enable rasplaser
sudo systemctl start rasplaser
Terminaaliin kirjoitettu sudo systemctl enable rasplaser
voidaan aktivoida luotu palvelu käynnistykseen.
$ sudo systemctl enable rasplaser
Created symlink /etc/systemd/system/multi-user.target.wants/rasplaser.service → /lib/systemd/system/rasplaser.service.
Terminaaliin kirjoitettuna sudo systemctl status rasplaser
nähdään, onko service aktiivinen
rasplaser.service - Python Script LaserMachine
Loaded: loaded (/lib/systemd/system/rasplaser.service; disabled; vendor pr>
Active: active (running) since Tue 2023-04-24 10:21:37 EET; 3s ago
Main PID: 29502 (python)
Tasks: 1 (limit: 8986)
CPU: 134ms
CGroup: /system.slice/rasplaser.service
└─29502 /usr/bin/python /home/pi/Desktop/sshVSC/mariadbCon.py
Dec 20 18:21:37 rpam systemd[1]: Started Python Script LaserMachine.
Suorittamalla tämän jälkeen sudo reboot -h now
voidaan uudelleen käynnistyksen jälkeen tarkistaa toimiiko automaattinen palvelunkäynnistys.
Kirjoittamalla uudelleen sudo systemctl status rasplaser
komentoriville ja tarkista onko palvelu aktiivinen ja mikä "Main PID" palvelulla on. Ylhäällä huomataan palvelun olevan 29502, eli mitä suurempi luku, sitä myöhässä se käynnistyy. Uudelleen käynnistämällä selviää oikea "Main PID" luku.
● rasplaser.service - Python Script LaserMachine
Loaded: loaded (/lib/systemd/system/rasplaser.service; enabled; vendor pre>
Active: active (running) since Tue 2023-04-24 10:30:28 EEST; 15s ago
Main PID: 917 (python)
Tasks: 2 (limit: 1629)
CPU: 8.463s
CGroup: /system.slice/rasplaser.service
└─917 /usr/bin/python /home/pi/Desktop/sshVSC/mariadbCon.py
Apr 25 10:30:28 rpi3B systemd[1]: Started Python Script LaserMachine.
Tiedosto mariadbCon.py on ladattavissa ja siirrettävissä käyttöönottoa varten määritettyyn kansioon, kuten SystemD esimerkissäni olen käyttänyt /home/pi/Desktop/sshVSC/mariadbCon.py
osoitetta.
Python koodi tarvitsee muutoksia, jotka on mariadbCon.py
-tiedostoon merkitty #
-kommentteina.
Risuaita rivinalussa on kommentti, jota ohjelma ei pysty lukemaan. Sinne voidaan kirjoittaa mitä vain eikä se häiritse ohjelman suorittamista.
Raspberry Pi:n GPIO pinnit selitettynä.
Tässä Python ohjelmassa ovat GPIO pinnit 23, 24 ja 25 ovat valittuna. Pinnit ovat järjestysluvuiltaan 16, 18 ja 22. Näihin kytketään kolme kytkintä joilla kerätään tuotantolaitteesta dataa.
23 | 24 | 25 |
---|---|---|
Laseri päällä | Laite on IDLE -tilassa | Laite on päällä |
Ohjelmakoodiin on määritettävä muutoksia saadakseen se toimivaksi omaan käyttöön. Lataamalla ja siirtämällä mariadbCon.py
-tiedoston on varmistettava, että se on SystemD käynnistyspalvelun mukaisesti rasplaser.service
määritetyssä tiedostopolussa. Muuten ohjelma vain käynnisty ja ei tee mitään. Tätä polkua voidaan muokata omaan haluttuun sijantiin ja on tehtävät tarvittavat muutokset sovelluksen toimivuudeksi.
Python ohjelmassa on rivillä 69 määritetty tiedostopolku alla olevan kuvanmukaisesti:
Tiedostopolun määrittelyn jälkeen on luotava kirjautumiskredentiaalit. Luodaan JSON -tiedosto esimerkiksi userconf.json
. Tekstitiedostoa muokkaamalla pystytään lisäämään userconf.json
tiedostoon kirjautumiskredentiaalit, jonka ohjelma lukee kirjautuakseen sisään määritettyyn MariaDB -tietokantaan.
Tekstitiedostoon lisätään käyttäjätilitiedot user
ja password
.
Myös luetaan tiedostosta tietokannan IP-osoite host
esimerkiksi 192.168.0.21
tai jos Raspberry PI:n omaan MariaDB tietokantaan, niin localhost
. Tietokannan port
on vakiona 3306
ja lopuksi määritetään database
eli tietokanta, johon yhteys muodostetaan. Esimerkissä luotiin tietokanta db_esimerkki
.
Alla on esimerkki tiedostosta userconf.json
:
{
"user": "käyttäjänimi",
"password": "käyttäjänsalasana",
"host": "192.168.0.21",
"port": 3306,
"database": "db_esimerkki"
}
Tiedoston voi ladata täältä.
Tämän userconf.json
tiedosto luonnin jälkeen on hyvä varmistaa, että ohjelmakoodi lukee oikean tiedoston saadakseen yhteyden MariaDB -tietokantaan.
Kuvassa on esimerkki, missä pystytään tarkistamaan minkä tiedoston ohjelma lukee.
Kuvassa ohjelma lukee jsonPath
määritetystä tiedostopolusta userconfHome.json
-tiedoston. Tämä pitää varmistaa, että yhteys onnistuu halutulle MariaDB -tietokannalle
-Tarkista verkkoyhteys, myös Wi-Fi yhteys jos langatonverkkoyhteys on käytössä.
Palvelu ei käynnisty laitteen käynnistyksen yhteydessä, mutta käynnistyy sudo systemctl restart omapalvelu.service
jälkeen.
Tähän ongelmaan voi olla monta selitystä ja ratkaisuja.
Ensimmäisenä testasin sudo systemctl status rasplaser.service
komentoa tarkastaakseni ohjelman statuksen. Kaikki vaikutti hyvältä ja terminaali palautti tekstin:
pi@rpi3B:~ $ sudo systemctl status rasplaser.service
● rasplaser.service - Python Script LaserMachine
Loaded: loaded (/lib/systemd/system/rasplaser.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-08-09 12:11:49 EEST; 2min 9s ago
Main PID: 725 (python)
Tasks: 1 (limit: 1629)
CPU: 544ms
CGroup: /system.slice/rasplaser.service
└─725 /usr/bin/python /home/pi/Desktop/sshVSC/mariadbCon.py
Mitään ongelmaa ei ole havaittavissa ja palvelu pyörii aktiivisesti. Mutta käännettyäni kytkimen asentoa ja syöttämällä terminaaliin uudelleen
sudo systemctl status rasplaser.service
ilmestyy ongelma:
pi@rpi3B:~ $ sudo systemctl status rasplaser.service
● rasplaser.service - Python Script LaserMachine
Loaded: loaded (/lib/systemd/system/rasplaser.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2023-08-09 12:14:21 EEST; 6s ago
Process: 725 ExecStart=/usr/bin/python /home/pi/Desktop/sshVSC/mariadbCon.py (code=exited, status=1/FAILURE)
Main PID: 725 (code=exited, status=1/FAILURE)
CPU: 645ms
Aug 09 12:14:21 rpi3B python[725]: self.laserDataRead(machine_id, start_time,end_time,duration, isFault)
Aug 09 12:14:21 rpi3B python[725]: File "/home/pi/Desktop/sshVSC/mariadbCon.py", line 405, in laserDataRead
Aug 09 12:14:21 rpi3B python[725]: self.stopMeasuringTimer(machine_id, start_time, end_time, duration, isFa>
Aug 09 12:14:21 rpi3B python[725]: File "/home/pi/Desktop/sshVSC/mariadbCon.py", line 321, in stopMeasuringTi>
Aug 09 12:14:21 rpi3B python[725]: self.dataSendDb(machine_id, start_time, end_time, duration, isFault)
Aug 09 12:14:21 rpi3B python[725]: File "/home/pi/Desktop/sshVSC/mariadbCon.py", line 106, in dataSendDb
Aug 09 12:14:21 rpi3B python[725]: self.conn.commit()
Aug 09 12:14:21 rpi3B python[725]: AttributeError: 'mainClass' object has no attribute 'conn'
Aug 09 12:14:21 rpi3B systemd[1]: rasplaser.service: Main process exited, code=exited, status=1/FAILURE
Aug 09 12:14:21 rpi3B systemd[1]: rasplaser.service: Failed with result 'exit-code'.
Virhe:
AttributeError: 'mainClass' object has no attribute 'conn'
Tästä on vaikea päätellä mikä olisi ongelmana. Tarkistamalla Raspberry Pi:lle luodoun rasplaser.service
SystemD käynnistyslogiikka, voidaan päätellä että verkkoyhteys ongelma tai yhteydessä vikaa kun ollaan määritetty IP-osoitteet ja kredentiaalit.
Avattuani sudo nano /lib/systemd/system/rasplaser.service
komennolla palvelun auki, tarkistin seuraavan osion:
[Unit]
##Human readable name of the unit
Description=Python Script LaserMachine
After=network.target multi-user.target
[Unit]
alueelta minulta puuttui After
kohdasta network.target
joka odottaa verkonkäynnistymistä, ennen kuin se aloittaa palvelun. Korjattuani asian, Raspberry Pi odottaa network palvelun käynnistystä, kun se voi käynnistää rasplaser.service
:n.
[Unit]
##Human readable name of the unit
Description=Python Script LaserMachine
After=network.target multi-user.target
[Service]
User=root
Type=idle
ExecStart=/usr/bin/python3 -u /home/pi/Desktop/sshVSC/mariadbCon.py
WorkingDirectory=/home/pi/Desktop/sshVSC
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Kokemuksellani, User=pi
ei aina löydä paketteja, joten voidaan vaihtoehtoisesti käyttää User=root
käyttäjää
Myös monen ongelmatilanteen jälkeen huomattiin, että lisäämällä rasplaser.service tiedostoon Restart=on-failure
ja WorkingDirectory=/home/pi/jokinsijainti
saadaan käynnistys toimimaan. Muista lähteistä löytyy hyvät ohjeet lisätä python skripti ja tärkeät tiedostot "järjestelmän" kansioihin, ettei tarvitse välittää chmod 755
tai muista oikeuksien lisäämisestä.
Näiden lisäksi, Python pakettien asennuksia voidaan joutua suorittamaan uudelleen. Paketit saattavat "kadota" tai "hukkua" käyttöoikeuksista JOS käytetään User=root
käyttäjää palvelukonfiguraatiossa. Uudelleen asennukset on suositeltavaa tehdä sudo
:lla saadakseen pääkäyttäjä oikeudet ja python3
:lla varmistetaan että asennetaan oikealle Python versiolle paketit. Esimerkki komento terminaaliin: sudo python3 -m pip install [package-name]
Minulle ilmeni vastaavia ongelmia ja tiedä tarkempia syitä, mitkä tekijät ovat tuoneet nämä viat vastaan. Tälläisissä projekteissa on myös suotavaa rakentaa venv
eli virtuaali ympäristö jonne asennetaan omat halutut ja tarvittavat paketit, sekä rasplaser.service
tiedostoon määritetään sijainti mistä tämä sovellus ajetaan hyödyntäen virtuaali ympäristöä. Tässäkin tapauksessa, jos on syötetty arvot User=root
palvelutiedostoon, on tärkeä myöntää kansiolle chmod 755
kirjoitus- ja lukuoikeudet.
[Unit]
#Human readable name of the unit
Description=Python Script LaserMachine
After=network.target multi-user.target
[Service]
User=pi
Type=idle
ExecStart=/usr/bin/python /home/pi/Desktop/sshVSC/mariadbCon.py
[Install]
WantedBy=multi-user.target
Viimeisimmässä havainnoissani huomasin virheen ja selvitin, miksei rasplaser.service
lähtenyt käyntiin. After=network.target
viivästyttää vielä Python skriptin aktivoinnin, että MariaDB / MySQL Service pystyvät aktivoitumaan. sudo systemctl status rasplaser
antoi virheeksi, ettei kykenyt lukemaan MariaDB .json tiedosta, jossa on kirjautumistiedot.
Myös eri vaihtoehto ongelmien korjaamiseen on asentaa uusi NetworkManagerin. Tämä on stabiilimpi ja varmempi nettikonfiguroinneissa ja tulee korvaamaan nykyisen dhcpcd. Tarkemmat asennusohjeet löytyvät Stack Exchange sivustolta, mutta yksinkertaisesti:
sudo apt install network-manager network-manager-gnome
sudo systemctl enable NetworkManager
sudo systemctl start NetworkManager
sudo systemctl disable dhcpcd
sudo reboot -h now
On tärkeää tarkistaa DHCP -palvelun tila ettei se ole häiritsemässä taustalla.
pi@rpi3B:~ $ sudo systemctl status dhcpcd
● dhcpcd.service - DHCP Client Daemon
Loaded: loaded (/lib/systemd/system/dhcpcd.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:dhcpcd(8)
Tulossa pian...
Dokumentit lisensoitu:
Saku Kaarlejärvi