LoginSignup
1
0

More than 5 years have passed since last update.

python mongodb mqtt インストールメモ

Last updated at Posted at 2018-07-20

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モジュール

mongodb と mqtt のpythonモジュールインストール

$ 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()

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0