Ik heb een Raspberry PI met een Apache2 webserver en een voorbeeld project.
Werkt perfect.
Nu wil ik de PHP-code veranderen van het voorbeeld project. (eerste keer dat ik PHP gebruik)
Als ik (om te beginnen) een simpel echo-statement of print statement toevoeg in de werkende PHP-module, dan krijg ik de run-time error:
localhost meldt het volgende: Something went wrong.
Wat moet ik nog doen om de wijziging te laten werken.
Het voorbeeld project displayt 8 knoppen. Als je die indrukt, verandert de kleur van de betreffende en gaat een IO pin aan.
Het voorbeeld project werkt perfect. Bestaat uit drie files: gpio.php, index.php en script.js. En natuurlijk de jpg-files voor de knoppen.
Nu wil ik de IO-aansturing veranderen in de file gpio.php. Deze file bevat een routine, die aangeroepen wordt als er een knop ingedrukt wordt.
Eerst heb ik een statement toegevoegd: echo ("button");
Daarna heb ik de Apache geherstart. En de browser gestart met localhost.
Als ik dan op een knop druk (op het scherm), dan wordt deze routine in de file gpio.php aangeroepen en komt meteen deze melding
Localhost meldt het volgende:
Something went wrong.
Toen heb ik dat opgezocht en er wordt iets verteld van development omgeving en productie omgeving.
Dat is niet per se op elke plek mogelijk.
Bijvoorbeeld niet in een class-definitie.
Maar het kan ook zijn, dat je nu een output gegenereerd hebt op een plek waar PHP nog verwacht dat de buffer nog leeg is.
Als daarna nog een cookie geset moet worden bijvoorbeeld, dan krijg je een fout.
Eigenlijk een niet-fatale fout, maar gezien de melding kan het ook zijn dat er nog een laag bovenop php ligt. Dat is namelijk niet de foutmelding zoals PHP die normaal geeft
[size=xsmall]Toevoeging op 29/05/2019 13:59:32:[/size]
Wat voor pakket is het eigenlijk?
Ik denk dat gpio.php een file is waar je niet te veel in moet veranderen.
Zou zo maar een class kunnen zijn.
Dit is de originele code van gpio.php. Lijke me recht-toe recht-aan code.
Ik had eerst aan het begin een echo-statement en daarna achteraan.
Ik heb ook een print-statement geprobeerd.
Het voorbeeldproject is: https://www.instructables.com/id/Web-Controlled-8-Channel-Powerstrip/
Wat ik wil doen is, de code veranderen zodat er geen rechtstreekse koppeling meer is tussen de gebruikte knop en de IO-pin.
Bv nu is knop 0 gekoppeld aan IO-0.
Wil ik veranderen in: knop 0 is gekoppeld aan IO-2 (een klep) en aan IO-10 (de waterpomp)
<?php
//TheFreeElectron 2015, http://www.instructables.com/member/TheFreeElectron/
//This page is requested by the JavaScript, it updates the pin's status and then print it
//Getting and using values
if (isset ( $_GET["pic"] )) {
$pic = strip_tags ($_GET["pic"]);
//test if value is a number
if ( (is_numeric($pic)) && ($pic <= 7) && ($pic >= 0) ) {
//set the gpio's mode to output
system("gpio mode ".$pic." out");
//reading pin's status
exec ("gpio read ".$pic, $status, $return );
//set the gpio to high/low
if ($status[0] == "0" ) { $status[0] = "1"; }
else if ($status[0] == "1" ) { $status[0] = "0"; }
system("gpio write ".$pic." ".$status[0] );
//reading pin's status
exec ("gpio read ".$pic, $status, $return );
//print it to the client on the response
echo($status[0]);
}
else { echo ("fail"); }
} //print fail if cannot use values
else { echo ("fail"); }
?>
Enkel de cryptische melding "Something went wrong" lijkt mij iets dat een hogere laag in het systeem teruggeeft (of is dit een Internal Server Error (500) van je browser?).
Hoe dan ook, het directe euvel / de directe aanleiding zou als het goed is in een errorlog moeten staan, heb je daar al in gekeken? Deze zou ergens onder /var/log/ moeten staan. Documentatie van Apache zou je hier ook verder wegwijs in kunnen maken.
Wat betreft je tijdsduur: Dat is een "uitdaging", omdat je dan 2x moet schakelen. IN en later weer UIT.
Zelf doe ik zo iets met een poort: die heeft een puls nodig van 0.5 sec om te openen. (vergelijk deurbel)
en ook om te stoppen. (zolang hij niet vol open gaat na 10 sec.)
dus daar doe je dan bij te voet binnengaan:
PIN-0 naar 1
wacht 0.5 sec
PIN-0 naar 0
wacht 3 sec
PIN-0 naar 1
wacht 0.5 sec
PIN-0 naar 0
Dat heb jij ook nodig voor je sproeiers. Alleen: Apache is niet ingericht om zo lang als 30 minuten te gaan zitten wachten. Die is doorgaans na hooguit 30 sec. wel klaar.
Het kán wel, maar dan moet je een proces op de achtergrond aantrappen.
Dan kan Apache door en loopt het proces op de achtergrond door tot de tijd op is.