FHEM Forum

CUL - Entwicklung => Wunschliste => Thema gestartet von: kpwg am 03 August 2014, 12:13:24

Titel: CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: kpwg am 03 August 2014, 12:13:24
Hallo Leute,

nachdem ich jetzt das Forum durchstöbert habe und wir auch im Chat das Thema hatten, jedoch keine befriedigende Lösung fanden, stelle ich das hier als Wunsch zur Debatte:

Besteht die Möglichkeit, jedem CUL eine Serial oder anderes eindeutiges Merkmal zu verpassen? Ich betreibe mehrere CUL868 mit verschiedenen Antennen und habe aktuell nach jedem Reboot die CULs zufällig zugeordnet. Mal klappt's, dann wieder nicht. Entsprechend habe ich dann manche Sensoren nicht mehr auf dem Schirm.

Die Idee, per Bus:Device die Sticks mit udev zu unterscheiden ist nicht die Lösung, da spätestens bei der nächsten Änderung am USB-Hub oder dessen Ersatz die Zuordnung wieder futsch ist. Auch sollte die Lösung ein Update der culfw überleben.

Wie denkt ihr darüber?

Viele Grüße, Ricardo
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: schka17 am 03 August 2014, 12:25:06
Hallo Ricardo,

Ich hatte mit mehreren Jeelinks immer wieder Probleme, ich habs dann über die Serial ID gelöst.

Beispiel:

/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AE01DTY1-if00-port0

Gruß

Karl
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: kpwg am 03 August 2014, 17:33:06
Zitat von: schka17 am 03 August 2014, 12:25:06
Ich hatte mit mehreren Jeelinks immer wieder Probleme, ich habs dann über die Serial ID gelöst.

Hallo Karl,

genau diese Serial ID (oder eine andere Eindeutigkeit) fehlt dem CUL.
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: Tobias am 22 August 2014, 09:27:32
Ich stand vor dem selben Problem (habe 3x CUL) und habe auch keine Lösung gehabt, schlussendlich ist es aber egal, da die Funkprotokolle per attr gesetzt werden. Normalerweise ist es egal ob Homematic der erste oder der 2te sendet.
Ich würde an deiner Stelle allen eine einheitliche antenne verpassen.
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: kpwg am 22 August 2014, 10:33:31
Tobias, das löst aber das Problem nicht. Die Antennen wurden auf bestimmte Richtungen experimentell optimiert und die CUL befinden sich an unterschiedlichen Standorten (5m USB-Verlängerung funktioniert  8)). Mit komplett identischen Antennen erreiche ich meinen Außensensor nicht mehr (bzw. empfange ihn nicht).
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: Tobias am 22 August 2014, 10:42:14
Ich weiß nur, das es keine Lösung gibt. Hift dir nicht ein Repeater weiter? Für HM setze ich auch einen ein, für FS20 gibt es auch einen bzw nutze ich hier einen abgesetzten CUNO statt CUL
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: no_Legend am 29 Dezember 2014, 21:14:29
Hi ich bin gerade auch auf der Suche nach einer Lösung.

Ich habe einen CUL für 433 und einen für 868.
Kann man nicht einen Statische Zuweisugn über USB Port machen?
Muss ja nicht unbedingt die Seriennummer herhalten.

Hab mich jetzt noch nicht in Uhde eingelesen.
Auch keine Ahnung wie es sich mit USB Hubs verhält.

Muss ich die Tage mal testen.

Edit:
Hab was gefunden
http://askubuntu.com/questions/49910/how-to-distinguish-between-identical-usb-to-serial-adapters

Es müsste also gehen anhand der port Nummer zu arbeiten.

Gruß Robert
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: hermannk am 27 Februar 2015, 15:10:03
Hallo kpwg,

Zitat von: kpwg am 03 August 2014, 17:33:06
genau diese Serial ID (oder eine andere Eindeutigkeit) fehlt dem CUL.

wirklich? ich betreibe einen CUL433 (slowRF) und einen CUL868 (HM) parallel.

ls -l /dev/serial/by-id
total 0
lrwxrwxrwx 1 root root 13 Feb 27 14:30 usb-busware.de_CUL433-if00 -> ../../ttyACM0
lrwxrwxrwx 1 root root 13 Feb 27 14:31 usb-busware.de_CUL868-if00 -> ../../ttyACM1
lrwxrwxrwx 1 root root 13 Feb 27 13:46 usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0 -> ../../ttyUSB0


Also: Wenn sich die Frequenzen unterscheiden, dann bekommen sie unter /dev/serial/by-id verschiedene Portnamen.

Mit udev-Regeln (...ATTRS{iProduct}="CUL433", ...) war ich zuvor gescheitert, weil iProduct anscheinend nicht ausgewertet wird.

Gruss,

Hermann
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: no_Legend am 27 Februar 2015, 15:43:34
Das mit den USB Ports scheint zu funktionieren.
Ich hab es so eingerichtet.

MIt der Frequenz geht nur wenn du nur einen Stick mit der Frequenz hast.
Solltest du zwei haben mit der gleichen Frequenz geht das nicht mehr.
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: noxinu am 08 Juli 2015, 17:21:24
Alternativ by-path:
pi@pi ~ $ ls -l /dev/serial/by-path/
insgesamt 0
lrwxrwxrwx 1 root root 13 Jan  1  1970 platform-bcm2708_usb-usb-0:1.2:1.0 -> ../../ttyACM0
lrwxrwxrwx 1 root root 13 Jan  1  1970 platform-bcm2708_usb-usb-0:1.3:1.0 -> ../../ttyACM1
lrwxrwxrwx 1 root root 13 Jun 27 17:15 platform-bcm2708_usb-usb-0:1.4:1.0 -> ../../ttyACM2
lrwxrwxrwx 1 root root 13 Jan  1  1970 platform-bcm2708_usb-usb-0:1.5:1.0-port0 -> ../../ttyUSB0


also zum Beispiel:

define CUL_2 CUL /dev/serial/by-path/platform-bcm2708_usb-usb-0:1.3:1.0@9600 1234

Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: noansi am 23 Dezember 2015, 16:19:34
Hallo Zusammen,

Ich hatte das gleiche Problem und mein RasPi hat die CULs auch in der Reihenfolge vertauscht, wenn ich einen Warmstart statt eines Kaltstart gemacht habe. Blöd, wenn einer eine 433Hz und einer 868MHz Version ist. (Und noch blöder, wenn man gerade Änderungen an SlowRf testet und nur deswegen plötzlich der Empfang mies ist... und HM nicht mehr gut empfangen wird... und man schon neue CULs ordern will...  :o).

Code für eine einstellbare Seriennummer ist hier http://forum.fhem.de/index.php/topic,24436.msg377742.html#msg377742 (http://forum.fhem.de/index.php/topic,24436.msg377742.html#msg377742) zu finden in den Descriptors.

Das müsste nur in der allgemeinen Version verfügbar gemacht werden.
Da ich aber beim Firmware Code abseits des Standard Pfades unterwegs bin, kann ich das nicht mal eben machen.

Im Standard Code gibt es noch einen Define LUFA, der, wenn gesetzt die Seriennummer des Atmel Chips als USB Seriennummer nutzbar machen sollte. Vielleicht mal in die board.h bei CUL_V3 u. CUL_V4 einbauen, compilieren, flashen und testen?

Grüße und frohes Fest,

Ansgar.
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: PeMue am 11 Januar 2016, 21:40:32
Zitat von: noansi am 23 Dezember 2015, 16:19:34
Code für eine einstellbare Seriennummer ist hier http://forum.fhem.de/index.php/topic,24436.msg377742.html#msg377742 (http://forum.fhem.de/index.php/topic,24436.msg377742.html#msg377742) zu finden in den Descriptors.

Das müsste nur in der allgemeinen Version verfügbar gemacht werden.
Da ich aber beim Firmware Code abseits des Standard Pfades unterwegs bin, kann ich das nicht mal eben machen.
Hallo Ansgar,

kennst Du diese application note von Atmel http://www.atmel.com/Images/doc8201.pdf? Könnte man das in die Descriptors.c einbauen und per board.h verfügbar machen?

Gruß Peter
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: noansi am 24 Januar 2016, 22:52:26
Hallo Peter,

Die application note hatte ich gelesen.

Wenn LUFA definiert ist, dann ist das wohl schon so gedacht, daß das von Lufa so gemacht wird.
Man müsste dem Code dazu mal in Lufa nachgehen, wo es klemmt oder ob LUFA das nur nicht mit dem ATmega32U4 macht.

EDIT: Es klemmt an der LUFA Version im CUL Projekt. Im letzten Stand wird auch ATmega32U4 und ATmega32U2 mit der integrierten ATMEL Seriennummer unterstützt. D.h. der LUFA code wäre entsprechend anzupassen.

Der Weg, einen einstellbaren Seriennummer Descriptor einzubauen, war schneller und einfacher umzusetzen.  ;)

Gruß, Ansgar.
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: noxinu am 02 Februar 2016, 22:14:02
Hi.

Die Zuweisung "by-path" ist auch Käse und führt zumindest bei mir auf einem VMware ESX immer wieder zu Problemen, da die Gerät scheinbar nach Shutdown-Restarts verschiedener VMs immer wieder auf anderen virtuellen Ports zu finden sind.

Alternativ lässt sich die ID des Geräts editieren in der board.h

Näheres findet sich hier http://culfw.de/commandref.html

die culfw auschecken via
svn checkout svn://svn.code.sf.net/p/culfw/code/trunk culfw-code

wenn im HOME Verzeichnis ausgepackt,
dann findet sich in ~/culfw-code/culfw/Devices/CUL/

die Datei board.h

diese lässt sich dann zB via

nano board.h

bearbeiten.

Editiert habe ich...


#define BOARD_ID_STR            "CUL868FS20"
#define BOARD_ID_USTR           L"CUL868FS20"


Das Ergebnis sieht dann so aus:


root@debian ~ > ls -l /dev/serial/by-id
insgesamt 0
lrwxrwxrwx 1 root root 13 Jan 18 22:40 usb-busware.de_CUL433-if00 -> ../../ttyACM2
lrwxrwxrwx 1 root root 13 Jan 13 11:55 usb-busware.de_CUL868FS20-if00 -> ../../ttyACM1
lrwxrwxrwx 1 root root 13 Jan 13 11:48 usb-busware.de_CUL868HM-if00 -> ../../ttyACM0
lrwxrwxrwx 1 root root 13 Nov 26 23:40 usb-FTDI_FT232R_USB_UART_A603IGD0-if00-port0 -> ../../ttyUSB2
lrwxrwxrwx 1 root root 13 Nov 26 23:40 usb-FTDI_FT232R_USB_UART_A7031F5L-if00-port0 -> ../../ttyUSB1
lrwxrwxrwx 1 root root 13 Jan 13 10:18 usb-FTDI_FT232R_USB_UART_AL006T17-if00-port0 -> ../../ttyUSB0


Das brauchte ich neulig selbst wieder und konnte die Info auf die Schnelle nicht finden, deshalb hier kurz zusammengefasst.

Achja, um den CUL in den Bootloader zu schicken kann man das Teil natürlich mit gedrücktem Taster in den USB Port stecken.... oder aber....

set CUL_xxx raw B01

an das zu flashende Gerät absetzen...

Have Fun
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: Darkman am 03 Februar 2016, 11:28:09
Moin,

danke fuer den Tipp mit der Firmware anpassung. Ich wuerde an der Stelle jedoch die "Serial" nehmen die Busware auf das Ding drauf gedruckt hat. Dann hat man ein eindeutigen Identifikationsstring der auch auf dem Ding drauf steht. Falls dann doch mal der HM Stick fuer was anderes herhalten soll.

Wer sich das ersparen moechte, koennte noch folgenden "Trick" versuchen:
Statt die ID zu nehmen gibt es auch noch den USB Port als Referenz. Wer also nicht extra neue Firmware bauen moechte kann die Dinger via.

/dev/serial/by-path/

einbinden. Wenn man dort mit einem "ls -la" guckt, sieht man die aktuelle Zuordnung (so als Hilfe) und kann die entsprechenden Devices darueber einbinden. Also fuer nen Raspi (ohne Gewaehr!) z.B. ueber

/dev/serial/by-path/platform-3f980000.usb-usb-0:1.3:1.0-port0

fuer den ersten USB Port, port1 fuer den 2. usw.

Solange ihr die Sticks dann in die richtigen Ports steckt, passts.

Gruss,
Sven[/code]
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: no_Legend am 03 Februar 2016, 11:46:50
Es sollte auch möglich sein, mit einem Windows Tool nur die Seriennummer zu setzten.
Schaut euch noch mal den Link hier an:
http://askubuntu.com/questions/49910/how-to-distinguish-between-identical-usb-to-serial-adapters

Bis nach unten Scrollen, ist der letzte Beitrag.
Habe es noch nicht getestet, also auf eigene Gefahr.

Gruß Robert
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: noansi am 09 Februar 2016, 22:50:23
Hallo Peter,

Zitatkennst Du diese application note von Atmel http://www.atmel.com/Images/doc8201.pdf? Könnte man das in die Descriptors.c einbauen und per board.h verfügbar machen?

Geht wohl nach Vergleich von aktuellem LUFA und der in CUL genutzten Version.

In lufa -> StdDescriptors.h, DevChapter9.h und DevChapter9.c muss

#if !defined(NO_INTERNAL_SERIAL) && (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))

durch

#if !defined(NO_INTERNAL_SERIAL) && (defined(USB_SERIES_2_AVR) || defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))

ersetzt werden.

Dann wird der Code für die interne Atmel Seriennummer mit compiliert und es wird eine 20-stellige USB-Seriennummer geliefert. Benötigt allerdings 94 Bytes Flash Speicher zusätzlich, da die Nummer intern gelesen, zu einem Descriptor geformt und dann geliefert werden muss.

Meine Custom Seriennummervariante benötigt auf CUL 54 Bytes zusätzlich für die 868xxx und 433xxx Seriennummer.

Gruß, Ansgar.
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: cotecmania am 03 November 2016, 21:47:19
Hi,

wenn ich obige Aenderungen einfuege kommt beim compilieren :

Compiling C: ../../lufa/Drivers/USB/LowLevel/DevChapter9.c
../../lufa/Drivers/USB/LowLevel/DevChapter9.c:227:13: warning: 'USB_Device_GetInternalSerialDescriptor' defined but not used [-Wunused-function]
../../lufa/Drivers/USB/LowLevel/DevChapter9.c:221:13: warning: always_inline function might not be inlinable [-Wattributes]


Mache ich was falsch ?

Gruss
Joe
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: niceday am 22 Januar 2017, 12:05:28
Zitat von: noansi am 09 Februar 2016, 22:50:23
Hallo Peter,

Geht wohl nach Vergleich von aktuellem LUFA und der in CUL genutzten Version.

In lufa -> StdDescriptors.h, DevChapter9.h und DevChapter9.c muss

#if !defined(NO_INTERNAL_SERIAL) && (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))

durch

#if !defined(NO_INTERNAL_SERIAL) && (defined(USB_SERIES_2_AVR) || defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))

ersetzt werden.

Dann wird der Code für die interne Atmel Seriennummer mit compiliert und es wird eine 20-stellige USB-Seriennummer geliefert. Benötigt allerdings 94 Bytes Flash Speicher zusätzlich, da die Nummer intern gelesen, zu einem Descriptor geformt und dann geliefert werden muss.

Meine Custom Seriennummervariante benötigt auf CUL 54 Bytes zusätzlich für die 868xxx und 433xxx Seriennummer.

Gruß, Ansgar.
Das hat bei mir nix gebracht. Nach einem erneuten aus- und wieder einstecken (nach erfolgreichem flashen) des CUL bleibt es bei der selben ID: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0.
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: noansi am 22 Januar 2017, 19:54:33
Hallo niceday,

hast Du auch alle Vorkommen ersetzt und nicht nur einmal pro Datei?
In DevChapter9.c kommt es 2 mal vor.
Such am besten nach NO_INTERNAL_SERIAL .

Und natürlich müssen die header Dateien der avr Libs oder der compiler auch auch den __AVR_ATmega32U4__ define setzen, der in USBMode.h wiederum den passenden USB_SERIES_ define setzt.

Gruß, Ansgar.
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: Harst am 22 Januar 2017, 21:38:02
Ich hätte da noch eine Idee.

Der CUL kann Daten im EPROM ablegen und Abfragen. Und der Speicher für die MAC-Adresse ist beim CUL irrelevant. Daran kann man den CUL wiedererkennen.

Horst
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: no_Legend am 23 Januar 2017, 10:51:20
Es gibt auch noch eine andere Variante.
Damit benötigt man keinen Udev regel definieren.
Bei Ubuntu habe ich das gesehen und auch im Einsatz.

Voraussetzung:
Ubuntu (geteste 16.04 LTS)
USB Device bleibt immer am gleichen Port angeschlossen.
Kann auch für andere Distribution benutzt werden.

Funktion:
Sobald das gerät angesteckt wurde und die Treiber vorhanden sind, werden die Geräte eingebunden.
Somit kann unter /dev/serial mit zwei methoden arbeiten.
1. mit by-path
2. mit by-serial

2. fällt bei CULs raus, da diese zum jetztigen Zeitpunkt (soweit mir bekannt ist) keine eindeutige Seriennummer mitteilen.
1. sollte bei fast allem funktionieren, da hier auf den Geräte pfad verwiesen wird, den es nur einmal geben kann
Nachteil ist allerdings, sobald das Device umsteckt wird, ändert sich auch der Device Path.
Somit muss das Define dann auch angepasst werden

Anleitung für 1:
cd /dev/serial/by-id
ls -al
ausgabe zeigt usb-HUAWEI_Technology
Bsp Define: define name GSMSMS /dev/serial/by-id/usb-HUAWEI_Technology@19200

Anleitung für 2:
cd /dev/serial/by-path
ls -al
ausgabe zeigt pci-0000:000:14.0-usb-0:3.2:1.0-port0
Bsp Define: define name GSMSMS pci-0000:000:14.0-usb-0:3.2:1.0-port0@19200

Fazit:
Version 1 habe ich mometan für einen Huwaei stick im satz.
Mehre Neustarts überlebt.

Version 2 ist von mir noch nicht getestet worden.
Ich bin mir nicht sicher, ob die FHEM das define so aktzeptiert.


Viel Spaß und Gruß Robert
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: niceday am 24 Januar 2017, 21:12:36
Zitat von: noansi am 22 Januar 2017, 19:54:33
Hallo niceday,

hast Du auch alle Vorkommen ersetzt und nicht nur einmal pro Datei?
In DevChapter9.c kommt es 2 mal vor.
Such am besten nach NO_INTERNAL_SERIAL .

Und natürlich müssen die header Dateien der avr Libs oder der compiler auch auch den __AVR_ATmega32U4__ define setzen, der in USBMode.h wiederum den passenden USB_SERIES_ define setzt.

Gruß, Ansgar.
Danke für die Anmerkung, ich denke eher das Problem liegt ganz woanders in meinem Fall. Unzwar habe ich keinen FTDI-Chip verbaut auf dem Arduino sondern es ist eine billig China-Kopie mit nem Winchiphead-Chip (https://blog.sengotta.net/arduino-nano-wird-nicht-erkannt-was-tun/ (https://blog.sengotta.net/arduino-nano-wird-nicht-erkannt-was-tun/)). In so einem Fall kann man keine (neue) Seriennummer setzen und somit steht der Chip immer auf 0000.
Ich habe das jetzt aktuell erstmal so gelöst indem ich statt /dev/ttyUSBxxx den hier verwende: /dev/serial/by-path/platform-3f980000.usb-usb-0:1.4:1.0-port0 bzw. /dev/serial/by-path/platform-3f980000.usb-usb-0:1.5:1.0-port0. Das ist der direkte Linux-Pfad zu dem jwlg. USB-Port und da ich nicht daurend die CUL's umstecke bleiben sie immer am selben Ort und der Pfad ändert sich nicht, fertig :-)
Titel: Antw:CUL mit serial für eindeutige Zuordnung per udev?
Beitrag von: noansi am 24 Januar 2017, 23:36:26
Hallo niceday,

ZitatUnzwar habe ich keinen FTDI-Chip verbaut auf dem Arduino
In der Tat, nanoCUL ist eigentlich nur ein serielles Gerät. Da kann die Firmware nichts an der USB Seriennummer ändern.
Das geht nur mit Tools für den USB-seriell Chip, sofern verfügbar, wie Du schon richtig festgestellt hast.

Gruß, Ansgar.