ExportJob-objekt
ExportJob-objekt nyttjas för att via skript automatisera exporten av videomaterial. till exempel för att automatiskt arkivera material som man normalt manuellt exporterar varje dag. Ljud läggs automatiskt till i exporten om det finns tillgängligt. Se licenstabellen för vad som krävs för att nyttja detta objekt.
Egenskaper i ExportJob-objekt
ExportJob-objekt har följande egenskaper.
CopyExportViewer
Är en boolean som anger om EthirisViewerLauncher skall kopieras tillsammans med exporten när den utförs. Som standard är denna true (sann), att den skall det. Sätts till false (falskt) för att inte kopieras. Är både läs och skrivbar.
ErrorMessage
Är en sträng innehållande senaste felmeddelandet. Är det inget fel är strängen tom.
IsError
Är en boolean som är true (sann) om ett fel uppstod med exporten, annars är den false (falsk).
IsFinished
Är en boolean som är true (sann) om exporten är slutförd, annars är den false (falsk).
IsRunning
Är en boolean som är true (sann) om exporten pågår, annars är den false (falsk).
MaxFileSize
Är en number som anger önskad max filstorlek i GB på exportfilen som skall skapas. Värde mellan 1 och 16 kan anges, detta är då GB. Som standard är värdet satt till 2 (GB). Är både läs och skrivbar.
PercentDone
Är en number som innehåller hur många procent av exporten som har utförts.
Events i ExportJob-objekt
Ett ExportJob-objekt har tre event som man kan fånga upp i sitt skript.
onError
Detta event kommer när ett fel uppstår under ExportJob-objektets export av material.
Exempel:
ej.onError = function()
{
Debug.Print("Error: " + ej.ErrorMessage);
}
onFinished
Detta event kommer när ExportJob-objektet är färdigt med sin export av material.
Exempel:
ej.onFinished = function()
{
Debug.Print("Export Finished: " + ej.PercentDone + "% done!");
}
onProgress
Detta event kommer för var procent som har exporterts till filen, alternativt så snabbt som skriptet körs.
Exempel:
ej.onProgress = function()
{
Debug.Print("Export at " + ej.PercentDone + "%");
}
ExportJob-konstruktorn
new ExportJob(path, startTime, endTime, <camera|cameras>[,<camera|cameras>])
Skapar ett nytt ExportJob-objekt med angivna parametrar.
Path kan anges som en komplett sökväg inklusive filnamn (som måste sluta på .ethe) eller utan filnamn, varpå filnamnet genereras automatiskt. Man kan använda \ (som kan behöva escapas (\)) eller / i pathen. Även UNC sökväg stödjs för att lagra på en nätverksenhet. Se mer under SetCredentials för detta. Om någon mapp i sökvägen saknas, kommer denna att försöka skapas. Om en fil med angivet filnamn redan existerar, kommer den att skrivas över.
startTime och endTime kan anges som en sträng i ISO-format eller som ett Date-objekt.
camera|cameras kan anges som ett kameraobjekt, ett kamera-id eller ett kameranamn eller vara Cameras-egenskapen på en kameragrupp eller en CameraCollection eller en CameraCollection själv. Man kan också ange detta flera gånger, om man vill exportera från flera till samma fil. Totalt kan man exportera max nio (9) kameror i samma ExportJob-objekt.
ExportJob-prototypen
ExportJob.prototype.Abort()
Avbryter pågående export om den är aktiv. Exportfilen stängs och avslutas med så mycket som hittills har skrivits till den.
ExportJob.prototype.AddLogVariable(formatstring, log-variable[,log-variable]…)
Formatstring anger hur variabeln eller variablerna presenteras i fönstret Log variables i samband med att den exporterade videon spelas upp i Ethiris Viewer. Det kan vara en beskrivande text på vad värdet betyder, till exempel ”Temperatur: {0}”, där 0an anger första variabeln man angett som parameter, 1 andra osv.
Formatstring följer reglerna enligt denna länk: https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings#standard-format-specifiers bortsett från att locale alltid blir den som Windows använder på datorn där materialet spelas upp.
log-variable ska vara ett loggvariabel-objekt och flera kan anges. Första refereras som {0} osv. Varje AddLogVariable skapar en ny rad i Log variables-fönstret för visning av variablerna.
Exempel:
ej.AddLogVariable("Boolean: {0} String: {1}", Logger_1.bBoolean, Logger_1.sString);
Notera att det är viktigt att platshållarna ({0}) numreras från 0 och uppåt så att varje tillagd variabel får en platshållare. Samma platshållare kan användas flera gånger, men det måste finnas en variabel tillagd för alla platshållare som används i formatsträngen.
ExportJob.prototype.SetCredentials()
Om exporten skall ske till en nätverksresurs, till exempel en NAS, så behöver man ange användarnamn och lösenord för denna resurs. Använd hjälpverktyget i skriptpanelen för att generera en krypterad sträng som sedan används här för att knyta dessa uppgifter till ExportJob-objektet.
ExportJob.prototype.Start()
Startar själva exporten av det material som har definierats i objektet.
Exempel:
var ej;
var path = "\\EthirisNAS\Export\ExportJob.ethe"
var startTime = "2021-05-27 14:00:00";
var endTime = "2021-05-27 14:05:00";
var credentials = "pmU/H+JUbz2vymJb+hBF4I+gTkcgN3oa+dCZbdeTwzjkTe1jbc4";
startExport.onDataChange = function()
{
if(startExport)
{
try
{
ej = new ExportJob(path, startTime, endTime, Camera_1, Camera_2);
ej.SetCredentials(credentials);
ej.CopyExportViewer = false;
ej.MaxFileSize = 4;
ej.AddLogVariable("Boolean: {0} & String: {1}", Logger_1.bBoolean, Logger_1.sString);
ej.AddLogVariable("Double: {0}", Logger_1.dDouble);
ej.AddLogVariable("Integer: {0}", Logger_1.iInteger);
Debug.Print("Export started: " + ej.Start());
}
catch(ex)
{
Debug.Print("Exception creating ExportJob: " + ex.message);
}
ej.onFinished = function()
{
Debug.Print("Export finished, " + ej.PercentDone + "% done!");
}
ej.onProgress = function()
{
Debug.Print("Export running: " + ej.IsRunning + ", " + ej.PercentDone + "%");
}
ej.onError = function()
{
Debug.Print("Error: " + ej.ErrorMessage);
}
}
}
abortExport.onDataChange = function()
{
if(abortExport)
{
ej.Abort();
}
}
SNMPReader-objekt
SNMPReader-objekt nyttjas för att via skript läsa OID:s med hjälp av SNMPv1. Detta kan nyttjas för att övervaka utrustning som stödjer SNMPv1 över nätverk. till exempel statusen på hårddiskarna i en Synology NAS. Se licenstabellen för vad som krävs för att nyttja detta objekt.
Egenskaper i SNMPReader-objekt
SNMPReader-objekt har följande egenskaper.
Error
Är en integer Innehållande den senaste felkoden om någon, annars är den 0.
ErrorMessage
Är en sträng innehållande senaste felmeddelandet. Är det inget fel är strängen tom.
Results
Är en array innehållande resultatet i OID-värde-par.
SNMPReader-konstruktorn
new SNMPReader(IP, Port, Community string)
Skapar ett nytt SNMPReader-objekt med angivna parametrar.
IP anges som en sträng och är IP-adress för den enhet man vill göra en SNMP förfrågan mot, t.ex. ”192.168.1.11”. IP måste anges.
Port anges som en integer, och är den port förfrågan skall göras mot, normalt är detta port 161. Som standard är Port 161.
Community string anges som en sträng och är normalt ”public”, detta kan dock oftast ändras i enheten som frågan ställs mot. Normalt finns en endast läsbar ”public” och en läs och skrivbar ”private” så kallad Community. Användarnamn och lösenord nyttjas inte i SNMPv1. Som standard är Community string public.
Exempel:
new snmp = new SNMPReader("192.168.1.11", 161, "public");
SNMPReader-prototypen
SNMPReader.prototype.AddOID(oid)
Lägger till angett OID i objektet. Dessa används sedan när data skall hämtas.
Exempel:
snmp.AddOID(".1.3.6.1.4.1.6574.2.1.1.5.0");
SNMPReader.prototype.Get(timeout)
Används för att hämta de OID som angetts i objektet från enheten. En timeout kan anges i millisekunder, som standard är denna 1000.
SNMPReader.prototype.Walk(maxResults, timeout)
Används som Get() för att hämta information från enheten. Men i stället för att bara hämta de specifika OID man angett i objektet. Så använder man det OID som angetts med AddOID(), eller en del av ett OID, som utgångsläge för hämtningen.
maxResults är antalet resultat man vill hämta från start OID. Dvs de OID som har ett högre OID än det angivna. Som standard är detta 0, dvs ingen begräsning på antalet resultat.
Timeout är som standard 1000ms och behöver inte anges. Notera dock att detta inte är timeouten för själva Walk() funktionen, utan för var Get() som utförs internt för var OID som Walk() kommer att behandla.
Walk exempel:
var snmp = new SNMPReader("192.168.1.11", 161, "public");
snmp.AddOID(".1.3.6.1.4.1.6574.2.1.1.5");
if (snmp.Walk(8, 1000))
{
Debug.Print("Walk returned " + snmp.Results.length + " items");
for(var i in snmp.Results)
{
Debug.Print("["+ i +"] = "+ snmp.Results[i]);
}
}
else
{
Debug.Print("Error: "+ snmp.Error +", Msg: "+ snmp.ErrorMsg);
}
Nedan följer ett exempel för att övervaka statusen på de 8 hårddiskarna i en Synology NAS. När ett problem hittas triggas ett larm:
var snmp;
if (snmp == undefined)
{
snmp = new SNMPReader("192.168.1.11", 161, "public");
// Add OID for the 8 Physical disks
snmp.AddOID(".1.3.6.1.4.1.6574.2.1.1.5.0");
snmp.AddOID(".1.3.6.1.4.1.6574.2.1.1.5.1");
snmp.AddOID(".1.3.6.1.4.1.6574.2.1.1.5.2");
snmp.AddOID(".1.3.6.1.4.1.6574.2.1.1.5.3");
snmp.AddOID(".1.3.6.1.4.1.6574.2.1.1.5.4");
snmp.AddOID(".1.3.6.1.4.1.6574.2.1.1.5.5");
snmp.AddOID(".1.3.6.1.4.1.6574.2.1.1.5.6");
snmp.AddOID(".1.3.6.1.4.1.6574.2.1.1.5.7");
}
function snmpPoll() // Function to poll Disk status
{
if(snmp.Get())
{
var DSerr = "";
for(var i in snmp.Results)
{
if(snmp.Results[i] != 1) // 1 = Normal
{
switch(Number(snmp.Results[i]))
{
case 1: DSerr = "Normal(1) - The disk is functioning normally"; break;
case 2: DSerr = "Initialized(2) - The disk has system partitions but no data"; break;
case 3: DSerr = "NotInitialized(3) - The disk is not partitioned"; break;
case 4: DSerr = "SystemPartitionFailed(4) - Partitions on the disk are damaged"; break;
case 5: DSerr = "Crashed(5) - The disk is damaged"; break;
}
Debug.Print(i + " - ALARM Disk Status = " + DSerr);
NASHDDAlarm = true; // Trigger alarm
break; // Break on first error, one is enough.
}
else
{
Debug.Print(i + " - Disk Status Ok");
NASHDDAlarm = false; // No alarm
}
}
}
else
{
Debug.Print("Error: " + snmp.Error + ", Msg: " + snmp.ErrorMsg);
}
}
// Check every 5 minutes.
var newTime;
if(!newTime && System.Clock.Minute % 5 == 0)
{
snmpPoll();
}
newTime = (System.Clock.Minute % 5 == 0);