Distributed space monitoring.
Om de space te automatiseren is er de volgende infrastructuur aanwezig:
- Een patchrack met 24V en USB2TTL (5V)
- Arduino's
- Een MQTT server
- Een linux server (met mogelijkheid voor virtuele machines)
Het patchrack
Bestaat uit 24 netwerkpoorten met:
- 24V+ op Blauw/Blauw-wit
- Ground (24V) op Zwart/Zwart-wit
- 5V op Oranje
- GND op Oranje-Wit
- TX op Groen-Wit (op je arduino moet dit op RX)
- RX op Groen (op je arduino is dit dus TX)
De 5V is beperkt tot maximaal 500mA
24V is beperkt tot
- poort 1,2,7,8,13,19: 1A
- poort 3-6,9-12: 0.25A
- poort 14-18,20-24: 0.4A
De opbouw bestaat uit 4 keer het volgende in 1U 19:
- 6 USB naar TTL converters
- 1 USB Hub met 7 poorten (downlink naar de volgende)
- 1 gaatjesPCB van 8x2cm met totaal (2*1A + 4*0.25A) = 3A of (1*1A + 5*0.4A) = 3A polyfuses en een DC-Jack aansluiting
- 1 24V 2.7A voeding
En 1 keer:
- USB Uplink kabel naar de linux PC
- 1 stekkerblok voor de 4 voedingen
Arduino
Dit zijn hele goedkope ATMEGA168P arduino's, programmeren op 5V 16MHz in de IDE.
Serieele snelheid (om terug te melden aan de linuxdoos wat je metingen zijn of commando's te ontvangen): maximaal 57600, ruim daarboven doet 't 't niet zo goed meer.
aansluitspul voor de arduino's
- DS18B20
- DHT11
- DHT22
- MQ-gas sensoren
- Ledjes
- Read-Switches
- Lift-deur Sensoren
- 1Wire button readers (voor de doorduino's, die hebben beter arduino's).
- microswitch
- LDR
MQTT
Draait op kleintje.space.hack42.nl doe even een mosquitto_sub -h localhost -t 'hack42/#' -v om te kijken wat er nu al is.
Outputs
- hack42.nl/state [open|closed] spacestate
- hack42.nl/wlan/clientcount <aantal wlan clients connected totaal>
- hack42.nl/wlan/<apnaam> <aantal wlan clients per ap>
- hack42.nl/sensors/1wire/<1wireID> <temperatuur> °C
- hack42.nl/<ruimtenaam>/output/portX [open|closed] Output state
- hack42.nl/<ruimtenaam>/input/portX [open|closed] Input states
Inputs
Schrijf hiernaar:
- hack42.nl/<ruimtenaam>/input/O<portnummer> [open|closed] open of close een output, per locatie kan verschillen wat de actie is en de timer die erop staat.
Linux server
Kleintje: Paar GB ram, disks in raid en draait opensuse. Voor speciale dingen is er de mogelijkheid tot KVM.
Op de space te bereiken onder kleintje.space.hack42.nl, van buitenaf als ipv4.hack42.nl.
De standaard monitoring software
De meeste monitor software zijn instances van meten/Standard.py in meten/
Draait in screen:
screen -r monitor
dit is een curses applicatie waar je kunt switchen tussen de inputs met de letter die erbij staat. Alle andere lowasccii (dat wat op je toetsenbord zit) wordt doorgestuurd via serieel naar het huidige device.
Nieuwe service
in ~/software/run.py: [..] startport("Stookhok","05",RRDPATH,19200) [..]
"Stookhok" (ook de naam in meten/Stookhok.py):
#!/usr/bin/python from Standard import Standard class meet(Standard): name="stookkelder" # deze naam komt in mqtt terecht def on_start(self): self.request("O1C") # close port 1 (enzoverder) def runline(self,line): self.runinputoutput(line) # behandelt de standaard regels die starten met 1: (1wire), I: (input), O: (output), A: (analog input) # hier kun je zelf iets anders doen met 'line'
In Bar.py (om de lampen aan en uit te zetten op basis van de spacestate):
def on_connect(self,client, userdata, flags, rc): client.subscribe("hack42/state") def on_message(self,client, userdata, msg): if msg.payload=="open" and msg.topic=="hack42/state": self.request("O1C") self.request("O2C") self.request("O3C") if msg.payload=="closed" and msg.topic=="hack42/state": self.request("O1O") self.request("O2O") self.request("O3O")
Hooks
De meeste hooks zijn dus:
runline(self,line) on_message(self.client.userdata,msg) on_connect(self,client, userdata, flags, rc) on_start(self) # als je niet de default serieele afhandeling wilt maar iets heel anders wilt doen
Class variable
De naam
name="brandhok" # De mqtt naam waarmee het meeste wordt gerapporteerd/geschakeld
Hernoemen van input sensoren:
names={'1': "nooddeur1", '2': "nooddeur2", '3': "nooddeur3", '4': "achterdeur", "5": "zijdeur", "6": "deuropen"} Hiermee komt er dus hack42/brandhok/doordeur1 ipv hack42/brandhok/input1 op MQTT
Per Ruimte (Geinstalleerd)
Stookkelder
- Atmega328p
#define ONEWIRES 2 #define NUMINPUTS 8 #define NUMMYOUTPUTS 4 #define NUMAINPUTS 1 char INPUTS[NUMINPUTS]={2,3,4,5,10,11,12,13}; char MYOUTPUTS[NUMMYOUTPUTS]={6,7,8,9}; char INVEROUTPUT[NUMMYOUTPUTS]={1,1,1,1}; char AINPUTS[NUMAINPUTS]={A2}; char ONEWIREPINS[ONEWIRES]={14,15}; #define DHTPIN A3 #define naam "stookkelder" /* op bus 2 zitten 14 sensoren op de buizen van/naar het gebouw / kachel output 6-9: 24V t.b.v. relais voor kleppen ; Op kleintje in de software staat de default timer op 5 seconden. */
Stookhok
#define ONEWIRES 3 #define NUMINPUTS 4 #define NUMMYOUTPUTS 4 char INPUTS[NUMINPUTS]={5,6,7,8}; char MYOUTPUTS[NUMMYOUTPUTS]={10,11,12,13}; char INVEROUTPUT[NUMMYOUTPUTS]{0,0,0,0}; char ONEWIREPINS[ONEWIRES]={2,3,4}; #define naam "stookhok" /* Op bus 2 zitten 2 sensoren op de kachel en de ruimtesensor Op bus 3 zitten 10 sensoren van het buffervat Op bus 4 zitten 2 sensoren van de kachel */
Brandhok
#define ONEWIRES 2 #define NUMINPUTS 8 #define NUMMYOUTPUTS 4 #define NUMAINPUTS 1 char INPUTS[NUMINPUTS]={2,3,4,5,10,11,12,13}; char MYOUTPUTS[NUMMYOUTPUTS]={6,7,8,9}; char INVEROUTPUT[NUMMYOUTPUTS]={1,1,1,1}; char AINPUTS[NUMAINPUTS]={A2}; char ONEWIREPINS[ONEWIRES]={14,15}; #define DHTPIN A3 #define naam "brandhok"
Lounge
#define ONEWIRES 2 #define NUMINPUTS 8 #define NUMMYOUTPUTS 4 #define NUMAINPUTS 1 char INPUTS[NUMINPUTS]={2,3,4,5,10,11,12,13}; char MYOUTPUTS[NUMMYOUTPUTS]={6,7,8,9}; char INVEROUTPUT[NUMMYOUTPUTS]={1,1,1,1}; char AINPUTS[NUMAINPUTS]={A2}; char ONEWIREPINS[ONEWIRES]={14,15}; // koelkast/febo/mate,room #define DHTPIN A3
Wishlist
Keuken / gang1e (oost)
- 4x 1wire bus
- Koffie/Vaatwasser
- Koelkast/Vriezers
- Ruimte / Oven / Kookplaat
- 8x digital input
- Deuren / Spacestate / Doorloop sensor / ramen / nooduitgang
- 4x 24V output
- Keukenstroom / ....
- 6x analog input
- air quality sensors keuken
Vergader / Lezingen
- 2x 1wire bus
- Buiten
- Binnen
- 6x 24V output
- Radiotoren, museumpower, ...
- 4x input
- Ramen / balkondeuren
Hal West + Museum (roze kamer)
- 4x 1wire bus
- Buiten
- Binnen
- Binnen
- Binnen
- 8x digital input
- Ramen / deuren / wcraam / ...
- 6x analog input
- Air quality sensors toilet :)
GamingBieb
- 2x 1wirebus
- Binnen
- 8x digital input
- Deuren / ramen
- 4x 24V
- Schakelen hardware / radiatoren
Flexlab
- 2x 1wirebus
- Binnen
- 8x digital input
- Ramen / deuren
- 4x 24V
- Soldeerbouten schakelen / radiatoren
- 6x analog input
- Air quality sensors
Cleanroom
- 3x 1wirebus
- Binnen / Buiten / Laserafvoer
- 8x digital input
- Ramen / deuren
- 4x 24V
- Schakelen hardware / radiatoren
- 6x analog input
- Air quality sensors
Maaklab
- 2x 1wirebus
- Binnen
- 8x digital input
- Ramen / deuren
- 4x 24V
- Schakelen hardware / radiatoren
- 6x analog input
- Air quality sensors
Fotostudio
- 2x 1wirebus
- Binnen
- 8x digital input
- (balkon) Deuren / ramen
- 4x 24V
- Schakelen hardware / radiatoren
Maaklab / Storage
- 4x 1wirebus
- Binnen / Buiten
- 8x digital input
- (balkon) Deuren / ramen
- 4x 24V
- Schakelen hardware / radiatoren
Gang 2e West
- 4x 1wirebus
- Douche / Toilet / Gang
- 6x digital input
- (balkon) Deuren / ramen
- 4x 24V
- Schakelen hardware / radiatoren
- 6x analog input
- Air quality sensors toilet :)
Stofhok / gang 2e (oost)
- 4x 1wire bus
- Binnen / Trappenhuis / Stokhok
- 8x digital input
- Deuren / Doorloop sensor / ramen / nooduitgang
- 4x 24V output
- Keukenstroom / ....
- 6x analog input
- air quality sensors stokhok
Barakken 1
- 4x 1wire bus
- 8x digital input
- 4x 24V output
Barakken 2
- 4x 1wire bus
- 8x digital input
- 4x 24V output
Barakken 1
- 4x 1wire bus
- 8x digital input
- 4x 24V output
Serverruimte / Bar
- 4x 1wire bus
- 8x digital input
- 4x 24V output
Entree / Hal
- 2x 1wire bus
- 12x digital input
- Brandalarm?
- 4x 24V output
Gang 1e
- 2x 1wire bus
- 12x digital input
- 2x 24V output
Trappenhuis beneden
- 3x 1wire bus
- 8x digital input
- 2x 24V output