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

  • Robert
    antwortet
    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

    Einen Kommentar schreiben:


  • agerhard
    antwortet
    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

    Einen Kommentar schreiben:


  • ugobald
    antwortet
    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ß

    Einen Kommentar schreiben:


  • tullsta
    antwortet
    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

    Einen Kommentar schreiben:


  • Taxus
    antwortet
    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.

    Einen Kommentar schreiben:


  • tullsta
    antwortet
    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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • hotzen
    antwortet
    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 :/

    Einen Kommentar schreiben:


  • Jürgen
    antwortet
    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

    Einen Kommentar schreiben:


  • ugobald
    antwortet
    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

    Einen Kommentar schreiben:


  • tullsta
    antwortet
    Hallo Juergen,

    bei mir laeuft der Kopf von Volkszaehler ohne Probleme.

    LG - tullsta

    Einen Kommentar schreiben:


  • Jürgen
    antwortet
    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

    Einen Kommentar schreiben:


  • ugobald
    antwortet
    Hi Jürgen,

    ich komme da mit meinem Verständnis auch nicht weiter.
    Was mir noch aufgefallen ist: Wenn du in owhttpd den Pfad /settings/alias anwählst, dann erhältst du eben jene Alias-Liste, wie man sie selbst anlegen kann. Die scheint mir allerdings nur temporär zu existieren und mit jedem Neustart weg zu sein.

    Gruß
    Andreas

    Einen Kommentar schreiben:


  • Jürgen
    antwortet
    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

    Einen Kommentar schreiben:

Lädt...
X