Project Grote Schakelaar: verschil tussen versies
(→Koppeling op de Server) |
(→Koppeling op de Server) |
||
Regel 104: | Regel 104: | ||
def __init__(self): | def __init__(self): | ||
self.status = -1 | self.status = -1 | ||
− | + | ||
def on_message(self, mosq, userdata , message): | def on_message(self, mosq, userdata , message): | ||
data = message.payload | data = message.payload |
Versie van 25 mrt 2019 om 16:26
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.
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