Project Grote Schakelaar: verschil tussen versies

Uit MakerSpace Leiden
Ga naar: navigatie, zoeken
(Werking)
(Koppeling op de Server)
Regel 85: Regel 85:
 
   Space Bot - Stichting Makerspace Leiden/
 
   Space Bot - Stichting Makerspace Leiden/
 
   '''
 
   '''
 
+
   
 
   def send_email(Msg):
 
   def send_email(Msg):
 
         msg = MIMEText(mailTemplate.format(Msg, datetime.now().strftime("%H:%M")))
 
         msg = MIMEText(mailTemplate.format(Msg, datetime.now().strftime("%H:%M")))
Regel 92: Regel 92:
 
         msg['Subject'] = mailSubject.format(Msg)
 
         msg['Subject'] = mailSubject.format(Msg)
 
         s = smtplib.SMTP(smtphost)
 
         s = smtplib.SMTP(smtphost)
 
+
 
 
         s.sendmail(sendfrom, mailto, msg.as_string())
 
         s.sendmail(sendfrom, mailto, msg.as_string())
 
         s.quit()
 
         s.quit()
 
+
 
 
         print(str(datetime.now())+" email sent -- " +Msg)
 
         print(str(datetime.now())+" email sent -- " +Msg)
 
+
 
 
   def on_connect(mosq, obj, flags, rc):
 
   def on_connect(mosq, obj, flags, rc):
 
print(str(datetime.now())+" Connected or reconnected.")
 
print(str(datetime.now())+" Connected or reconnected.")
 
+
 
 
   class Status():
 
   class Status():
 
   def __init__(self):
 
   def __init__(self):
Regel 109: Regel 109:
 
     if self.status == data:
 
     if self.status == data:
 
         return
 
         return
 
+
 
 
     Msg="gesloten"
 
     Msg="gesloten"
 
     if data=="1":
 
     if data=="1":
Regel 116: Regel 116:
 
     if self.status != -1:
 
     if self.status != -1:
 
             send_email(Msg)
 
             send_email(Msg)
 
+
 
 
     self.status=data
 
     self.status=data
 
+
 
 
   mqttc = mqtt.Client("groteschakelaar-bridge-msl")
 
   mqttc = mqtt.Client("groteschakelaar-bridge-msl")
 
   instance=Status()
 
   instance=Status()
 
+
 
 
   mqttc.on_message = instance.on_message
 
   mqttc.on_message = instance.on_message
 
   mqttc.on_connect = on_connect
 
   mqttc.on_connect = on_connect
 
+
 
 
   mqttc.connect("space.makerspaceleiden.nl", 1883, 60)
 
   mqttc.connect("space.makerspaceleiden.nl", 1883, 60)
 
   mqttc.subscribe("makerspace/groteschakelaar", 2)
 
   mqttc.subscribe("makerspace/groteschakelaar", 2)
 
+
 
 
   while mqttc.loop() == 0:
 
   while mqttc.loop() == 0:
 
pass
 
pass

Versie van 25 mrt 2019 om 16:25


Grote Schakelaar

Dit is de Grote Schakelaar waarmee je (vrijwillig) kunt aangeven dat je aanwezig bent op de MakerSpace b.v. als 2e persoon voor de mensen die met de 3 fase machines willen werken, of voor bezoekers. Zet 'm dan aan | bij binnenkomst, en uit -- bij (of voor) vertrek, als je verwacht langer dan 60 minuten op de space te zijn.

Grote Schakelaar stuurt (zie het kopje "werking" hieronder) een mailtje naar de spaceloglijst dat de MakerSpace open is, en post zijn status ook op MQTT

Hoe?

Met de pijl van boven naar beneden (verticaal) geeft aan dat de MakerSpace open is. Met de pijl van links naar rechts (horizontaal) geeft aan dat de space gesloten is. Bedien Grote Schakelaar door de pijl te draaien.

Als je je inschrijft op de [Spacelog lijst linkje invoegen | spacelog lijst] krijg je mail van de deur als er iemand de MakerSpace binnenkomt, maar ook van Grote Schakelaar.

Je kunt ook de status van Grote Schakelaar bekijken via MQTT, dat kan ook op je telefoon met b.v. de app "MQTTool". Kies als host "space.makerspaceleiden.nl", als topic "makerspace/#", en zet QOS op 1 zodat je ook de "retained" berichten ziet (wie er als laatste door de deur is geweest).

Grote Schakelaar post "1" als 'ie aan staat (Pijl verticaal / makerspace open), en "0" als 'ie uit staat.

Werking

In de kunststof behuizing aan de muur boven Grote Schakelaar zit een ESP-tje dat de schakelaar uitleest en overeenkomstig een bericht met retain op de MQTT bus post (Topic: makerspace/groteschakelaar), bestaande uit een "1" of een "0" afhankelijk van de staat van de schakelaar. code.

Tussen schakelaar en ESP-tje zit een simpel R/C netwerkje, parallel aan de ingang een LED, als input protectie, en de voeding van het ESPtje heeft een fikse bufferelco. Zonder deze maatregelen stopte Grote Schakelaar met werken, (bijna) elke keer als er werd geschakeld. Het ESPtje en de schakeling eromheen is eigendom van Lucas, de Grote Schakelaar zelf is eigendom van MakerSpaceLeiden.

Schema Grote Schakelaar. Gevoed via LF33 (of LM1117-3v3) uit de 12V uit de PoESP van de SpaceDeur.

De server die het deursysteem beheert luistert naar de MQTT bus en stuurt een mailtje naar de spaceloglijst als deze status veranderd. Als het een 1 geworden is, wordt het "Open" mailtje gestuurd, als het een 0 geworden is, het "Gesloten" mailtje.

Koppeling op de Server

Start stop middels systemd:

 #/lib/systemd/system/groteschakelaar.service
 [Unit]
 Description=Grote Schakelaar mqtt/spacelog bridge
 After=multi-user.target
  
 [Service]
 Type=idle
 ExecStart=/usr/bin/python /home/dirkx/groteschakelaar-bridge.py
  
  [Install]
  WantedBy=multi-user.target

To check if running:

  $ sudo systemctl status  groteschakelaar.service
   ● groteschakelaar.service - Grote Schakelaar mqtt/spacelog bridge
  Loaded: loaded (/lib/systemd/system/groteschakelaar.service; enabled; vendor preset: enabled)
  Active: active (running) since Mon 2019-03-25 16:19:38 CET; 33s ago
Main PID: 26478 (python)
   Tasks: 1 (limit: 4583)
  CGroup: /system.slice/groteschakelaar.service
          └─26478 /usr/bin/python /home/dirkx/groteschakelaar-bridge.p

Actual script:

  #!/usr/bin/python
  #
  # Orginal script of Marten from DeurDB.
  #
  import smtplib
  import time
  import logging
  from email.mime.text import MIMEText 
  from datetime import datetime, date, timedelta
  
  import paho.mqtt.client as mqtt
  import paho.mqtt.publish as publish
  sendfrom  = 'groteschakelaar@makerspaceleiden.nl'
  mailto  = 'spacelog@makerspaceleiden.nl'
  smtphost = 'localhost'
  mailSubject = "Space is {}"
  mailTemplate=
  De space is nu {}. Want iemand draaide rond {} aan de grote schakelaar links naast de deur, onder de thermostaat).
  
  Uw Space bot (from its new perch)
  -- 
  Space Bot - Stichting Makerspace Leiden/
  
   
  def send_email(Msg):
       msg = MIMEText(mailTemplate.format(Msg, datetime.now().strftime("%H:%M")))
       msg['From'] = sendfrom
       msg['To'] = mailto 
       msg['Subject'] = mailSubject.format(Msg)
       s = smtplib.SMTP(smtphost)
  
       s.sendmail(sendfrom, mailto, msg.as_string())
       s.quit()
  
       print(str(datetime.now())+" email sent -- " +Msg)
  
  def on_connect(mosq, obj, flags, rc):

print(str(datetime.now())+" Connected or reconnected.")

  class Status():
 def __init__(self):
   self.status = -1
 def on_message(self, mosq, userdata , message):
   data = message.payload
   if self.status == data:
       return
  
   Msg="gesloten"
   if data=="1":
       Msg="open"
   if self.status != -1:	
           send_email(Msg)
  
   self.status=data
  
  mqttc = mqtt.Client("groteschakelaar-bridge-msl")
  instance=Status()
 
  mqttc.on_message = instance.on_message
  mqttc.on_connect = on_connect
  
  mqttc.connect("space.makerspaceleiden.nl", 1883, 60)
  mqttc.subscribe("makerspace/groteschakelaar", 2)
 
  while mqttc.loop() == 0:

pass