Das hört sich doch schonmal gut an :)
Nur was ist miniclient?
Das hört sich doch schonmal gut an :)
Nur was ist miniclient?
Das Skript in den PluginFilter legen. Im Normalfall heißt das "pluginfilter.lua". Dann muss nur noch ein plugin Aktiv sein. Sonst wird der Filter nicht aufgerufen. Das gleiche gilt auch for den socketfilter. Solange kein Client verbunden ist wird auch die lua nicht aufgerufen.
Das ist vermutlich der Grund, warum Reissdorf sich mit dem miniclient verbunden muss: Sein Skript liegt im socketfilter.lua. Und wenn kein Client verbunden ist gibt's auch keinen Grund etwas zu filtern :)
Deshalb z.B. das mySQL-Plugin laden. Dann wird der pluginfilter immer aufgerufen wenn etwas ankommt, da jedesmal geprüft wird, ob die Daten an dies Plugin gehen sollen oder nicht.
Im pluginfilter.lua kannst du dann die Daten auswerten und per os.execute() auch programme aufrufen.
In der pluginfilter.lua muss es dann eine Funktion pluginFilter() geben. Das ist der Einstiegspunkt.
Beispiel - ungetestet. Hab keinen monitord mehr aktiv. Sollte aber so in der Art passen.
Code:-- PluginFilter.lua -- -- Filter für den PluginThread - wird pro aktiven Plugin aufgerufen -- -- Globales Array "arg" enthält die Daten vom Auswertermodul -- -- Zusätzliche Werte im Array: -- -- plugin_name: Name des Plugins, das aufgerufen werden soll -- -- Rückgabewert: -- 1= nicht ans Plugin geben (wird NICHT aufgerufen) -- alle anderen = Plugin wird aufgerufen -- function pluginFilter() -- Beispiel aus http://monitord.de/?article=5 -- aufruf eines PHP Skriptes -- if(arg["typ"] == "zvei" and string.sub(arg["zvei"], 0, 3) == "007" and arg["channelnum"] == "0") then toexecute = "cmd /c c:\\xampp\\php\\php.exe "; toexecute = toexecute .. "c:\\programme\\monitord\\sendsms.php "; toexecute = toexecute .. arg["zvei"] ; os.execute(toexecute); end -- default: alles anzeigen; ändern auf "1" um nichts ans plugin geben! -- wer keine mySQL Datenbank hat sondern nur das os.execute() will kann hier dann eine 1 zurückgeben. return 0; end
So, dank Buebchens Informationen die ich so nebenbei bekommen habe, habe ich das Script umbenannt, angepasst, in der monitor.xml eingebunden und auch schon getestet. Auf den Hintergrund mit dem Clientfilter war ich nicht gekommen und nicht hält ja bekanntlich länger wie das beste Provisorium.
Also hier mein Schript zum versenden von Emails mit blat:
Minicient ist wie der Name schon sagt ein kleiner Client der sich mit monitor verbinden kann und eingehende Meldungen in einer schmalen Zeile an der Bildschirmoberkante anzeigt. Benötige ich jetzt dank Buebchens Hinweis nicht mehr.Code:-- SocketFilter.lua -- -- Filter f?r den SocketServer - wird pro aktiven Client aufgerufen -- -- Globales Array "arg" enth?lt die Daten vom Auswertermodul -- -- Zus?tzliche Werte im Array: -- -- client_authenticated: 0/1 (1=angemeldet) -- client_ip: IP-Adresse des Clients -- client_loginname: Anmeldename -- client_type: fms32, crusader, monitord -- -- R?ckgabewert: 0 = an Client senden, 1= nicht an Client senden, alle anderen = an Client senden -- local toShowFMS = {"11111111", "22222222"} ; local toShowPOCSAG = {"1111111", "2222222"} ; local toShowZVEI = {"99000", "99001"} ; local sperrliste = {"1292587", "1308795"}; local versandliste = {"1291234", "1297777", "1298888", "1295555"}; -- Liste Namentlich {LG Musterdorf, GWG Musterdorf, Wehrführer, Alarmdrucker} function myfilterFMS32() for index,testwert in pairs(toShowFMS) do if (testwert==arg["ric"]) then return 0 end end return 1 ; end function myfilterCRUSADER() for index,testwert in pairs(sperrliste) do if (testwert==arg["ric"]) then return 1 end end print(arg["text"]) return 0 ; end function myfilterMONITORD() -- ZVEI if(arg["typ"] == "zvei") then for index,testwert in pairs(toShowZVEI) do if(testwert == arg["zvei"]) then return 0 end end end -- FMS if(arg["typ"] == "fms") then for index,testwert in pairs(toShowFMS) do if(testwert == arg["fmskennung"]) then return 0 end end end -- POCSAG if(arg["typ"] == "pocsag") then for index,testwert in pairs(toShowPOCSAG) do if(testwert == arg["ric"]) then return 0 end end end -- default: anzeige unterdruecken return 1; end function pluginFilter() local dummyValue=1 ; if(arg["typ"] == "pocsag") then for index,testwert in pairs(versandliste) do if (testwert == arg["ric"]) then toexecute = "start c:\\programme\\blat262\\full\\blat.exe "; toexecute = toexecute .. "-to email@gmx.de -u [Benutzername] -pw [Passwort] -subject "; toexecute = toexecute .. arg["ric"] ; toexecute = toexecute .. " -body \"" ; toexecute = toexecute .. arg["text"] ; toexecute = toexecute .. " ||Subric: " ; toexecute = toexecute .. arg["sub"] ; toexecute = toexecute .. " |Alarmdatum: " ; toexecute = toexecute .. arg["datum"] ; toexecute = toexecute .. " |Alarmzeit: " ; toexecute = toexecute .. arg["uhrzeit"] ; toexecute = toexecute .. "\"" ; print(toexecute); os.execute(toexecute); end end end -- wird f?r jedes Telegramm (pocsag, fms, zvei) aufgerufen if (arg["client_type"]=="fms32") then return 0; -- delete this line to enable and uncomment the next one! -- return myfilterFMS32() ; end if (arg["client_type"]=="crusader") then -- nix return myfilterCRUSADER() ; end if (arg["client_type"]=="monitord") then return 0; -- delete this line to enable and uncomment the next one! -- return myfilterMONITORD() ; end -- default: alles anzeigen; ?ndern auf "1" um nichts anzuzeigen! return 0; end
Gruß
Reissdorf
Besten Dank euch beiden, ich werd es heute oder morgen mal ausprobieren.
So 2 neue Probleme.
-Da bei mir die beiden Dateien nicht existierten habe ich sie mir aus dem Sample Config Ordner besorgt und in den Hauptordner gepackt. Liegen bei euch die Dateien auch da?
-Mein 2. Problem ist das ich das ganze unter Linux (raspberry pi) laufen habe und nicht unter windows und jetzt ein Python Script aufrufen möchte. Wie müsste das aufrufen des scripts dann aussehen?
Mfg
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)