Grundlagen: Event

  • Hi,
    immer wieder - und in sehr vielen Beiträgen zu speziellen Themen zu finden - werden Events erwähnt.
    Als Anfänger stellt sich mir das so dar - um an meinem Beispielprojekt Alarmanlage mit Reedkontakten und Piface zu bleiben:
    Hardware:
    Ein Piface digital2 sitzt auf einem Raspi B+. An den Eingängen sitzen die benötigten Reedkontakte und stellen zur Masse eine Verbindung her, solange sie durch Magneten geschlossen sind. Wird nun einer der Magnete vom Reedkontakt durch Öffnen einer überwachten Öffnung getrennt, so öffnet der Kontakt und der Eingang ändert damit sein Potenzial. Diese Eingänge werden überwacht.

    Software - Weg ohne Event:
    In einer Schleife werden nacheinander alle benötigten Eingänge der Reihe nach für eine kurze Zeit nach dem anliegenden Potenzial abgefragt (high/low). Solange sie alle ein niedriges Potenzial behalten, wird die Schleife fortgesetzt. Wenn die Abfrage auf ein hohes Potenzial stößt, dann wird ein Relais betätigt und der Alarm ertönt.
    Ich habe das mit Raspian Jessie und LXDE in einem LXDE-Fenster mit Python3 und grafischer Anzeige (0 oder 1) der Ergebnisse der Abfrage verwirklicht.
    Bemerkung:
    Dabei bekomme ich in dem Grafikfenster eine Anzeige über die Auslastung der CPU des Raspi Werte zwischen etwa 40% und etwa 90% Auslastung. Die CPU ist daher wohl stark belastet. Grundlast ist die Grafikoberfläche und allgemeines Betriebssystem mit 40% so denke ich. Die restlichen bis 50% Auslastung werden durch mein Programm zur Abfrage verbraucht (in den sleep-Phasen geht die Auslastung deutlich zurück).

    Software mit Event: Wenn ich nun die Hardware des Piface zum "Warten" auf ein Ereignis, nämlich der Änderung des Potenzials an einem Eingänge programmieren kann, dann wird die CPU des Raspi deutlich entlastet.

    Dies begründet für mich den Wunsch nach einem "Tutorial Event", das klärt, welche Voraussetzungen gegeben sein müssen, um so ein Event zu definieren, woher ich allgemein die Informationen bekomme, um zu erfahren, welche Möglichkeiten einer Ereignisdefinition ich habe, und das Ganze bitte auf deutsch!

    Ich habe das Forum in dieser Hinsicht bereits abgesucht, aber keine zusammenhängende Erklärung gefunden. Außerdem eine Bitte: wenn Programmzeilen verwendet werden, die als Tutorial dienen sollen, dann sollte jede Zeile auf ihre Bedeutung/Sinn kommentiert sein.
    Ist so ein Tutorial möglich?

    Gruß
    Carillon

    ps noch eine Anmerkung zu diesem Forum: was mir fehlt, ist eine Übersicht der Gliederung der Forenthemen und deren Unterthemen, so dass ich gezielt in den Unterthemen und Unter-Unterhemen nach passenden lehrreichen Beiträgen suchen kann. Vorarbeit wurde ja schon dankenswerterweise von meigrafd mit "Thread-faq-nuetzliche-links-linksammlung" gemacht. Aber wo im Forum steht das, damit ich das gezielt aufsuchen kann?

  • ps noch eine Anmerkung zu diesem Forum: was mir fehlt, ist eine Übersicht der Gliederung der Forenthemen und deren Unterthemen, so dass ich gezielt in den Unterthemen und Unter-Unterhemen nach passenden lehrreichen Beiträgen suchen kann

    Dir ist aufgefallen, dass es verschiedene Foren und Unterforen zu allen möglichen und unmöglichen Themen gibt?

    Man merkt allerdings, dass du dich hier nicht so gut zurecht findest. Steht doch in dem Forum in dem du gepostet hast groß oben drüber: In diesem Forum bitte nur Tutorials und Anleitungen posten. Bei Fragen bitte in einem passenden Subforum posten und ggfs auf das Tutorial verlinken.

    Mit deinem Post wärst du wunderbar aufgehoben in einem der als Wichtig markierten Themen, nämlich Wünscht euch ein Tutorial!

    Gruß

  • Dein Wunsch in allen Ehren - aber der ist leider nicht erfüllbar.

    So wie es auch im "echten" Leben eine Vielzahl von Ereignissen gibt - Geburt, Tod, Mario Barth Auftritte - die alle unterschiedlich in Art & auftreten sind, so ist das auch bei Ereignissen im Computer so. Du schränkst zwar schon ein, weil du "nur" IO Ereignisse möchtest - aber auch das ist schon ein weites Feld. Das von dir erwähnte Piface kommt zB in verschiedenen versionen daher, welche teilweise gar keine ereignisbasiertes arbeiten erlauben.

    Und *wenn* Sie das tun, unterscheidet sich das grundlegend von der Art, wie das mit den eingebauten GPIO gemacht wird. Und die wiederum haben in ihrer standardmäßigen Anbindung so große Nachteile, das es zB pigpio gibt, welches das wieder auf seine ganz eigene Art macht.

    Dann legt man noch die Verschiedenen Programmiersprachen an, und schon explodiert das Ganze komplett.

    Mein vorschlag: benenn genau welches Piface du benutzt, welche Sprache - und dann kann man die konkret helfen.


    Gesendet von iPhone mit Tapatalk


  • Software - Weg ohne Event:
    In einer Schleife werden nacheinander alle benötigten Eingänge der Reihe nach für eine kurze Zeit nach dem anliegenden Potenzial abgefragt (high/low). Solange sie alle ein niedriges Potenzial behalten, wird die Schleife fortgesetzt. Wenn die Abfrage auf ein hohes Potenzial stößt, dann wird ein Relais betätigt und der Alarm ertönt.
    Ich habe das mit Raspian Jessie und LXDE in einem LXDE-Fenster mit Python3 und grafischer Anzeige (0 oder 1) der Ergebnisse der Abfrage verwirklicht.
    Bemerkung:
    Dabei bekomme ich in dem Grafikfenster eine Anzeige über die Auslastung der CPU des Raspi Werte zwischen etwa 40% und etwa 90% Auslastung. Die CPU ist daher wohl stark belastet. Grundlast ist die Grafikoberfläche und allgemeines Betriebssystem mit 40% so denke ich. Die restlichen bis 50% Auslastung werden durch mein Programm zur Abfrage verbraucht (in den sleep-Phasen geht die Auslastung deutlich zurück).

    Software mit Event: Wenn ich nun die Hardware des Piface zum "Warten" auf ein Ereignis, nämlich der Änderung des Potenzials an einem Eingänge programmieren kann, dann wird die CPU des Raspi deutlich entlastet.

    So wie ich dich verstehe hast du mit "Weg ohne Event" => Polling verwendet, also eine while Schleife die ungebremst rotiert und deshalb eine sehr hohe CPU Last erzeugt.
    Im zweiten Versuch "mit Event" hast du dann => Interrupt verwendet?

    Der Begriff "Event" ist denk ich irreführend.


    ps noch eine Anmerkung zu diesem Forum: was mir fehlt, ist eine Übersicht der Gliederung der Forenthemen und deren Unterthemen, so dass ich gezielt in den Unterthemen und Unter-Unterhemen nach passenden lehrreichen Beiträgen suchen kann. Vorarbeit wurde ja schon dankenswerterweise von meigrafd mit "Thread-faq-nuetzliche-links-linksammlung" gemacht. Aber wo im Forum steht das, damit ich das gezielt aufsuchen kann?

    Wenn du auf der Hauptseite https://www.forum-raspberrypi.de bist findest du ziemlich weit oben den "FAQ" Bereich, im "Allgemeines". Dort gibt es in "Wichtige Themen" (sog. angepinnte Themen) ganz oben eine "Übersicht"


    PS: Du hast deinen Thread im falschen Bereich erstellt. Du bietest kein Tutorial sondern suchst eins. Hier in dem von dir gewählten Bereich werden aber nur Anleitungen zur Verfügung gestellt... Würde das jeder so wie du machen würde die Übersicht sehr schnell flöten gehen.

  • Dir ist aufgefallen, dass es verschiedene Foren und Unterforen zu allen möglichen und unmöglichen Themen gibt?

    Man merkt allerdings, dass du dich hier nicht so gut zurecht findest. Steht doch in dem Forum in dem du gepostet hast groß oben drüber: In diesem Forum bitte nur Tutorials und Anleitungen posten. Bei Fragen bitte in einem passenden Subforum posten und ggfs auf das Tutorial verlinken.

    Mit deinem Post wärst du wunderbar aufgehoben in einem der als Wichtig markierten Themen, nämlich Wünscht euch ein Tutorial!

    Gruß

    Wie man sieht, finde ich mich tatsächlich nicht so zurecht. Richtig ist, dass mein Wunsch genau dorthin gehört. Allerdings ist aus meiner Sicht das Thema "Wünscht euch ein Tutorial" nur ein ca 30 Seiten langer unstrukturierter Thread, in dem viele einzelne Themen der Reihe nach abgearbeitet werden, ohne dass ich im Einzelnen eine Übersicht bekomme, welche und wieviele Themen das sind. Das Thema "Wünscht euch.." gehört in ein eigenes Unterforum, in dem dann die einzelnen Betreffs (Teilthemen) aufgeführt werden, so dass der Leser ganz gezielt einen der Threads anwählen kann, wenn er meint, dass die Beschreibung im Betreff zu seiner Suche passen könnte, wobei dann auch eine Navigation zurück oder vorwärts unter Überspringen einzelner Threads möglich sein sollte. Im Grunde eine Liste nur der einzelnen Threads mit verlinkung. Das würde dann viel mehr Übersicht schaffen.
    So, jetzt würde ich ja gerne in meiner Antwort nicht nur Krawallkurt zitieren, sondern auf meigrafd eingehen, finde aber jetzt im Schreibmodus keine "Zitatknöpfe" mehr, um mir da einzelne Teile herauszupicken und sie zu zitieren.
    Also @ meigrafd und @_ deets_:
    mein Pi ist ein B+;das Piface ist ein PifaceDigital 2; Programmiersprache Python3.
    Bis ich angefangen habe, mich für Basteleien mit dem Pi zu interessieren, war ein Event für mich nur ein gesellschaftliches Ereignis ohne Bezug zu Computern. Erst in der Literatur zu dem Pi bin ich darauf gestoßen (Kofler, Raspberry Pi - das umfassende Handbuch, 2. Ausgabe, Rheinwerk). Im Kapitel 13, Leds, Motoren und Relais tauchen Begriffe wie "GPIO.add_event_detect(21, GPIO.FALLING)" auf. An anderer Stelle (Kap.16 Erweiterungsboards - PifaceDigital) heißt es dann, dass ja wegen der Nutzung der GPIO-Pins durch das Piface ein solcher GPIO-Event nicht mehr anwendbar wäre, dass aber dafür die Pifacebibliothek eine hauseigene Lösung anbietet und im Beispielprogramm werden dann zwei events definiert mit einem "pifacedigitalio.InputEventListener(chip=pfc)".
    Im Prinzip kann ich die Beispiele abschreiben und nachvollziehen, für meine Zwecke modifizieren und analog anwenden. Damit habe ich zwar nichts verstanden, kann es aber vermutlich anwenden . Daher mein Wunsch nach einem Tutorial.
    Wie ich inzwischen gelernt habe, verwendet das Piface-Board für die Kommunikation mit dem Pi ja nicht alle 40 Pins der GPIO-Leiste, sondern nur die SPI-Pins. Die Übrigen möchte ich aber auch noch verwenden, d.h. auch noch andere Geräte z.B. über die serielle Schnittstelle anschließen und die Frage taucht dann auf, ob ich eventuell noch ein zweites Gerät an die SPI-Pins anschließen kann. Dafür brauche ich noch einige Grundkenntnisse. Was ist in diesem Sinn ein Event, wie ist er in welcher Bibliothek beschrieben, wo finde ich diese auf dem Pi, wie kann ich sie auslesen u.s.w.?
    Und entschuldigt bitte, dass ich für meinen Thread den falschen Ort benutzt habe.

    Gruß
    Carillon

  • Gerade weil das PiFace über SPI mit dem Pi kommuniziert kannst du den Code "GPIO.add_event_detect" nicht mehr verwenden, da dieser ja für die GPIO's des Pis sind, nicht die des PiFace's... In sofern ist das schon richtig was da im Buch steht.

    Wenn du also die GPIO's vom Pi verwenden willst dann nutze am besten "GPIO.add_event_detect" => das richtet eine Interrupt Abhandlung ein.

    Wenn du das gleich für PiFace nutzen willst musst du quasi den Hauseigenen Übersetzer verwenden, also ein Module was das über SPI abhandelt und für Dich übersetzt.

    Guck mal in meine Linksammlung nach "Interrupt" ... Wobei da viele Links angegeben sind und im laufe der Zeit die letzten als "besser" ausgearbeitet wurden (auch ich lerne stetig neues)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!