Python MongoDB MQTT 安装备忘录

Python 安装

pyenv 下载

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

在”.zshenv”文件中添加设置并重新登录

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"

可以检查可安装的Python版本。

$ pyenv install -l

在安装3.7.0版本时,需要在Ubuntu 17.04上安装以下的库。

$ sudo apt-get install libffi-dev
$ sudo apt-get install zlib1g-dev
$ sudo apt-get install libssl-dev libbz2-dev libreadline-dev
$ sudo apt-get install sqlite3 libsqlite3-dev

如果想要使用matplotlib,则还需要以下的库。

$ sudo apt install tk-dev

安装3.7.0版本。

$ pyenv install 3.7.0

列出已安装的版本

$ pyenv versions

设定为通常使用3.7.0版本(在设定完成后,需要重新登录)。

$ pyenv global 3.7.0

看起来MQTT核心已经自动安装并进行了启动设置。

$ sudo apt update
$ sudo apt install mosquitto mosquitto-clients

安装和启动MongoDB(由于4.0版本不能同时使用CMake,因此使用3.6版本)。

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
$ sudo apt update
$ sudo apt install mongodb-org
$ sudo systemctl unmask mongod
$ sudo systemctl start mongod
$ sudo systemctl enable mongod

解决问题

先安装3.6.3版本,然后安装4.0版本,由于cmake出现冲突,因此需要回退到3.6.6版本。

$ sudo apt update
$ sudo apt install mongodb-org
$ sudo apt upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
 mongodb-org : Depends: mongodb-org-tools but it is not installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

发生了各种错误。为了解决这个问题,

$ sudo apt -o Dpkg::Options::="--force-overwrite" install mongodb-org-tools

如果我当时这样做就好了。

Python 模块 (Python

安装Python的mongodb和mqtt模块。

$ pip install pymongo
$ pip install paho-mqtt

pymongo示例

from pymongo import MongoClient, ASCENDING, DESCENDING
from datetime import datetime

if __name__ == '__main__':
    # mongo
    mongoclient = MongoClient('mongodb://localhost:27017/')
    db = mongoclient['sensor_database']
    collection = db['sensor_collection']
    collection.delete_many({})
    collection.create_index([('nodeid', ASCENDING)])
    collection.create_index([('date', ASCENDING)])
    data = {'nodeid':'testnode', 'temp':32.1, 'date':datetime.utcnow()}
    collection.insert_one(data)

MQTT示例(指定用户名和密码)

import paho.mqtt.client as mqtt

host = '127.0.0.1'
port = 1883
topic = '/sensor/data'
username = 'user'
password = 'pass'

def on_connect(client, userdata, flags, respons_code):
    print('status {0}'.format(respons_code))
    client.subscribe(topic)

def on_message(client, userdata, msg):
    print(str(msg.payload))

if __name__ == '__main__':
    # mqtt
    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    client.username_pw_set(username, password)
    client.connect(host, port=port, keepalive=60)
    client.loop_forever()

广告
将在 10 秒后关闭
bannerAds