Ankündigung

Einklappen
Keine Ankündigung bisher.

Logikengine, java powered

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

    Hallo
    Ich habe schon mal das kompilierend und ausgeführt, läuft klasse.
    Mus es nur noch in KAD einfügen.
    Gruß NetFritz

    Code:
    import java.net.*;
    import java.io.*;
    import java.util.*;
    
    public class Logictest_writeinflux {
        private static HttpURLConnection client;
    
        public static void main(String[] args) {
            try {
                Random rn = new Random();
                URL input;
                while(true) {
                    input = new URL("http", "localhost", 8086, "/write?db=pv_db");
                    client = (HttpURLConnection) input.openConnection();
                    client.setRequestMethod("POST");
                    client.setDoOutput(true);
    
                    double thermals = rn.nextDouble();
                    String s = "test_temperature value=" + thermals;
    
                    try (OutputStreamWriter writer =
                            new OutputStreamWriter(client.getOutputStream())) {
                        writer.write(s);
                    }
    
                    BufferedReader in = new BufferedReader(new InputStreamReader(
                                                client.getInputStream()));
                    String decodedString;
                    while ((decodedString = in.readLine()) != null) {
                        System.out.println(decodedString);
                    }
                    in.close();
    
                    System.out.println(s); // for debugging
                    Thread.sleep(1000); // send data every 1 second
                }
    
            } catch(MalformedURLException error) {
                System.out.println("Malformed URL!");
            } catch(SocketTimeoutException error) {
                System.out.println("Socket Timeout Exception!");
            } catch (IOException error) {
                System.out.println("IOException!");
                System.out.println(error);
            } catch(InterruptedException e) {
                System.out.println("InterruptedException!");
            } finally {
                if(client != null) { // Make sure the connection is not null.
                    client.disconnect();
                }
            }
    KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
    WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
    PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

    Kommentar


      Hallo
      Code:
      public void onDataWrite(String ga, String value) throws KnxServiceException {
      in value steht der Messwert z.B. 555 W
      wie entfernst Du die Einheit W und das Leerzeichen aus dem String?
      Bietet KAD dafür eine Funktion ?
      Gruß NetFritz
      KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
      WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
      PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

      Kommentar


        Hallo
        Habe es so gelöst.
        Gruß NetFritz
        Code:
        int pos = value.indexOf(" ");
        if (!(pos < 0))
            value = value.substring(0, pos);
        }
        KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
        WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
        PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

        Kommentar


          Eigentlich soll das kad machen. Welcher DPT ist das bei dir?

          Kommentar


            Hallo
            DPT 14.056
            Gruß NetFritz
            KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
            WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
            PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

            Kommentar


              Ok, werde schauen dass ich das in der nächsten Version entsprechend berücksichtige und die Einheit von vornherein entferne.

              Kommentar


                Hallo
                Keine Eile läuft ja auch so.
                Gruß NetFritz
                KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
                WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
                PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

                Kommentar


                  Das Projekt lebt noch... und wird weiter entwickelt.
                  Aktueller Punkt an dem ich schraube: Der KNX Projekt Import....
                  Der "alte" Parser hat "zu Fuß" die XMLs aus dem .knxproj geparst und sich alle wichtigen Infos mühselig von Hand zusammengesucht. Das hatte zur Folge, daß er quasi nur mit ETS4 richtig harmoniert hat. Neuere ETS Versionen blieben außen vor.

                  Bevor ich den alten Parser aufmöbel, hab ich gleich einen neuen geschrieben. Dieses mal basierend auf einer reverse engineerten XML Schema Definition und für ETS4, 5 und 5.5 (sind tatsächlich drei verschiedene Schemas) und JAXB, welches mir (ausreichend performant) aus den XMLs passende Java-Objekte liefert, welche ich recht einfach nach den gesuchten Informationen abklappern kann.

                  Der neue Parser kann, wie der alte auch, gleich eine "bereinigte, einfache und saubere XML" schreiben, so dass das Parse-Ergebnis bequem weitergenutzt werden kann.

                  Noch ist der Parser nicht ganz fertig (und wird es wohl auch nie, denn es tauchen immer wieder überraschungen in den XMLs der .knxproj auf die ein "Nacharbeiten" des parsers erfodern). Aber erste lokale Tests sehen gut aus.

                  Wenn der Parser dann zufriedenstellend funktioniert, wandert er in KAD. Danach schaue ich mir nochmal die Verwendung von GA vs. GA-Namen im Code an (so dass man beides nutzen kann). Vermutlich wird man sich für das eine (GA Namen sind eindeutig, dann kann man GA-Adressen und Namen verwenden) oder andere (GA Namen sind nicht eindeutig, dann kann man nur GA Adressen nutzen) entscheiden müssen. Mein Favorit sind ja eindeutige GA Namen. In meinem eigenen Projekt ist das schon so. Aber ich werde hierzu wohl noch ein wenig dokumentieren bzw. Vorschläge/Tipps dokumentieren.

                  Neben all der Entwicklung lässt sich noch berichten: KAD läuft jetzt schon sehr lange und stabil, 24/7, ohne Ausfälle ohne Probleme. Ich denke summa sumarum bin ich da auf dem richtigen Weg.

                  Der Thread ist schon 12 Seiten lang, und viele haben hier und da was ausprobiert oder mitgemacht. Aber ich weiß aktuell nur von einem dass er KAD "aktiv" nutzt. Gibt's hier noch mehr aktive Nutzer die sich an dieses frühe Entwicklungsstadium getraut haben und bei denen KAD mehr oder weniger produktiv läuft?

                  Kommentar


                    P.S. Wer mag kann mir ein (anonymisiertes, d.h. ohne darin enthaltene persönliche Daten wie Name oder Anschrift oder Teile davon) .knxproj schicken -> alex[at]root1.de
                    Dann lass ich das mal durch den Parser, bzw. füge das .knxproj File zum Projekt als Testfall hinzu (deshalb sollte es auch anonymisiert sein, damit ich es mit dem Source-Code zusammen als Testfall auf github laden kann)

                    Kommentar


                      So, der neue Parser ist in KAD nun eingebaut und verrichtet bereits seinen Dienst auf meinem Produktiv-System. Dank zahlreicher Beispieldateien funktioniert der schon ganz gut. KAD selbst läuft bis dato mit den Änderungen ganz zuverlässig (soweit man das nach nicht ganz 18h sagen kann).

                      Aber es gibt nicht nur einen neuen Parser:

                      * Plugins können zur Laufzeit ins das System geladen und entladen werden. D.h. man kann durch einfaches hinzufügen/entfernen der Plugin-Datei ein Plugin verwenden/stoppen
                      * Das conf/ Verzeichnis wird nun überwacht. Gibt es eine Änderung an der Konfiguration (seitens .knxproj/knxproject.xml), werden die GAs, Namen und DPTs neu geladen. Das ist ganz praktisch wenn man mal schnell eine neue GA hinzufügen will ohne das System durchstarten zu müssen.

                      Als nächstes kommt noch das neuladen von Logiken zur Laufzeit. Das ist ganz praktisch wenn man eine Logik mal eben schnell korrigieren/erweitern muss und das System nicht komplett durchstarten möchte.

                      Danach kommt das Persistenz-Plugin und das SmartVisu Backend dran...

                      Wenn das beides mal funktioniert, wird's ein großes/offizielles Release und es wird ein neuer Thread (Vorstellung KAD) ins leben gerufen.

                      Kommentar


                        Hallo
                        Dann werde ich mal das Update installieren.

                        Kann man auch für eine Logik ein config anlegen,
                        wo die zu überwachenden und sendeten GAs eingetragen werden?
                        Gruß NetFritz
                        KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
                        WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
                        PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

                        Kommentar


                          Ja, eine Logic kann eine eigene Config haben.

                          Im conf-Verzeichnis eine Datei anlegen, z.B.

                          Code:
                          logic_<Logik-Name>.properties
                          Beispiel:
                          Code:
                          logic_de.root1.logiccollection.LogicSceneEG.properties
                          Darin kannst du key=value Zeilen ablegen:

                          Code:
                          meineVariableA=1
                          meineGA=1/2/3
                          foo=bar
                          An beliebiger Stelle in der Logik kannst du dann wie folgt auf die Key-Value Zeilen zugreifen:

                          Code:
                          String meineGa = config.getProperty(meineGA, "1/1/1"); // "1/1/1" ist der Default-Wert der verwendet wird, wenn der Key in der config noch nicht vor kam.
                          Du kannst auch Dinge in die File reinspeichern:

                          Code:
                          config.setProperty("meinKey", "meinValue");
                          Wichtig ist nur, dass du zu einem geeigneten Zeitpunkt den Wert tatsächlich auf die Platte schreibst:

                          Code:
                          saveConfig();
                          Du kannst dir das händische anlegen der Datei im Conf-Verzeichnis sparen wenn du nur Dinge aus der Logik heraus "speichern" willst, aber die Config nicht selbst parametrisieren willst. Dann reicht es "saveConfig();" aufzurufen und die File wird einfach erstellt.

                          Ich mach das bei meiner "Szenen-Logik"... Da merke ich mir in der Config die jeweilige Einstellung der Szene, so dass ich nach einem Neustart die Szeneneinstellung noch weiß. Ist ganz praktisch wenn man per Logik einem Gerät "Szenen" beibringen kann.

                          -----

                          Du bist daran aber nicht gebunden. Du hast in der Logik eigentlich keinerlei Einschränkungen. Du kannst auch selbst auf das Dateisystem zugreifen oder über's Netzwerk kommunizieren oder Verbindung mit einer Datenbank aufbauen, oder Threads aufmachen, oder oder oder.. Der Phantasie sind keine Grenzen gesetzt.

                          Wenn du sowas dann aber machst: Bitte auf die Ressourcen achten... Dateien wieder schließen, Socket-Verbindungen wieder sauber trennen etc... Denn wenn eine Logik ein Speicher oder Handle-Leak hat, dann wirkt sich das auf den ganzen Server aus und kann diesen auch zum Absturz bringen.
                          Zuletzt geändert von tuxedo; 04.11.2016, 14:48.

                          Kommentar


                            So langsam fängt das ganze an Spaß zu machen.

                            Nachdem nun Plugins ad-hoc neu geladen/entladen werden können, klappt das für Logiken auch schon so halbwegs.

                            Damit wird das Ändern einer Logik zum Kinderspiel: Auf dem "KAD Server" den KAD Ordner freigeben und ohne eingriff auf die Konsole des Servers über die Dateifreigabe Logiken ändern oder hinzufügen, oder abschalten.

                            Dauert noch ein wenig bis das richtig rund läuft, aber macht jetzt schon ne Menge Spaß.

                            Kommentar


                              Hallo
                              Ist die Datei "KnxProjectCache.dat" im Ordner "cache" entfallen ?
                              Und dafür im "conf" Ordner anstatt "knxproject.knxproj.user.xml" nun eine"knxproject.xml" Datei.
                              Gruß NetFritz
                              KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
                              WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
                              PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

                              Kommentar


                                Korrekt. Ist so nun aufgeräumter und logischer.

                                Kommentar

                                Lädt...
                                X