Ergebnis 1 bis 5 von 5

Thema: Verständnisfrage pluginfilter.lua / Ausführung von Programmen

  1. #1
    Registriert seit
    16.12.2004
    Beiträge
    1.102

    Verständnisfrage pluginfilter.lua / Ausführung von Programmen

    Hallo,

    ich hätte mal eine Frage zur pluginfilter.lua bzw. der Ausführung von Programmen:

    Ich habe mir unter Xubuntu 10.04 den aktuellen Monitord compiliert und eingerichtet, nach ein paar kleineren Problemchen hab ich nun aber alles soweit am Laufen, wenn ich mich per Telnet einwähle bekomme ich die 300er-Meldung mit der entsprechenden 5-Ton-Folge geliefert wenn ich eine Tonfolge über Line-In einspeise. Im späteren Betrieb soll der Monitord eigentlich nur bei entsprechenden Schleifen ein Bash-Skript aufrufen, sonst keine weiteren Aktionen.

    Wo ich allerdings noch nicht so ganz durchgestiegen bin ist eben der Aufruf von externen Programmen bzw. der Platzierung der pluginfilter.lua;

    Wie ich mittlerweile herausgefunden habe wird die monitord.xml aus dem Verzeichnis genommen in dem ich mich mit meiner Shell gerade befinde wenn ich den Monitord aufrufe. Gilt das gleiche für die pluginfilter.lua wenn ich in meiner monitord.xml stehen hab: pluginfilter.lua ? Oder wird diese dann aus dem Monitord-Programmverzeichnis geholt?


    Zur pluginfilter.lua auch noch gleich die nächste Frage: ich will nichts filtern oder dergleichen sondern einfach nur bei entsprechenden Tonfolgen ein Skript aufrufen. Irgendwie klappt das aber nicht so ganz.
    Sehe ich das richtig dass in diesem Fall das PluginFilterSkript nicht 1 zurückgeben muss sondern einfach nur die os.execute-Anweisung in der Datei drinstehen muss? Vermutlich nicht, denn irgendwie klappts nicht so...

    Die Datei hat derzeit den Inhalt:

    if(arg["typ"] == "zvei" and string.sub(arg["zvei"], 0, 3) == "123") then
    toexecute = "/home/alarmdisplay/alarmskript_kreis.sh ";
    toexecute = toexecute .. arg["zvei"] ;
    toexecute = toexecute .. " " ;
    toexecute = toexecute .. "Feuerwehr XY" ;
    os.execute(toexecute);
    end

    So wie ich mir das wünsche soll dann wenn eine Tonfolge empfangen wird die mit 123 beginnt das selbstgeschriebene Alarmskript aufgerufen werden, gefolgt von der 5-Ton-Folge und der Bezeichnung der Feuerwehr als Parameter.

    Wo ist mein Denkfehler?

    Danke schonmal für die Antworten!

  2. #2
    Registriert seit
    16.12.2004
    Beiträge
    1.102
    Irgendjemand wird doch wohl mit dem Monitord Aktionen ausführen lassen...

    Wie stellt ihr das denn an? Bzw. hat jemand eine Beispiel-Datei für mich?

  3. #3
    Registriert seit
    16.12.2004
    Beiträge
    1.102
    Sorry für das Triple-Posting, aber ich habe noch eine (wie ich vermute) letzte Frage, nachdem ich nun MySQL und LUA am Laufen habe (sobald alles funktioniert werde ich hier auch gern nochmal ein HowTo schreiben):

    Wenn eine Tonfolge kommt, schreibt mir der Monitord ins Log:

    Code:
     15:22:14.493 ERROR: monitord/PluginThread.cpp(273) Fehler beim Aufruf lua dispatcher script:attempt to call a nil value
     15:22:14.493 ERROR: monitord/PluginThread.cpp(280) nicht-numerische Antwort vom lua dispatcher script
    Hat einer eine Idee wo das Problem liegen könnte? An der LUA-Installation selbst vermutlich nicht, da im Log kurz vorher ebenfalls steht

    Code:
     15:16:22.681 INFO: monitord/PluginThread.cpp(182) Successfully loaded LUA filter: pluginfilter.lua
    , das scheint also schonmal zu funktionieren.


    Da der LUA-Dispatcher wohl ein globaler Filter ist, wird somit mein Programmaufruf in der pluginfilter.lua auch nicht bearbeitet.
    Die entsprechenden Zeilen in der PluginThread.cpp auszukommentieren bringt wohl auch nichts, dafür sind sie zu eng mit dem Rest verwoben.

  4. #4
    Registriert seit
    15.11.2007
    Beiträge
    213
    Moinmoin,

    Zitat Zitat von Allmächtiger Beitrag anzeigen
    Irgendjemand wird doch wohl mit dem Monitord Aktionen ausführen lassen...

    Wie stellt ihr das denn an? Bzw. hat jemand eine Beispiel-Datei für mich?
    function pluginFilter()
    if (arg["plugin_name"]=="mysql") then

    if(arg["channelnum"] == "0" and arg["typ"] == "zvei" and string.sub(arg["zvei"], 0, 3) == "234") then
    toexecute = "start cmd /c d:\\xampplite\\php\\php.exe D:\\Programme\\monitord\\meinscriptname.php " .. arg['zvei'] ;
    os.execute(toexecute);
    end

    end
    -- change return value in next line to "return 1" to enable filtering defined above!
    return 0;
    end
    das tut bei mir seit längerem famos.

    Zur Fehlermeldung: "nil value" heißt, dass in der Regel eine Variable nicht belegt ist oder nicht existiert. Das verwundert mich etwas, denn Dein Skript kam mir jetzt nicht spontan falsch vor - die Methode "pluginFilter" existiert und wird ausgeführt, ja?

    Viele Grüße
    Martin

  5. #5
    Registriert seit
    16.12.2004
    Beiträge
    1.102
    Hallo Martin,

    vielen Dank für deinen Beitrag. Ich habe die entsprechenden Zeilen in der PluginThread.cpp von Hand auskommentiert und die Variable z von Hand so gesetzt dass gar nichts gefiltert wird und somit auch keine Fehlermeldung mehr kommt, warum auch immer diese generiert wurde da dieser Aufruf ja meiner Ansicht nach nicht auf eine (Fehl-)Konfiguration des Benutzers zurückzuführen ist sondern direkt aus dem normalen Quelltext kommt. Die Methode pluginFilter existiert und wird auch offensichtlich aufgerufen. MySQL lief tapfer weiter und schrieb jede Alarmierung in die Datenbank, aber mein Programm konnte ich einfach nicht zur Ausführung bringen. Mittlerweile habe ich wieder einen Schritt zurück zum alten monitor gemacht, der bringt nachdem ich auch dort einen Fehler beheben konnte die gewünschten Ergebnisse. Das Projekt Monitord habe ich deswegen für mich persönlich vorerst begraben.

    Für alle, die an der Kompilierung mit MySQL- und LUA-Unterstützung verzweifeln, hier nochmal mein configure-Aufruf. Vielleicht hilft es jemandem und die Arbeit war nicht ganz umsonst (OS: (X)Ubuntu 10.04):

    Zuerst müssen noch zwei benötigte Pakete nachinstalliert werden, es gibt vermutlich noch weitere Abhängigkeiten die dann aber durch die Paketverwaltung von alleine aufgelöst werden:

    Code:
    sudo apt-get install libmysql++-dev liblua5.1-dev
    danach kann kompiliert werden, hier mein ./configure-Aufruf:

    Code:
    ./configure --enable-plugins --with-mysql --with-lua-includes=/usr/include/lua5.1 --with-lua-suffix=5.1
    Erläuterung:

    /usr/include/lua5.1 ist der Pfad in denen sich die LUA-Dateien befinden, in meinem Fall LUA 5.1 - LUA 5.0 liegt im Ordner lua50, 4.0 im Ordner lua40, einfach mal nachschauen welche Version man hat und wo sich die Dateien bei einem befinden.

    lua-suffix ist einfach die LUA-Versionsnummer. Es hat mich SEHR viel Zeit gekostet um zu dieser Erkenntnis zu kommen ;-)


    Wie gesagt, ich hoffe dass vielleicht jemand von dem hier profitiert, damit es nicht ganz umsonst war.
    Geändert von Allmächtiger (12.01.2012 um 15:50 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •