pythonインストール
pyenv ダウンロード
.sh
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
.zshenvに設定を追加して再ログイン
.sh
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"
インストールできるpythonのバージョンチェック
.sh
$ pyenv install -l
3.7.0をインストールするとき、ubuntu 17.04では以下のライブラリインストールが必要だった
.sh
$ 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を使いたい場合は次のライブラリも必要です
.sh
$ sudo apt install tk-dev
3.7.0をインストール
.sh
$ pyenv install 3.7.0
インストールされているバージョンをリストアップ
.sh
$ pyenv versions
3.7.0を通常使うものとして設定(以下設定の後、再ログインが必要)
.sh
$ pyenv global 3.7.0
mqtt本体インストール(起動設定は自動的に行われるようだ)
.sh
$ sudo apt update
$ sudo apt install mosquitto mosquitto-clients
mongodb本体インストールと起動設定(4.0はcmakeと同時に使えなくなるので3.6)
.sh
$ 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に戻す時に
.sh
$ 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).
などとエラーが起こってしまった。これに対処するには
.sh
$ sudo apt -o Dpkg::Options::="--force-overwrite" install mongodb-org-tools
とすればよかった。
pythonモジュール
mongodb と mqtt のpythonモジュールインストール
.sh
$ pip install pymongo
$ pip install paho-mqtt
pymongoサンプル
.py
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サンプル(ユーザー名、パスワード指定)
.py
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()