Skip to content
This repository was archived by the owner on Dec 11, 2025. It is now read-only.

ringtailsoftware/lyuba

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lyuba ESP32 Mastodon Library

Arduino library for communicating with the Mastodon social network.

https://fosstodon.org/web/@lyuba

Toby Jaffey @tobyjaffey@mastodon.me.uk

Lyuba supports sending toots and polling for the most recent status matching a hashtag.

After downloading, rename folder to 'lyuba' and install in Arduino Libraries folder. Restart Arduino IDE, then open File->Sketchbook->Library->lyuba->helloworld sketch.

Compatibility notes: ESP32 only (ESP32 variants should work but are untesed)

Installation

  1. Download the repository as a zip file
  2. In the Arduino IDE, navigate to Sketch -> Include Library -> Add .ZIP Library

Example sketches

  • helloworld, authenticate using username and password, send a single toot
  • helloworld_token, authenticate using an access token
  • analogtoot, authenticate using username and password, send a toot every 10s with an analog sensor reading
  • publicstream, authenticate using username and password, monitor public stream and print every toot
  • cheerlights, authenticate using username and password, monitor "#cheerlights" hashtag, parse colour name and show it on a single neopixel

Configuring sketches

All sketches must be setup for your WiFi network and Mastodon account. At the top of each sketch, update as follows:

  • WIFI_SSID your WiFi ssid
  • WIFI_PASSWORD your WiFi password
  • MASTODON_USERNAME your Mastodon username (username@domain.tld)
  • MASTODON_PASSWORD your Mastodon password
  • MASTODON_HOST the hostname of the Mastodon instance you use, e.g. "fosstodon.org" or "mastodon.social"

If you are using token authentication instead of username and password, MASTODON_TOKEN should have the string "Bearer " followed by your token. To generate a token go to your Mastodon instance web site, click "Preferences" -> "Development" -> "New application". Give the application a name, everything else is optional. Click "Submit", then click on your new application in the list. Read off the "Your access token", prefix it with "Bearer " and place in MASTODON_TOKEN.

Storage of access token

The lyuba_auth() call sets Lyuba authentication up by registering an app with your Mastodon account. To avoid re-registering every time, the credentials (access token) are stored in the ESP32 flash using the Preferences module. After rebooting, the credentials can be retrieved and re-used with lyuba_getAuthToken().

API

See lyuba.h for the API prototypes.

To initialise the library, call:

lyuba_t *myLyuba = lyuba_init(const char *host, const char *username, const char *password);

host is the Mastodon server to connect to, username and password are the credentials and may be NULL if token authenticated is to be used. Returns a lyuba_t* which must be passed to other API calls.

In your sketch's main loop, regularly call:

lyuba_loop(myLyuba);

To start the authentication process, call:

lyuba_authenticate(myLyuba, authCb);

Where authCb is a callback function. If NULL is used, authentication will occur but no callback will be made to the sketch:

void authCb(bool ok, const char *authToken) {}

On successful authentication, ok=true and authToken will contain the authentication credentials. On failure ok=false

To read back a saved authentication token:

const char *authToken = lyuba_getAuthToken(myLyuba);

lyuba_getAuthToken() will return NULL if no token as been setup. If this is the case, call lyuba_authenticate().

To toot, call:

lyuba_toot(myLyuba, authToken, "Hello World!", tootCb);

Where tootCb is a callback function. If NULL is used, tooting will occur but no callback will be made to the sketch:

void tootCb(bool ok)

On successful tooting, ok=true. On failure ok=false

To stream all public toots, call:

lyuba_conn_t *myConn = lyuba_stream(myLyuba, authToken, "public", streamCb);

To stream a hashtag, call:

lyuba_conn_t *myConn = lyuba_stream(myLyuba, authToken, "hashtag?tag=cheerlights", streamCb);

For more details of available streams, see https://docs.joinmastodon.org/methods/timelines/streaming/

Where streamCb is a callback function which is passed each toot, pre-stripped of HTML tags:

void streamCb(bool ok, const char *username, const char *content) { }

To close a stream, call:

lyuba_close(myConn);

Notes

  • Lyuba should be considered insecure. Your Mastodon password is baked into your firmware unless token authentication is used
  • Lyuba is not thread safe, it expects to be used in an asynchronous manner by a single task
  • Running mulitple streams and requests concurrently is not well tested

License

Lyuba is MIT licensed

cJSON Copyright (c) 2009-2017 Dave Gamble and cJSON contributors

About

ESP32 Mastodon Tooter

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors