Ejemplo n.º 1
0
def publish(topic, payload, retained=False, port=1883, host="localhost"):
    publish = MQTTSN.Publishes()
    publish.Flags.QoS = 3
    publish.Flags.Retain = retained
    if isinstance(payload, str):
        pass
    elif isinstance(payload, bytes):
        payload = payload.decode()
    if isinstance(topic, str):
        if len(topic) > 2:
            publish.Flags.TopicIdType = MQTTSN.TOPIC_NORMAL
            publish.TopicId = len(topic)
            payload = topic + payload
        else:
            publish.Flags.TopicIdType = MQTTSN.TOPIC_SHORTNAME
            publish.TopicName = topic
    else:
        publish.Flags.TopicIdType = MQTTSN.TOPIC_NORMAL
        publish.TopicId = topic
    publish.MsgId = 0
    #print("payload", payload)
    publish.Data = payload
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.sendto(publish.pack(), (host, port))
    sock.close()
    return
Ejemplo n.º 2
0
 def publish(self, topic, payload, qos=0, retained=False):
     if isinstance(payload, str) or isinstance(payload, bytes):
         pass
     else:
         raise TypeError('Payload must be str or bytes.')
     publish = MQTTSN.Publishes()
     publish.Flags.QoS = qos
     publish.Flags.Retain = retained
     if isinstance(topic, str):
         publish.Flags.TopicIdType = MQTTSN.TOPIC_SHORTNAME
         publish.TopicName = topic
     else:
         publish.Flags.TopicIdType = MQTTSN.TOPIC_NORMAL
         publish.TopicId = topic
     if qos in [-1, 0]:
         publish.MsgId = 0
     else:
         publish.MsgId = self.__nextMsgid()
         #print("MsgId", publish.MsgId)
         self.__receiver.outMsgs[publish.MsgId] = publish
     publish.Data = payload
     self.sock.send(publish.pack())
     return publish.MsgId