Ankündigung

Einklappen
Keine Ankündigung bisher.

Featurewunsch: EnOcean plugin

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Hi Max2612,

    oder ändere dein Device auf /dev/ttyUSB0 dies sollte auch gehen.

    Gruß

    Marco

    Kommentar


      Zitat von MarcoLanghans Beitrag anzeigen
      Hi Max2612,

      oder ändere dein Device auf /dev/ttyUSB0 dies sollte auch gehen.

      Gruß

      Marco

      Guten Morgen!

      Das hat leider nicht geklappt. Beim Start kommt ein Error, dass ttyUSB0 nicht existiert.

      Seit gestern Abend quäle ich mich mit udev. Leider ohne Erfolg.
      Code:
      SUBSYSTEMS=="usb",KERNEL=="ttyUSB*", ATTRS{serial}=="FTZ7F2FP", SYMLINK+="enocean"
      Das einzige was stimmt, ist die serial. Aber was unter SUBSYSTEMS und KERNEL gehört, bekomm ich einfach nicht raus.
      Ich bin echt am verzweifeln...

      Danke, Gruß

      Kommentar


        Meine UDev Regel als Beispiel:

        SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="USBEnocean" MODE="7777"

        Gruß

        Kommentar


          Danke für das Beispiel.

          Meine udev Regel /etc/udev/rules.d/20-enocean-stick.rules
          Code:
          SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="USBEnocean" MODE="7777"
          Danach
          Code:
          admin@smarthome:/usr/smarthome$ sudo /etc/init.d/udev restart
          [sudo] password for admin:
          [ ok ] Stopping the hotplug events dispatcher: udevd.
          [ ok ] Starting the hotplug events dispatcher: udevd.
          Nach Neustart von sh folgender Fehler
          Code:
          2016-01-06 10:29:48,673 ERROR    Main         Plugin enocean exception: Could not configure port: (25, 'Inappropriate ioctl for device') -- plugin.py:__init__:57
          Traceback (most recent call last):
            File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 306, in _reconfigurePort
              iflag, oflag, cflag, lflag, ispeed, ospeed, cc = termios.tcgetattr(self.fd)
          termios.error: (25, 'Inappropriate ioctl for device')
          
          During handling of the above exception, another exception occurred:
          
          Traceback (most recent call last):
            File "/usr/smarthome/lib/plugin.py", line 53, in __init__
              plugin_thread = Plugin(smarthome, plugin, classname, classpath, args)
            File "/usr/smarthome/lib/plugin.py", line 80, in __init__
              exec("self.plugin = {0}.{1}(smarthome{2})".format(classpath, classname, args))
            File "<string>", line 1, in <module>
            File "/usr/smarthome/plugins/enocean/__init__.py", line 104, in __init__
              self._tcm = serial.Serial(serialport, 57600, timeout=0.5)
            File "/usr/lib/python3/dist-packages/serial/serialutil.py", line 260, in __init__
              self.open()
            File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 280, in open
              self._reconfigurePort()
            File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 308, in _reconfigurePort
              raise SerialException("Could not configure port: %s" % msg)
          serial.serialutil.SerialException: Could not configure port: (25, 'Inappropriate ioctl for device')
          In /dev wird mir auch kein "USBEnocean" angezeigt.

          Sorry für meine Unkenntnisse über Linux...

          Danke, Gruß

          Edit: USBEnocean wird nach einem Neustart angezeigt. Fehler ist dennoch der gleiche.
          Zuletzt geändert von Max2612; 06.01.2016, 10:41.

          Kommentar


            Kann das damit zu tun haben, dass ich einen Raspberry B+ habe??

            Kommentar


              https://knx-user-forum.de/forum/suppo...uf-raspberry-2

              Hilft das?
              Das ist meine udev ... mit ein paar ergänzenden Infos im Thread.
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                Hallo,

                den Thread hab ich auch schon gefunden, und versucht es damit zu schaffen.

                Mit "lsusb" kommt folgendes:
                Code:
                admin@smarthome:/usr/smarthome$ lsusb
                Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
                Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
                Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
                Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
                Mit "lsus -v":
                Code:
                Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
                Device Descriptor:
                  bLength                18
                  bDescriptorType         1
                  bcdUSB               2.00
                  bDeviceClass            0 (Defined at Interface level)
                  bDeviceSubClass         0
                  bDeviceProtocol         0
                  bMaxPacketSize0         8
                  idVendor           0x0403 Future Technology Devices International, Ltd
                  idProduct          0x6001 FT232 USB-Serial (UART) IC
                  bcdDevice            6.00
                  iManufacturer           1 EnOcean GmbH
                  iProduct                2 EnOcean USB 300 DB
                  iSerial                 3 FTZ7F2FP
                  bNumConfigurations      1
                  Configuration Descriptor:
                    bLength                 9
                    bDescriptorType         2
                    wTotalLength           32
                    bNumInterfaces          1
                    bConfigurationValue     1
                    iConfiguration          0
                    bmAttributes         0xa0
                      (Bus Powered)
                      Remote Wakeup
                    MaxPower               90mA
                    Interface Descriptor:
                      bLength                 9
                      bDescriptorType         4
                      bInterfaceNumber        0
                      bAlternateSetting       0
                      bNumEndpoints           2
                      bInterfaceClass       255 Vendor Specific Class
                      bInterfaceSubClass    255 Vendor Specific Subclass
                      bInterfaceProtocol    255 Vendor Specific Protocol
                      iInterface              2 EnOcean USB 300 DB
                      Endpoint Descriptor:
                        bLength                 7
                        bDescriptorType         5
                        bEndpointAddress     0x81  EP 1 IN
                        bmAttributes            2
                          Transfer Type            Bulk
                          Synch Type               None
                          Usage Type               Data
                        wMaxPacketSize     0x0040  1x 64 bytes
                        bInterval               0
                      Endpoint Descriptor:
                        bLength                 7
                        bDescriptorType         5
                        bEndpointAddress     0x02  EP 2 OUT
                        bmAttributes            2
                          Transfer Type            Bulk
                          Synch Type               None
                          Usage Type               Data
                        wMaxPacketSize     0x0040  1x 64 bytes
                        bInterval               0
                Device Status:     0x0000
                  (Bus Powered)
                Mit dieser udev
                Code:
                SUBSYSTEMS=="usb", \
                        ATTRS{manufacturer}=="EnOcean GmbH" \
                                                        SYMLINK+="enocean-usb"
                wird unter /dev mein enocean-usb angelegt. Beim ausstecken verschwindet er und beim einstecken ist er wieder da.
                Das sollte doch soweit passen?!?!

                Plugin.conf angepasst
                Code:
                [enocean]
                      class_name = EnOcean
                      class_path = plugins.enocean
                      serialport = /dev/enocean-usb
                Beim Neustart von sh.py wieder der Fehler:
                Code:
                2016-01-06 16:07:50,060 DEBUG    Main         Plugin: enocean -- plugin.py:__init__:43
                2016-01-06 16:07:50,196 WARNING  Main         enocean: No valid enocean stick ID configured. Transmitting is not supported -- __init__.py:__init__:100
                2016-01-06 16:07:50,203 ERROR    Main         Plugin enocean exception: Could not configure port: (25, 'Inappropriate ioctl for device') -- plugin.py:__init__:57
                Traceback (most recent call last):
                  File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 306, in _reconfigurePort
                    iflag, oflag, cflag, lflag, ispeed, ospeed, cc = termios.tcgetattr(self.fd)
                termios.error: (25, 'Inappropriate ioctl for device')
                
                During handling of the above exception, another exception occurred:
                
                Traceback (most recent call last):
                  File "/usr/smarthome/lib/plugin.py", line 53, in __init__
                    plugin_thread = Plugin(smarthome, plugin, classname, classpath, args)
                  File "/usr/smarthome/lib/plugin.py", line 80, in __init__
                    exec("self.plugin = {0}.{1}(smarthome{2})".format(classpath, classname, args))
                  File "<string>", line 1, in <module>
                  File "/usr/smarthome/plugins/enocean/__init__.py", line 104, in __init__
                    self._tcm = serial.Serial(serialport, 57600, timeout=0.5)
                  File "/usr/lib/python3/dist-packages/serial/serialutil.py", line 260, in __init__
                    self.open()
                  File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 280, in open
                    self._reconfigurePort()
                  File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 308, in _reconfigurePort
                    raise SerialException("Could not configure port: %s" % msg)
                serial.serialutil.SerialException: Could not configure port: (25, 'Inappropriate ioctl for device')
                Fehlen hier beim Raspberry B+ irgendwelche Dateien oder Treiber?
                Ich weiß echt nicht mehr weiter.

                Danke, Gruß

                Kommentar


                  Hallo zusammen,

                  ich versuch gerade ebenfalls das Enocean zum Laufen zu bringen.

                  Augenscheinlich funktioniert das Ganze auch. Allerdings kann ich kurz hintereinander genau zwei Telegramme empfangen und anschließend tut sich nichts mehr.
                  Starte ich smarthome.py neu, so funktioniert es wieder zweimal und dann wieder wieder Schicht im Schach.

                  Hat jemand ne Idee, an was das liegen könnte?

                  Folgende Hardware setzte ich ein:

                  - BBB-Cape mit Enocean von robert
                  - Eltako FTK Fensterkontakt

                  Ich kann quasi einmal das Öffnen und Schließen des Kontakts triggern, danach hör ich zwar den Kontakt noch erfolgreich "klicken", allerdings erscheint auch im Debug-Mode nichts mehr im Logfile.

                  Danke schon mal für eure Hilfe!

                  Gruß

                  Christian

                  Kommentar


                    Hallo Christian,

                    postet mal Dein Debug-Log (https://knx-user-forum.de/forum/supp...fehlerbehebung). Das gibt hoffentlich mehr Aufschluss.
                    Gruß
                    Alex

                    Kommentar


                      Ich versuche gerade einen Hora Stellantrieb anzulernen (ich hatte gesehen, dass es für diesen Einträge in dem EEP-Parser gibt und mit ihn daraufhin besorgt, da ich es nicht geschafft habe, den Alpha-Eos Antrieb ans Laufen zu bekommen). Ich habe hier schon mal meine etwas eingestellt: https://knx-user-forum.de/forum/supp...ernen-a5_20_04) und hoffe man steinigt mich nun nicht wegen des neuen Posts hier.

                      Es gibt für den Antrieb auch einen Anlernbefehl im Plugin, dieser funktioniert bei mir aber nicht. Laut Enocean Spezifikationen (https://www.enocean.com/fileadmin/re...6.3_public.pdf) kann der Antrieb (A5_20_04, Seite 77) mit zwei Methoden angelernt werden:
                      1. Smarth ACK Teach-in (im Dokument auf Seite 182)
                      2. 4BS Teach-in (im Dokument auf Seite 183)
                      Wenn ich es richtig verstehe geht das so, dass der Antrieb einen Anlernbefehl schickt und daruafhin innerhalb von 550ms bzw. 1100ms eine passende Antwort erwartet, in welcher sich auch das Gateway spezifizieren muss. Die Teach-in Methode im Plugin sieht nun so aus:
                      PHP-Code:
                      def send_learn_radiator_valve(selfid_offset=0):
                              if (
                      id_offset 0) or (id_offset 127):
                                  
                      logger.info("enocean: ID offset out of range (0-127). Aborting.")
                                  return
                              
                      logger.info("enocean: sending learn telegram for radiator valve")
                              
                      self._send_radio_packet(id_offset0xA5, [0x000x000x000x00]) 
                      diese reagiert also nicht auf die Anlernanfrage und sendet meiner Meinung nach auch keine passende Antwort. Es ist außerdem kaum möglich, im interaktiven Modus das Zeitfenster einzuhalten.

                      Wenn ich den Anlernbefehl im Antrieb auslöse, sendet dieser:
                      PHP-Code:
                            2016-12-31 16:46:59 DEBUG enocean enoceanreceived header with data_length 10 opt_length 0x07 type 1     2016-12-31 16:46:59 DEBUG enocean enoceanaccepted package with type 0x01 len 24 data = [0x550x000x0a0x070x010xeb0xa50x800x200x450x800x010x930xcd0x820x000x010xff0xff0xff0xff0x590x000xe9]!     2016-12-31 16:46:59 INFO enocean enoceanradio messagechoice a5 payload = [0x800x200x450x80] / sender_id = 0193CD82 status repeat 0     2016-12-31 16:46:59 DEBUG enocean enoceanradio message with additional infosubtelnum dest_id FFFFFFFF signal = -89d 
                      ich habe hinter die Debugmeldung mal testweise den Anlernbefehl einbaut (self._send_radio_packet(id_offset, 0xA5, [0x00, 0x00, 0x00, 0x00])) . Nachdem dieser gesendet wird, antwortet der Heizungsaktor mit:

                      PHP-Code:
                            2016-12-31 17:21:48 DEBUG enocean enoceanreceived header with data_length opt_length 0x00 type 2     2016-12-31 17:21:48 DEBUG enocean enoceanaccepted package with type 0x02 len data = [0x550x000x010x000x020x650x000x00]!     2016-12-31 17:21:48 DEBUG enocean enoceansending command returned code OK 
                      Im Stellantrieb wird danach eine Fehlermeldung ausgegeben (Kommunikationsfehler beim Einlernen).

                      Ich habe den Zusammenhang zwischen Offset, Size, Bitrange Data, etc. mit den gesendeten Werten nicht verstanden und komme deshalb auch nicht weiter, ist die Antwort auf den Anlernbefehl ggf. falsch?.

                      Vielleicht hat ja jemand den Antrieb erfolgreich angelernt, bzw. kann mir weiterhelfen.

                      Kommentar


                        Hallo Marcov,

                        ich hatte damals das Decoderien von Hora Messages im Enocean Plugin verbereitet und das manuelle Senden einer Anlernmessage laut Enocean ICD mit eingebaut. Ich habe allerdings kein Hora Antrieb hier zur Hand und hatte die Integration deshalb nicht weiter verfolgt. Betrachte die Nachrichten daher als ungetestet. Du bist auf jeden Fall auf dem richtigen Weg. Im Gegensatz zu den einfachen Aktuatoren und Sensoren wird der Hora über Smartacknowledge angelernt. Die Prozedur wird in Deinen oben genannten Dokumenten beschrieben. Im Enocean Decoder müsste dafür das automatische Antworten auf eine Anlernanfrage implementiert werden. Ich schaffe es mangels Zeit und Hardware gerade nicht, diese Funktion entsprechend einzubauen, unterstütze Dich aber gerne bei Fragen. Offset bezeichnet den sogenannten ID Offset. Damit wird bei der klassischen Kommunikation mit einem Enocean Actuator das entsprechende Device addressiert. Ein gesendeter Befehl geht an alle Devices raus, aber nur der mit der passenden ID (OD_OFFSET) reagiert. So können maximal 255 Devices addressiert werden. Beim manuellen Einlernen vergibst Du bei Einlernvorgang manuell die ID.

                        Viele Grüße
                        Alex

                        Kommentar


                          Hi Alex,

                          danke für die Rückmeldung und das Angebot der Unterstützung. Ich würde es nun so planen:
                          - Anlernmodus lässt sich über interaktien Modus auslösen. Er lauscht auf Enocean Signal, wenn er das obige Signal empfängt, sendet er unmittelbar die "richtige" Antwort.
                          Theoretisch also klar, die Umsetzung auf Pluginseite traue ich mir auch zu, praktisch stellen sich folgende Fragen:
                          1. Es gibt (wenn ich das richtig gelesen habe) bei A5_20_04 zwei Anlernmöglichkeiten:
                          a) Smart-ACK Teach-in
                          b) 4BS teach in Variante 3
                          Ich gehe jetzt davon aus, dass ich Variante a) benötige?!:
                          Schema_smart_ack.JPG

                          Ich springe mal etwas und füge hier das eigentliche Ende meines Posts ein, da die vom Antrieb gesendeten Pakete meiner Meinung nach vernachlässigt werden können, da wir keine Mailbox brauchen:
                          Wenn ich das Dokument richtig verstanden habe und es sich um Methode Smart ACK Teach-in handelt, dann müsste ich innerhalbt von 0,550 Sekunden eine Antwort erstellen und diese mit self_send_packet() an den Antrieb senden. Dabei möchte er, dass der Antrieb in einer Mailbox gespeichert wird - ich denke, dass kann man sich sparen und ihm einfach irgendeinen Index ausgeben?! Ich kann mir eigentlich auch die Auswertung der empfangenen Befehle sparen, denn wenn ich es richtig sehe, brauche ich nur die Sender-ID und die habe ich ja.
                          Wie sieht die Antwort für self._send_packet() in dem Fall aus?
                          SA_Learn_Answer.JPG
                          Ich versuche es mal:
                          Rorg: 0xA5
                          RorgEN: 0xC7
                          Response-Time: 0x02 0x26 -> wie teile ich diese auf die zwei Bits auf?
                          ACK-Code: 0x00
                          Mailbox-index: 0x01
                          Postmaser ID: 0x01 0x93 0xCD 0x82 (das ist die Sender-ID des Antriebs)
                          Controller ID: meine Base-ID (oder meine Base-ID + Offset?)
                          Status: 0x0F
                          CHCK: 0x-> wie errechne ich die Checksum?

                          lasse ich die "not used" bites einfach leer also so: ,,, oder mit null also so: 0x00,0x00?

                          Mein Befehl sähe also so aus und muss innerhalb von 550ms auf den Anlernbefehl gesendet werden:
                          self._send_packet(packet-type???,[0xa5,0xc7, 0x02,0x02, 0x26,0x00, 0x01,0x00, 0x00,0x00,0x01,0x93,0xCD,0x82, 0xff, 0xfa, 0xec, 0x80,0xf, CHECKSUM??])

                          Die unsicheren Stellen habe ich mal fett markiert.
                          Das könnte/sollte man jetzt noch universal machen, indem man die vorher empfangene Sender-ID und Base-ID verwurstet, dann haben auch andere etwas davon.







                          DANKE
                          Angehängte Dateien
                          Zuletzt geändert von Marcov; 01.01.2017, 21:07.

                          Kommentar


                            Hallo Marcov,

                            1) "not used" bytes einfach auf 0x00 setzen, nicht leer lassen.

                            2) Berechnung des CRCs wird am Ende der "send_package" Funktion ausgeführt. _calc_crc8. Du brauchst dich also nicht weiter drum zu kümmern.

                            3) PostmasterID ist nicht die ID des Antriebs, sondern die des Controllers (sprich USB Sticks) bzw. des Repeaters, wenn einer verwendet wird.

                            4) Die Mailbox ist wichtig für den späteren Betrieb. Kommandos an den Antrieb können nicht direkt gesendet werden, da der Antrieb nicht permament empfängt. Vielmehr wird ein zu sendendes KOmmado in der Mailbox zwischengeparkt. Der Antrieb meldet sich, wenn er das nächste Mal empfangsbereit ist, dann werden die ziwschengespeicherten Daten aus der Mailbox an den Antrieb gesendet. Die erstellte Mailbox ID sollte auch in einem Item gespeichert werden, damit der Antrieb nach Neustart des Plugins nicht immer wieder neu angelert werden muss. Das Prinzip Mailbox soll laut ICD auch für den Anlernvorgang verwendet werden.

                            Viele Grüße
                            Alex
                            Zuletzt geändert von aschwith; 02.01.2017, 13:56. Grund: CRC schon vorhanden

                            Kommentar


                              hi Alex,
                              danke für Deine Antwort 1+2 sind klar;

                              zu 3):wenn die Postmaster-ID die ID des Sticks ist, was ist dann die Controller-ID? Oder sind die gleich? Im Dokument steht bei der Beschreibung der Response Time: Response time for the Smart -ACK Client in MS in which the controller can perpare the data and send it to the postmaster. Deshalb dachte ich der Postmaster wäre der Antrieb selber, denn da will ich die BEfehle ja hinsenden.

                              zu 4): auch verstanden

                              kannst Du noch etwas zum Paket-Type sagen? Ist es 0x06 (laut plugin "Smart Ack command") oder 0x01 / 0x02 (ERP RADIO 1 bzw. 2)

                              Ich würde nun erst mal versuchen den Antrieb anzulernen, dann sehen, was er so sendet bevor er auf Antwort wartet und dann darauf die Mailboxantwort senden.


                              Kommentar


                                Hi Marcov,

                                zu 3) Ja, Postmaster ID und Controller-ID können gleich sein. Die Postmaster ID definiert die ID des Enocean Devices, auf dem die Mailbox wartet. Im einfachsten Fall ist es der Controller. Falls ein Repeater verwendet wird, kann oder muss, da bin ich mir nicht sicher, die Mailbox dort installiert werden.

                                Beim Packet Type bin ich mir unsicher, es sollte aber in der ICD stehen.Ich tippe mal auf 0x06. Ansonsten einfach austesten.

                                Viel Erfolg.

                                Grüße
                                Alex

                                Kommentar

                                Lädt...
                                X