Forum: Mikrocontroller und Digitale Elektronik I2C über Web / PHP


von Fabian S. (fabian727)


Lesenswert?

moin @ all,

ich habe an meinem raspberry pi einen attiny261A über I2C angeschlossen.
Desweiteren fungiert das raspberry pi als AccessPoint mit webserver.

Die einzelnen Kommunikationsstränge funktionieren alle einwandfrei.
Also:
Ich kann mich mit einem Client (Handy) im Netzwerk vom raspberry pi 
anmelden und eine website herunterladen.
Desweiteren kann ich per PHP Script über den I2C-Bus auf den Attiny 
zugreifen und eine LED ein / aus schalten.

Mein Problem: Wenn ich vom Client das PHP Script aufrufe, um die LED ein 
/ aus zuschalten, wird das Skript ausgeführt, es wird aber nicht auf den 
I2C-Bus zugegriffen.

Nochmal ausführlich:
1. Aufruf als user:
ich melde mich als www-data (webserver) user auf dem raspberry pi an.
Danach rufe ich das php skript auf. Dieses greift über i2c auf den 
attiny zu und schaltet die led ein / aus -> wunderbar, es funktioniert 
alles...

2. Aufruf als client:
ich melde mich per handy im netzwerk an. Danach rufe ich das PHP skript 
über den webbrowser auf. Ich bekomme auf dem Handy-Display, dass das 
Skript ausgeführt worden ist, jedoch tut sich am I2C Bus nichts.

So langsam weis ich nicht mehr weiter.

p.s.:
Ich habe auserdem versucht, den attiny über i2c auszulesen und mir auf 
per skript ausgeben zu lassen. Unter Weg 1 funktionierts, Weg 2 
scheitere ich...


Wo liegt das Problem?

: Verschoben durch User
von Sven B. (scummos)


Lesenswert?

Ohne dein Setup in der Hand zu haben stochert man da ziemlich im Dunkeln 
...

Schau mal, ob der Benutzer, der den Websever ausführt, Zugrifssrechte 
auf das i2c-Device-File hat. Dieser Benutzer ist i.d.R. nicht dein 
normaler Login-User und schon gar nicht root (sondern heißt www-data 
oder sonstwie).

Grüße,
Sven

von Fabian S. (fabian727)


Lesenswert?

Danke für die Anregung,

inzwischen habe ich das Problem gefunden:

Ich habe nicht den kompletten Pfad zur "Exe" angegeben, sondern nur den 
Namen ohne Pfad, da dieser als Standardnutzer, sowie als root oder als 
www-data mit pfad interpretiert wird...

jetzt mit kompletter Pfadangabe funktioniert es!

Ein anderer Hinweis der mich dorthin brachte: Immer Logfiles anschauen 
von den ausführenden Programmen!!! und Fehler anzeigen lassen, was geht, 
PHP hat dafür auch eine Funktion

von Simon S. (-schumi-)


Lesenswert?

Noch ein Pauschal-hint um dir möglicherweise zukünftig einige Nerven zu 
ersparen:

Falls der Bus sich sporadisch aufhänge sollte oder ähnliche 
Auffälligkeiten zeigt liegt das warscheinlich am verbuggten I²C 
interface des Broadcom-SOC. Die Hardware kann nämlich nur zum Teil mit 
clock-stretching umgehen (nur zu bestimmten Zeitpunkten). Mit dem 
I²C-Interface der AVRs beist sich das aber, weil die beliebig stretchen 
wenn nötig. Funktioniert also nur so lange wie der AVR den I²C ohne 
Wartezeiten bedienen kann..

von Sven B. (scummos)


Lesenswert?

Noch ein Pauschal-Hint: Kein PHP verwenden :D

von Fabian S. (fabian727)


Lesenswert?

was dann? Einen Ersatz bräuchte ich dann aber doch, ohne geht an der 
Stelle leider nicht

von Εrnst B. (ernst)


Lesenswert?

Schau mal in den Sicherheitseinstellungen der php.ini.

Da kann man z.B. dem mod_php verbieten, auf Dateien (z.B. 
i2c-devicenodes) ausserhalb des Webserver-Roots zuzugreifen.

Das Kommandozeilen-PHP hat eine eigene php.ini mit anderen 
Sicherheitseinstellungen, da ist sowas eher erlaubt.

von Sven B. (scummos)


Lesenswert?

Python, da gibt's auch ein schönes i2c-Interface für das Raspberry Pi.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.