diff --git a/avr/devices/0BUILD b/avr/devices/0BUILD
index 8dad59d..938763a 100644
--- a/avr/devices/0BUILD
+++ b/avr/devices/0BUILD
@@ -30,6 +30,7 @@
n22
n23
n24
+ n25
t03
diff --git a/avr/devices/n25/.gitignore b/avr/devices/n25/.gitignore
new file mode 100644
index 0000000..8e0618c
--- /dev/null
+++ b/avr/devices/n25/.gitignore
@@ -0,0 +1,2 @@
+*.eep.hex
+*.obj
diff --git a/avr/devices/n25/0BUILD b/avr/devices/n25/0BUILD
new file mode 100644
index 0000000..be449f6
--- /dev/null
+++ b/avr/devices/n25/0BUILD
@@ -0,0 +1,17 @@
+
+
+
+
+
+ boot
+ main
+
+
+
+ defs.asm
+ README
+
+
+
+
+
diff --git a/avr/devices/n25/README b/avr/devices/n25/README
new file mode 100644
index 0000000..131998f
--- /dev/null
+++ b/avr/devices/n25/README
@@ -0,0 +1,13 @@
+
+N22
+===
+
+- Role: LED strip controller
+- MCU: AtTiny85
+- Connection: RJ45
+- Periphery:
+ - LED strip connection (SK6812)
+ - OWI interface
+ - DS18B20 temperature sensor
+- Modules:
+ - MA_LIGHT: motion activated light
diff --git a/avr/devices/n25/boot/0BUILD b/avr/devices/n25/boot/0BUILD
new file mode 100644
index 0000000..068003c
--- /dev/null
+++ b/avr/devices/n25/boot/0BUILD
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+ -I $(builddir)
+ -I $(srcdir)
+ -I $(topsrcdir)/avr
+ -I $(topbuilddir)/avr
+
+
+
+
+ boot.asm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/avr/devices/n25/boot/boot.asm b/avr/devices/n25/boot/boot.asm
new file mode 100644
index 0000000..6d8619f
--- /dev/null
+++ b/avr/devices/n25/boot/boot.asm
@@ -0,0 +1,138 @@
+; ***************************************************************************
+; Source file for base system node on AtTiny 84
+;
+; This is for the maintenance system (i.e. the flash loader).
+;
+; All definitions and changes should go into this file.
+;
+;
+; ***************************************************************************
+
+.equ clock=1000000 ; Define the clock frequency
+
+.nolist
+.include "include/tn84def.inc" ; Define device ATtiny84
+.list
+
+.include "../defs.asm"
+.include "defs_all.asm"
+
+
+
+; ***************************************************************************
+; defines
+
+; ---------------------------------------------------------------------------
+; generic
+
+.include "common/utils_wait.asm"
+.include "modules/com2/defs.asm"
+.include "modules/comproto/defs.asm"
+
+
+; ---------------------------------------------------------------------------
+; firmware settings
+
+.equ FIRMWARE_VERSION_MAJOR = 0
+.equ FIRMWARE_VERSION_MINOR = 0
+.equ FIRMWARE_VERSION_PATCHLEVEL = 1
+
+
+; ---------------------------------------------------------------------------
+; LED
+
+.equ LED_DDR = DDRA
+.equ LED_PORT = PORTA
+.equ LED_PIN = PINA
+.equ LED_PINNUM = PORTA3
+
+
+
+; ***************************************************************************
+; code segment
+
+.cseg
+.org 0x0000
+
+
+
+; ---------------------------------------------------------------------------
+; Reset and interrupt vectors
+ rjmp main ; Reset vector
+ reti ; EXT_INT0
+ reti ; PCI0
+ reti ; OC1A
+ reti ; OVF1
+ reti ; OVF0
+ reti ; ERDY
+ reti ; ACI
+ reti ; ADCC
+ reti ; OC1B
+ reti ; OC0A
+ reti ; OC0B
+ reti ; WATCHDOG
+ reti ; USI_STR
+ reti ; USI_OVF
+
+devInfoBlock: ; 12 bytes
+devInfoManufacturer: .db 'A', 'Q', 'U', 'A'
+devInfoId: .db DEVICEINFO_ID, 0
+devInfoVersion: .db DEVICEINFO_VERSION, DEVICEINFO_REVISION ; version, revision
+firmwareVersion: .db FIRMWARE_VARIANT_BOOT, FIRMWARE_VERSION_MAJOR
+ .db FIRMWARE_VERSION_MINOR, FIRMWARE_VERSION_PATCHLEVEL
+
+firmwareStart: rjmp main ; will be overwritten when flashing
+
+
+
+; ***************************************************************************
+; main code
+
+
+.org BOOTLOADER_ADDR
+
+
+main:
+ rjmp bootLoader ; this routine is in modules/bootloader/main.asm
+
+
+
+; ***************************************************************************
+; includes
+
+.include "common/utils_wait_fixed.asm"
+.include "common/utils_copy_from_flash.asm"
+.include "common/utils_copy_sdram.asm"
+
+.include "modules/flash/defs.asm"
+.include "modules/flash/eeprom.asm"
+.include "modules/flash/io.asm"
+.include "modules/flash/io_attn.asm"
+.include "modules/flash/io_bitbang.asm"
+.include "modules/flash/flashxp.asm"
+.include "modules/flash/flash1p.asm"
+.include "modules/flash/flashprocess.asm"
+.include "modules/flash/wait.asm"
+.include "modules/bootloader/main.asm"
+.include "modules/network/msg/defs.asm"
+.include "modules/network/msg/crc.asm"
+
+
+
+systemSetSpeed:
+.if clock == 8000000
+ ldi r16, (1<
+
+
+
+
+
+
+ -I $(builddir)
+ -I $(srcdir)
+ -I $(topsrcdir)/avr
+ -I $(topbuilddir)/avr
+
+
+
+
+ main.asm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/avr/devices/n25/main/main.asm b/avr/devices/n25/main/main.asm
new file mode 100644
index 0000000..27011b0
--- /dev/null
+++ b/avr/devices/n25/main/main.asm
@@ -0,0 +1,208 @@
+; ***************************************************************************
+; copyright : (C) 2025 by Martin Preuss
+; email : martin@libchipcard.de
+;
+; ***************************************************************************
+; * This file is part of the project "AqHome". *
+; * Please see toplevel file COPYING of that project for license details. *
+; ***************************************************************************
+
+
+; ***************************************************************************
+; Source file for LED controller node on AtTiny 84
+;
+; This is for the full system (i.e. not the boot loader).
+; ***************************************************************************
+
+.equ clock=8000000 ; Define the clock frequency
+
+
+
+.nolist
+.include "include/tn84def.inc" ; Define device ATtiny84
+.list
+
+.include "../defs.asm"
+;.include "./data.asm"
+
+.include "devices/all/defs.asm"
+.include "common/utils_wait.asm"
+
+
+
+; ***************************************************************************
+; defines
+
+; ---------------------------------------------------------------------------
+; generic
+
+.equ NET_BUFFERS_NUM = 6
+.equ NET_BUFFERS_SIZE = 32
+
+
+
+; ---------------------------------------------------------------------------
+; firmware settings including list of modules used
+
+.equ FIRMWARE_VERSION_MAJOR = 0
+.equ FIRMWARE_VERSION_MINOR = 0
+.equ FIRMWARE_VERSION_PATCHLEVEL = 1
+
+
+#define MODULES_CLOCK
+#define MODULES_LED_SIMPLE
+#define MODULES_NETWORK
+#define MODULES_UART_BITBANG
+#define MODULES_OWI_MASTER
+#define MODULES_DS18B20
+#define MODULES_SK6812
+;#define MODULES_MOTION_LIGHT
+
+#define APPS_NETWORK
+#define APPS_REPORTSENSORS
+#define APPS_STATS
+#define APPS_MA_LIGHT
+
+
+
+; ---------------------------------------------------------------------------
+; defines for modules
+
+;.equ VALUE_ID_SI7021_TEMP = 0x01
+;.equ VALUE_ID_SI7021_HUM = 0x02
+
+;.equ VALUE_ID_ADC = 0x03
+;.equ VALUE_ID_REED1 = 0x04
+;.equ VALUE_ID_REED2 = 0x05
+.equ VALUE_ID_DS18B20_TEMP = 0x06
+
+;.equ VALUE_ID_REED_CONF = 0x81
+.equ VALUE_ID_LED_NUMLEDS = 0x82
+.equ VALUE_ID_LED_RGBW_VALUE = 0x83
+.equ VALUE_ID_MAL_RGBW_VALUE = 0x84
+.equ VALUE_ID_MAL_ONTIME = 0x85
+.equ VALUE_ID_MAL_SOURCE1 = 0x86
+.equ VALUE_ID_MAL_SOURCE2 = 0x87
+
+.equ VALUE_ID_LEDSIMPLE_TIMING = 0x88
+
+
+; ***************************************************************************
+; code segment
+
+.cseg
+.org 000000
+
+
+
+; ---------------------------------------------------------------------------
+; Reset and interrupt vectors
+
+ rjmp BOOTLOADER_ADDR ; Reset vector ; use this for flashed system
+ reti ; EXT_INT0
+ rjmp UART_BitBang_PcintIsr ; PCI0
+ reti ; OC1A
+ reti ; OVF1
+ reti ; OVF0
+ reti ; ERDY
+ reti ; ACI
+ reti ; ADCC
+ reti ; OC1B
+ rjmp baseTimerIrqOC0A ; OC0A
+ reti ; OC0B
+ reti ; WATCHDOG
+ reti ; USI_STR
+ reti ; USI_OVF
+
+
+devInfoBlock: ; 12 bytes
+devInfoManufacturer: .db 'A', 'Q', 'U', 'A'
+devInfoId: .db DEVICEINFO_ID, 0
+devInfoVersion: .db DEVICEINFO_VERSION, DEVICEINFO_REVISION ; version, revision
+firmwareVersion: .db FIRMWARE_VARIANT_LEDSTRIPS, FIRMWARE_VERSION_MAJOR
+ .db FIRMWARE_VERSION_MINOR, FIRMWARE_VERSION_PATCHLEVEL
+
+; ---------------------------------------------------------------------------
+; @routine firmwareStart @global
+
+firmwareStart:
+ rjmp main
+; @end
+
+
+
+; ---------------------------------------------------------------------------
+; @routine onSystemStart
+
+onSystemStart:
+ ret
+; @end
+
+
+
+; ---------------------------------------------------------------------------
+; @routine onMessageReceived
+;
+; Called on every message received
+
+onMessageReceived:
+ clc
+ ret
+; @end
+
+
+
+; ---------------------------------------------------------------------------
+; @routine onEvery100ms
+;
+; Called every 100ms. Add your routine calls here. No arguments, no results.
+
+onEvery100ms:
+onEveryMinute:
+onEveryHour:
+onEveryDay:
+ ret
+; @end
+
+onEverySecond:
+ ret
+ ; debug
+ ldi r19, 0x00 ; G
+ ldi r18, 0xff ; R
+ ldi r20, 0x55 ; B
+ ldi r21, 0xaa ; W
+ rcall SK6812_SetAllColor ; r23 (r16, r17)
+ ret
+
+
+
+; ---------------------------------------------------------------------------
+; @routine onEveryLoop
+;
+; Called on every loop (i.e. after awakening from sleep).
+;
+onEveryLoop:
+ ret
+; @end
+
+
+
+
+
+; ***************************************************************************
+; includes
+
+.include "devices/all/hw_tn84.asm"
+.include "devices/all/includes.asm"
+.include "common/debug.asm"
+
+
+
+; ---------------------------------------------------------------------------
+; defines for network interface
+
+.equ netInterfaceData = uart_bitbang_iface
+
+
+
+