Definicja źródła danych (urządzenia) w Signomiksie umożliwia zdefiniowanie kodu dla procesora danych. W momencie odebrania nowych danych z tego źródła, procesor danych uruchamia interpreter języka JavaScript i wykonuje kod zdefiniowany dla tego źródła danych.
Tworząc kod dla procesora użytkownik może wykorzystać funkcje biblioteki sgx wbudowanej w procesor danych. Poniżej dokumentacja tej biblioteki.
Zmienne:
Funkcje:
sgxW momencie inicjowania procesora danych zmiennym biblioteki sgx są przypisywane wartości odczytywane z danych przychodzących. W skrypcie procesora danych można odczytać wartości tych zmiennych w sposób taki jak dla zmiennej eui poniżej.
var eui = sgx.eui
euiIdentyfikator (EUI) źródła danych
var eui = sgx.eui
dataTimestampZnacznik czasowy odebrania danych w milisekundach (UTC).
applicationConfigObiekt konfiguracji aplikacji zadeklarowanej dla źródła danych.
deviceConfigObiekt konfiguracji zdefiniowanej dla źródła danych.
deviceGroupsGrupy, z którymi jest powiązane źródło danych.
latitudeSzerokość geograficzna źródła danych, podana w jego definicji (format dziesiętny, jak w mapach Google).
longitudeDługość geograficzna źródła danych, podana w jego definicji (format dziesiętny, jak w mapach Google).
altitudeWysokość nad poziomem morza źródła danych, podana w jego definicji.
tagsMapa tagów dodanych definicji źródła danych.
portNumer portu LoRaWAN, przypisanego do transmisji danych.
sgxverify(received, receivedStatus)Funkcja verify służy do weryfikacji otrzymanych danych i aktualizacji stanu obiektu.
received (Array): Tablica obiektów danych do weryfikacji.receivedStatus (String): Status otrzymanych danych.void: Funkcja nie zwraca żadnej wartości.var receivedData = [
{ name: "temperature", value: 22.5, timestamp: 1628765432 },
{ name: "humidity", value: 60, timestamp: 1628765432 }
];
var status = "ok";
sgx.verify(receivedData, status);
accept(name)Funkcja accept służy do zaakceptowania danych o podanej nazwie i zapisania ich w wynikach. Jej wywołanie może być konieczne w przypadku użycia w kodzie funkcji put.
Patrz też: put
name (String): Nazwa danych do zaakceptowania.void: Funkcja nie zwraca żadnej wartości.sgx.accept("temperature");
addCommand(targetEUI, payload, overwrite)Funkcja addCommand służy do dodawania nowej komendy.
targetEUI (String): Unikalny identyfikator docelowego urządzenia.payload (Object): Dane (obiekt JavaScript), które mają być wysłane jako część komendy.overwrite (Boolean): Flaga wskazująca, czy unieważnić wcześniejsze (jeszcze nie przekazane) komendy..void: Funkcja nie zwraca żadnej wartości.var targetEUI = "00124B0004F12345";
var payload = { command: "activate", parameters: { duration: 10 } };
var overwrite = true;
sgx.addCommand(targetEUI, payload, overwrite);
addPlainCommand(targetEUI, payload, overwrite)Funkcja addPlainCommand służy do dodawania nowej komendy w formacie zwykłego tekstu.
targetEUI (String): Unikalny identyfikator docelowego urządzenia.payload (String): Tekst, który ma być wysłany jako część komendy.overwrite (Boolean): Flaga wskazująca, czy unieważnić wcześniejsze (jeszcze nie przekazane) komendy..void: Funkcja nie zwraca żadnej wartości.var targetEUI = "00124B0004F12345";
var payload = 'start'
var overwrite = false;
sgx.addPlainCommand(targetEUI, payload, overwrite);
addHexCommand(targetEUI, payload, overwrite)Funkcja addHexCommand służy do dodawania nowej komendy z ładunkiem w formacie szesnastkowym.
targetEUI (String): Unikalny identyfikator docelowego urządzenia.payload (String): Dane w formacie szesnastkowym, które mają być wysłane jako część komendy.overwrite (Boolean): Flaga wskazująca, czy unieważnić wcześniejsze (jeszcze nie przekazane) komendy..void: Funkcja nie zwraca żadnej wartości.var targetEUI = "00124B0004F12345";
var payload = "00FFAA01";
var overwrite = true;
sgx.addHexCommand(targetEUI, payload, overwrite);
addNotification(newType, newMessage)Funkcja addNotification służy do dodawania nowej notyfikacji.
newType (String): Typ nowej notyfikacji. Akceptowane wartości: info,warning,alert.newMessage (String): Treść nowej notyfikacji.void: Funkcja nie zwraca żadnej wartości.sgx.addNotification("info", "Device activated successfully.");
addVirtualData(newEUI, newName, newValue)Funkcja addVirtualData służy do dodawania nowych danych wirtualnych.
newEUI (String): Unikalny identyfikator nowego urządzenia.newName (String): Nazwa nowych danych.newValue (Mixed): Wartość nowych danych.void: Funkcja nie zwraca żadnej wartości.sgx.addVirtualData("00124B0004F67890", "virtualTemperature", 25);
clearData()Funkcja clearData usuwa z kolejki wszystkie odebrane wartości.
Brak
void: Funkcja nie zwraca żadnej wartości.getAverage(channelName, scope, newValue)Funkcja getAverage służy do uzyskiwania średniej wartości dla danego kanału.
channelName (String): Nazwa kanału.scope (Number): Zakres wartości.newValue (Number, opcjonalnie): Nowa wartość do uwzględnienia w obliczeniach.Number: Średnia wartość dla danego kanału.var average = sgx.getAverage("temperature", 10);
var newAverage = sgx.getAverage("temperature", 10, 23.0);
getMinimum(channelName, scope, newValue)Funkcja getMinimum służy do uzyskiwania minimalnej wartości dla danego kanału.
channelName (String): Nazwa kanału.scope (Number): Zakres wartości.newValue (Number, opcjonalnie): Nowa wartość do uwzględnienia w obliczeniach.Number: Minimalna wartość dla danego kanału.var minimum = sgx.getMinimum("temperature", 10);
var newMinimum = sgx.getMinimum("temperature", 10, 18);
getMaximum(channelName, scope, newValue)Funkcja getMaximum służy do uzyskiwania maksymalnej wartości dla danego kanału.
channelName (String): Nazwa kanału.scope (Number): Zakres wartości.newValue (Number, opcjonalnie): Nowa wartość do uwzględnienia w obliczeniach.Number: Maksymalna wartość dla danego kanału.var maximum = sgx.getMaximum("temperature", 10);
var newMaximum = sgx.getMaximum("temperature", 10, 27);
getSum(channelName, scope, newValue)Funkcja getSum służy do uzyskiwania sumy wartości dla danego kanału.
channelName (String): Nazwa kanału.scope (Number): Zakres wartości.newValue (Number, opcjonalnie): Nowa wartość do uwzględnienia w obliczeniach.Number: Suma wartości dla danego kanału.var sum = sgx.getSum("temperature", 10);
var newSum = sgx.getSum("temperature", 10, 22);
getLastValue(channelName, skipNull)Funkcja getLastValue służy do uzyskiwania ostatniej wartości dla danego kanału.
channelName (String): Nazwa kanału.skipNull (Boolean): Pomiń wartości null. Parametr opcjonalny.Mixed: Ostatnia wartość dla danego kanału lub null, jeśli brak danych.var lastValue = sgx.getLastValue("temperature");
getLastData(channelName, skipNull)Funkcja getLastData służy do uzyskiwania ostatnich danych dla danego kanału.
channelName (String): Nazwa kanału.skipNull (Boolean): Pomiń wartości null. Parametr opcjonalny. W przypadku jego braku skipNull==false.Object: Ostatnie dane dla danego kanału.var lastData = sgx.getLastData("temperature");
getModulo(value, divider)Funkcja getModulo służy do uzyskiwania reszty z dzielenia wartości przez dzielnik.
value (Number): Wartość do podzielenia.divider (Number): Dzielnik.Number: Reszta z dzielenia.var modulo = sgx.getModulo(10, 3); // 1
getOutput()Funkcja getOutput służy do uzyskiwania wyników przetwarzania.
Mixed: Wynik przetwarzania.var output = sgx.getOutput();
getTimestamp(channelName)Funkcja getTimestamp służy do uzyskiwania znacznika czasu dla danego kanału.
channelName (String): Nazwa kanału.Number: Znacznik czasu dla danego kanału.var timestamp = sgx.getTimestamp("temperature");
getTimestampUTC(y, m, d, h, min, s)Funkcja getTimestampUTC służy do uzyskiwania znacznika czasu UTC na podstawie podanych parametrów.
y (Number): Rok.m (Number): Miesiąc.d (Number): Dzień.h (Number): Godzina.min (Number): Minuta.s (Number): Sekunda.Number: Znacznik czasu UTC.var timestampUTC = sgx.getTimestampUTC(2024, 6, 5, 12, 0, 0);
getValue(channelName)Funkcja getValue służy do uzyskiwania wartości dla danego kanału.
channelName (String): Nazwa kanału.Mixed: Wartość dla danego kanału lub null, jeśli brak danych.var value = sgx.getValue("temperature");
getStringValue(channelName)Funkcja getStringValue służy do uzyskiwania wartości tekstowej dla danego kanału.
channelName (String): Nazwa kanału.String: Wartość tekstowa dla danego kanału lub null, jeśli brak danych.var stringValue = sgx.getStringValue("temperature");
put(name, newValue, timestamp)Funkcja put służy do umieszczania nowych danych.
name (String): Nazwa danych.newValue (Mixed): Nowa wartość danych.timestamp (Number, opcjonalnie): Znacznik czasu danych.void: Funkcja nie zwraca żadnej wartości.sgx.put("temperature", 23.5);
sgx.put("temperature", 23.5, 1628765432);
Użycie funkcji put wyłącza mechanizm automatycznego akceptowania i zapisywania w bazie odebranych danych. Jeśli w kodzie procesora danych zostanie użyta funkcja put to w bazie
zostaną zarejestrowane jedynie dane przekazane w funkcjach put oraz accept.
// Signomix odebrał request z danymi o nazwach `temperature` i `humidity`, jednak w skrypcie
// procesora danych chcemy dodać jeszcze wartość danej `pressure`
sgx.put("pressure", 1000)
// bez poniższych linii w bazie zostaną zapisane wartości null dla `temperature` oraz `humidity`
sgx.accept("temperature")
sgx.accept("humidity")
Patrz też: accept
setState(newState)Funkcja setState służy do ustawiania nowego stanu urządzenia.
newState (String): Nowy stan urządzenia.void: Funkcja nie zwraca żadnej wartości.sgx.setState("active");
setStatus(newStatus)Funkcja setStatus służy do ustawiania nowego statusu urządzenia.
newStatus (String): Nowy status urządzenia.void: Funkcja nie zwraca żadnej wartości.sgx.setStatus("offline");
reverseHex(hexStr)Funkcja reverseHex służy do odwracania kolejności znaków w łańcuchu szesnastkowym.
hexStr (String): Łańcuch szesnastkowy.String: Odwrócony łańcuch szesnastkowy.var reversedHex = sgx.reverseHex("00FFAA01"); // "01AAFF00"
swap32(val)Funkcja swap32 służy do zmiany kolejności bajtów w liczbie 32-bitowej.
val (Number): Liczba 32-bitowa.Number: Liczba z zmienioną kolejnością bajtów.var swapped = sgx.swap32(0x12345678); // 0x78563412
distance(latitude1, longitude1, latitude2, longitude2)Funkcja distance służy do obliczania odległości między dwoma punktami geograficznymi.
latitude1 (Number): Szerokość geograficzna punktu 1.longitude1 (Number): Długość geograficzna punktu 1.latitude2 (Number): Szerokość geograficzna punktu 2.longitude2 (Number): Długość geograficzna punktu 2.Number: Odległość między dwoma punktami w metrach.// odległość pomiędzy dwoma punktami
var dist = sgx.distance(52.2296756, 21.0122287, 41.8919300, 12.5113300);
// odległość punktu od przesłanej lokalizacji
var dist = sgx.distance(2.2296756, 21.0122287, sgx.getValue("latitude"), sgx.getValue("longitude") );
homeDistance(latitude, longitude)Funkcja homeDistance służy do obliczania odległości między danym punktem geograficznym,
a punktem położenia urządzenia zapisanym w jego konfiguracji.
latitude (Number): Szerokość geograficzna punktu.longitude (Number): Długość geograficzna punktu.Number: Odległość między dwoma punktami w metrach.// odległość podanego punktu od lokalizacji podanej w konfiguracji urządzenia
var dist = sgx.homeDistance(41.8919300, 12.5113300);
// odległość przesłanej lokalizacji od lokalizacji podanej w konfiguracji urządzenia
var dist = sgx.homeDistance( sgx.getValue("latitude"), sgx.getValue("longitude") );