Hallo,
ich möchte die GPIO Schnittstelle verwenden um einen EVENT auszulösen.
Mit folgendem Script simuliere ich einen Tastendruck:
#!/bin/bash
if [ ! -d /sys/class/gpio/gpio23 ]; then
echo 23 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio23/direction
fi
echo 1 > /sys/class/gpio/gpio23/value
sleep 10
echo 0 > /sys/class/gpio/gpio23/value
In FHEM habe ich folgendes konfiguriert:
define GPIO_23 RPI_GPIO 23
attr GPIO_23 devStateIcon on:on off:off
attr GPIO_23 direction output
Das Reading "Pinlevel" ändert sekündlich den Timestamp und wenn ich ich das Script ausführe, verändert sich der Pinlevel von "low" zu "high" und noch 10 Sekunden wieder zurück.
Aber wie kann ich jetzt ein DOIF oder NOTIFY darauf verwenden?
Das habe ich versucht um z.B. eine Lampe blinken zu lassen.
define not_GPIO23 notify GPIO_23:Pinlevel.* { fhem ("set HUEDevice1 blink 10") }
Aber es passiert nichts nach Ausführung des Scripts.
Was fehlt hier bitte?
Danke und Gruß
Thomas
werden im eventmonitor events angezeigt?
Nein, das ist ja das Problem. Ich habe auch schon "event-on-update-reading" und "event-on-change-reading" bezogen auf "Pinlevel" ausprobiert.
Aber ich denke das kann nicht gehen, da der Timestamp des Pinlevel ständig mitläuft.
Ich weiß nicht, wie ich es hinbekommen soll den "state" des GPIO_23 zu ändern.
ZitatDas Reading "Pinlevel" ändert sekündlich den Timestamp und wenn ich ich das Script ausführe, verändert sich der Pinlevel von "low" zu "high" und noch 10 Sekunden wieder zurück.
define not_GPIO23 notify GPIO_23:Pinlevel.* { fhem ("set HUEDevice1 blink 10") }
Aber es passiert nichts nach Ausführung des Scripts.
Was fehlt hier bitte?
1. kürzer und funktionsgleich wäre das :
set HUEDevice1 blink 10
2. Wenn es sekündlich eine Änderung gibt welchen Sinn macht es dann ein anderes Gerät in 10 sec blinken zu versetzen?
Wie genau hast Du die event-on Attribute bestückt, gib da mal ein list von GPIO_23.
Gruß Otto
Bitte sehr:
Internals:
CFGFN
DEF 23
GPIO_Basedir /sys/class/gpio
GPIO_Nr 23
NAME GPIO_23
NR 910
STATE off
TYPE RPI_GPIO
WiringPi_gpio /usr/bin/gpio
OLDREADINGS:
READINGS:
2018-07-06 15:28:18 Pinlevel low
2018-07-06 00:34:32 state off
fhem:
interfaces switch
Attributes:
devStateIcon on:on off:off
direction output
Mein Ziel ist ja, dass ich per Script den Status auf "on" und nach 10 Sekunden wieder auf "off" wechseln kann.
Ein DOIF funktioniert genauso wenig.
define doif_GPIO23 DOIF ( [GPIO_23:Pinlevel] eq "high" ) ( set HUEDevice1 blink 10 )
Ok, ich glaube ich habe die Lösung gefunden. K.A.ob das so gewollt ist, aber es funzt zumindest.
defmod GPIO_23 RPI_GPIO 23
attr GPIO_23 devStateIcon high:on low:off
attr GPIO_23 direction output
attr GPIO_23 poll_interval 0.02
attr GPIO_23 stateFormat Pinlevel
defmod doif_GPIO23 DOIF ( [GPIO_23] eq "on" ) ( set HUEDevice1 blink 10 )
Somit setze ich meine Frage auf gelöst.
Hi,
mir ist nicht ganz klar
attr GPIO_23 direction output
Aber Du simulierst einen Tastendruck - also willst Du doch einen Eingang?
Gruß Otto
Von der Logic her hast du Recht, aber bei einen Eingang kann man keine "1" in die Datei schreiben.
root@pi2:~/bin# echo in > /sys/class/gpio/gpio23/direction
root@pi2:~/bin# echo 1 > /sys/class/gpio/gpio23/value
-bash: echo: Schreibfehler: Die Operation ist nicht erlaubt.
Ach so wegen Deiner Simulation, so gesehen ist es vielleicht wirklich das Verhalten. Wenn Du den Ausgang von FHEM aus setzen würdest gäbe es vielleicht einen Event? Und wenn der Eingang wirklich geändert werden würde vielleicht auch? Nur wenn ein Ausgang von außen manipuliert wird muss man ihn abfragen?
Ich weiß es nicht :)
Gruß Otto