====== Anpassung des Contiki SNMP zur Verwendung auf den Modulen von Adaptive Network Solutions ====== Contiki SNMP (siehe [[contiki:snmp|SNMP auf Contiki 2.5 und Contiki 2.6]]) wurde so angepasst dass nun folgende Features auf den Modulen zur Verfügung stehen: * Betriebszustandsanzeige über LED DS3 * Paketempfangssignalisierung über LED DS2 * Port Pin Steuerung über SNMPv3 über LED DS1 * Messung der Versorgungsspannung über ADC0 bei Anschluss eines 1:1 Spannungsteilers über die Versorgungsspannung -> Pinbelegung und Schaltplan der Module siehe: {{:contiki:a-n-solutions-module:brick_mcu_pinassignments_ref2.pdf|}} ===== Betriebszustandsanzeige über LED DS3 ===== Zur Signalisierung der Betriebszustandsanzeige wurden innerhalb des Contiki SNMP Prozesses (snmpd.c) zuerst alle LEDs als Ausgänge geschaltet, anschließend LED DS3 (PIN7) auf LOW geschaltet und somit aktiviert. #include /*Switch LED on @ANY Brick On if SNMPD started and set other LEDs as Output*/ DDRB |= (1 << PIN5); DDRB |= (1 << PIN6); DDRB |= (1 << PIN7); PORTB &= ~(1 << PIN7); PORTB |= (1 << PIN6); PORTB |= (1 << PIN5); /*END LED @ANY Brick*/ ===== Paketempfangssignalisierung über LED DS2 ===== Um das Eintreffen eines Pakets über uIPv6 visualisieren zu können, wurde die LED DS2 innerhalb der Funktion ''tcpip_input(void)'' innerhalb der Datei tcpip.c im Verzeichnis ''/core/net/'' angepasst. /*---------------------------------------------------------------------------*/ void tcpip_input(void) { /*sz*/ /*Blinking LED on packet receiving*/ PORTB &= ~(1 << PIN6); /*sz*/ process_post_synch(&tcpip_process, PACKET_INPUT, NULL); uip_len = 0; #if UIP_CONF_IPV6 uip_ext_len = 0; #endif /*UIP_CONF_IPV6*/ /*sz*/ /*Blinking LED on packet receiving*/ PORTB |= (1 << PIN6); /*sz*/ } /*---------------------------------------------------------------------------*/ ===== Pin Steuerung über SNMPv3 über LED DS1 ===== Zur Steuerung von LED DS2 wurden die GET und SET Funktionen innerhalb der Datei ''mib-init-beuth-zig.c'' des SNMP Daemons angepasst. /* LED DS1 for @ANY module start */ /** \brief LED DS1 for @ANY module get function*/ s8t getBeuthState(mib_object_t* object, u8t* oid, u8t len) { object->varbind.value.i_value = !((PORTB >> PIN5) & 1); return 0; } /** \brief set LED DS1 for @ANY module*/ s8t setBeuthState(mib_object_t* object, u8t* oid, u8t len, varbind_value_t value) { if (value.i_value == 1) { PORTB &= ~(1 << PIN5); } else { PORTB |= (1 << PIN5); } return 0; } /* LED DS1 for @ANY module end */ ===== Messung der Versorgungsspannung über ADC0 bei Anschluss eines 1:1 Spannungsteilers über die Versorgungsspannung ===== Zur Messung der Versorgungsspannung wurde der PIN des ADC0 mit einem Spannungsteiler beschaltet. {{:contiki:a-n-solutions-module:adc_batt.jpg?450|}} Als Referenzspannung wurden die stabilen intern verfügbaren 2,54V des Mikrocontrollers verwendet. Zur Initialisierung des ADCs sowie zur Abfrage des aktuellen Wertes sind die folgenden Funktionen innerhalb der Datei ''mib-init-beuth-zig.c'' notwendig. /* battery power level*/ /************************/ /** \brief function for initialization of the adc*/ void adc_init() { // AREF = AVcc ADMUX = (1<varbind.value.i_value = batt_level; return 0; } /*Battery Level end*/ ===== Download und Kompilierung ===== Der komplette Quellcode kann hier heruntergeladen werden: {{:contiki:a-n-solutions-module:atany-snmp.zip|}}. Nach dem Entpacken sind folgende Kopiervorgänge nötig. - Der Ordner ''snmp'' muss in das Verzeichnis ''/examples/'' kopiert werden. - Der Ordner ''snmpd'' muss in das Verzeichnis ''apps'' kopiert werden. - Der Ordner ''avr-zigbit'' muss in das Verzeichnis ''platforms'' kopiert werden. - Die Datei ''tcpip.c'' muss in das Verzeichnis ''/core/net/'' kopiert werden. Der Kompilierungsvorgang wird anschließend innerhalb des Ordners ''/examples/snmp/'' mit dem Befehl ''make zigbit'' gestartet. Im Anschluß kann die neu erstellte Datei ''snmp-server.elf'' auf das @ANY Modul geladen werden. __Hinweise:__ * Innerhalb des Makefiles kann die MAC Adresse über die Compilerflags ''MAC_CONF_FREQUENCY'' und ''MAC_CONF_NUMBER'' angepasst werden. Gedacht ist hierbei ''MAC_CONF_FREQUENCY=0x09'' für 900MHz und ''DMAC_CONF_FREQUENCY=0x24'' für 2,4GHz. Über ''MAC_CONF_NUMBER'' kann die Knotennummer verändert werden. #CFLAGS+= -DMAC_CONF_FREQUENCY=0x09 #900MHz CFLAGS+= -DMAC_CONF_FREQUENCY=0x24 #2400MHz CFLAGS+= -DMAC_CONF_NUMBER=0x02 * Standardmäßig werden alle Knoten als Router konfiguriert um somit vermaschtes Routing verwenden zu können, dies ist über das Flag ''UIP_CONF_ROUTER'' innerhalb des Makefiles einstellbar. * Die Verwendung von Contiki SNMP ist in [[https://wiki.ipv6lab.beuth-hochschule.de/contiki/snmp_contiki_25_install#test_der_implementierung|Benutzung von Contiki SNMP]] beschrieben.