PiFace

Begonnen von cornelius fillmore, 09 Juni 2013, 08:21:17

Vorheriges Thema - Nächstes Thema

betateilchen

nein, eigentlich nur zwei, schau mal in die  /etc/modprobe.d/raspi-blacklist.conf , wichtig ist vor allem das SPI Modul, das darf darin nicht enthalten sein.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

klaus.schauer

Zitat von: betateilchen schrieb am Mo, 07 Oktober 2013 14:21nein, eigentlich nur zwei, schau mal in die  /etc/modprobe.d/raspi-blacklist.conf , wichtig ist vor allem das SPI Modul, das darf darin nicht enthalten sein.
Die beiden Einträge habe ich rauskommentiert... sieht nun gut aus. Werde heute Abend testen. Danke für die Hilfe.

betateilchen

Zitat von: klaus.schauer schrieb am Di, 08 Oktober 2013 18:26Der Fehler bei den get-Abfragen scheint behoben:
...
Der Fehler bei den set-Befehlen aber nicht:
...
Die Ausgabe scheinen zudem bezogen auf den ausgeführten Befehl immer doppelt zu sein. Eingaben zu obigen Events:
...
M. E. wäre es besser, man könnte auch die Stati der out-Ports per get-Kommando abfragen. Bei einem set-Befehl sollte nur der jeweilige Befehl als Event und im LOG erscheinen.

Das set habe ich nun geändert.

Die Sache mit dem "doppelt" und die Sache mit dem "out Ports lesen" - genau das Lesen der out-Ports ist die Ursache für das doppelte Auftreten. Bisher werden nach jedem set-Befehl immer alle out-Ports gelesen, um die Readings der out-Ports immer aktuell zu halten.

Ich weiss nicht, was der "richtige" Weg ist. In der Testversion hier habe ich das zurücklesen auskommentiert. Vielleicht baue ich ein Attribut ein, mit dem man das steuern kann.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

klaus.schauer

1. die Leerzeilen der outx-Kanäle sind weg
2. es werden immer nur Events für den jeweiligen set-Befehl erzeugt, entweder 1 oder 8
2. die Ausgänge schalten richtig
3. die Readings werden jetzt fehlerhaft immer mit "0" aktualisiert, entweder 1 oder 8

Bei den set-Kommandos sollten immer nur die Events und LOGs erzeugt werden, die auch ausgelöst wurden. Ich möchte schließlich eine Rückmeldung nur über diese Aktionen haben.

Weiterhin wäre eine zusätzliche get-Abfrage für jeweils einen oder alle out-Stati sehr nützlich.


betateilchen

Zitat von: klaus.schauer schrieb am Di, 08 Oktober 2013 21:303. die Readings werden jetzt fehlerhaft immer mit "0" aktualisiert, entweder 1 oder 8

nur bei den out-Ports oder auch die in-Ports?

Im Anhang nochmal was zum Testen.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

klaus.schauer

Zitat von: betateilchen schrieb am Di, 08 Oktober 2013 21:49
Zitat von: klaus.schauer schrieb am Di, 08 Oktober 2013 21:303. die Readings werden jetzt fehlerhaft immer mit "0" aktualisiert, entweder 1 oder 8

nur bei den out-Ports oder auch die in-Ports?

Im Anhang nochmal was zum Testen.

1. out-Readings gehen immer zuerst auf 0 oder 1 und dann dauerhaft auf 1
2. out-Events bleiben auf 0
2. in-Readings und Events bleiben immer auf 1

betateilchen

Ist das Verhalten der out-Ports mit der neu angehängten Version immer noch so?

Solange die in-Ports "offen" sind, sind die immer auf 1. Hast Du das berücksichtigt?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

klaus.schauer

Zitat von: betateilchen schrieb am Di, 08 Oktober 2013 22:23Ist das Verhalten der out-Ports mit der neu angehängten Version immer noch so?

Solange die in-Ports "offen" sind, sind die immer auf 1. Hast Du das berücksichtigt?
Das beschriebene Verhalten der out-Ports basiert auf der Datei mit dem Zeitstempel 22:06.

Wenn ich einen Taster betätige, sollte doch wohl dieser in-Port auf "0" gehen!

betateilchen

Zitat von: klaus.schauer schrieb am Mi, 09 Oktober 2013 06:26Das beschriebene Verhalten der out-Ports basiert auf der Datei mit dem Zeitstempel 22:06.

Um 22:06 habe ich keine Datei erstellt.

Zitat von: klaus.schauer schrieb am Mi, 09 Oktober 2013 06:26Wenn ich einen Taster betätige, sollte doch wohl dieser in-Port auf "0" gehen!

Ja, aber nur wenn Du a) den Taster bei der Abfrage immernoch gedrückt hältst und b) den Port mit aktiviertem Pullup-Widerstand abfragst.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

klaus.schauer

Zitat von: betateilchen schrieb am Mi, 09 Oktober 2013 09:34
Zitat von: klaus.schauer schrieb am Mi, 09 Oktober 2013 06:26Das beschriebene Verhalten der out-Ports basiert auf der Datei mit dem Zeitstempel 22:06.

Um 22:06 habe ich keine Datei erstellt.

Zitat von: klaus.schauer schrieb am Mi, 09 Oktober 2013 06:26Wenn ich einen Taster betätige, sollte doch wohl dieser in-Port auf "0" gehen!

Ja, aber nur wenn Du a) den Taster bei der Abfrage immernoch gedrückt hältst und b) den Port mit aktiviertem Pullup-Widerstand abfragst.
Jetzt nochmal zusammengefasst:
- get: Readings und Events der in-Ports immer auf 1
- set einzelner Kanäle: Events der out-Ports zeigen 0 oder 1, ist ok
- set einzelner Kanäle: Readings der out-Ports erst 1 dann 1 oder 0 dann 1, Readings werden zweimal geschrieben
- set aller Kanäle: Events der out-Ports zeigen immer 0
- set aller Kanäle: Readings der out-Ports zeigen immer erst 0 dann 1, Readings werden zweimal geschrieben

klaus.schauer

Zitat von: klaus.schauer schrieb am Mi, 09 Oktober 2013 22:28
Zitat von: betateilchen schrieb am Mi, 09 Oktober 2013 09:34
Zitat von: klaus.schauer schrieb am Mi, 09 Oktober 2013 06:26Das beschriebene Verhalten der out-Ports basiert auf der Datei mit dem Zeitstempel 22:06.

Um 22:06 habe ich keine Datei erstellt.

Zitat von: klaus.schauer schrieb am Mi, 09 Oktober 2013 06:26Wenn ich einen Taster betätige, sollte doch wohl dieser in-Port auf "0" gehen!

Ja, aber nur wenn Du a) den Taster bei der Abfrage immernoch gedrückt hältst und b) den Port mit aktiviertem Pullup-Widerstand abfragst.
Jetzt nochmal zusammengefasst:
- get: Readings und Events der in-Ports immer auf 1
- set einzelner Kanäle: Events der out-Ports zeigen 0 oder 1, ist ok
- set einzelner Kanäle: Readings der out-Ports erst 1 dann 1 oder 0 dann 1, Readings werden zweimal geschrieben
- set aller Kanäle: Events der out-Ports zeigen immer 0
- set aller Kanäle: Readings der out-Ports zeigen immer erst 0 dann 1, Readings werden zweimal geschrieben
Die Entfernung der Zeilenumrüche mit der chomp() Funktion scheint nicht die richtige Lösung des Problems zu sein. Ohne chomp() werden die Readings jedenfalls richtig gesetzt. Leider habe ich augenblicklich auch keine alternative Lösung.

betateilchen

ich schau mir das an, aber frühestens Samstag.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

so... wie versprochen, habe ich mich heute mit dem Modul beschäftigt und da noch ein paar Umbauten vorgenommen.


Befehl: set pi 0 255

im Event-Monitor:

2013-10-12 17:55:54 PIFACE pi out1: 1
2013-10-12 17:55:54 PIFACE pi out2: 1
2013-10-12 17:55:54 PIFACE pi out3: 1
2013-10-12 17:55:54 PIFACE pi out4: 1
2013-10-12 17:55:54 PIFACE pi out5: 1
2013-10-12 17:55:54 PIFACE pi out6: 1
2013-10-12 17:55:54 PIFACE pi out7: 1
2013-10-12 17:55:54 PIFACE pi out8: 1

im LogFile:

2013-10-12_17:55:54 pi out1: 1
2013-10-12_17:55:54 pi out2: 1
2013-10-12_17:55:54 pi out3: 1
2013-10-12_17:55:54 pi out4: 1
2013-10-12_17:55:54 pi out5: 1
2013-10-12_17:55:54 pi out6: 1
2013-10-12_17:55:54 pi out7: 1
2013-10-12_17:55:54 pi out8: 1


nix mehr doppelt und hier auch keine Leerzeilen.

Das get wurde umgebaut:


get <name> 0 = liest ALLE Ports (out, in ohne Pullup, in mit Pullup)
get <name> 1..8 = liest den jeweiligen IN-port ohne Pullup
get <name> 11..18 = liest den jeweiligen IN-port mit Pullup
get <name> 21..28 = liest den jeweiligen OUT-port



Bitte testen und Rückmeldung.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

backbone10

Hi,
bei mir funktioniert das, danke !

Ich muss aber die Zustandsänderung ohne manuelle Abfrage erkennen.

bin beim Googlen über
http://code.google.com/p/raspberry-gpio-python/wiki/Inputs
zu den Threaded callbacks gestossen...

Ist das dafür einsetzbar und wenn ja - wie ??

danke

bb10

betateilchen

Du kannst Dir ein at definieren, mit dem Du eine regelmäßige Abfrage realisieren kannst.

define pullPi at +*00:00:10 get <piFaceName> 0

Damit werden die Readings alle 10 Sekunden aktualisiert. Wähle bitte den Abstand nicht zu kurz, im Moment werden bei jeder Ausführung jede Menge Betriebssystemaufrufe von fhem abgesetzt. Ich werde mir mal irgendwann Gedanken darüber machen, ob bzw. wie ich (besser umgesetzt) im Modul selbst implementiere.

Die von Dir verlinkte Lösung ist so in fhem nicht ohne weiteres umsetzbar.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!