Cara menggunakan PI+E pada Python

autopct memungkinkan Anda untuk menampilkan nilai persen menggunakan pemformatan string Python. Misalnya, jika autopct='%.2f', maka untuk setiap irisan pai, string format adalah '%.2f' dan nilai persentase numerik untuk irisan itu pct, sehingga label irisan diatur ke string '%.2f'%pct

import matplotlib.pyplot as plt
plt.figure()
values = [3, 12, 5, 8] 
labels = ['a', 'b', 'c', 'd'] 
plt.pie(values, labels=labels, autopct='%.2f')
plt.show()

hasil

Cara menggunakan PI+E pada Python

Anda dapat melakukan hal-hal yang lebih mewah dengan menyediakan callable ke autopct. Untuk menampilkan nilai persen dan nilai asli, Anda bisa melakukan ini:

import matplotlib.pyplot as plt

# make the pie circular by setting the aspect ratio to 1
plt.figure(figsize=plt.figaspect(1))
values = [3, 12, 5, 8] 
labels = ['a', 'b', 'c', 'd'] 

def make_autopct(values):
    def my_autopct(pct):
        total = sum(values)
        val = int(round(pct*total/100.0))
        return '{p:.2f}%  ({v:d})'.format(p=pct,v=val)
    return my_autopct

plt.pie(values, labels=labels, autopct=make_autopct(values))
plt.show()

Cara menggunakan PI+E pada Python

Sekali lagi, untuk setiap irisan pie, matplotlib memasok nilai persen pct sebagai argumen, meskipun kali ini dikirim sebagai argumen ke fungsi my_autopct. Label irisan diatur ke my_autopct(pct).

Phyton adalah bahasa pemrograman yang memiliki bermacam-macam fungsi, dapat ditafsirkan dan berlevel tinggi. Diciptakan oleh Guido van Rossum dan pertama kali dirilis di tahun 1991, filosofi desain Python menekankan ke keterbacaan kode dengan penggunaan whitespace yang signifikan. Phyton membantu programer untuk menulis kode yang logis dan jelas untuk projek berskala kecil maupun besar.1

MQTT adalah sebuah protokol messaging IoT lightweight berbasis model publish/subscribe yang menyediakan servis messaging yang dapat diandalkan dan real-time untuk perangkat IoT dengan hanya menggunakan sedikit kode dan bandwith. MQTT cocok untuk perangkat dengan sumber hardware yang terbatas dan jaringan dengan bandwith yang terbatas pula. Karena itu, protokol MQTT banyak digunakan di IoT, internet HP, tenaga listrik, dan industri lainnya.

Dalam artikel ini, saya akan mengajar Anda cara menggunakan client paho-mqtt dan koneksinya, subscribe, messaging, dan fungsi lainnya antara client dan broker MQTT dalam projek Python.

Memulai Projek

Projek ini menggunakan Python 3.6 dengan tujuan perkembangan dan test. Anda dapat menggunakan command dibawah ini untuk mengecek versi Python.

➜  ~ python3 --version             
Python 3.6.7

Pilih client MQTT

Paho Python Client menyediakan class client yang mendukung MQTT v3.1 dan v3.1.1 dalam Python 2.7 atau 3.x. Ia juga menyediakan fungsi pembantu untuk memudahkan publikasi pesan ke server MQTT.

Gunakan pip untuk mengunduh client Paho MQTT

Pip adalah software manajemen untuk paket Python. Software ini menyediakan fungsi find, download, install dan uninstall untuk paket Python.

pip3 install paho-mqtt

Kegunaan Python MQTT

Koneksi ke MQTT broker

Dalam artikel ini, saya akan menggunakan MQTT broker publik gratis dari EMQX. Servis ini dibuat dengan berdasarkan platform cloud MQTT IoT. Kunci akses broker adalah sebagai berikut:

  • Broker: broker.emqx.io
  • TCP Port: 1883
  • Websocket Port: 8083

Impor Paho MQTT Client

from paho.mqtt import client as mqtt_client

Atur parameter koneksi MQTT Broker

Atur address, port, dan topik koneksi MQTT Broker. Disaat yang sama, kita memanggil fungsi Phython random.randint untuk menghasilkan ID client MQTT secara acak.

broker = 'broker.emqx.io'
port = 1883
topic = "/python/mqtt"
client_id = f'python-mqtt-{random.randint(0, 1000)}'
# username = 'emqx'
# password = 'public'

Tulis fungsi koneksi MQTT

Tulis fungsi callback koneksi on_connect. Fungsi ini akan dipanggil setelah dikoneksikan dengan client dan kita dapat mengkonfirmasi apakah client telah berhasil dikoneksikan berdasarkan rc didalam fungsi ini. Biasanya, kami akan membuat client MQTT disaat yang sama dan client ini akan dikoneksikan ke broker.emqx.io.

def connect_mqtt():
    def on_connect(client, userdata, flags, rc):
        if rc == 0:
            print("Connected to MQTT Broker!")
        else:
            print("Failed to connect, return code %d\n", rc)
    # Set Connecting Client ID
    client = mqtt_client.Client(client_id)
    client.username_pw_set(username, password)
    client.on_connect = on_connect
    client.connect(broker, port)
    return client

Publikasi pesan

Pertama, kita perlu mendefinisikan sebuah while loop. Dalam loop ini, kita perlu mengatur fungsi publish client MQTT untuk mengirim pesan ke topik /python/mqtt tiap detiknya.

 def publish(client):
     msg_count = 0
     while True:
         time.sleep(1)
         msg = f"messages: {msg_count}"
         result = client.publish(topic, msg)
         # result: [0, 1]
         status = result[0]
         if status == 0:
             print(f"Send `{msg}` to topic `{topic}`")
         else:
             print(f"Failed to send message to topic {topic}")
         msg_count += 1

Subscribe ke pesan

Tulis fungsi callback pesan on_message. Fungsi ini akan dipanggil setelah client menerima pesan dari MQTT Broker. Dalam fungsi ini, kita perlu mencetak nama dari topik yang telah di-subscribe dan pesan yang diterima.

def subscribe(client: mqtt_client):
    def on_message(client, userdata, msg):
        print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")

    client.subscribe(topic)
    client.on_message = on_message

Kode Lengkapnya

Kode publikasi pesan

# python 3.6

import random
import time

from paho.mqtt import client as mqtt_client


broker = 'broker.emqx.io'
port = 1883
topic = "python/mqtt"
# generate client ID with pub prefix randomly
client_id = f'python-mqtt-{random.randint(0, 1000)}'
# username = 'emqx'
# password = 'public'

def connect_mqtt():
    def on_connect(client, userdata, flags, rc):
        if rc == 0:
            print("Connected to MQTT Broker!")
        else:
            print("Failed to connect, return code %d\n", rc)

    client = mqtt_client.Client(client_id)
    client.username_pw_set(username, password)
    client.on_connect = on_connect
    client.connect(broker, port)
    return client


def publish(client):
    msg_count = 0
    while True:
        time.sleep(1)
        msg = f"messages: {msg_count}"
        result = client.publish(topic, msg)
        # result: [0, 1]
        status = result[0]
        if status == 0:
            print(f"Send `{msg}` to topic `{topic}`")
        else:
            print(f"Failed to send message to topic {topic}")
        msg_count += 1


def run():
    client = connect_mqtt()
    client.loop_start()
    publish(client)


if __name__ == '__main__':
    run()

Kode subscribe pesan

# python3.6

import random

from paho.mqtt import client as mqtt_client


broker = 'broker.emqx.io'
port = 1883
topic = "python/mqtt"
# generate client ID with pub prefix randomly
client_id = f'python-mqtt-{random.randint(0, 100)}'
# username = 'emqx'
# password = 'public'


def connect_mqtt() -> mqtt_client:
    def on_connect(client, userdata, flags, rc):
        if rc == 0:
            print("Connected to MQTT Broker!")
        else:
            print("Failed to connect, return code %d\n", rc)

    client = mqtt_client.Client(client_id)
    client.username_pw_set(username, password)
    client.on_connect = on_connect
    client.connect(broker, port)
    return client


def subscribe(client: mqtt_client):
    def on_message(client, userdata, msg):
        print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")

    client.subscribe(topic)
    client.on_message = on_message


def run():
    client = connect_mqtt()
    subscribe(client)
    client.loop_forever()


if __name__ == '__main__':
    run()

Tes

Publikasi pesan

Mulai kode publikasi pesan. Disini kita dapat melihat bahwa client telah berhasil terkoneksi dan pesan telah dikirim.

python3 pub.py

Cara menggunakan PI+E pada Python

Subscribe ke pesan

Mulai kode subscribe pesan. Disini kita dapat melihat bahwa client telah berhasil terkoneksi dan pesan yang dipublikasi telah diterima.

python3 sub.py

Cara menggunakan PI+E pada Python

Rangkuman

Sejauh ini, kita telah mempelajari cara mengkoneksikan client paho-mqtt ke MQTT broker publik gratis, mengimplimentasi koneksi, mempublikasi pesan dan subscribe pesan antara test client dan MQTT broker.

Python berbeda dari bahasa pemrograman level tinggi lainnya seperti C++ atau Java. Python lebih cocok untuk mengimplimentasikan logika bisnis dari segi perangkat. Penggunaan Python dapat mempermudah kode yang dipakai dan mengurangi biaya interaksi dengan perangkat. Kami percaya bahwa Python akan memiliki aplikasi yang lebih luas dalam bidang IoT.

Di artikel selanjutnya, kami akan menulis lebih banyak artikel tentang pengembangan IoT dan Python. Jangan kemana-mana ya!

Apa itu for dalam Python?

for di Python adalah syntax yang digunakan untuk melakukan perulangan berdasarkan interval yang ditentukan pengguna. Perulangan for pada bahasa pemrograman Python mempunyai kelebihan yang tidak hanya berdasarkan range bilangan, juga termasuk perulangan terhadap item suatu urutan (list atau string).

Apa guna import pada Python?

import digunakan untuk mengimpor sebagaian isi modul dan bukan keseluruhan isi modul. Bila kita menggunakan format import *, maka semua isi modul akan dimuat. Bedanya dengan format import standar adalah di sini kita dapat menggunakan semua isi modul tanpa menggunakan operator titik.

Apa itu tipe data pada Python?

Tipe data adalah suatu media atau memori pada komputer yang digunakan untuk menampung informasi. Python sendiri mempunyai tipe data yang cukup unik bila kita bandingkan dengan bahasa pemrograman yang lain.

Apa itu def di Python?

def pada bahasa python adalah suatu cara untuk mendifinisikan sebuah method atau fungsi.