MqttMonitor/MqttReasonCodes.py

Thu, 30 Dec 2021 11:19:57 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 30 Dec 2021 11:19:57 +0100
branch
eric7
changeset 114
8c0e9e602124
parent 102
70b8858199f5
child 123
3d7e63ed4fd1
permissions
-rw-r--r--

Updated copyright for 2022.

# -*- coding: utf-8 -*-

# Copyright (c) 2021 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing the translated MQTT v5 reason codes.
"""

from PyQt6.QtCore import QCoreApplication

from paho.mqtt.packettypes import PacketTypes

MqttReasonCodeNames = {
    0: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Success"
        ): [PacketTypes.CONNACK, PacketTypes.PUBACK, PacketTypes.PUBREC,
            PacketTypes.PUBREL, PacketTypes.PUBCOMP, PacketTypes.UNSUBACK,
            PacketTypes.AUTH],
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Normal disconnection"
        ): [PacketTypes.DISCONNECT],
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Granted QoS 0"
        ): [PacketTypes.SUBACK]},
    1: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Granted QoS 1"
        ): [PacketTypes.SUBACK]},
    2: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Granted QoS 2"
        ): [PacketTypes.SUBACK]},
    4: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Disconnect with will message"
        ): [PacketTypes.DISCONNECT]},
    16: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "No matching subscribers"
        ): [PacketTypes.PUBACK, PacketTypes.PUBREC]},
    17: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "No subscription found"
        ): [PacketTypes.UNSUBACK]},
    24: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Continue authentication"
        ): [PacketTypes.AUTH]},
    25: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Re-authenticate"
        ): [PacketTypes.AUTH]},
    128: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Unspecified error"
        ): [PacketTypes.CONNACK, PacketTypes.PUBACK,
            PacketTypes.PUBREC, PacketTypes.SUBACK,
            PacketTypes.UNSUBACK, PacketTypes.DISCONNECT]},
    129: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Malformed packet"
        ): [PacketTypes.CONNACK, PacketTypes.DISCONNECT]},
    130: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Protocol error"
        ): [PacketTypes.CONNACK, PacketTypes.DISCONNECT]},
    131: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Implementation specific error"
        ): [PacketTypes.CONNACK, PacketTypes.PUBACK,
            PacketTypes.PUBREC, PacketTypes.SUBACK,
            PacketTypes.UNSUBACK, PacketTypes.DISCONNECT]},
    132: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Unsupported protocol version"
        ): [PacketTypes.CONNACK]},
    133: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Client identifier not valid"
        ): [PacketTypes.CONNACK]},
    134: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Bad user name or password"
        ): [PacketTypes.CONNACK]},
    135: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Not authorized"
        ): [PacketTypes.CONNACK, PacketTypes.PUBACK,
            PacketTypes.PUBREC, PacketTypes.SUBACK,
            PacketTypes.UNSUBACK, PacketTypes.DISCONNECT]},
    136: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Server unavailable"
        ): [PacketTypes.CONNACK]},
    137: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Server busy"
        ): [PacketTypes.CONNACK, PacketTypes.DISCONNECT]},
    138: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Banned"
        ): [PacketTypes.CONNACK]},
    139: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Server shutting down"
        ): [PacketTypes.DISCONNECT]},
    140: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Bad authentication method"
        ): [PacketTypes.CONNACK, PacketTypes.DISCONNECT]},
    141: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Keep alive timeout"
        ): [PacketTypes.DISCONNECT]},
    142: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Session taken over"
        ): [PacketTypes.DISCONNECT]},
    143: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Topic filter invalid"
        ): [PacketTypes.SUBACK, PacketTypes.UNSUBACK,
            PacketTypes.DISCONNECT]},
    144: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Topic name invalid"
        ): [PacketTypes.CONNACK, PacketTypes.PUBACK,
            PacketTypes.PUBREC, PacketTypes.DISCONNECT]},
    145: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Packet identifier in use"
        ): [PacketTypes.PUBACK, PacketTypes.PUBREC,
            PacketTypes.SUBACK, PacketTypes.UNSUBACK]},
    146: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Packet identifier not found"
        ): [PacketTypes.PUBREL, PacketTypes.PUBCOMP]},
    147: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Receive maximum exceeded"
        ): [PacketTypes.DISCONNECT]},
    148: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Topic alias invalid"
        ): [PacketTypes.DISCONNECT]},
    149: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Packet too large"
        ): [PacketTypes.CONNACK, PacketTypes.DISCONNECT]},
    150: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Message rate too high"
        ): [PacketTypes.DISCONNECT]},
    151: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Quota exceeded"
        ): [PacketTypes.CONNACK, PacketTypes.PUBACK,
            PacketTypes.PUBREC, PacketTypes.SUBACK,
            PacketTypes.DISCONNECT], },
    152: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Administrative action"
        ): [PacketTypes.DISCONNECT]},
    153: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Payload format invalid"
        ): [PacketTypes.PUBACK, PacketTypes.PUBREC, PacketTypes.DISCONNECT]},
    154: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Retain not supported"
        ): [PacketTypes.CONNACK, PacketTypes.DISCONNECT]},
    155: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "QoS not supported"
        ): [PacketTypes.CONNACK, PacketTypes.DISCONNECT]},
    156: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Use another server"
        ): [PacketTypes.CONNACK, PacketTypes.DISCONNECT]},
    157: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Server moved"
        ): [PacketTypes.CONNACK, PacketTypes.DISCONNECT]},
    158: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Shared subscription not supported"
        ): [PacketTypes.SUBACK, PacketTypes.DISCONNECT]},
    159: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Connection rate exceeded"
        ): [PacketTypes.CONNACK, PacketTypes.DISCONNECT]},
    160: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Maximum connect time"
        ): [PacketTypes.DISCONNECT]},
    161: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Subscription identifiers not supported"
        ): [PacketTypes.SUBACK, PacketTypes.DISCONNECT]},
    162: {
        QCoreApplication.translate(
            "MqttReasonCodeNames", "Wildcard subscription not supported"
        ): [PacketTypes.SUBACK, PacketTypes.DISCONNECT]},
}


def mqttReasonCode(rc, packetType):
    """
    Function to get the readable reason code string given the result code and
    the packet type.
    
    @param rc result code
    @type int
    @param packetType packet type
    @type PacketTypes (= int)
    @return message associated with the reason code and packet type
    @rtype str
    """
    if rc not in MqttReasonCodeNames:
        return QCoreApplication.translate(
            "MqttReasonCodeNames", "Unknown result code ({0})").format(rc)
    
    messages = MqttReasonCodeNames[rc]
    messagesList = [message for message in messages.keys()
                    if packetType in messages[message]]
    if len(messagesList) == 0:
        return QCoreApplication.translate(
            "MqttReasonCodeNames",
            "Unknown result code ({0}) for packet type '{1}'"
        ).format(rc, packetType)
    
    return messagesList[0]

eric ide

mercurial