Homematic-IP mit OCCU und Rpi2/3

Alles rund ums Compilieren, Pakete erstellen etc.

Moderator: Co-Administratoren

leonsio
Beiträge: 1107
Registriert: 07.01.2012, 14:06
Danksagung erhalten: 6 Mal

Homematic-IP mit OCCU und Rpi2/3

Beitrag von leonsio » 03.05.2016, 11:48

Hallo Community

falls jemand von euch Homematic-IP Geräte hat und ein bisschen über Zeit zum experimentieren übrig hat....

Ich habe es endlich eine mehr oder weniger funktionierende Lösung entwickelt:

1. Passende Linux Source runterladen und installieren

Code: Alles auswählen

https://www.niksula.hut.fi/~mhiienka/Rpi/linux-headers-rpi/
2. Neue Kernel-Module für OCCU runterladen
a) Loop Device

Code: Alles auswählen

https://raw.githubusercontent.com/eq-3/occu/master/KernelDrivers/eq3_char_loop.c
Makefile dazu

Code: Alles auswählen

obj-m	+= eq3_char_loop.o

 
all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
 
clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
b) UART Device

Code: Alles auswählen

https://raw.githubusercontent.com/eq-3/RaspberryMatic/master/linux-4.1/drivers/char/broadcom/bcm2835_raw_uart.c
Hier müssen noch Paar Änderungen gemacht werden

suche:

Code: Alles auswählen

  m_bcm2835_raw_uart_port = NULL;

  printk( KERN_ERR "bcm2835_raw_uart: Unable to remove platform device\n" );
  return -EFAULT;

}
Lösche alles bis zum Ende bzw, ersetze es durch

Code: Alles auswählen



#include <../arch/arm/mach-bcm2709/include/mach/platform.h>
#define IRQ_ARMCTRL_START     0
#define ARM_IRQ0_BASE                  64
#define INTERRUPT_UART                 (ARM_IRQ0_BASE + 19)
#define IRQ_UART              (IRQ_ARMCTRL_START + INTERRUPT_UART)




static struct resource bcm2835_raw_uart_resources[] = {
        {
            .start = UART0_BASE,
            .end = UART0_BASE + 0x100 - 1,  /*HT: ??*/
            .flags = IORESOURCE_MEM,
        },
        {
            .start = IRQ_UART, /*TODO: Check*/
            .end = IRQ_UART,
            .flags = IORESOURCE_IRQ,
        }
};

static struct platform_device bcm2709_raw_uart_device = {
    .name = "bcm2835-raw-uart",
    .id = 0,
    .resource = bcm2835_raw_uart_resources,
    .num_resources = ARRAY_SIZE(bcm2835_raw_uart_resources),
};



/*!
 ******************************************************************************
 * @brief Init function of the driver
 *
 * @return 0 or error
**/
static int __init bcm2835_raw_uart_init(void)
{

  int ret;

    ret = platform_device_register( &bcm2709_raw_uart_device );
    if( ret )
    {
      printk(KERN_ERR "bcm2835_raw_uart: Failed to register platform driver (%i)\n", ret );
      goto out;
    }

	ret = platform_driver_register( &m_bcm2835_raw_uart_driver );
	if( ret )
	{
	  printk(KERN_ERR "bcm2835_raw_uart: Failed to register platform driver (%i)\n", ret );
	  goto out;
	}

	return 0;

out:
  return ret;
}



/*!
 ******************************************************************************
 * @brief Exit function of the driver
 *
**/
static void __exit bcm2835_raw_uart_exit(void)
{
	platform_driver_unregister( &m_bcm2835_raw_uart_driver );
	platform_device_unregister( &bcm2709_raw_uart_device );
}

module_init( bcm2835_raw_uart_init );
module_exit( bcm2835_raw_uart_exit );
MODULE_DESCRIPTION( "eQ-3 raw BCM2835 uart driver" );
MODULE_LICENSE( "GPL" );
MODULE_AUTHOR( "eQ-3 Entwicklung GmbH" );
Makefile dazu

Code: Alles auswählen

obj-m	+= bcm2835_raw_uart.o

 
all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
 
clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Du muss die richtige Firmware hochladen auf den chip das ist nicht ccu/firmware/HM-MOD-UART/coprocessor_update.eq3 die ist nur homematic sondern occu/firmware/HM-MOD-UART/dualcopro_si1002_update_blhm.eq3
einfach die Kommentare in der fwmap ändern.

Angabe des seriellen drivers in:
occu/arm-gnueabihf/packages-eQ-3/RFD/etc/crRFD.conf
muss ich wiederhole muss Adapter.1.Port=/dev/ttyS0

und in:
occu/arm-gnueabihf/packages-eQ-3/RFD/etc/config_templates/multimacd.conf

Coprocessor Device Path = /dev/bcm2835-raw-uart nicht bcm2835-raw-uart.0
Loop Slave Device HmIP = ttyS0

leonsio
Beiträge: 1107
Registriert: 07.01.2012, 14:06
Danksagung erhalten: 6 Mal

Re: Homematic-IP mit OCCU und Rpi2/3

Beitrag von leonsio » 04.05.2016, 13:05

Na, keiner Homematic-IP im Einsatz? bzw. Interesse?
oder ist das Vorgehen zu aufwändig?

hanisoft
Beiträge: 22
Registriert: 19.04.2012, 21:20

Re: Homematic-IP mit OCCU und Rpi2/3

Beitrag von hanisoft » 06.05.2016, 20:58

Hallo,

Interesse schon, aber dafür reichen meine linux und programmierkentnisse bei weiten nicht...

Leider

Grüsse

Hannes

leonsio
Beiträge: 1107
Registriert: 07.01.2012, 14:06
Danksagung erhalten: 6 Mal

Re: Homematic-IP mit OCCU und Rpi2/3

Beitrag von leonsio » 06.05.2016, 22:02

hanisoft hat geschrieben:Hallo,

Interesse schon, aber dafür reichen meine linux und programmierkentnisse bei weiten nicht...

Leider

Grüsse

Hannes
Deine Programmierkenntnisse müssen sich nur auf Copy&Paste begrenzen und du musst ein Editor benutzen können
Rest habe ich ja bereits aufgeschrieben ;)

peex
Beiträge: 5
Registriert: 08.06.2015, 16:03

Re: Homematic-IP mit OCCU und Rpi2/3

Beitrag von peex » 13.07.2016, 13:29

Hallo leonsio,

velen Dank, dass du dir die Mühe gemacht hast, schon mal in dieser Richtung herum zu experimentieren. ich würde es gerne mal nach deiner Anleitung ausprobieren. Vielleicht kannst du ein paar Punkte genauer erläutern:
  • Wie baust du den Kernel? In RaspberryMatic sind ja kein Buildtools vorinstalliert. Verwendet du dazu Buildroot von Jens Maus?
  • Wo legst du die Dateien für die Kernelmodule ab und (wo) muss man das Makefile dann noch einbinden? Oder baust du die tatsächlich nur die zwei Module und nicht den kompletten Kernel?
  • Wenn ich das richtig verstehe, muss ich bei
    leonsio hat geschrieben:Hallo Community
    b) UART Device [...]
    Hier müssen noch Paar Änderungen gemacht werden
    suche: [... siehe Originalposting ...]
    Lösche alles bis zum Ende bzw, ersetze es durch [... siehe Originalposting ...]
    Alles löschen, was nach der im ersten Snippet gezeigten Stelle kommt und dort das zweite Snippet einsetzen.
Über Hinweise und Hilfestellungen wäre ich sehr dankbar!

leonsio
Beiträge: 1107
Registriert: 07.01.2012, 14:06
Danksagung erhalten: 6 Mal

Re: Homematic-IP mit OCCU und Rpi2/3

Beitrag von leonsio » 17.07.2016, 13:54

Hi

nix für ungut, aber ohne Linux Treiber Programmierkenntnisse kommst du da nicht weiter, und den Fragen nach besitzt du diese nicht.
Du wirst nur die Zeit damit vergeuden und frustriert aufgeben, vertraue mir an der Stelle ;)

Es gibt hier genug Projekt wo du deine Zeit besser investieren kannst

Gruß

Leo

chris-p
Beiträge: 3
Registriert: 19.10.2016, 22:31

Re: Homematic-IP mit OCCU und Rpi2/3

Beitrag von chris-p » 19.10.2016, 22:46

Hi Leo,

ich hab jetzt mein erstes Homematic-IP Device. Bist du schon weiter?
Ich hab mal den Driver auf dem Pi3 compiliert. Nach modprobe wird das device auch in /dev angelegt. Wie bekomme ich das aber in den Container?

Gruß
Chris

leonsio
Beiträge: 1107
Registriert: 07.01.2012, 14:06
Danksagung erhalten: 6 Mal

Re: Homematic-IP mit OCCU und Rpi2/3

Beitrag von leonsio » 21.10.2016, 13:07

welchen Treiber hast du kompiliert? es sind ja 2 notwendig loop und raw

chris-p
Beiträge: 3
Registriert: 19.10.2016, 22:31

Re: Homematic-IP mit OCCU und Rpi2/3

Beitrag von chris-p » 23.10.2016, 20:37

ich hab beide kompiliert und geladen:
Module Size Used by
bcm2835_raw_uart 9276 0
eq3_char_loop 8702 0
veth 4903 0
bridge 87745 0
...

Im Raspi /dev werden auch das devices angelegt:
# ls /dev/bc* /dev/eq*
/dev/bcm2835-raw-uart /dev/eq3loop

in dem LX Container sind diese aber nicht zu sehen. Da sind ja eh viel weniger devices angelegt, die müssen also irgendwie da rein gemapt werden. Mit LX hab ich allerdings noch nichts gemacht.

Gruß
Christian

chris-p
Beiträge: 3
Registriert: 19.10.2016, 22:31

Re: Homematic-IP mit OCCU und Rpi2/3

Beitrag von chris-p » 25.10.2016, 00:23

die Devices hab ich jetzt mal mit mknod im Container angelegt.
irgendwie läuft bei mir aber das ttyAMA0 noch, sonst dürfte der rfd doch nichts mehr empfangen, oder?
Ich hab auch mal versucht die Firmware des moduls auf dualcopro_si1002_update_blhm.eq3 mittels Änderung in der fwmod

eq3configcmd update-coprocessor -p /dev/ttyAMA0 -t HM-MOD-UART -u -c -l 0

zu flaschen, danach ging garnichts mehr, noch nich mal das Umflashen auf die alte Version.

mittels der infos aus http://heinz-otto.blogspot.de/2016/07/r ... modul.html hab ich dann immerhin die alte Firmware flashen können.
./flash-hmmoduart -U /dev/ttyAMA0 /opt/YAHM/share/tools/hmgw/eq3/firmware/coprocessor_update.eq3

jetzt läuft wenigstens die normale Homematic ohne *IP wieder. Irgendwelche Ideen?

Gruß
Christian

Antworten

Zurück zu „OCCU Entwicklung“