Ankündigung

Einklappen
Keine Ankündigung bisher.

Beaglebone Cape mit KNX & 4x Onewire; Enocean, RTC, eHZ möglich

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

    Andere Baustelle; Stromzähler:

    Hallo Robert,

    im Heimautomation Buch wird dieser Lesekopf empfohlen: http://www.mysmartshop.de/co-met-mag...e-zaehler.html
    Vom Stecker her basst er in das Cape, passen auch die Spezifikationen? Was müsste man denn nach dem Einstecken noch konfigurieren, um Stromwerte zu erhalten?

    Gruß Jürgen

    Kommentar


      Hallo Juergen,

      bei mir laeuft der Kopf von Volkszaehler ohne Probleme.

      LG - tullsta

      Kommentar


        Zitat von Jürgen Beitrag anzeigen
        Hallo Andreas,

        die Beschreibung klingt gut, allerdings komme ich da nicht mit:
        Wenn ich die Anleitung richtig verstehe, gibt es ein owfs Verzeichnis, in dem die einzelnen Sensoren als Datei oder Unterveichnis vorhanden sind.
        Ich finde zu meinen ID´s allerdings nichts:

        sudo find / -name 28.FF3C27001602
        sudo find / -name owfs bringt /usr/share/owfs, da steht aber nix...

        Auch der Hinweis "(Note, I've added /opt/owfs/bin to my path for convenience)." bringt mich da nicht weiter...

        Gruß Jürgen
        Hallo Jürgen,

        ich habe es hinbekommen. Mein Denkfehler war, dass die owfs.conf auch den owhttpd konfiguriert, tatsächlich bezieht sich die owfs.conf allerdings nur auf den owserver. Man muss die Alias-Datei also dem owhttpd als Startparameter mitgeben. Mit SystemD funktioniert das so:

        \etc\systemd\system\owhttpd.service öffnen
        --alias=alias-file.txt anhängen

        Beispiel bei mir:

        Code:
        ExecStart=/usr/bin/owhttpd --foreground --server=127.0.0.1:4304 --port=2121 --alias=/opt/ow-alias
        owhttpd mit "sudo systemctl restart owhttpd" neustarten -> Jetzt sollte bei owhttpd jeder Sensor mit dem entsprechenden Alias gelistet sein.

        Manko: Bei mir tritt dann dieses alte Problem auf: https://knx-user-forum.de/forum/supp...1-owfs-aliases
        Eine Lösung habe ich noch nicht gefunden. So kann ich zwar bequem neue Sensoren in Betriebnehmen, da sie unbenannt leicht von den benannten zu unterscheiden sind, die bereits bestehenden kann ich so aber nicht auslesen. Bei owhttpd kann man im Webinterface über "/settings/alias" die Aliase wieder ausschalten (Haken bei "unchanged"), sodass wieder alle auslesbar sind, das ist momentan aber etwas umständlich.

        Gruß
        Andreas

        Kommentar


          Hallo Andreas,

          klingt erst einmal logisch..
          Wenn Du im originalen Browser auf 28.FF3C27001602 klickst, wird ein Link geöffnet. Angeblich gibt es ja für jeden Sensor eine eigene Datei, die dann im Browser angezeigt wird. Wenn du nun per alias den Namen auf "Keller" änderst, würde der Browser dann auch die Datei Keller suchen, es ist aber immer noch "28.FF3C27001602" - wo auch immer - vorhanden.
          Hier müsste man dann einen Link von "Keller" auf 28.FF3C27001602 anlegen, damit die Anzeige im Browser wieder klappt.

          Jetzt muss uns nur noch jemand erklären, wo das Homeverzeichnis des OW Webservers liegt und in welchem Verzeichnis wir somit die Sensoren finden.

          Gruß Jürgen

          Kommentar


            Zitat von tullsta Beitrag anzeigen
            bei mir laeuft der Kopf von Volkszaehler ohne Probleme.
            Hey tullsta , kannst du noch deine smarthomeNG config posten? habe auch udos lesekopf aber latest smarthomeNG mit dlms rennt immer in timeout :/

            Kommentar


              Robert kann ich "einfach" ein dist-upgrade auf debian stretch machen oder musst du dafür einen neuen build vorbereiten?
              danke!

              Kommentar


                Dist-upgrade sollte funktionieren - zur Sicherheit einfach den eMMC bzw. die SD-Karte vorher clonen.

                Kommentar


                  Moin Hotzen,

                  Zitat von hotzen Beitrag anzeigen
                  Hey tullsta , kannst du noch deine smarthomeNG config posten? habe auch udos lesekopf aber latest smarthomeNG mit dlms rennt immer in timeout :/
                  jo - kann ich. Ich hab' mir aber ein "ISKRA"-plugin abgeleitet (glaube von easymeter), da ich die bestehenden plugins nicht mit meinem ISKRA 681 (da gibt's uebrigens auch eine technische Beschreibung zu) ans Laufen bekommen hab.
                  => alle Kommentare zur Verbesserung sind herzlich willkommen!

                  PHP-Code:
                  import logging
                  import serial
                  import re
                  import binascii

                  # ==================================================
                  logger logging.getLogger('iskra')

                  # ==================================================
                  class iskra():

                      
                  def __init__(selfshcycle_time 30):
                          
                  self._sh sh
                          self
                  ._cycleTime cycle_time
                          self
                  ._codes dict()
                          
                  self._frameStartDelimiter b'\x1b\x1b\x1b\x1b\x01\x01\x01\x01'
                          
                  self._frameStopDelimiter b'\x1b\x1b\x1b\x1b\x1a'
                          
                  self._ser serial.Serial(port='/dev/ttyS1',
                          
                  timeout=0,
                          
                  baudrate=9600,
                          
                  stopbits=serial.STOPBITS_ONE)

                      
                  def run(self):
                          
                  self._sh.scheduler.add(
                              
                  'iskra'self.update_statuscycle=self._cycleTime)
                          
                  self.alive True

                      def stop
                  (self):
                          
                  self.alive False

                      
                  # parse items, if item has parameter netio_port
                      # add item to local list
                      
                  def parse_item(selfitem):
                          if 
                  'iskra_code' in item.conf:
                              
                  self._codes[item.conf['iskra_code']] = item
                          
                  return None

                      
                  # ==================================================
                      
                  def con2int8(selfval):
                          if 
                  val 0x7f:
                              
                  val -= 0x100
                          
                  return val

                      def con2int16
                  (selfval):
                          if 
                  val 0x7fff:
                              
                  val -= 0x10000
                          
                  return val

                      def con2int32
                  (selfval):
                          if 
                  val 0x7fffffff:
                              
                  val  -= 0x100000000
                          
                  return val

                      def con2int64
                  (selfval):
                          if 
                  val 0x7fffffffffffffff:
                              
                  val -= 0x10000000000000000
                          
                  return val

                      
                  # ==================================================
                      
                  def parse(selfdatai):
                          
                  num=data[i]
                          if 
                  num == 0x52:
                              
                  val self.con2int8(int.from_bytes(data[i+1:i+2], byteorder='big'))
                              
                  i+=2
                          elif num 
                  ==  0x53:
                              
                  val self.con2int16(int.from_bytes(data[i+1:i+3], byteorder='big'))
                              
                  i+=3
                          elif num 
                  ==  0x55:
                              
                  val self.con2int32(int.from_bytes(data[i+1:i+5], byteorder='big'))
                              
                  i+=5
                          elif num 
                  ==  0x59:
                              
                  val self.con2int64(int.from_bytes(data[i+1:i+9], byteorder='big'))
                              
                  i+=9
                          elif num 
                  ==  0x62:
                              
                  val int.from_bytes(data[i+1:i+2], byteorder='big')
                              
                  i+=2
                          elif num 
                  ==  0x63:
                              
                  val int.from_bytes(data[i+1:i+3], byteorder='big')
                              
                  i+=3
                          elif num 
                  ==  0x65:
                              
                  val int.from_bytes(data[i+1:i+5], byteorder='big')
                              
                  i+=5
                          elif num 
                  ==  0x69:
                              
                  val int.from_bytes(data[i+1:i+9], byteorder='big')
                              
                  i+=9
                          elif num 
                  ==  0x01:
                              
                  i+=1
                              val 
                  'kein Wert'
                          
                  else:
                              print (
                  'Error ')
                              print (
                  data[i])
                              
                  j=1
                              val
                  =''
                          
                  return (ival)

                      
                  # ==================================================
                      
                  def update_status(self):

                          
                  frameStartDelimiter self._frameStartDelimiter
                          frameStopDelimiter 
                  self._frameStopDelimiter
                          frameStartFound 
                  False
                          frameStopFound 
                  False

                          ser 
                  self._ser
                          logger
                  .debug("ser inWaiting() => " str(ser.inWaiting()))

                          
                  frameBuffer b''
                          
                  running True
                          
                  while running:
                              if 
                  ser.inWaiting() > 0:

                                  
                  frameBuffer += ser.read(ser.inWaiting())

                                  if 
                  not frameStartFound:
                                      if 
                  frameStartDelimiter in frameBuffer:
                                          
                  logger.debug("found start of frame")
                                          
                  frameStartFound True
                                  
                  else:
                                      if 
                  frameStopDelimiter in frameBuffer:
                                          
                  logger.debug("found end of frame")
                                          
                  frameStopFound  True
                                          running 
                  False

                          
                  # find last occurrence of stop delimiter
                          
                  stopIdx  frameBuffer.rfind(frameStopDelimiter)

                          
                  frameBuffer frameBuffer[:stopIdx]
                          
                  # find last occurrence of start delimiter
                          
                  startIdx frameBuffer.rfind(frameStartDelimiter)

                          
                  frameLength stopIdx startIdx 8

                          logger
                  .debug("startIdx = " str(startIdx) + " => stopIdx = " str(stopIdx))
                          
                  lastFrame frameBuffer[startIdx+8:]

                          
                  logger.debug("extracted frame of length " str(frameLength) + ".")

                          for 
                  code in self._codes.keys():
                              
                  logger.debug("checking for code %s" code)
                              
                  r=re.compile('-|:|\.|\*')

                              
                  idx lastFrame.find(bytearray(map(int,r.split(code))))
                              if 
                  idx != -1:
                                  
                  logger.debug(" => updating code %s" code)
                                  
                  logger.debug("  => found code %s" code)
                                  
                  idx += 6
                                  idx
                  status          self.parse (lastFrameidx)        
                                  
                  idxiskra_time      self.parse (lastFrameidx)
                                  
                  idxunit            self.parse (lastFrameidx)
                                  
                  idxscaler          self.parse (lastFrameidx)
                                  
                  idxvalue           self.parse (lastFrameidx)
                                  
                  idxvalue_signature self.parse (lastFrameidx)
                                  if 
                  unit == 0x1E:
                                      
                  scaler=scaler-3
                                  value 
                  round(value 10**scaler3)
                                  
                  logger.debug("  => found value %6.6f" value)
                                  
                  self._codes[code](value
                  und hier das passende plugin.conf

                  PHP-Code:
                  [iskra]
                      
                  class_name iskra
                      class_path 
                  plugins.iskra
                      cycle_time 
                  10 
                  Es ist sicher noch einiges zu verbessern, gab' aber im Moment zu viele andere dringlichere Baustellen...

                  LG - tullsta

                  Kommentar


                    GPIO-Pins zusätzlich abgreifen

                    Ich möchte eine Anbindung (RFID-Leser), die bisher autark über einen RasPi erfolgt, mit vom BBB mit Roberts Cape erledigen lassen. Dafür benötige ich neben GND noch SDA und SCL, um den Leser mit ein paar Dioden und Widerständen anzubinden. SDA und SCL (P9-19 und P9-20) dürfen laut Roberts Spec ja (mit) benutzt werden.

                    Da ich mich etwas scheue, die Litzen direkt am Cape anzulöten - was ist der empfohlene Weg? Kennt jemand ein passendes "Zwischencape" oder eben geeignete Verbinderleisten mit Stift und Buchse nebst Abzweig? Ich kann bei diesem hier: http://www.exp-tech.de/beaglebone-prototyping-cape z.B. nicht erkennen, ob ich seitlich an die Pins komme.
                    Gruß, Rainer

                    Kommentar


                      Zitat von Taxus Beitrag anzeigen
                      GPIO-Pins zusätzlich abgreifen
                      Da ich mich etwas scheue, die Litzen direkt am Cape anzulöten - was ist der empfohlene Weg? Kennt jemand ein passendes "Zwischencape" oder eben geeignete Verbinderleisten mit Stift und Buchse nebst Abzweig? Ich kann bei diesem hier: http://www.exp-tech.de/beaglebone-prototyping-cape z.B. nicht erkennen, ob ich seitlich an die Pins komme.
                      Zum Testen hab' ich fuer das BBB DMX Interface die drei Kabel direkt am cape festgeloetet - temporaer OK.
                      Fuer stabiler hatte ich das im Auge:
                      http://www.exp-tech.de/adafruit-proto-cape-kit-fuer-beagle-bone-beagle-bone-black
                      http://www.exp-tech.de/stacking-head...one-capes-2x23

                      Kommentar


                        Zitat von Jürgen Beitrag anzeigen
                        Hallo Andreas,

                        klingt erst einmal logisch..
                        Wenn Du im originalen Browser auf 28.FF3C27001602 klickst, wird ein Link geöffnet. Angeblich gibt es ja für jeden Sensor eine eigene Datei, die dann im Browser angezeigt wird. Wenn du nun per alias den Namen auf "Keller" änderst, würde der Browser dann auch die Datei Keller suchen, es ist aber immer noch "28.FF3C27001602" - wo auch immer - vorhanden.
                        Hier müsste man dann einen Link von "Keller" auf 28.FF3C27001602 anlegen, damit die Anzeige im Browser wieder klappt.

                        Jetzt muss uns nur noch jemand erklären, wo das Homeverzeichnis des OW Webservers liegt und in welchem Verzeichnis wir somit die Sensoren finden.

                        Gruß Jürgen
                        Hallo Santa Jürgen,

                        ich habe das altbekannte Problem mit den Aliases wieder aufgegriffen, aber noch keine Lösung gefunden.
                        Ich glaube nicht, dass jeder Sensor eine eigene Seite bekommt, sondern die Seiten werden on the fly generiert, und zur Anzeige des Sensors dann einfach wieder die Parameter aus der URL ausgelesen. So hätte ich es zumindest gemacht.

                        Es stimmt allerdings, dass die Sensoren immer noch über die Sensor-ID über den Browser erreicht werden können, egal ob ein Alias vergeben ist oder nicht. Meine Idee wäre nun, den Quellcode von owhttpd so umzuschreiben, dass auch bei eingeschalteter Alias-Anzeige der Link trotzdem zur Sensor-ID verlinkt, Beispiel:

                        http://192.168.x.x:2121/28.FFFEE9601603 anstatt auf http://192.168.x.x:2121/TEMP_Keller_Technikraum

                        Da ich in C nicht so sehr bewandert bin, habe ich bisher allerdings nur mal etwas im Quellcode rumgeschnüffelt. Vielleicht komm ich ja noch drauf.

                        Gruß

                        Kommentar


                          Hallo zusammen,

                          kurze Frage in die Runde: ist bekannt wann das IBBCape wieder verfügbar sein wird? Aktuell ist es lt. Shop nicht erhältlich.

                          @Robert: der Versuch dich über die Emailadresse aus dem Impressum zu erreichen schlug leider fehl, da nach 4 Tagen dieser Fehler zurückkam "delivery retry timeout exceeded". Versand an dich erfolgte über gmx.

                          Gruß,
                          agerhard

                          Kommentar


                            Hallo agerhard ,

                            aktuell ist noch keine Neuauflage des IBBCape geplant. Eine neue Charge wird eher im 2. Quartal 2018 aufgelegt werden.

                            Könntest du mir evtl. die Email einfach noch mal schicken? Ich habe gerade admin@ing-budde.de von einem gmx-Account getestet und die Email kam auf Anhieb durch. Danke!

                            Viele Grüße und einen guten Start ins neue Jahr
                            Robert

                            Kommentar


                              Servus, ich habe vor kurzem mein eMMC mit dem <eMMC-flasher-debian-8.7-ibb-armhf-2017-03-27-2gb.img.gz> Image aktualisiert. Leider läuft seit dem knxd bzw. die Verbindung nicht mehr zuverlässig.
                              D.h. nach einem Reboot funktioniert die Schnittstelle noch z.B. von meinem Openhab oder node-red für eine Weile. Irgendwann später kann ich nur noch Werte lesen, aber nicht mehr schreiben.

                              Code:
                               # configuration for knxd.service
                              KNXD_OPTS="-e 0.0.1 -E 0.0.2:8 --GroupCache -D -R -T -S --tpuarts-ack-all-group --tpuarts-ack-all-in$
                              Kennt jemand dieses Phänomen? Aus den Logs werde ich nicht schlau.

                              Kommentar


                                Ich habe eine Frage in die Runde;

                                Wie würde die Steuerung Regelung der u.g
                                Heizkörperthermostate mit dem cap funktionieren ?

                                https://www.voltus.de/hausautomation...micropelt_post

                                Ersetzt das Cap ein
                                bidirektionales Gateway zwischen EnOcean Funkgeräten und dem KNX-Bus wie zB dieses von WEINZIERL
                                https://www.voltus.de/hausautomation...n-gateway.html
                                Mit besten Gruss
                                Tom

                                Kommentar

                                Lädt...
                                X