Ankündigung

Einklappen
Keine Ankündigung bisher.

slicKnx: Calimero für Beginner ...

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

    KNX/EIB slicKnx: Calimero für Beginner ...

    Hallo zusammen,

    hab für ein paar Dinge schon erfolgreich und stabil Calimero im Einsatz. Doch dessen Verwendung könnte für die meisten Dinge deutlich einfacher sein. Angeregt durch die doch recht einfache Arduino KNX Lib, habe ich, aufbauend auf Calimero 2.2.1-beta eine einfache API für Java aufgebaut: slicKnx ...

    Ein einfaches Beispiel:
    Code:
    Knx knx = new Knx("1.1.254");      
    knx.addGroupAddressListener("1/1/15", new GroupAddressListener() {
    
        @Override
        public void readRequest(GroupAddressEvent event) {
        }
    
        @Override
        public void readResponse(GroupAddressEvent event) {
        }
    
        @Override
        public void write(GroupAddressEvent event) {
            try {
                System.out.println("Received update for 1/1/15: "+event.asBool());
            } catch (KnxFormatException ex) {
                ex.printStackTrace();
            }
        }
    });
    knx.writeBoolean("1/1/15", true);
    Den Code habe ich bei Github gehostet: https://github.com/tuxedo0801/slicKnx

    Bis dato ist die Lib noch weitgehend ungetestet. Ich muss erst mein Projekt auf die neue und einfachere API umstellen (macht mir selbst das leben einfacher).
    Ergänzend kommt hinzu, dass der Einstieg für Beginner noch einfacher sein könnte (Stichwort: Eine JAR mit allem drin). Bis jetzt existiert schon:Geplant ist noch:
    • Logging + Code-Verbesserung
    • ein paar Unit-Tests
    • Ein "ein JAR mit allem drum und dran" File zum einfachen einbinden in simple Projekte (nicht jeder kann sich mit Maven anfreunden, leider)
    • Mehr Beispielcode
    Zukunftsmusik:
    Vielleicht kann's ja jemand brauchen. Wenn nicht, dann halt nicht.

    Gruß
    Alex

    Zuletzt geändert von tuxedo; 30.03.2015, 13:06.

    #2
    Es geht voran....

    Das Helios-Python-Script das hier im Forum herumgeistert und mit dem man seine Helios-KWL über RS485 steuern kann, hatte ich vor einiger Zeit schon um einen TCP-Server erweitert. So konnte man mit dem HS und einem TCP-Kommando die Lüftungsanlage steuern. Aber der Umweg über TCP ist ja unschön, und einen extra HS oder eine weitere Logik will man ja auch nicht unbedingt haben.

    Was liegt also nahe? Das ganze direkt mit KNX umsetzen.

    Hab das Helios-Python-Script nun nach Java portiert (funktioniert schon) und erweitere das ganze nun mit slicKnx, so dass ich ein "Software-KNX-Helios KWL"-Gerät bekomme.

    Was braucht es dann an Hardware?

    * Eine Linux-Kiste mit USB und Netzwerk, bspw. einen Raspberry Pi
    * ein bisschen Software (entsteht gerade)
    * einen USB-RS485 Adapter aus der Bucht (2-3EUR inkl. Versand aus dem Land der aufgehenden Sonne)

    KNX kommt dann über's Netzwerk (ich setze einfach mal einen IP Router voraus. Sowas sollte jede gute KNX Installation ja haben). Die Linux-Kiste setzt das dann auf RS485 um und fertig ist das eigene KNX-Modul für die Lüftungsanlage.

    Mit slicKnx ist das ganze dann wirklich nicht schwer umzusetzen. Meine Dimplex-Wärmepumpe mit RS485/Modbus Interface (kostet nur ein Bruchteil eines KNX Interfaces) wird auf die gleiche Weise KNX-fähig gemacht.

    Aber auch "komplizierte Webabfragen oder Logiken" lassen sich so recht einfach umsetzen. Dank Java läuft das auf Linux, Windows und Mac gleichermaßen.

    So, aber genug jetzt für heute mit meinem Monolog ...
    Zuletzt geändert von tuxedo; 02.04.2015, 10:05. Grund: fixed typo

    Kommentar


      #3
      Beim umsetzen der Portierung der Lüftungssteuerung sind mir noch ein paar Bugs in slicKnx aufgefallen. Bin dabei das fixen.
      U.a. hat sich herausgestellt dass Calimero beim lauschen auf GruppenAdressen-Events Exceptions stillschweigend kurzschließt in der Thread sich dann stillschweigend beendet. *WieKannManNur" ...

      Den Fix hab ich bereits. Aber ich teste noch ein bisschen bevor ich Entwarnung gebe.

      Kommentar


        #4
        Coole Sache! Vielleicht kann ich das später auch mal gebrauchen...
        Kind regards,
        Yves

        Kommentar


          #5
          Ärgere mich gerade mit dem fehlenden DPT6 in Calimero rum. Für den Moment kann ich noch auf DPT9 ausweichen. Und ich bin mir noch nicht sicher ob ich bei "writeBoolean()" bleiben, oder der konsistent wegen mit den vielen anderen Methoden doch lieber "writeDpt1" nennen soll. Mal schauen.

          [update]
          So, nächster slicKnx commit. Erstes Problem behoben. Die ersten Werte meiner Helios KWL kann ich nun über KNX abfragen. Sobald es einen einigermaßen brauchbaren Zustand erreicht hat gibt's dazu nen Download-Link.
          Zuletzt geändert von tuxedo; 02.04.2015, 19:46.

          Kommentar


            #6
            Weiteres Zwischenupdate:

            Die API nimmt langsam Form an. Mein Musterprojekt "Helios KWL mit Software KNX" läuft nun. Ein paar Kleinigkeiten muss ich noch verbessern. Im laufe der Woche gibt's dann wieder ein Source-Update im Git Repo.

            Hab noch eine weitere Projektidee für slicKnx gefunden: Software-Jalousieaktor für Roto-Dachfenster die an einem normalen Schaltaktor hängen. Hintergrund: Die Roto-Dachfenster erwartet einen Schaltimpuls und keinen Dauer-Kontakt. Deshalb kann man einen normalen Jalousieaktor nicht im vollen Funktionsumfang ohne weitere Hardwarebeschaltung (die zusätzlich einiges Geld kostet) verwenden.

            Stay tuned ....

            Kommentar


              #7
              Hallo,

              was mir nicht klar ist: Wo ist der Vorteil, das Python-Script nach Java zu portieren und mit slicKnx zu nutzen, gegenüber dem Skript wie es ist?
              Oder allgemeiner:
              Wie grenzt sich slicKnx von Openhab oder sh.py ab?
              Was nutze ich wann?

              Gruß,
              Hendrik

              Kommentar


                #8
                slicKnx ist eine Programmierschnittstelle. OpenHAB ist ein ganzes Framework und sh.py geht in die Richtung OpenHAB, aber mit Augenmerk auf die Visu (so wie ich das verstanden habe).

                Hast du die Arduino+KNX Geschichte hier im DIY Bereich verfolgt? Man könnte sagen, das was TpUart für den Arduino ist, ist slicKnx für ARM+x86+AMD64 Systeme.

                slicKnx nutzt du dann, wenn du mit Python eher auf Kriegsfuß (ich mag die dynamische Typisierung gar nicht...) stehst, oder das KNX-Bindung für OpenHAB nicht den von dir gewünschten Funktionsumfang hat. Mein Musterprojekt "Helios KWL mit Software KNX" sollte sich z.B. auch ohne großen Aufwand auch als OpenHAB Bindung erweitern lassen.

                Ich nutze es, um Nicht-KNX-Geräte KNX-tauglich zu machen.

                Der Vorteil der Portierung:

                Das Python-Script für die Helios-Lüftungsanlage sprich nur "Kommandozeile" oder "sh.py". Ersteres ist nicht KNX tauglich und letzteres nutze ich gar nicht. Im ersten Schritt habe ich das Python-Script erweitert und TCP-fähig gemacht, so dass ich mit dem HS das Script mit TCP-Kommandos steuern konnte. Aber der Umweg über die TCP-Befehle ist eine separate Schiene zum Rest im Haus (und war mit dem HS eher umständlich als intuitiv). Mir ist es lieber wenn alle die gleiche Sprache sprechen. Nämlich KNX. Also was liegt näher als das ganze KNX tauglich zu machen? Und da meine Haus+Hof-Sprache Java ist und mit Calimero eine Java-KNX-API vorhanden ist, hat das prima zusammen gepasst. Und in dem Zug hab ich dann Calimero auf eine möglichst einfach zu benutzende, weitgehend selbsterklärende API herunter gebrochen. Denn für die meisten Dinge braucht man die allumfassended eierlegende Wollmilchsau-Features Calimero nicht.

                Noch Fragen?

                Gruß
                Alex

                Kommentar


                  #9
                  Ist jemand in Calimero fit und weiß ob es out-of-the-box möglich ist, ein eingehendes GROUP-READ mit einem GROUP-RESPONSE zu beantworten? Sehe nur die möglichkeit selbst auf eine GA zu schreiben. Aber die ETS zeigt das im Gruppenmonitor nicht als ANTWORT sondern als SCHREIBEN an. Liegt wohl am falschen "service". Beim Schreiben wird der Service GROP_WRITE (0x80) benutzt. Eine Antwort müsste aber GROUP_RESPONSE (0x40) verwenden?!

                  Kommentar


                    #10
                    Scheint nicht so als ob Calimero das schon berücksichtigt hat. Hab die ProcessCommunicatorImpl per copy&paste erweitern müssen. Jede write() Methode hat nun einen zusätzlichen Parameter bekommen: isResponse... setzt man den auf false, ist es ein normalen Schreib-Vorgang. Setzt man ihn auf true, sendet man eine Antwort auf eine zuvor gestellte Anfrage.

                    Kommentar


                      #11
                      Werde wohl doch noch zum Calimero-Committer ... ;-) Hab eben ein Pull-Request für die Unterstützung von DPT6 angeleiert und die Sache mit dem fehlenden "RESPONSE" hab ich zumindest mal als Issue angestoßen.

                      Ganz zufrieden bin ich noch nicht mit dem boolean-Flag das man nun jedem write() Aufruf mitgeben muss um zu entscheiden "WRITE" oder "RESPONSE" ...
                      Und jede Methode doppelt aufführen (einmal als WRITE und einmal als RESPONSE) ist auch nicht der Knüller. Mal sehen wohin der Weg führt...

                      Kommentar


                        #12
                        Mein Pull-Request wartet noch ...

                        Und meine Anfrage verläuft gerade im Sand einer "it's by design" Diskussion und hat wenig momentan wenig Aussichten auf Erfolg:
                        https://github.com/calimero-project/calimero/issues/20

                        Wenn's nicht im Calimero geändert wird, dann findet's wenigsten in meiner API einen Platz (hat's ja schon).

                        Kommentar


                          #13
                          Hello everybody!

                          I also use Calimero library - https://github.com/calimero-project

                          My task is to make a desktop application that will be able to connect with the KNX / IP router and receive telegram from weather station and save that parameters to database. My station sends rain as a bit- rain/no rain, temperature, brightness value-lux, is it morning or evening also as bit and wind speed in meters per second and I only want to receive these events.
                          I know the IP address of the router. Do you have some examples of code- like how connect to router, which classes should I use?
                          I know about Calimero pdf documentation but I would love to see some example, like "reference guide" to show me how to start with this library.
                          You would help me a lot, so I will be thankful if you could help me


                          p.s. I don't speak German and I'm sorry if I made some mistakes in english grammar

                          Kommentar


                            #14
                            Hello Ana Katarina ;-)

                            I already saw your mail on the calimero project.

                            Indeed, calimero is not very well documented and at the first look, it seems very complicated. That's why IO created "slicKnx". It simplifies the most things a "normale developer" would do with KNX.

                            Have a look at this sample:

                            https://github.com/tuxedo0801/slicKnx

                            For your weather-station, DPT9 is supported.

                            Sending a DPT9 value
                            knx.write2ByteFloat(false, "1/1/15", 1.23f);
                            Receiving a DPT9 value through the groupaddress-listener:

                            System.out.println("Received groupaddress event: "+event.as2ByteFloat());

                            The API is not yet final, but already useable.

                            br,
                            Alex

                            Kommentar

                            Lädt...
                            X