• Buzz-01
  • Registratie: Juni 2002
  • Laatst online: 28-05 08:36
Ik ben met een projectje op een Raspberry bezig waarbij ik PhpSerial gebruik om een USB->UART converter aan te spreken.

Wanneer ik het script aanroep via de browser op mijn PC, telefoon, etc. dan werkt het prima en kan ik lezen van en schrijven naar de UART.

Wanneer ik inlog via SSH en het script vanaf de commandline probeer te runnen, krijg ik een error:
code:
1
PHP Fatal error:  No stty availible, unable to run. in /var/www/PhpSerial_rpi.php on line 56


Mijn uiteindelijke doel is om het script dagelijks op vaste tijden aan te roepen via een cronjob.

Ik lees op diverse fora dat dit hoogstwaarschijnlijk een rechtenprobleem is, maar ik kom er niet uit.
De meeste mensen klagen namelijk dat het via de webbrowser niet werkt, en dat werkt bij mij wel.

"stty" hoort bij de groep "dialout", dus de gebruiker www-data en de gebruiker pi zitten daar ook in (pi omdat ik het via de commandline wil runnen).

Ik heb de benodigde files in /var/www tijdelijk even 777 ge-chmod, maar dat helpt ook niet.

Wanneer ik stty intik op de commandline, zie ik:

code:
1
2
3
pi@raspbmc:/var/www$ stty
speed 38400 baud; line = 0;
-brkint -imaxbel


Dus stty zou voor de user pi moeten werken.
Toch werkt het niet wanneer ik mijn script met daarin de PhpSerial class run vanaf de commandline.

Wie kan mij op weg helpen?

Flickr


  • CAPSLOCK2000
  • Registratie: Februari 2003
  • Nu online

CAPSLOCK2000

zie teletekst pagina 888

Als het inderdaad een rechtenprobleem is dan heeft het niet te maken met iets in /var/www maar met een devicefile in /dev. Die usb->uart zou een file in /dev/ moeten hebben, bv /dev/ttyUSB0 .
Kun je die file vinden en wat voor rechten hangen daar aan?

Als je niet weet welke file het is kun je het waarschijnlijk terugvinden in 'dmesg'. Anders even controleren welke file er bij komt in /dev/ als je die converter insteekt.

[Voor 25% gewijzigd door CAPSLOCK2000 op 13-05-2015 13:37]

This post is warranted for the full amount you paid me for it.


  • Buzz-01
  • Registratie: Juni 2002
  • Laatst online: 28-05 08:36
Dank voor de tip, het probleem blijkt toch in het script te zitten.

Bij het implementeren van PhpSerial in mijn project, heb ik een aanpassing moeten doen in PhpSerial:
Hier vond ik dat stty de waarde 0 retourneert ipv 1, dus heb ik regel 50 aangepast:
code:
1
if ($this->_exec("stty") === 1) {

in plaats van:
code:
1
if ($this->_exec("stty") === 0) {


Met deze aanpassing werkte PhpSerial helemaal prima vanuit mijn webbrowser.
Maar blijkbaar niet vanuit de shell! Wanneer ik de oude code terugzet, werkt hij namelijk wel vanuit de shell.

Dat zou betekenen dat stty aan PHP wat anders retourneert via de webserver dan via de shell, of zie ik iets over het hoofd?

Flickr


Acties:
  • 0Henk 'm!

  • thunder7
  • Registratie: Januari 2003
  • Laatst online: 09:12

thunder7

houten vaas/schaal nodig?

De return-code kun je opvragen met $?:

stty -a; echo $?

geeft na de output van stty een regel 0 (de return-code).

stty -bla; echo $? geeft
stty: invalid argument`-bla'
Try 'stty --help' for more information
1

dus een return value van 1

Mogelijk geeft stty vanaf de ssh prompt toch een waarschuwing of foutmelding.

Als je er van af wil zijn, kun je natuurlijk atlijd:

code:
1
if ($this->_exec("stty") >=0) {


of zo iets, maar het negeren van return codes is niet altijd verstandig.

hout-nerd - www.hetmooistehout.nl of www.houtenschalen.nl


  • Buzz-01
  • Registratie: Juni 2002
  • Laatst online: 28-05 08:36
De afgelopen dagen heb ik niet veel tijd over gehad, maar vanmorgen heb ik even wat geprobeerd.
Heb even snel een file "sttytest.php" gemaakt:
code:
1
2
3
4
<?php
$test = exec("stty");
echo $test;
?>


Wanneer ik die run via de website retourneert hij niets (een lege pagina zonder output, hij echo't dus niets).

Wanneer ik hem via SSH run, is de output het volgende:
code:
1
2
pi@raspbmc:~$ php /var/www/sttytest.php
-brkint -imaxbel


Daar zit dus verschil in.
Ik weet dat stty in beide gevallen werkt en het gaat alleen op deze specifieke Pi draaien, dus voorlopig los ik het even op met
code:
1
if ($this->_exec("stty") >=0) {

en dan duik ik er later nog wel eens dieper in. Netjes is anders, maar voorlopig ff goed genoeg.

Flickr



Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee