Uit Hack42
Ga naar: navigatie, zoeken
(→‎Linux server: bereiken van buitenaf)
 
(5 tussenliggende versies door 2 gebruikers niet weergegeven)
Regel 26: Regel 26:
  
 
De opbouw bestaat uit 4 keer het volgende in 1U 19:
 
De opbouw bestaat uit 4 keer het volgende in 1U 19:
* 6 [https://www.aliexpress.com/item/Gas-detection-module-MQ-2-MQ-3-MQ-4-MQ-5-MQ-6-MQ-7-MQ/1956301104.html USB naar TTL converters]
+
* 6 [https://www.aliexpress.com/item/CH340-Serial-Converter-USB-To-TTL-6PIN-Module-Upgrade-Small-Plate-for-PRO-mini-Instead-of/1856263846.html USB naar TTL converters]
 
* 1 USB Hub met 7 poorten (downlink naar de volgende)
 
* 1 USB Hub met 7 poorten (downlink naar de volgende)
 
* 1 [https://www.aliexpress.com/item/Gas-detection-module-MQ-2-MQ-3-MQ-4-MQ-5-MQ-6-MQ-7-MQ/1956301104.html 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 [https://www.aliexpress.com/item/Gas-detection-module-MQ-2-MQ-3-MQ-4-MQ-5-MQ-6-MQ-7-MQ/1956301104.html gaatjesPCB van 8x2cm met totaal (2*1A + 4*0.25A) = 3A of (1*1A + 5*0.4A) = 3A polyfuses en een DC-Jack aansluiting]
Regel 54: Regel 54:
 
Draait op kleintje.space.hack42.nl
 
Draait op kleintje.space.hack42.nl
 
doe even een mosquitto_sub -h localhost -t 'hack42/#' -v om te kijken wat er nu al is.
 
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 ==
 
== Linux server ==
 
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.
 +
 +
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

Huidige versie van 1 dec 2017 om 10:13

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.

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