Skip to main content

Raksa 🛡️

PyPI Version License: MIT GitHub Python

Raksa (derived from Sanskrit/Indonesian word for Protector or Guardian) is a high-persistence, self-contained MicroPython library built for the Noc Lab TinyML ecosystem as part of the 'Tiny Chip, Big Brain' workshop. It serves as an end-to-end In-situ Analytics gateway, securing stable asynchronous telemetry data stream from edge devices (ESP32/RP2040) to a FastAPI cloud backend.

Leveraging native compiler execution (@micropython.native) for fast on-device inference and memory consolidations (gc.collect()), Raksa protects MicroPython devices from heap fragmentation during high-velocity TinyML operations.


Key Features

  • 🔄 Persistent WebSockets: Pure python RFC 6455 client implementation utilizing raw asynchronous uasyncio streams without external footprint overhead.
  • ⚡ High-Speed In-situ Analytics: Edge inference calculations optimized directly via @micropython.native decorators to ensure minimal loop latency.
  • 🧹 Heap Consolidation: Garbage collection executed dynamically inside data sync cycles to prevent RAM fragmentation on constrained hardware.
  • 🇮🇩 Nusantara Resiliency: Promotes self-reliance, stability, and secure data guardianship for resource-constrained edge-to-cloud architectures.

Installation

Via pip (CPython / Desktop Testing)

pip install raksa

Via mip (MicroPython on Device)

Connect your microcontroller board to your pc via USB/Serial and run:

mpremote mip install github:Muhammad-Ikhwan-Fathulloh/Raksa

2. Directly in MicroPython REPL

Ensure your microcontroller board has an active Wi-Fi connection, then run:

import mip
mip.install("github:Muhammad-Ikhwan-Fathulloh/Raksa")

Minimalist Code Example (ESP32 / RP2040)

Below is an end-to-end usage code highlighting edge inference and data synchronization under 10 lines of functional code:

import uasyncio as asyncio
from raksa import RaksaClient

async def main():
    client = RaksaClient("ws://192.168.1.100:8000/ws/telemetry")
    model = ([[0.5, -0.2], [0.1, 0.9]], [0.1, 0.0]) # TinyML weights & biases
    inputs = [0.8, 1.5] # Raw sensor variables
    
    pred = client.infer(model, inputs)
    await client.sync({"model": "NocML_V1", "features": inputs, "prediction": pred})

asyncio.run(main())

Complete Examples & Machine Learning Features

Full production-ready examples are available under the examples/ folder, covering both hardware-specific scenarios and internal, Scikit-Learn-compatible Machine Learning algorithms:

Hardware-Connected Scenarios

File Scenario Sensors
main_edge.py Quick-start minimalist (< 10 lines) —
esp32_wifi_sensor.py ADC analog sensor + 3-class classification LDR / MQ-x / Potentiometer
esp32_dht_monitor.py Temperature & humidity anomaly detection DHT11 / DHT22

On-Device Machine Learning & TinyML

File Algorithms Covered API Classes
ml_preprocessing.py Custom Data Scaling & Extensions MinMaxScaler, StandardScaler, PolynomialFeatures
ml_classification.py Optimized Classifiers KNN, NaiveBayes, LogisticRegression, DecisionTreeClassifier
ml_clustering.py Unsupervised Grouping / Fit KMeans
ml_forecasting.py Simple Time Series forecasting LinearForecaster
ml_neural.py Perceptron & Feedforward NN Perceptron, TinyNeuralNetwork, Activation
ml_evaluation.py Evaluation & Split Metrics LabelEncoder, TrainTestSplit, ConfusionMatrix
ml_anomaly.py Anomaly Detection & PCA AnomalyDetector, PCA

Machine Learning Reference

Raksa bundles a highly optimized port of the NocML C++ library along with original advanced TinyML tools, utilizing @micropython.native compiled mathematical loops to secure lightning-fast predictions directly on MicroPython edge boards without external dependencies.

Preprocessing & Decomposition

  • MinMaxScaler(dims, min_vals, max_vals): Rescales variables to a range [0.0 - 1.0].
  • StandardScaler(dims, means, stddevs): Standardizes features using population mean and variance.
  • PolynomialFeatures(degree): Expands input dimension using combinations with replacement.
  • PCA(n_components): Principal Component Analysis for dimensionality reduction with fit(X, n_samples, dims) and transform(x).
  • LabelEncoder(): Standard encoder for string labels to integer classes with fit(), encode(), and decode().

Neural Networks

  • Activation: Collection of activation functions: sigmoid(x), relu(x), tanh(x), and softmax(x).
  • Perceptron(dims, lr=0.01): Single-layer perceptron for binary classification with train(X, y) and predict(x).
  • TinyNeuralNetwork(layer_sizes, lr=0.1): Feedforward neural network supporting arbitrary hidden layers and backpropagation train(X, y, epochs).

Classification, Clustering & Forecasting

  • KNN(training_data, labels, num_samples, dims, k=3): Traditional classification using Euclidean distances.
  • NaiveBayes(num_classes, dims, means, vars, priors): Gaussian probabilistic classification.
  • LogisticRegression(dims, weights, bias): Fast binary classification with predict() and predict_proba().
  • DecisionTreeClassifier(nodes, num_nodes): Node list traverse trees supporting dictionary, tuple, or custom node structures.
  • KMeans(k, dims, centroids): Clusters features into centroids. Supports run(data, num_samples) for on-device fitting.
  • LinearForecaster(): Computes simple linear regressive trends ($y=mx+c$) natively via fit(x, y) and forecastNext().

Validation & Evaluation

  • AnomalyDetector(threshold=2.5): Z-score outlier detector with fit(X, n_samples, dims) and detect(x).
  • TrainTestSplit.split(X, y, dims, test_ratio): Shuffles and splits tabular data into train/test sets using LCG.
  • ConfusionMatrix.report(y_true, y_pred): Compares predictions and outputs accuracy, precision, recall, and F1 metrics.

Acknowledgments & Credits

The machine learning capabilities contained in Raksa are ported from the NocML C++ Library for Arduino, developed by Muhammad Ikhwan Fathulloh. Special credits go to the original creators for providing the foundation of these resource-constrained edge execution algorithms.


Licenses & Copyrights

Developed by Noc Lab for nurturing TinyML literacy on hardware developers. Licensed under the MIT License.

Metadata

Release files for raksa 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for raksa 0.2.1
File Size Uploaded
raksa-0.2.1.tar.gz 17.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for raksa 0.2.1
File Interpreter ABI Platform
raksa-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 34.6 kB

Release files / raksa-0.2.1.tar.gz

Download URL raksa-0.2.1.tar.gz
Size 17.8 kB
Tags Source
SHA-256 checksum
How to use checksums
2766f6ef58dc2094607ed82a49b57dff0d9814015cf0f9d4e25a27ae2fd7d030
BLAKE2b-256 checksum
How to use checksums
e07406d20cde8506c7677a4230c39a6f744b6929f441994f1211a47e24ea6f87
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.0

Release files / raksa-0.2.1-py3-none-any.whl

Download URL raksa-0.2.1-py3-none-any.whl
Size 16.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2914d2d98bd48fec18d756ace6debd597424b74001cc7676d4b19f88793c5e4d
BLAKE2b-256 checksum
How to use checksums
503e732539b18dd7875c541481395b20fb094a70f00e1cb0c8b3af7ed46d6b4b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.0

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page