AVR Ethersex Vernetzung: Unterschied zwischen den Versionen

Aus Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 23: Zeile 23:


==Verdrahtung Slave==
==Verdrahtung Slave==
Der Slave besteht hier aus einem ATMega16, 4 Tastern, 4 LED's und das RFM12 Funkmodul.
Der Slave besteht hier aus einem ATMega32, 4 Tastern, 4 LED's und das RFM12 Funkmodul.
[[Bild:Ethersex Slave.png]]
[[Bild:Ethersex Slave.png]]


Zeile 39: Zeile 39:
  |  |  |-RFM12 ARP-Proxy
  |  |  |-RFM12 ARP-Proxy
  |  |-Enable IP Forwarding
  |  |-Enable IP Forwarding
Neu compilieren und auf die Zielhardware übertragen.




Zeile 51: Zeile 52:
  |  |-RFM12 Standalone
  |  |-RFM12 Standalone
  |-General Setup
  |-General Setup
  |  |-Target MCU: ATMega16
  |  |-Target MCU: ATMega32
  |  |-MCU Frequency: 16000000
  |  |-MCU Frequency: 16000000
  |  |-Hardware/Periphery Class: Other
  |  |-Hardware/Periphery Class: Other
Zeile 70: Zeile 71:
  |  |-ECMD
  |  |-ECMD
  |  |  |-TCP/Telnet
  |  |  |-TCP/Telnet
|  |  |-Send via TCP
|-General Setup
|  |-Status LEDs
|  |  |-Status LED Transmitted
|  |  |  |-RFM12 TX
|  |  |-Status LED Transmitted
|  |  |  |-RFM12 RX
Pinning anpassen:
gedit pinning/other.m4
Folgende Zeilen anpassen:
ifdef(`conf_STATUSLED_TX', `dnl
pin(STATUSLED_TX, PB1, OUTPUT)
')dnl
ifdef(`conf_STATUSLED_RX', `dnl
pin(STATUSLED_RX, PB0, OUTPUT)
')dnl
ifdef(`conf_RFM12', `dnl
  /* port the rfm12 module CS is attached to */
  pin(SPI_CS_RFM12, SPI_CS_HARDWARE)
  /* port the LEDS for rfm12 txrx attached to */
  pin(RFM12_TX_PIN, STATUSLED_TX)
  pin(RFM12_RX_PIN, STATUSLED_RX)
  RFM12_USE_INT(1)
  RFM12_ASK_SENSE_USE_INT(0)
')
Named Pins anpassen:
gedit pinning/named_pins/default
Folgende Zeilen einfügen:
# PIN | IN/OUT | When active? | Name
#-----+--------+--------------+----------------
PC7 OUTPUT HIGH LED_1
PC6 OUTPUT HIGH LED_2
PC5 OUTPUT HIGH LED_3
PC4 OUTPUT HIGH LED_4
PC3    INPUT    LOW            Taster_1
PC2    INPUT    LOW            Taster_2
PC1    INPUT    LOW            Taster_3
PC0    INPUT    LOW            Taster_4
Neu compilieren und auf die Zielhardware übertragen.




=Kommunikation=
=Kommunikation=
Control6 Scripte könen verwendet werden, um Daten zwischen den beiden Ethersex Modulen auszutauschen. Mit dem Befehl '''ESEND''' können beliebige ECMD Befehle an eine beliebige IP-Adresse gesendet werden.
ESEND('''Ziel_IP''',"ECMD-Befehl\n");
Mit Hilfe der 4Taster am Slave sollen die 4 Steckdosen am Master Net-IO geschalten werden.
CONTROL_START
  CLOCK_USED;
  THREAD(Taster_1)
      ON PIN_FALLING(Taster_1) DO
        ESEND(192.168.5.1,"pin toggle Steckdose_1\n");
        WAIT(1);
      END 
  THREAD_END(Taster_1)
  THREAD(Taster_2)
      ON PIN_FALLING(Taster_2) DO
        ESEND(192.168.5.1,"pin toggle Steckdose_2\n");
        WAIT(1);
      END 
  THREAD_END(Taster_2)
  THREAD(Taster_3)
      ON PIN_FALLING(Taster_3) DO
        ESEND(192.168.5.1,"pin toggle Steckdose_3\n");
        WAIT(1);
      END 
  THREAD_END(Taster_3)
  THREAD(Taster_4)
      ON PIN_FALLING(Taster_4) DO
        ESEND(192.168.5.1,"pin toggle Steckdose_4\n");
        WAIT(1);
      END 
  THREAD_END(Taster_4)
 
  ON STARTUP DO
      THREAD_START(Taster_1);
      THREAD_START(Taster_2);
      THREAD_START(Taster_3);
      THREAD_START(Taster_4);
  END
CONTROL_END
Am Master Net-IO wird ein Thread eingefügt, der alle zwei Sekunden die LED's am Slave aktualisiert. Die Led's am Slave werden damit auch aktualisiert, wenn via Webinterface oder Taster am Master eine Steckdose ein-/ausgeschaltet wurde.
CONTROL_START
  CLOCK_USED;
  THREAD(Taster_1)
      ON PIN_FALLING(Taster_1) DO
        PIN_TOGGLE(Steckdose_1);
        WAIT(1);
      END 
  THREAD_END(Taster_1)
  THREAD(Taster_2)
      ON PIN_FALLING(Taster_2) DO
        PIN_TOGGLE(Steckdose_2);
        WAIT(1);
      END 
  THREAD_END(Taster_2)
  THREAD(Taster_3)
      ON PIN_FALLING(Taster_3) DO
        PIN_TOGGLE(Steckdose_3);
        WAIT(1);
      END 
  THREAD_END(Taster_3)
  THREAD(Taster_4)
      ON PIN_FALLING(Taster_4) DO
        PIN_TOGGLE(Steckdose_4);
        WAIT(1);
      END 
  THREAD_END(Taster_4)
 
  '''THREAD(REFRESH_SLAVE)'''
  '''In Abeit'''
  '''THREAD_END(REFRESH_SLAVE)'''
  ON STARTUP DO
      THREAD_START(Taster_1);
      THREAD_START(Taster_2);
      THREAD_START(Taster_3);
      THREAD_START(Taster_4);
      '''THREAD_START(REFRESH_SLAVE);'''
  END
CONTROL_END

Version vom 24. April 2010, 19:52 Uhr

Einleitung

Ethersex bietet verschiedene Möglichkeiten an, um einen Netzwerkzugriff zu realisieren. An erster Stelle ist da der bereits im AVR NET-IO Kapitel beschriebene Weg via Ethernet. Es ist aber nicht immer an der gewünschten Stelle eine Netzwerkverbindung vorhanden. Es besteht auch häufig die Anforderung nur wenige Sensoren oder Aktoren anzubinden. In diesem Falle ist nicht zwingend ein AVR NET-IO erforderlich. Es kann mit einem "kleineren" AVR Controller eine Verbindung zum Master Ethersex-Modul aufgebaut werden, das dann am Netzwerk hängt. Die Vernetzung zwischen einem (oder mehreren) Slaves und dem Master kann über mehrere Wege erfolgen. Folgende Möglichkeiten der Vernetzung bestehen:

im Folgenden wird die Vernetzung via Ethernet und RFM12 Funkmodulen näher beschrieben


Vernetzung via Ethernet

Für die Vernetzung via Ethernet sind keine besonderen Voraussetzungen erforderlich. Lediglich zwei (oder mehr) AVR-Controller mit Ethernet Interface (z.B. AVR Net-IO's) werden benötigt. Wenn auf dem Slave-Ethersex Modul keine Weboberfläche erforderlich ist, reicht auf diesem ein ATMega32-Controller aus. Das Setup von beiden Ethersex-Modulen sollte analog derer in AVR_Etherse beschriebenen vorgenommen werden. Die IP-Adressen und MAC-Adressen müssen einmalig im Netzwerk gewählt werden.

Kommunikation der beiden Ethersex-Module siehe unten.


Vernetzung via RFM12-Funkmodule

Mittels RFM12 Funkmodulen besteht eine sehr zuverlässige und äusserst flexible Möglichkeit der Vernetzung mehrer Ethersex Module. im Kapitel AVR_Ethersex wurde bereits ein RFM12 Funkmodul verwendet, um Funksteckdosen anzusteuern. Es besteht die Möglichkeit das RFM Funkmodul zur Vernetzung und zur Ansteuerung von Funksteckdosen parallel zu nutzen. Um Vernetzung zu ermöglichen, muss lediglich die Konfiguration von Ethersex erweitert werden.

Verdrahtung Master

Siehe hier


Verdrahtung Slave

Der Slave besteht hier aus einem ATMega32, 4 Tastern, 4 LED's und das RFM12 Funkmodul. Ethersex Slave.png


Konfiguration Master

Für das RFM12 Netzwerk muss ein eigenes, separates Subnet verwendet werden. Z.B. AVR Net-IO Ethernet: 192.168.0.x, RFM12 Subnet: 192.168.5.x. Das Master AVR Net-IO fungiert als Router fürs RFM12-Netz.

cd ~/Dokumente/ethersex
make menuconfig

Folgende Einstellungen zusätzlich vornehmen:

|-Network
|   |-IP over RFM12 (FSK Transmitter)
|   |   |-RFM12 Frequency: 433,92MHz
|   |   |-RFM12 Baudrate: 19200
|   |   |-IP Adress:192.168.5.1
|   |   |-RFM12 ARP-Proxy
|   |-Enable IP Forwarding

Neu compilieren und auf die Zielhardware übertragen.


Konfiguration Slave

Für den Slave wird ein eigenes Ethersex-Verzeichnis verwendet.

cd ~/Dokumente
git clone git://github.com/ethersex/ethersex.git ethersex_slave
cd ethersex_slave
make menuconfig

Folgende Einstellungen vornehmen:

|-Load a default configuration
|   |-RFM12 Standalone
|-General Setup
|   |-Target MCU: ATMega32
|   |-MCU Frequency: 16000000
|   |-Hardware/Periphery Class: Other
|   |-Teensy Build deaktivieren
|   |-Control6 Scripts
|-Network
|   |-IP over RFM12 (FSK Transmitter)
|   |   |-RFM12 Frequency: 433,92MHz
|   |   |-RFM12 Baudrate: 19200
|   |   |-IP Adress:192.168.5.2
|   |-Default Gateway: 192.168.5.1
|   |-TCP Support
|   |-UDP Support 
|   |-ICMP Support
|-I/O
|   |-I/O abstraction model: Full-featured
|-Protocols
|   |-ECMD
|   |   |-TCP/Telnet
|   |   |-Send via TCP
|-General Setup
|   |-Status LEDs
|   |   |-Status LED Transmitted
|   |   |   |-RFM12 TX
|   |   |-Status LED Transmitted
|   |   |   |-RFM12 RX

Pinning anpassen:

gedit pinning/other.m4

Folgende Zeilen anpassen:

ifdef(`conf_STATUSLED_TX', `dnl
pin(STATUSLED_TX, PB1, OUTPUT)
')dnl

ifdef(`conf_STATUSLED_RX', `dnl
pin(STATUSLED_RX, PB0, OUTPUT)
')dnl

ifdef(`conf_RFM12', `dnl
  /* port the rfm12 module CS is attached to */
  pin(SPI_CS_RFM12, SPI_CS_HARDWARE)

  /* port the LEDS for rfm12 txrx attached to */
  pin(RFM12_TX_PIN, STATUSLED_TX)
  pin(RFM12_RX_PIN, STATUSLED_RX)

  RFM12_USE_INT(1)
  RFM12_ASK_SENSE_USE_INT(0)
')

Named Pins anpassen:

gedit pinning/named_pins/default

Folgende Zeilen einfügen:

# PIN | IN/OUT | When active? | Name
#-----+--------+--------------+----------------
PC7	OUTPUT	 HIGH		LED_1
PC6	OUTPUT	 HIGH		LED_2
PC5	OUTPUT	 HIGH		LED_3
PC4	OUTPUT	 HIGH		LED_4
PC3    INPUT    LOW            Taster_1
PC2    INPUT    LOW            Taster_2
PC1    INPUT    LOW            Taster_3
PC0    INPUT    LOW            Taster_4

Neu compilieren und auf die Zielhardware übertragen.


Kommunikation

Control6 Scripte könen verwendet werden, um Daten zwischen den beiden Ethersex Modulen auszutauschen. Mit dem Befehl ESEND können beliebige ECMD Befehle an eine beliebige IP-Adresse gesendet werden.

ESEND(Ziel_IP,"ECMD-Befehl\n");

Mit Hilfe der 4Taster am Slave sollen die 4 Steckdosen am Master Net-IO geschalten werden.

CONTROL_START
  CLOCK_USED;
  THREAD(Taster_1)
     ON PIN_FALLING(Taster_1) DO
        ESEND(192.168.5.1,"pin toggle Steckdose_1\n");
        WAIT(1);
     END   
  THREAD_END(Taster_1)

  THREAD(Taster_2)
     ON PIN_FALLING(Taster_2) DO
        ESEND(192.168.5.1,"pin toggle Steckdose_2\n");
        WAIT(1);
     END   
  THREAD_END(Taster_2)

  THREAD(Taster_3)
     ON PIN_FALLING(Taster_3) DO
        ESEND(192.168.5.1,"pin toggle Steckdose_3\n");
        WAIT(1);
     END   
  THREAD_END(Taster_3)

  THREAD(Taster_4)
     ON PIN_FALLING(Taster_4) DO
        ESEND(192.168.5.1,"pin toggle Steckdose_4\n");
        WAIT(1);
     END   
  THREAD_END(Taster_4)
  
  ON STARTUP DO
     THREAD_START(Taster_1);
     THREAD_START(Taster_2);
     THREAD_START(Taster_3);
     THREAD_START(Taster_4);
  END
CONTROL_END


Am Master Net-IO wird ein Thread eingefügt, der alle zwei Sekunden die LED's am Slave aktualisiert. Die Led's am Slave werden damit auch aktualisiert, wenn via Webinterface oder Taster am Master eine Steckdose ein-/ausgeschaltet wurde.

CONTROL_START
  CLOCK_USED;

  THREAD(Taster_1)
     ON PIN_FALLING(Taster_1) DO
        PIN_TOGGLE(Steckdose_1);
        WAIT(1);
     END   
  THREAD_END(Taster_1)

  THREAD(Taster_2)
     ON PIN_FALLING(Taster_2) DO
        PIN_TOGGLE(Steckdose_2);
        WAIT(1);
     END   
  THREAD_END(Taster_2)

  THREAD(Taster_3)
     ON PIN_FALLING(Taster_3) DO
        PIN_TOGGLE(Steckdose_3);
        WAIT(1);
     END   
  THREAD_END(Taster_3)

  THREAD(Taster_4)
     ON PIN_FALLING(Taster_4) DO
        PIN_TOGGLE(Steckdose_4);
        WAIT(1);
     END   
  THREAD_END(Taster_4)
  
  THREAD(REFRESH_SLAVE)
  In Abeit
  THREAD_END(REFRESH_SLAVE)

  ON STARTUP DO
     THREAD_START(Taster_1);
     THREAD_START(Taster_2);
     THREAD_START(Taster_3);
     THREAD_START(Taster_4);
     THREAD_START(REFRESH_SLAVE);
  END 

CONTROL_END