
    >qav,                         d Z ddlmZ ddlmZ ddlmZ d Zd Zd	 Z	d
 Z
dddddddddej        dddfdZddddddddddej        dddfdZdS )a  
This module provides some helper functions to allow straightforward subscribing
to topics and retrieving messages. The two functions are simple(), which
returns one or messages matching a set of topics, and callback() which allows
you to pass a callback for processing of messages.
    )absolute_import   )mqtt   )clientc                 *   |dk    r&t          j        t          j        |                    t	          |d         t
                    r)|d         D ]}|                     ||d                    dS |                     |d         |d                    dS )Internal callbackr   topicsqosN)r   MQTTExceptionpahoconnack_string
isinstancelist	subscribe)r   userdataflagsrc
propertiestopics         G/opt/windhager/venv/lib/python3.11/site-packages/paho/mqtt/subscribe.py_on_connect_v5r      s    	Qww !4R!8!8999(8$d++ >h' 	5 	5EUHUO4444	5 	5 	(+Xe_=====    c                 ,    t          | |||d           dS )zInternal v5 callbackN)r   )r   r   r   r   s       r   _on_connectr   &   s    68UB55555r   c                 8     |d         | |d         |           dS )r	   callbackr   N r   r   messages      r   _on_message_callbackr!   +   s&    HZ*!5w?????r   c                 8   |d         dk    rdS |j         r
|d         sdS |d         dz
  |d<   |d         '|d         dk    r||d<   |                                  dS |d                             |           |d         dk    r|                                  dS dS )r	   	msg_countr   Nretainedr   messages)retain
disconnectappendr   s      r   _on_message_simpler)   0   s     !! ~ hz2 $[1A5H[
#(=(B(B&Z(((!! "!r   N	localhosti[   <   tcpTc                    |dk     s|dk    rt          d          | |||d}t          j        |||||          }t          |_        |t
          j        j        k    rt          |_	        nt          |_	        | |j        di | |	rR|	                    d          }|r,|	                    d          }|                    ||           nt          d	          | |j        di | |
et!          |
t"                    r;|
                    d
d          } |j        di |
 |r|                    |           n|                    |
           |                    |||           |                                 dS )a  Subscribe to a list of topics and process them in a callback function.

    This function creates an MQTT client, connects to a broker and subscribes
    to a list of topics. Incoming messages are processed by the user provided
    callback.  This is a blocking function and will never return.

    callback : function of the form "on_message(client, userdata, message)" for
               processing the messages received.

    topics : either a string containing a single topic to subscribe to, or a
             list of topics to subscribe to.

    qos : the qos to use when subscribing. This is applied to all topics.

    userdata : passed to the callback

    hostname : a string containing the address of the broker to connect to.
               Defaults to localhost.

    port : the port to connect to the broker on. Defaults to 1883.

    client_id : the MQTT client id to use. If "" or None, the Paho library will
                generate a client id automatically.

    keepalive : the keepalive timeout value for the client. Defaults to 60
                seconds.

    will : a dict containing will parameters for the client: will = {'topic':
           "<topic>", 'payload':"<payload">, 'qos':<qos>, 'retain':<retain>}.
           Topic is required, all other parameters are optional and will
           default to None, 0 and False respectively.
           Defaults to None, which indicates no will should be used.

    auth : a dict containing authentication parameters for the client:
           auth = {'username':"<username>", 'password':"<password>"}
           Username is required, password is optional and will default to None
           if not provided.
           Defaults to None, which indicates no authentication is to be used.

    tls : a dict containing TLS configuration parameters for the client:
          dict = {'ca_certs':"<ca_certs>", 'certfile':"<certfile>",
          'keyfile':"<keyfile>", 'tls_version':"<tls_version>",
          'ciphers':"<ciphers">, 'insecure':"<bool>"}
          ca_certs is required, all other parameters are optional and will
          default to None if not provided, which results in the client using
          the default behaviour - see the paho.mqtt.client documentation.
          Alternatively, tls input can be an SSLContext object, which will be
          processed using the tls_set_context method.
          Defaults to None, which indicates that TLS should not be used.

    transport : set to "tcp" to use the default setting of transport which is
          raw TCP. Set to "websockets" to use WebSockets as the transport.

    clean_session : a boolean that determines the client type. If True,
                    the broker will remove all information about this client
                    when it disconnects. If False, the client is a persistent
                    client and subscription information and queued messages
                    will be retained when the client disconnects.
                    Defaults to True.

    proxy_args: a dictionary that will be given to the client.
    r   r   zqos must be in the range 0-2)r   r
   r   r   )	client_idr   protocol	transportclean_sessionNusernamepasswordz;The 'username' key was not found, this is required for authinsecureFr   )
ValueErrorr   Clientr!   
on_messager   r   MQTTv5r   
on_connectr   	proxy_setgetusername_pw_setKeyErrorwill_setr   dictpoptls_settls_insecure_settls_set_contextconnectloop_forever)r   r
   r   r   hostnameportr/   	keepalivewillauthtlsr0   r1   r2   
proxy_argscallback_userdatar   r3   r4   r5   s                       r   r   r   F   s   F Qww#''7888 	  [97H"*i'46 6 6F -F4;%%%*'&&:&&& 088J'' 	0xx
++H""8X6666 / 0 0 0 $
c4   		(wwz511HFN!!S!!! 2 ''111 ""3'''
NN8T9---
r   c                     |dk     rt          d          |dk    rd}ng }|||d}t          t          | ||||||||	|
||||           |d         S )a  Subscribe to a list of topics and return msg_count messages.

    This function creates an MQTT client, connects to a broker and subscribes
    to a list of topics. Once "msg_count" messages have been received, it
    disconnects cleanly from the broker and returns the messages.

    topics : either a string containing a single topic to subscribe to, or a
             list of topics to subscribe to.

    qos : the qos to use when subscribing. This is applied to all topics.

    msg_count : the number of messages to retrieve from the broker.
                if msg_count == 1 then a single MQTTMessage will be returned.
                if msg_count > 1 then a list of MQTTMessages will be returned.

    retained : If set to True, retained messages will be processed the same as
               non-retained messages. If set to False, retained messages will
               be ignored. This means that with retained=False and msg_count=1,
               the function will return the first message received that does
               not have the retained flag set.

    hostname : a string containing the address of the broker to connect to.
               Defaults to localhost.

    port : the port to connect to the broker on. Defaults to 1883.

    client_id : the MQTT client id to use. If "" or None, the Paho library will
                generate a client id automatically.

    keepalive : the keepalive timeout value for the client. Defaults to 60
                seconds.

    will : a dict containing will parameters for the client: will = {'topic':
           "<topic>", 'payload':"<payload">, 'qos':<qos>, 'retain':<retain>}.
           Topic is required, all other parameters are optional and will
           default to None, 0 and False respectively.
           Defaults to None, which indicates no will should be used.

    auth : a dict containing authentication parameters for the client:
           auth = {'username':"<username>", 'password':"<password>"}
           Username is required, password is optional and will default to None
           if not provided.
           Defaults to None, which indicates no authentication is to be used.

    tls : a dict containing TLS configuration parameters for the client:
          dict = {'ca_certs':"<ca_certs>", 'certfile':"<certfile>",
          'keyfile':"<keyfile>", 'tls_version':"<tls_version>",
          'ciphers':"<ciphers">, 'insecure':"<bool>"}
          ca_certs is required, all other parameters are optional and will
          default to None if not provided, which results in the client using
          the default behaviour - see the paho.mqtt.client documentation.
          Alternatively, tls input can be an SSLContext object, which will be
          processed using the tls_set_context method.
          Defaults to None, which indicates that TLS should not be used.

    transport : set to "tcp" to use the default setting of transport which is
          raw TCP. Set to "websockets" to use WebSockets as the transport.

    clean_session : a boolean that determines the client type. If True,
                    the broker will remove all information about this client
                    when it disconnects. If False, the client is a persistent
                    client and subscription information and queued messages
                    will be retained when the client disconnects.
                    Defaults to True.

    proxy_args: a dictionary that will be given to the client.
    r   zmsg_count must be > 0N)r$   r#   r%   r%   )r6   r   r)   )r
   r   r#   r$   rG   rH   r/   rI   rJ   rK   rL   r0   r1   r2   rM   r%   r   s                    r   simplerP      s    P 1}}0111 A~~#xPPHh$	4sHiJ( ( ( Jr   )__doc__
__future__r   r+   r   r   r   r   r   r!   r)   MQTTv311r   rP   r   r   r   <module>rT      s	    ' & & & & &            	> 	> 	>6 6 6
@ @ @
  , $%tk"DDq q q qh A{bt$dmu$X  X  X  X  X  X r   