Uit Hack42
Ga naar: navigatie, zoeken
Regel 71: Regel 71:
 
Kleintje: Paar GB ram, disks in raid en draait opensuse. Voor speciale dingen is er de mogelijkheid tot KVM.
 
Kleintje: Paar GB ram, disks in raid en draait opensuse. Voor speciale dingen is er de mogelijkheid tot KVM.
  
 +
=== 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)==
 
== Per Ruimte (Geinstalleerd)==

Versie van 24 nov 2016 00:46

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:

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.

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
  • 2x 1wire bus (2,3) - normaal en parasite power enabled
op bus 2 zitten 8 sensoren op de buizen van/naar het gebouw / kachel
  • 4x relais (6,7,8,9) - 5V relais die 24V schakelen
Op kleintje in de software staat de default timer op 5 seconden.
  • 2x input (4,5) - door arduino naar +5V getrokken, sluiten = verbinden met Ground

Stookhok

  • Atmega328p
  • 3x 1wire bus (2.3.4)
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
  • 4x input (5,6,7,8)
  • 4x output (24V via ULN) (10,11,12,13)

Brandhok

  • Atmega168p (moet vervangen)
  • 5* input voor nooduitgangen
  • 1* input voor deur open knop op verdieping 1,2 en 3 (werkt alleen als de space open is!)

Lounge

  • 4x 1wire bus
koelkast / febo
ruimte (2x)
aquarium
  • 1x analog input (potmeter voor de schuifdeur)\
  • 5x analog input (air quality sensoren)
  • 5x input (deuren + ramen)
  • 6x output (24V, radiatoren, verlichting koelkast en febo, ...)


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