views.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. from django.shortcuts import render
  2. from django.urls import reverse
  3. import django.db.utils
  4. from .models import *
  5. from .forms import *
  6. from paho.mqtt import client as mqttclient
  7. import json
  8. import random
  9. from supporto import managepassword
  10. from sicurezza.views import *
  11. from logger.views import *
  12. from comunicazioni.views import *
  13. from datetime import date
  14. from configurazione.views import *
  15. # Create your views here.
  16. class mqtt(object):
  17. def __init__(self):
  18. self.broker=getConfigurazione('mqtt:broker:address')
  19. self.port = int(getConfigurazione('mqtt:broker:port'))
  20. self.username = getConfigurazione('mqtt:broker:username')
  21. self.password = getConfigurazione('mqtt:broker:password')
  22. self.client_id = f'mqtt-{random.randint(0, 1000)}'
  23. self.login()
  24. self.struttura = dict()
  25. self.struttura['topic'] = 'dashboard'
  26. self.struttura['demo'] = False # se il valore e' True, l'operazione non va effettuata
  27. self.struttura['stampa'] = True
  28. self.struttura['data'] = list()
  29. self.struttura['risultato'] = list()
  30. self.struttura['messaggio'] = ''
  31. self.struttura['successo'] = ''
  32. self.struttura['nota'] = ''
  33. self.struttura['clear'] = '' #rimuove i dati inviati se non servono ulteriori elaborazioni
  34. self.struttura['seriale'] = '' #il contenuto di data e' serializzato
  35. self.struttura['numero'] = 0 #conta quanti record vanno elaborati
  36. self.struttura['notifica_numero'] = False #invia notifica se il numero corrisponde alle lavorazioni
  37. # messaggio viene inviato se tutto e' Tru
  38. self.check=dict()
  39. self.check['topic'] = False
  40. self.check['demo'] = False
  41. self.check['stampa'] = False
  42. self.check['data'] = False
  43. self.check['risultato'] = False
  44. self.check['messaggio'] = False
  45. self.check['successo'] = False
  46. self.check['nota'] = False
  47. self.check['clear'] = False
  48. self.check['seriale'] = False
  49. self.check['numero'] = 0
  50. self.check['notifica_numero'] = False
  51. def login(self):
  52. self.client = mqttclient.Client(self.client_id)
  53. self.client.username_pw_set(self.username,self.password)
  54. self.client.on_connect = self.on_connect
  55. try:
  56. self.client.connect(self.broker,self.port)
  57. print('Mqtt Connessione Accettata')
  58. except ConnectionRefusedError as cre:
  59. print('Mqtt Connessione Rifiutata')
  60. print(cre)
  61. self.client = None
  62. def publish(self,topic,message):
  63. print('funzione mqtt:publish obsoleta!')
  64. self.pubblica(topic,message)
  65. def pubblica(self,_topic=None,messaggio=None,struttura=None):
  66. print('reconnecting',self.client.reconnect())
  67. if _topic:
  68. print('assegnazione topic da parametro')
  69. t = _topic
  70. else:
  71. print('assegnazione topic da interna')
  72. t = self.struttura['topic']
  73. if messaggio:
  74. print('assegnazione messaggio esterno')
  75. self.struttura['Messaggio'] = messaggio
  76. j = None
  77. if struttura:
  78. if 'data' in struttura:
  79. struttura['numero'] = len(struttura['data'])
  80. j = json.dumps(struttura)
  81. else:
  82. if 'data' in self.struttura:
  83. self.struttura['numero'] = len(self.struttura['data'])
  84. j = json.dumps(self.struttura)
  85. print('modulo mqtt')
  86. print('topic:',t)
  87. print('messaggio:',j)
  88. result = self.client.publish(t,j)
  89. if result:
  90. return True
  91. return False
  92. def topic(self,_topic=None):
  93. if _topic:
  94. self.struttura['topic'] = _topic
  95. def richiesta(self,_richiesta=None):
  96. if _richiesta:
  97. self.struttura['richiesta'] = _richiesta
  98. def messaggio(self,_messaggio=None):
  99. if _messaggio:
  100. self.struttura['messaggio'] = _messaggio
  101. def demo(self,_demo=False):
  102. self.struttura['demo']=_demo
  103. def stampa(self,_stampa=False):
  104. self.struttura['stampa']=_stampa
  105. def clear(self,_clear=False):
  106. self.struttura['clear'] = _clear
  107. def seriale(self,_seriale=False):
  108. self.struttura['seriale']= _seriale
  109. def data(self,_data=list(),replace=False):
  110. '''
  111. questo passaggio contiene il dato da elaborare.
  112. normalmente e' in una lista su cui si puo' ciclare.
  113. ora ho deciso 27.01.24 di aggiungere anche la serializzazione
  114. per verificare 2 teorie:
  115. 1: maggior controllo sul dato passato.
  116. 2: abbassare il tasso di errore negli script
  117. '''
  118. if replace and _data:
  119. self.struttura['data'] = _data
  120. if data:
  121. self.struttura['data'].append(data)
  122. def risultato(self,_risultato=list(),replace=False):
  123. if replace and _risultato:
  124. self.struttura['risultato'] = _risultato
  125. if risultato:
  126. self.struttura['risultato'].append(risultato)
  127. def messaggio(self,_messaggio=None):
  128. if _messaggio:
  129. self.struttura['messaggio'] = _messaggio
  130. def successo(self,_successo=None):
  131. if _successo:
  132. self.struttura['successo']=_successo
  133. def build(self,valore,chiave):
  134. print('warning: utilizzo di {} con valore {}'.format(valore,chiave))
  135. self.struttura[valore] = chiave
  136. # verifica che la frase sia una stringa e se lo e'
  137. # mette la prima lettera maiuscola
  138. if type(self.struttura[valore]) == str:
  139. self.struttura[valore] = self.struttura[valore]
  140. return self.struttura
  141. def data(self,valore):
  142. '''
  143. appende il valore passato alla struttura di richiesta 'data'.
  144. devo arrivare a far si che tale struttura non sia disponibile dall'esterno
  145. '''
  146. self.struttura['data'].append(valore)
  147. return self.struttura['data']
  148. def risultato(self,valore):
  149. '''
  150. appende il valore passato alla struttura di risposta 'risultato'
  151. devo arrivare a far si che tale struttura non sia disponibile dall'esterno
  152. '''
  153. self.struttura['risultato'].append(valore)
  154. return self.struttura['risultato']
  155. def on_connect(client,userdata,flags,rc):
  156. print('mqtt on_connect')
  157. if rc == 0:
  158. print('mqtt connected')
  159. else:
  160. print('mqtt failed')
  161. ##########################################
  162. def start():
  163. broker='172.18.0.1'
  164. port = 1881
  165. topic = 'dashboard'
  166. username = 'dashboard'
  167. password = 'EnigmA'
  168. client_id = f'mqtt-{random.randint(0, 1000)}'
  169. def on_connect(client,userdata,flags,rc):
  170. print('mqtt on_connect')
  171. if rc == 0:
  172. print('mqtt connected')
  173. else:
  174. print('mqtt failed')
  175. client = mqttclient.Client(client_id)
  176. client.username_pw_set(username,password)
  177. client.on_connect = on_connect
  178. try:
  179. client.connect(broker,port)
  180. except ConnectionRefusedError as cre:
  181. print('Connessione rifiutata')
  182. print(cre)
  183. client = None
  184. return client
  185. def publish(client,topic,message):
  186. if client:
  187. client.reconnect()
  188. result = client.publish(topic,message)
  189. print('mqtt result:',result)
  190. else:
  191. print('mqtt failed to send')
  192. def publishMessaggi(client,message):
  193. if client:
  194. client.reconnect()
  195. result = client.publish('Messaggi',json.dumps({'me':message}))
  196. print('mqtt result:',result)
  197. else:
  198. print('mqtt failed to send')
  199. def command(request):
  200. data = {}
  201. return render(request,'',data)
  202. def MqttList(request):
  203. session = getSessionParms(request)
  204. userauth = session['_userauth_']
  205. filtro2edit = session['_mqtt2edit_']
  206. request.session['from']='filtro:MqttList'
  207. utenteautorizzato = User.objects.get(pk=userauth)
  208. value={}
  209. value['utenteautorizzato'] = utenteautorizzato
  210. value['navbar'] = True
  211. print("livello autorizzazione",utenteautorizzato.securitylevel_id)
  212. securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id)
  213. securityrow = getSecurityRow(utenteautorizzato.securitylevel_id)
  214. securitylist = getSecurityList(securityrow)
  215. value['securitylist'] = securitylist
  216. value['securityrow'] = securityrow
  217. value['securityrowLen'] = len(securityrow)
  218. mqttlist = MqttService.objects.order_by('nome')
  219. value['mqtt'] = mqttlist
  220. if request.method=="POST":
  221. if "Nuovo Filtro" in request.POST:
  222. print('nuovo filtro')
  223. request.session['_mqtt2edit_'] = 0
  224. return HttpResponseRedirect(reverse('Mqtt:MqttEdit',args={}))
  225. if "edit" in request.POST:
  226. print('id da editare',request.POST['edit'])
  227. request.session['_mqtt2edit_'] = request.POST['edit']
  228. return HttpResponseRedirect(reverse('Mqtt:MqttEdit',args={}))
  229. '''
  230. if "disable" in request.POST :
  231. print('id da disattivare',request.POST['disable'])
  232. idpost = request.POST['disable']
  233. f = Filtro.objects.get(pk=idpost)
  234. f.enabled=False
  235. f.save()
  236. if "enable" in request.POST:
  237. print('id da attivare',request.POST['enable'])
  238. idpost = request.POST['enable']
  239. f = Filtro.objects.get(pk=idpost)
  240. f.enabled=True
  241. f.save()
  242. if "delete" in request.POST:
  243. print('id da cancellare',request.POST['delete'])
  244. idpost = request.POST['delete']
  245. f = Filtro.objects.get(pk=idpost)
  246. f.delete()
  247. '''
  248. return render(request,"Mqtt.List.html",value)
  249. def MqttEdit(request):
  250. pass