AVR Ethersex Vernetzung

Aus Wiki
Zur Navigation springen Zur Suche springen

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 (IP_NETIO=192.168.0.90), RFM12 Subnet: 192.168.5.x. Das Master AVR Net-IO fungiert als Router fürs RFM12-Netz. IP_RFM_NETIO=192.168.5.1

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  (IP_RFM_NETIO)
|   |   |-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    (IP_RFM_SLAVE)
|   |-Default Gateway: 192.168.5.1 (IP_RFM_NETIO)
|   |-TCP Support
|   |-UDP Support 
|   |-ICMP Support
|-I/O
|   |-I/O abstraction model: Full-featured
|   |-Named and logic state I/O
|-Protocols
|   |-ECMD
|   |   |-TCP/Telnet
|   |   |-Send via TCP

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, PD5)

  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.


Route zum Slave

Damit das Slave-Ethersex vom "normalen" LAN aus erreichbar ist, muss noch eine Route zum RFM12-Netzwerk 192.168.5.x auf den Clients eingefügt werden. Ansonsten wissen die PC's nicht, auf welchem Weg sie das Slave Netzwerk erreichen können.

    PC     <-LAN-> Switch/Router  <-LAN->   AVR Net-IO  <-RFM12 Funknetz-> Ethersex Slave
192.168.0.20        192.168.0.1            192.168.0.90
                                           192.168.5.1                       192.168.5.2

DSL-Router

Viele Router bieten die Möglichkeit sog. statische Routen anzulegen.

Z.B. Fritzbox: Einstellungen/Erweiterte Einstellungen/System/Netzwerk/IP-Einstellungen/IP-Routen

IP-Netzwerk:  192.168.5.0  (RFM12 Netzwerk)
Subnetzmaske: 255.255.255.0
Gateway:      192.168.0.90 (IP_NETIO)
Route aktiv:  ja (Haken gesetzt)

Client-PC

Sollte der DSL-Router keine Möglichkeit bieten, eine statische Route einzufügen, muss dies auf allen Clients erfolgen, die Zugriff auf den Funk-Client erhalten sollen.

Ubuntu

  • Temporär (bis Reboot):
sudo route add -net 192.168.5.0 netmask 255.255.255.0 gw 192.168.0.90
  • Dauerhaft mittels Startscript:
sudo gedit /etc/init.d/ethersex_route

Folgende Zeilen einfügen (IP-Adressen evtl. anpassen):

#!/bin/bash
case "$1" in
   start)
     route add -net 192.168.5.0 netmask 255.255.255.0 gw 192.168.0.90
       ;;
   stop)
       route del -net 192.168.5.0 netmask 255.255.255.0
       ;;
   *)
       echo "usage: $0 start | stop"
       exit 1
       ;;
esac

Ausführbar machen:

sudo chmod +x /etc/init.d/ethersex_route

Route hinzufügen:

/etc/init.d/ethersex_route start

Startscript aktivieren:

sudo update-rc.d ethersex_route defaults


Windows

Eingabeaufforderung öffnen

  • Temporär (bis Reboot):
route add 192.168.5.0 mask 255.255.0.0 192.168.0.90
  • Permanent:
route -p add 192.168.5.0 mask 255.255.0.0 192.168.0.90


Funktionstest

Anpingen der Master RFM12 IP-Adresse und des Slave RFM Ethersex:

ping 192.168.5.1
ping 192.168.5.2

Beide Befehle sollten nun eine Antwort zurückliefern (jeweils mit STRG-C abbrechen):

PING 192.168.5.1 (192.168.5.1) 56(84) bytes of data.
64 bytes from 192.168.5.1: icmp_seq=1 ttl=64 time=11.1 ms

Anschließend Funktionstest des Slave Ethersex-Moduls durchführen wie hier beschrieben. Allerdings anstatt IP_NETIO die IP-Adresse des Slave verwenden.


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