ik heb hier een klein perl script geschreven dat de status van de gpio op m'n raspberry pi uitleest en bij wijziging dit wegschrijft in een mysql database
ik kan het script eenvoudig starten van de commandline door volgend commando:
op die manier blijft het draaien als de ssh client gesloten wordt.
Nu zou ik het script graag automatisch laten starten met de pi. Ik heb hiervoor reeds geprobeerd via de /etc/rc.local en onderaan (net voor exit 0) volgende bij te voegen:
Dit zonder resultaat echter...script start niet.
Vervolgens dacht ik het in de reboot cron te proberen, deze keer met de nodige paden volledig erbij:
Hiermee start het script wel op (is te zien bij ps -agx), maar werk het aanroepen van de gpio (wiringpi) niet...
hier ook het perl scriptje
Kan er me iemand verduidelijken waar ik fout ga? (en hoe ik het kan werkend krijgen?)
ik kan het script eenvoudig starten van de commandline door volgend commando:
code:
1
| nohup perl wp_status.pl privaat & |
op die manier blijft het draaien als de ssh client gesloten wordt.
Nu zou ik het script graag automatisch laten starten met de pi. Ik heb hiervoor reeds geprobeerd via de /etc/rc.local en onderaan (net voor exit 0) volgende bij te voegen:
code:
1
| (sleep 10; nohup perl wp_status.pl privaat)& |
Dit zonder resultaat echter...script start niet.
Vervolgens dacht ik het in de reboot cron te proberen, deze keer met de nodige paden volledig erbij:
code:
1
| @reboot nohup /usr/bin/perl /root/datalezen/wp_status.pl boven & |
Hiermee start het script wel op (is te zien bij ps -agx), maar werk het aanroepen van de gpio (wiringpi) niet...
hier ook het perl scriptje
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| #!/usr/bin/perl # # Promy 2013 # uitlezen van de sensoren van de pompen van de vloerverwarming # de pompen zijn aangesloten via relais aan de gpio pinnen: # privaat beneden: wiringpi pin 17 - P5 pin 3 - BCM GPIO 28 # privaat boven: wiringpi pin 18 - P5 pin 4 - BCM GPIO 29 # praktijk : wiringpi pin 19 - P5 pin 5 - BCM GPIO 30 # # via de parameter bepalen we welke pomp er moet uitgelezen worden # de mogelijkheden zijn privaat - boven - praktijk #dit is het script voor privaat beneden use Switch; #algemene variabelen bepalen aan de hand van de parameter switch($ARGV[0]) { case "privaat" {$pinnr = 17; $tabel = 'pomp_privaat';} case "boven" {$pinnr = 18; $tabel = 'pomp_boven';} case "praktijk" {$pinnr = 19; $tabel = 'pomp_praktijk';} else { print "foutieve input. Kies uit privaat - boven - praktijk"; exit 0;} } #start script #initialiseren van de pin $uitv0 = 'gpio mode '.$pinnr.' in'; system($uitv0); #basis zetten van de status , dit om foutieve interrupts niet in de database te krijgen #dit houdt nog geen rekening met de laatste input in de database. Dus daar is een mogelijkheid tot fouten. $status0 = `gpio read $pinnr`; #continue loop while (true) { #de wfi optie stopt het script tot er een interrupt langskomt $uitv1 = 'gpio wfi '.$pinnr.' both'; system($uitv1); #uitlezen van de status - 0 als niet actief - 1 als actief $status = `gpio read $pinnr`; if ($status0 != $status){ # de status is effectief veranderd, het was geen glitch if ($status == 1){$status0 = 1;} else {$status0 = 0;} #zo doen om eventuele pointer problemen te voorkomen. #nu in mysql database steken $jan = 'mysql -uroot -pPASSWORD statussen -e "INSERT into '.$tabel.'(datumtijd,status) values (NOW(),'.$status.')"'; #uitvoeren van het mysql commando system($jan); } } |
Kan er me iemand verduidelijken waar ik fout ga? (en hoe ik het kan werkend krijgen?)