Ankündigung

Einklappen
Keine Ankündigung bisher.

Rules und Strukturen

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

    Rules und Strukturen

    Ich würde in einer .rule gerne eine Struktur definieren. In C/C++ würde ich das wie folgt machen:

    Code:
    struct CanMessage {
        int canId;
        int msgLen;
        int canDataList[8];
    };
    Ziel ist es, die im folgenden Code einzeln deklarierten Variablen gesammelt in einer Variable dieser Struktur zu halten:
    Code:
    rule "11 Bit CAN frame received"
    when
        Item CanReceived received update
    then
        if (CanReceived.state.format("%s") != "null") {
            // Extrahiere String aus Item
            var String recStr = CanReceived.state.format("%s")
            // Entferne ersten Character, hier das 'R'
            recStr = recStr.substring(1)
    
            // Splitte String in CAN ID und Daten auf 
            val segments = recStr.split('#').iterator
            val int canId = Integer::parseInt(segments.next(), 16)
            logInfo("CAN", "canId: " + Integer::toHexString(canId))    // Ausgabe hexadezimal
    //        logInfo("CAN", "canId: " + canId.toString())                // Ausgabe dezimal
    
            // Fülle Datenarray mit CAN Daten
            val String canData = segments.next()
            segments.toSet()
            var canDataList = newArrayList(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
            var msgLen = 0
            var stringPos = 0
    
            while (!canData.substring(stringPos).isEmpty()) {
    //            logInfo("CAN", "stringPos: " + stringPos)
                val dataElement = Integer::parseInt(canData.substring(stringPos, stringPos + 2), 16)
    //            logInfo("CAN", "dataElement: " + dataElement)
                canDataList.set(stringPos / 2, dataElement)
                stringPos = stringPos + 2
            }
    
            msgLen = stringPos / 2
            var index = 0
    
            while (index < msgLen) {
                logInfo("CAN", "Data[" + index + "]: " + Integer::toHexString(canDataList.get(index)))     // Ausgabe hexadezimal
    //            logInfo("CAN", "Data[" + index + "]: " + canDataList.get(index))                        // Ausgabe dezimal
                index = index + 1
            }
    
        } else {
            say("Ungültig!")
        }
    end

    #2
    Da sich die Resonanz sehr in Grenzen hält, nehm ich an, dass das nicht so ohne weiteres geht.
    Ich bin meiner Suche auf Drools gestoßen. Damit sollte das wohl gehen.
    Wo bin ich mit Fragen bzgl. Drools auf OH richtig aufgehoben?

    Kommentar


      #3
      In der englischen OpenHAB Group:

      https://groups.google.com/forum/#!forum/openhab

      Kommentar


        #4
        Hi,

        Zitat von Liontamer Beitrag anzeigen
        nehm ich an, dass das nicht so ohne weiteres geht.
        Du könntest in jedem Fall die möglichen Java-Datentypen verwenden. Also etwa sowas, wie Map und List. Eine Frage, die sich anschliesst ist, an welcher Stelle Du mit dieser Datenstruktur weiterarbeiten möchtest?

        Gruß,

        Thomas E.-E.
        Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

        Kommentar

        Lädt...
        X