AVR Ethersex Vernetzung: Unterschied zwischen den Versionen
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 74: | Zeile 74: | ||
| | |-TCP/Telnet | | | |-TCP/Telnet | ||
| | |-Send via TCP | | | |-Send via TCP | ||
Pinning anpassen: | Pinning anpassen: | ||
gedit pinning/other.m4 | gedit pinning/other.m4 | ||
Zeile 93: | Zeile 88: | ||
ifdef(`conf_RFM12', `dnl | ifdef(`conf_RFM12', `dnl | ||
/* port the rfm12 module CS is attached to */ | /* port the rfm12 module CS is attached to */ | ||
pin(SPI_CS_RFM12, | pin(SPI_CS_RFM12, PD5) | ||
RFM12_USE_INT(1) | RFM12_USE_INT(1) |
Aktuelle Version vom 25. April 2010, 21:55 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:
- Ethernet
- ZBus (RS485 Zweidrahtbus - siehe auch: http://ethersex.de/index.php/ZBus)
- RFM12 Funkmodul
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
Verdrahtung Slave
Der Slave besteht hier aus einem ATMega32, 4 Tastern, 4 LED's und das RFM12 Funkmodul.
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