PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lua Skripts für monitord



Moo
13.01.2014, 13:09
Ich habe monitord zurzeit auf einem Raspberry pi am laufen und hatte nun hier:

http://monitord.de/?article=5 (Punkt: Ausführen von Programmen)

die Möglichkeit gefunden direkt per Lua Skript ein externes Skript z.B. zum SMS Versand aufzurufen. Nun habe ich aber auch nach längerer Suche keinerlei Infos gefunden wie ich dieses umsetze. D.h. ich weiß nicht wo ich die Datei anlegen muss und wie ich diese einbinde.

Mfg

Reissdorf
15.01.2014, 01:02
Hallo Moo,
habe ein lua Skript laufen welches mir Emails verschickt. Habe auch ziemlich lange gebastelt bis es lief. Es wird bei mir auch nur ausgeführt wenn ich mit dem miniclient verbunden bin. Das kann aber auch ein fehler meinerseits sein. Aber wie heißt es doch, nichts hält länger als ddas beste Provisorium.
Werde mein Script morgen mal hier reinstellen.

Gruß
Reissdorf

Moo
16.01.2014, 14:16
Das hört sich doch schonmal gut an :)
Nur was ist miniclient?

Buebchen
17.01.2014, 19:10
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.



-- 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

Reissdorf
19.01.2014, 02:02
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:


-- 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



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.

Gruß
Reissdorf

Moo
19.01.2014, 17:55
Besten Dank euch beiden, ich werd es heute oder morgen mal ausprobieren.

Moo
19.01.2014, 21:46
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