Webserver und gleichzeitig im Hintergrund MQTT???

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
foto2004
User
Beiträge: 16
Registriert: Samstag 27. Juni 2020, 12:57

Hallo Gemeinde,

ich habe eine Frage wie stell ich es an dass ich bei einem esp8266 den Webserver laufen lasse aber auch im Hintergrund immer wieder in gewissen Zeitabständen z.B. ein MQTT post abgesetzt wird? Ich habe es nur geschafft dass die ganze While True Schleife durchlauft wenn auch eine Webanfrage kommt.

hier ein Beispiel mit dem ich gerade herumprobiere. Vielleicht hat ja da einer eine Idee.

Code: Alles auswählen


import netzwerk
from machine import Pin
import time

try:
    import usocket as socket
except:
    import socket

import esp
esp.osdebug(None)

print(netzwerk.wlan.ifconfig())
int_led = Pin(2, Pin.OUT)


def web_page():
  if int_led.value() == 1:
   relay_state = ''
  else:
    relay_state = 'checked'
  html = """
    <html>
    <head><meta name="viewport" content="width=device-width, initial-scale=1">
    <style> 
      body{font-family:Arial; text-align: center; margin: 0px auto; padding-top:30px;}
      .switch{position:relative;display:inline-block;width:120px;height:68px}.switch input{display:none}
      .slider{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#ccc;border-radius:34px}
      .slider:before{position:absolute;content:"";height:52px;width:52px;left:8px;bottom:8px;background-color:#fff;-webkit-transition:.4s;transition:.4s;border-radius:68px}
      input:checked+.slider{background-color:#2196F3}
      input:checked+.slider:before{-webkit-transform:translateX(52px);-ms-transform:translateX(52px);transform:translateX(52px)}
    </style>
    <script>function toggleCheckbox(element) { var xhr = new XMLHttpRequest(); if(element.checked){ xhr.open("GET", "/?relay=on", true); }
      else { xhr.open("GET", "/?relay=off", true); } xhr.send(); }
    </script>
    </head>
    <body>
      <h1>ESP8266 LED Web Server</h1>
      <label class="switch"><input type="checkbox" onchange="toggleCheckbox(this)" %s>
      <span class="slider"></span>
      </label>
    </body>
    </html>""" % (relay_state)
  return html

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)

while True:
  for i in range(3):
    int_led.on()
    time.sleep(1)
    int_led.off()
    time.sleep(1)
    print("Range durch " + str(i+1) + " mal.")
    
  i = 0
  print("Range ist wieder " + str(i)) # Ist ja logisch dass er hier stehenbleibt weil er unten auf eine Aktion wartet.
  
  try:
    if gc.mem_free() < 102000:
      gc.collect()
    conn, addr = s.accept()
    conn.settimeout(3.0)
    print('Got a connection from %s' % str(addr))
    request = conn.recv(1024)
    conn.settimeout(None)
    request = str(request)
    print('Content = %s' % request)
    relay_on = request.find('/?relay=on')
    relay_off = request.find('/?relay=off')
    if relay_on == 6:
      print('RELAY ON')
      int_led.value(0)
    if relay_off == 6:
      print('RELAY OFF')
      int_led.value(1)
    response = web_page()
    conn.send('HTTP/1.1 200 OK\n')
    conn.send('Content-Type: text/html\n')
    conn.send('Connection: close\n\n')
    conn.sendall(response)
    conn.close()
  except OSError as e:
    conn.close()
    print('Connection closed')


noch ganz am Anfang vom Lernen ...
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Antworten