Sensor-Online använder javascript för att åstadkomma avancerade tilläggsfunktioner. Ett JS-script kan anropas av till exempel en knapp eller en tidkanal men det kan också köras cykliskt eller triggas av till exempel ett larm.
För att läsa och skriva taggar från javascript delar Sensor-Online med sig av ett objekt som kallas tags. Detta objekt innehåller ett flertal funktioner t.ex. read och write och här ges några exempel på hur dessa kan användas.
Dialogen för nytt script
Användningsexempel
En dränkbar tryckgivare från Keller har tryckområde 0.8 till 3 Bar, med en utsignal på 4-20mA som rapporteras till Servern, kunden vill ha resultatet redovisat i bar och djup
Detta exempel läser ett taggvärde (356441115231009) till en intern variabel (InputValue) och skriver sedan detta värde till två andra taggar (Bar och Djup) i Sensor-Online.
JS
|
var LowValue =0.8;var HighValue =3;var InputValue = tags["356441115231009"].Read("mA_formel");var result =(((HighValue-LowValue)/(20-4))*(InputValue -4))+ LowValue;// Write the new calculated value to a new key
tags["356441115231009"].Write("Bar", result);
tags["356441115231009"].Write("Djup",(result *10)-1);
Generella kodexempel (finns även i SO)
Exempelkod: Omvandla Celcius till Farenheit
JS
|
// Convert the temperature to fahrenheit var tempToFahrenheit = tags["INSERT-DEVEUI"].Read("INSERT-KEY")*9/5+32;// Write the new value to a new key
tags["INSERT-DEVEUI"].Write("INSERT-NEW-KEY", tempToFahrenheit);
Exempelkod: Medelvärde
JS
|
// Get the data from three sensorsvar temp1 = tags["INSERT-DEVEUI"].Read("extTemp");var temp2 = tags["INSERT-DEVEUI"].Read("extTemp");var temp3 = tags["INSERT-DEVEUI"].Read("extTemp");// Write the new value to a new key
tags["INSERT-DEVEUI"].Write("averageTemp",(temp1 + temp2 + temp3)/3);
Exempelkod: Svartis-detektion
JS
|
var uteTemp = tags["A81758FFFE0459FB"].Read("temperature");var fukt = tags["A81758FFFE0459FB"].Read("humidity");var vagTemp = tags["A81758FFFE0459FA"].Read("temperature");// Set the conditions for black iceif(vagTemp <2&& fukt >75&& uteTemp >3){
tags["A81758FFFE0459FA"].Write("black_ice",1);}else{
tags["A81758FFFE0459FA"].Write("black_ice",0);}
Exempel: 4-20mA korrigering
JS
|
// Convert the analog input value 4-20mA to the right scalevar LowValue =0;var HighValue =200;var InputValue = tags["INSERT-DEVEUI"].Read("AnalogIn");var result =(((HighValue-LowValue)/(20-4))*(InputValue -4))+ LowValue;// Write the new calculated value to a new key
tags["INSERT-DEVEUI"].Write("ActualValue", result);
Exempel: 0-10V korrigering
JS
|
// Convert the analog input value 0-10V to the right scalevar LowLimit =10;var HighLimit =200;var InputValue = tags["INSERT-DEVEUI"].Read("AnalogIn");var result =(HighLimit – LowLimit)x(InputValue /10)+ LowLimit;
tags["INSERT-DEVEUI"].Write("AnalogInCorrected", result);
//use Format 00:00//00:00 - 24:00 = always on//00:00 - 00:00 = always offfunctionread(){
schedule.DefaultValue ="0";for(var n=0; n<nbrOnOff; n++){for(var i=1; i<=7; i++){var day = i + n *10;var on =tagValue(prefix +"_CT"+ day).Replace(":","");var off =tagValue(prefix +"_CF"+ day).Replace(":","");
on =pad(on,4);
off =pad(off,4);if(on =="0000"&& off =="0000"){// do nothing}elseif(off =="2400")
schedule.AddEvent("1", on +"-0000:"+ i);else
schedule.AddEvent("1", on +"-"+ off +":"+ i);}}returntrue;}functionwrite(){var days =[0,0,0,0,0,0,0,0,0];var day =0;for(var i=0; i<schedule.Events.Count; i++){if(schedule.Events[i].Value != schedule.DefaultValue && schedule.Events[i].Time.Length ==11){
day = schedule.Events[i].Time.Substring(10);var d = day -1;
day += days[d]*10;
days[d]++;var on = schedule.Events[i].Time.Substring(0,4);var off = schedule.Events[i].Time.Substring(5,4);if(off =="0000")
off ="2400";tagWrite(prefix +"_CT"+ day, on);tagWrite(prefix +"_CF"+ day, off);}}for(var i=1; i<=7; i++){for(var n=days[i-1]; n<=nbrOnOff; n++){
day = i + n*10;tagWrite(prefix +"_CT"+ day,"0000");tagWrite(prefix +"_CF"+ day,"0000");}}returntrue;}functionpad(n, width){var result ='';for(var i=n.length;i<width;i++){
result +='0';}
result += n;return result;}