Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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