Global Variables

Concept

Sometimes you need Data to persist between the call of a payload decoder. This is normally done by using global environment variables that store the data between function calls.

Access Database Fields

On Datacake this can be achieved by creating a dedicated field in the Database Section of your Datacake Device and by using this as the storage for this data.

function decoder() {
    
    // get current value from field in Database
    var numberOfCalls = measurements.NUMBER_OF_CALLS.value;
    
    // do some processing
    numberOfCalls = numberOfCalls + 1;
    
    // return that field in order to write new value into database
    return [
        { "field": "NUMBER_OF_CALLS", "value": numberOfCalls }
    ]
}

Time between changes

Storing data between payload decoder function calls can also be used to measure the time elapsed between a change of a value. This can be done by accessing not only the current value of a Database-Field but also the timestamp.

 function decoder() {
 
     // pseudo code here - removed the parts before
 
     // get number of changes happened before from Database
     var lastNumberOfChanges = measurements.NUMBER_OF_CHANGES.value;
     
     // get state stored in Database
     var lastState = measurements.RO1_STATUS.value;
    
     // when new state is not equal state in database -> change happened
     if (lastState != current_RO1_STATUS) {
        
        // increase number of changes
        lastNumberOfChanges += 1;
        
        // store number of changes in database
        decoded.push({ "field":"NUMBER_OF_CHANGES","value":lastNumberOfChanges });
        
        // calculate the time between changes
        var currentTimestamp = Math.floor(Date.now() / 1000);
        var lastTimestamp = measurements.RO1_STATUS.timestamp;
        var timeDelta = (currentTimestamp - lastTimestamp) / 60;
        var timeBetweenChanges = Math.abs(Math.round(timeDelta));
        
        // store new time between last changes in database
        decoded.push({ "field":"TIME_BETWEEN_CHANGES","value":timeBetweenChanges });          
     }

    return decoded;
}

Last updated