Ankündigung

Einklappen
Keine Ankündigung bisher.

Logikengine, java powered

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

    Hallo
    Ich habe es jetzt so hinbekommen das es Läuft.
    Code:
    package samplescripts;
    
    import de.root1.kad.knxservice.KnxServiceException;
    import de.root1.kad.logicplugin.Logic;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    public class LogicReadSHM extends Logic {
    
        @Override
        public void init() {
            setPA("1.0.202");
            log.info("+++++++++ LogicReadSHM is running.+++++++++");
            run();
       }
        //  @Override
        public void run() {
            String Ga;
            String line;
            String[] GaValue;
            log.info("+++++++ run is running.+++++++++");
            String[] cmd = new String[]{"/home/readshm", "-v", "-o"};
            try {
                    Process exec = Runtime.getRuntime().exec(cmd);
    
                    InputStream inputStream = exec.getInputStream();
                    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
    
                    while ((line = br.readLine()) != null) {
                       //System.out.println(line);
                       GaValue = line.split("\\s+");
                       Ga = GaValue[0] + "/" + GaValue[1] + "/" + GaValue[2];
                       log.info(Ga + " " + GaValue[3]);
                   //  write(Ga,"1000");
                   //  write(Ga, String.valueOf(999));
                       write(Ga,"555");
                    }
                    br.close();
    
                    //int exitvalue = exec.waitFor();
    
            } catch (IOException ex) {
                    ex.printStackTrace();
            } catch (KnxServiceException ex) {
                    ex.printStackTrace();
            }
        }
    }
    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


      Die main-Methode wird von der JVM nur in der Hauptklasse der Anwedung aufgerufen.

      Du musst das ganze jetzt in einen Thread verpacken und dort laufen lassen. Also wieder ein Runnable mit run() implementieren und dieses einem Thread mitgeben, damit er das ausführt.

      Dann kannst du dort im Thread in einer Schleife dein externen Programm abfragen/auslesen.

      Mehr Infos dazu findest du auf http://openbook.rheinwerk-verlag.de/...2-f49e058af566

      Kommentar


        Hallo
        Hat es denn Nachteile wenn ich in init() run(); aufrufe?
        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


          Wenn du in init() run() aufrufst, und run() für immer läuft, dann wird init() nicht fertig. Und wenn init() nicht fertig wird, dann wird kein anderes LogikScript initialisiert.

          Kurzum: Init ist Init... Das muss fertig werden.

          Genau wie die Event-Methode...

          Wenn du Dinge hast die "ewig laufen müssen", musst du Threads einsetzen.

          Kommentar


            Hallo
            Init ist Init... Das muss fertig werden.
            Wenn du Dinge hast die "ewig laufen müssen", musst du Threads einsetzen.
            OK dann muss ich das umbauen auf Threads.
            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
              Gib es was neues in Bezug auf KAD ?
              Angeregt durch den Blok in KONNEKTING zu ALEXA WEMO ESP8266
              möchte ich ALEXA auch in KAD nutzen.
              Wie stellt man das ohne Amazon Entwickler Konto an?
              Vielleicht mit ha-bridge?

              Gruß NetFritz
              Zuletzt geändert von NetFritz; 21.05.2017, 12:49.
              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


                Nein, nix neues zu KAD, zumindest nichts was ich präsentieren könnte.

                Aktuell ist die Idee die API für die Plugins ein wenig umzustricken. Die Ursprungs-Idee war ja die GA komplett mit Namen abzubilden. Es gibt aber immer mehr Stimmen die die GA als x/y/z haben wollen. Beides gleichzeitig über einen String abzubilden macht den Code schwer/komplex. Deshalb wird es da in Zukunft wohl ein GA-Objekt geben das die Adresse, und wenn noch weitere Informationen vorliegen, den Namen der GA beinhaltet.
                Bin aber berufs-, konnekting- und terrassenbaubedingt noch nicht dazu gekommen :-(

                Zur Anbindung von Alexa... Das ist unabhängig von KAD. Da du mit der Plugin-Schnittstelle vollen Zugriff auf den Bus, das Netzwerk, MultiThreading, sowie externe Libs hast, kannst du hier nahezu alles machen.

                Gruß
                Alex

                Kommentar


                  Hallo
                  Vielen Dank.
                  ALEXA läuft schon mit ha-bridge.
                  ha-bridge kann ein HTTP oder Script aufrufen.
                  Das müsste von KAD mit MultiThreading überwachen.
                  Mal sehen wie es weiter geht.
                  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


                    Wenn die bridge einen HTTP Aufruf macht, dann wäre ein Plugin in KAD eigentlich das richtige. Man kann es auch in ein Logik-Script packen, aber in einem Plugin wäre es besser aufgehoben.

                    Beispiele findet man hier:

                    https://github.com/tuxedo0801/KnxAut...lugin-projects

                    Kommentar


                      Hallo
                      Habe leider nichts passendes in den Plugins gefunden.
                      Gehe vielleicht auch von den Falschen Voraussetzungen aus.
                      Wenn man eine HTTP Aufruf Überwachen will braucht man doch ServerSockets
                      Und der Server müsste in einem Thread laufen, er darf nicht unterbrochen werden
                      sonst beschwert sich ha-bridge.
                      Alternativ wäre noch das ha-bridge ein Plugin aufruft und Name der GA und Value mitteilt.
                      Das geht aber wohl nicht.
                      Habe mal mit einem Java Server experimentiert der reagiert aber nach 2 Nachrichten nicht mehr.
                      Code:
                      import java.io.BufferedReader;
                      import java.io.IOException;
                      import java.io.InputStreamReader;
                      import java.io.OutputStreamWriter;
                      import java.net.ServerSocket;
                      import java.net.Socket;
                      
                      public class HelloWorldServer
                          implements Runnable
                      {
                          private final Socket m_socket;
                          private final int m_num;
                      
                          HelloWorldServer( Socket socket, int num )
                          {
                              m_socket = socket;
                              m_num = num;
                      
                              Thread handler = new Thread( this, "handler-" + m_num );
                              handler.start();
                          }
                      
                          public void run()
                          {
                              try
                              {
                                  try
                                  {
                                      System.out.println( m_num + " Connected." );
                                      BufferedReader in = new BufferedReader( new InputStreamReader( m_socket.getInputStream() ) );
                                      OutputStreamWriter out = new OutputStreamWriter( m_socket.getOutputStream() );
                                      out.write( "Welcome connection #" + m_num + "\n\r" );
                                      out.flush();
                      
                                      while ( true )
                                      {
                                          String line = in.readLine();
                                          if ( line == null )
                                          {
                                              System.out.println( m_num + " Closed." );
                                              return;
                                          }
                                          else
                                          {
                                             System.out.println( m_num + " Read: " + line );
                                              if ( line.equals( "exit" ) )
                                              {
                                                  System.out.println( m_num + " Closing Connection." );
                                                  return;
                                              }
                                              //else if ( line.equals( "crash" ) )
                                              //{
                                              //    System.out.println( m_num + " Simulating a crash of the Server..." );
                                              //    Runtime.getRuntime().halt(0);
                                              //}
                                              else
                                              {
                                                  System.out.println( m_num + " Write: echo " + line );
                      
                      
                                                 out.write( "echo " + line + "\n\r" );
                                                  out.flush();
                                              }
                                          }
                                      }
                                  }
                                  finally
                                  {
                                      m_socket.close();
                                  }
                              }
                              catch ( IOException e )
                              {
                                  System.out.println( m_num + " Error: " + e.toString() );
                              }
                          }
                      
                          public static void main( String[] args )
                              throws Exception
                          {
                              int port = 9011;
                              if ( args.length > 0 )
                              {
                                  port = Integer.parseInt( args[0] );
                              }
                              System.out.println( "Accepting connections on port: " + port );
                              int nextNum = 1;
                              ServerSocket serverSocket = new ServerSocket( port );
                              while ( true )
                              {
                                  Socket socket = serverSocket.accept();
                                  HelloWorldServer hw = new HelloWorldServer( socket, nextNum++ );
                              }
                          }
                      }
                      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 jetzt auf UDP umgeschwenkt.
                        Der UDPServer läuft mit Java schon mal ohne Macken.
                        Muss Ihn dann noch in einem Plugin mit Thread Auruf einbauen.
                        Der Aufruf in ALEXA = "ALEXA schalte Lampe Decke EIN"
                        habridge sendet = udp://localhost:9011/Name=Fernsehen%20Deckenbeleuchtung&Value=1
                        Das Java Plugin schaltet dann "Fernsehen Deckenbeleuchtung" EIN
                        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


                          Zitat von NetFritz Beitrag anzeigen
                          Hallo
                          Habe leider nichts passendes in den Plugins gefunden.
                          Gehe vielleicht auch von den Falschen Voraussetzungen aus.
                          Mit Sicherheit :-)

                          Man muss Plugins und LogicScripts unterscheiden.

                          Die Logik-Engine nimmt Scripts und führt sie aus. Die API ist recht schlank und auf die Logik-Engine zugeschnitten.
                          Die Logik-Engine selbst ist aber ein Plugin von KAD.

                          Wie so ein Plugin aufgebaut ist hatte ich ja schon verlinkt.
                          Wenn man "aufwendigere" Dinge braucht (also z.B. einen Webserver oder ähnliches), dann KANN man das in der LogikEngine als Script erledigen. Aber das ist ein wenig über's Ziel der LogikScripts hinaus geschossen. Für so große Dinge bietet es sich an das ganze als Plugin umzusetzen.

                          Kommentar


                            Moin,

                            lebt der KAD noch?

                            http://jenkins.root1.de/job/KnxAutomationDaemon/lastStableBuild/de.root1.kad$kad-distribution/
                            scheint es nicht mehr zu geben


                            und Maven kann die Abhängigkeiten nicht auflösen.
                            [WARNING] Could not transfer metadata de.root1:slicknx:2.0.0-SNAPSHOT/maven-metadata.xml from/to root1-releases (http://maven.root1.de/repository/releases/): Failed to transfer file: http://maven.root1.de/repository/rel...n-metadata.xml. Return code is: 503 , ReasonPhrase:Service Unavailable.

                            Kommentar


                              Gibt's noch, lebt noch. Muss nur die Links mal wieder auf den neusten Stand bringen. Wird aber den einen oder anderen Tag dauern, bin bis zum Wochenende unterwegs.

                              Gruß Alex

                              Kommentar


                                Sorry, da ich Jenkins mittlerweile leid bin (ständig geht was nicht, Config viel zu aufwendig, ...) bin ich mit dem Projekt zu Gitlab umgezogen und baue dort gerade die Build-Pipeline auf.

                                https://gitlab.com/tuxedo0801/KnxAutomationDaemon

                                Dauert noch ein wenig bis ich alle Dependencies von mir da nachgezogen und ebenfalls mit einer entsprechenden Pipeline versehen habe.
                                Stay tuned ...

                                Kommentar

                                Lädt...
                                X