Skip to main content

A client library for IoT projects in the RCER initiative

Project description

SAVIIA Library

Sistema de Administración y Visualización de Información para la Investigación y Análisis

GitHub release (latest by date)

Table of Contents

Installation

This library is designed for use with the SAVIIA Home Assistant Integration. It provides an API to retrieve files from a THIES Data Logger via an FTP server and upload them to a Microsoft SharePoint folder using the SharePoint REST API.

pip install saviialib

Saviia API Client Usage

Initialize the Saviia API Client

Import the necessary classes from the library.

from saviialib import SaviiaAPI, SaviiaAPIConfig

To start using the library, you need to create an SaviiaAPI client instance with its configuration class SaviiaAPIConfig. Provide the required parameters such as FTP server details and SharePoint credentials:

config = SaviiaAPIConfig(
    ftp_port=FTP_PORT,
    ftp_host=FTP_HOST,
    ftp_user=FTP_USER,
    ftp_password=FTP_PASSWORD,
    sharepoint_client_id=SHAREPOINT_CLIENT_ID,
    sharepoint_client_secret=SHAREPOINT_CLIENT_SECRET,
    sharepoint_tenant_id=SHAREPOINT_TENANT_ID,
    sharepoint_tenant_name=SHAREPOINT_TENANT_NAME,
    sharepoint_site_name=SHAREPOINT_SITE_NAME
)
api_client = SaviiaAPI(config)

Notes:

  • Store sensitive data like FTP_PASSWORD, FTP_USER, and SharePoint credentials securely. Use environment variables or a secrets management tool to avoid hardcoding sensitive information in your codebase.

Access THIES Data Logger Services

To interact with the THIES Data Logger services, you can access the thies attribute of the SaviiaAPI instance:

thies_service = api_client.get('thies')

This instance provides methods to interact with the THIES Data Logger. Currently, it includes the main method for extracting files from the FTP server and uploading them to SharePoint.

THIES files extraction and synchronization

The library provides a method to extract and synchronize THIES Data Logger files with the Microsoft SharePoint client. This method downloads files from the FTP server and uploads them to the specified SharePoint folder:

import asyncio
async def main():
    # Before calling this method, you must have initialised the THIES service class ...
    response = await thies_service.update_thies_data()
    return response

asyncio.run(main())

Access Backup Services

To interact with the Backup services, you can access the backup attribute of the SaviiaAPI instance:

backup_service = api_client.get('backup')

This instance provides methods to interact with the Backup services. Currently, it includes the main method for creating backups of specified directories in a local folder from Home Assistant environment. Then each backup file is uploaded to a Microsoft SharePoint folder.

Create Backup

The library provides a method which creates a backup of a specified directory in a local folder from Home Assistant environment. Then each backup file is uploaded to a Microsoft SharePoint folder:

import asyncio
async def main():
    # Before calling this method, you must have initialised the Backup service class ...
    response = await backup_service.upload_backup_to_sharepoint(
        local_backup_path=LOCAL_BACKUP_PATH,
        sharepoint_folder_path=SHAREPOINT_FOLDER_PATH
    )
    return response
asyncio.run(main())

Notes:

  • Ensure that the local_backup_path exists and contains the files you want to back up. It is a relative path from the Home Assistant configuration directory.
  • The sharepoint_folder_path should be the path to the folder in SharePoint where you want to upload the backup files. For example, if your url is https://yourtenant.sharepoint.com/sites/yoursite/Shared Documents/Backups, the folder path would be sites/yoursite/Shared Documents/Backups.

Access Task System Services

To interact with the Task System services, you can access the tasks attribute of the SaviiaAPI instance:

tasks_service = api_client.get('tasks')

This instance provides methods to manage tasks in specified channels. Note that this service requires an existing bot to be set up in the Discord server to function properly.

For using the Tasks Services, you need to provide an additional parameter notification_client_api_key in the SaviiaAPIConfig configuration class:

config = SaviiaAPIConfig(
    ... 
    notification_client_api_key=NOTIFICATION_CLIENT_API_KEY
)

Create Task

Create a new task in a Discord channel with the following properties:

import asyncio

async def main():
    response = await tasks_service.create_task(
        channel_id=CHANNEL_ID,
        task={
            "name": "Task Title",
            "description": "Task Description",
            "due_date": "2024-12-31T23:59:59Z",
            "priority": 1,
            "assignee": "user_name",
            "category": "work",
            "images": [
                {
                    "name": "image.png",
                    "type": "image/png",
                    "data": "base64_encoded_data"
                }
            ]
        }
    )
    return response

asyncio.run(main())

Notes:

  • name, description, due_date, priority, assignee, and category are required.
  • images is optional and accepts up to 10 images.
  • due_date must be in ISO 8601 format (datetime).
  • priority must be an integer between 1 and 4.

Update Task

Update an existing task or mark it as completed. The task will be reacted with ✅ if completed or 📌 if pending:

import asyncio

async def main():
    response = await tasks_service.update_task(
        channel_id=CHANNEL_ID,
        task={"id": "task_id", "name": "Updated Title"},
        completed=True
    )
    return response

asyncio.run(main())

Get Tasks

Retrieve tasks from a Discord channel with optional filtering and sorting:

import asyncio

async def main():
    response = await tasks_service.get_tasks(
        channel_id=CHANNEL_ID,
        params={
            "sort": "desc",
            "completed": False,
            "fields": ["title", "due_date", "priority"],
            "after": 1000000,
            "before": 2000000
        }
    )
    return response

asyncio.run(main())

Notes:

  • sort: Order results by asc or desc.
  • completed: Filter tasks by completion status.
  • fields: Specify which fields to include in the response. Must include title and due_date.
  • after and before: Filter tasks by timestamp ranges.

Contributing

If you're interested in contributing to this project, please follow the contributing guidelines. By contributing to this project, you agree to abide by its terms. Contributions are welcome and appreciated!

License

saviialib was created by Pedro Pablo Zavala Tejos. It is licensed under the terms of the MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

saviialib-1.8.2.tar.gz (43.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

saviialib-1.8.2-py3-none-any.whl (85.4 kB view details)

Uploaded Python 3

File details

Details for the file saviialib-1.8.2.tar.gz.

File metadata

  • Download URL: saviialib-1.8.2.tar.gz
  • Upload date:
  • Size: 43.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.5

File hashes

Hashes for saviialib-1.8.2.tar.gz
Algorithm Hash digest
SHA256 7657e7c6a734507ded8ca1669ae5af6d74081bfe32744292dad7fa1c0819b1a4
MD5 43d8072d43a694cb58a4efdb944c77c6
BLAKE2b-256 d4b30719ccf2b8640dd1129527d2587c023f24d34c065309e89ffee6abcb1b44

See more details on using hashes here.

File details

Details for the file saviialib-1.8.2-py3-none-any.whl.

File metadata

  • Download URL: saviialib-1.8.2-py3-none-any.whl
  • Upload date:
  • Size: 85.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.5

File hashes

Hashes for saviialib-1.8.2-py3-none-any.whl
Algorithm Hash digest
SHA256 05e233439a631a68ddd60aca2d78b5c5ef5ab62a8b7ab0c18ea6e51b953de89d
MD5 13e1239e54f834614be1586ef07b0f5c
BLAKE2b-256 5639fa34d48a5858986ceddaaf70d9c7fb7ecd84aab14600718319b7e46d85e9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page