Skip to content

Send payload from mqtt message to firebase realtime database

License

Notifications You must be signed in to change notification settings

dev-strom/mqtt2firebase

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mqtt2firebase

Push data coming from a MQTT broker (collecting data from sensors) into Firebase using Firebase Admin SDK.

I use it to store data from a lot of sensor around my house. The UI can be found here.

Usage

Prerequisite

You simply need Python3 (never tested with Python2.7) and the only dependencies are firebase-admin (to access your Firebase realtime database) and paho-mqtt (for MQTT broker interaction) so this line should be enough :

pip3 install paho-mqtt firebase-admin

Getting your credentials

You just have to follow Firebase's excellent documentation.

Using the script

Easy, first try a dry-run command :

./mqtt2firebase.py -a '<PATH TO YOUR CREDENTIALS>' -N '<FIREBASE_APP_NAME>' -n -v

About the path to your credentials, you can also use the json directly instead of a path. See the docker-compose.yml for more details.

and then a real command :

./mqtt2firebase.py -a '<PATH TO YOUR CREDENTIALS>' -N '<FIREBASE_APP_NAME>'

The secrets can also be set with environment variables, see the help for more detail.

Help

/ # mqtt2firebase.py --help
usage: mqtt2firebase.py [-h] [-a FIREBASEAPIKEY] [-m HOST] [-n]
                        [-N FIREBASEAPPNAME] [-p FIREBASEPATH] [-t TOPIC]
                        [-T TOPIC] [-v]

Send MQTT payload received from a topic to firebase.

optional arguments:
  -h, --help            show this help message and exit
  -a FIREBASEAPIKEY, --firebase-credential-json FIREBASEAPIKEY
                        Firebase API Key / Can also be read from
                        FIREBASE_CREDENTIAL_JSON env var. (default: None)
  -c TOPICASCHILD, --use-topic-as-child TOPICASCHILD
                        Use the last part of the MQTT topic as a child for
                        Firebase. (default: True)
  -m HOST, --mqtt-host HOST
                        Specify the MQTT host to connect to. (default:
                        127.0.0.1)
  -n, --dry-run         No data will be sent to the MQTT broker. (default:
                        False)
  -N FIREBASEAPPNAME, --firebase-app-name FIREBASEAPPNAME
                        The firebase application name / Can also be read from
                        FIREBASE_APP_NAME env var. (default: None)
  -u USER, --mqtt-user USER
                        Specify the MQTT user name. (default: None)
  -p PASSWORD, --mqtt-password PASSWORD
                        Specify the MQTT user password. (default: None)
  -t TOPICS, --topic TOPICS
                        The MQTT topic on which to get the payload and the
                        Firebase path, don't forget the trailing #. Can be
                        called many times. (default: None)
  -T TOPIC, --topic-error TOPIC
                        The MQTT topic on which to publish the message (if it
                        wasn't a success). (default: error/firebase)
  -v, --verbose         Enable debug messages. (default: False)

Docker

I added a sample Dockerfile, I personaly use it with a docker-compose.yml like this one :

version: '3'

services:
  mqtt2firebase:
    build: https://github.com/seblucas/mqtt2firebase.git
    image: mqtt2firebase-python3:latest
    restart: always
    command: "-m mosquittp -t 'test/raw/#:readings' -v"
    environment:
      FIREBASE_APP_NAME: XXX
      FIREBASE_CREDENTIAL_JSON: >-
        {
          "type": "XXX",
          "project_id": "XXX",
          "private_key_id": "XXX",
          "private_key": "-----BEGIN PRIVATE KEY-----XXX-----END PRIVATE KEY-----\n",
          "client_email": "XXX",
          "client_id": "XXX",
          "auth_uri": "XXX",
          "token_uri": "XXX",
          "auth_provider_x509_cert_url": "XXX",
          "client_x509_cert_url": "XXX"
        }

Limits

  • None I hope ;).

License

This program is licenced with GNU GENERAL PUBLIC LICENSE version 3 by Free Software Foundation, Inc.

About

Send payload from mqtt message to firebase realtime database

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 95.9%
  • Dockerfile 4.1%