Ankündigung

Einklappen
Keine Ankündigung bisher.

Logikengine, java powered

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

    Kam an. Ich schau's mir an.

    Kommentar


      Erstelle im kad-Verzeichnis mal ein Verzeichnis namens "cache" und starte KAD neu.

      Nach dem Start sollte sich darin eine "KnxProjectCache.dat" befinden, die XML enthält. Dort enthalten sind alle GA Namen mit DPT und GA-Adressen die KAD aus dem KNX-Projekt sowie der user-xml extrahieren konnte.

      Habs noch nicht überprüft, aber dadurch dass wohl das Cache-Verzeichnis nicht vorhanden ist und die Implementierung dies wohl (fälschlicherweise) auch nicht anlegt, wird er mit den GAs etc. durcheinander kommen. Werde das versuchen zu reproduzieren und ich passe auch den Code dahingehend an, dass das Verzeichnis angelegt wird wenn es fehlt.

      Kommentar


        Hallo
        Das Hauptverzeichnis "kad" habe ich auch schon angelegt.
        Nach dem ich das Verzeichnis "cache" angelegt habe bekomme ich auch die ersten Werte angezeigt.
        Ich habe aus der ETS 4 jede Menge GAs ohne DPTs sind entstanden bei der Konvertierung irgendwie von ETS 2 -> ETS 3 -> ETS 4.
        Habe sie in der ETS nicht unbedingt gebraucht , ja die ETS ja mit den 1Bit und 2Byte Werten auch so klar kommt.
        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


          Man kann das auch direkt in der ETS nachpflegen statt in der User XML. Einfach auf die GA gehen und ein verbundenes KO anklicken. In den Eigenschaften kann man dann dem KO sagen was dir ein DPT dahinter steckt. Und das landet dann im exportierten Projekt.

          Die Ursache für diesen Missstand liegt in den meisten Fällen an der Produktdatenbank des Herstellers. Der war dann zu faul das KO genau genug zu spezifizieren.

          Kommentar


            Hallo
            Man kann das auch direkt in der ETS nachpflegen statt in der User XML
            Das ist mir schon klar, ich brauche die ETS4 bloß nicht mehr, benutze die ETS5.
            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 hat da soweit ich weiß das gleiche Problem.

              Kommentar


                Hallo
                So bin vom Wochenendurlaub von der Nordsee zurück.

                In der "KnxProjectCache.dat" werden bei mir die GAs ohne DPTs als dpt="-1.-01" eingetragen.
                Code:
                <groupaddress ga="1/5/17" dpt="-1.-01" name="WP AI Störung" />
                Dadurch in der Konsole
                Code:
                2016-10-09 18:51:12.782 WARNING [Calimero link notifier] de.root1.kad.knxservice.KnxServiceImpl$1.processEvent: Error converting data to String with DPT-1.-01. event=GroupAddressEvent{source=1.1.254, destination=1/5/17, data=[0], type=GROUP_WRITE} ga=1/5/17 gaName='WP AI Störung'
                de.root1.slicknx.KnxFormatException: main number not found for -1.-01
                        at de.root1.slicknx.GroupAddressEvent.asString(GroupAddressEvent.java:278)
                        at de.root1.kad.knxservice.KnxServiceImpl$1.processEvent(KnxServiceImpl.java:93)
                        at de.root1.kad.knxservice.KnxServiceImpl$1.write(KnxServiceImpl.java:129)
                        at de.root1.slicknx.GeneralGroupAddressListener.convertAndForward(GeneralGroupAddressListener.java:70)
                        at de.root1.slicknx.GeneralGroupAddressListener.groupWrite(GeneralGroupAddressListener.java:133)
                        at de.root1.slicknx.SlicKnxProcessCommunicatorImpl$NLListener.fireGroupReadWrite(SlicKnxProcessCommunicatorImpl.java:102)
                        at de.root1.slicknx.SlicKnxProcessCommunicatorImpl$NLListener.indication(SlicKnxProcessCommunicatorImpl.java:84)
                        at tuwien.auto.calimero.link.EventNotifier$Indication.invoke(EventNotifier.java:80)
                        at tuwien.auto.calimero.link.EventNotifier.fire(EventNotifier.java:201)
                        at tuwien.auto.calimero.link.EventNotifier.run(EventNotifier.java:141)
                Caused by: tuwien.auto.calimero.exception.KNXException: main number not found for -1.-01
                        at tuwien.auto.calimero.dptxlator.TranslatorTypes.createTranslator(TranslatorTypes.java:514)
                        at de.root1.slicknx.GroupAddressEvent.asString(GroupAddressEvent.java:274)
                        ... 9 more
                Mir ist auch noch aufgefallen das bei Build 02 | KAD Distribution 1.0.0-Beta1 (06.10.2016 15:52:25)
                die Datei "KnxProjectCache.dat" bei jedem Neustart beschrieben wird, es wird immer die Ausgabe angehängt.
                Das war bei der vorigen Version nicht.

                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 ZIP das du mir geschickt hast, enthält keine DPT Infos zu 1/5/15... Nur den GA Namen.

                  in /conf/knxproject.knxproj.user.xml finde ich:

                  Code:
                    <ga address="1/5/17" dpt="">
                      <!-- "WP AI Störung" -->
                    </ga>
                  Daraus ergibt sich dann in /cache/KnxProjectCache.dat der Eintrag

                  Code:
                   
                   <groupaddress ga="1/5/17" dpt="-1.-01" name="WP AI Störung" />
                  Die Anwendung kann mit dem Fehler leben und macht weiter. Ja, die Fehlermeldung ist unschön, aber so ist das halt im Beta-Stadium :-) Ich bau da noch einen Try/Catch ei der das abfängt und leserlich loggt was Sache ist. Versprochen.

                  Aber wenn du auf die GA angewiesen bist, dann solltest du in der .user.xml den DPT nachtragen. Dann wird dieser auch in die KnxProjectCache.dat übernommen und kann verwendet werden.

                  Wie gesagt: Es ist kein Fehler die DPTs in der ETS nachzupflegen. Auch wenn KAD aktuell nur ETS4 kann, du aber eigentlich ETS5 benutzt: Für später macht es Sinn die GAs mit korrekten DPTs zu versehen...

                  Kommentar


                    Hallo
                    Habe ein paar GAs in der ETS 4 mit DTP versehen.
                    In "LogicLightAutoOff.java" die GA Namen auf meine GAs geändert.
                    Es geht, Klasse feine Arbeit, Vielen Dank.

                    Im gleichen Verzeichniss eine neue Datei "WriteInfluxDB.java" erstellt.
                    Da soll in eine InfluxDB Value und Timestamp eingetragen werden.
                    Die GAs sind vom DPT 9.001.
                    Wie mache ich das, bin ich auf den richtigen Weg ?

                    In der Ausgabe finde ich "WriteInfluxDB.java" nicht.
                    Code:
                    package samplescripts;
                    
                    import de.root1.kad.knxservice.KnxServiceException;
                    import de.root1.kad.logicplugin.Logic;
                    
                    /**
                     *
                     * @author NetFritz 10/16
                     */
                    public class WriteInfluxDB extends Logic {
                    
                        String gaInfluxDB1 = "T Solar Rücklauf";
                        String gaInfluxDB2 = "T Solarspeicher oben";
                        String gaInfluxDB3 = "T Solarspeicher mitte";
                        String gaInfluxDB4 = "T Solarspeicher unten";
                    
                        @Override
                        public void init() {
                            listenTo(gaInfluxDB1);
                            listenTo(gaInfluxDB2);
                            listenTo(gaInfluxDB3);
                            listenTo(gaInfluxDB4);
                        }
                    
                        @Override
                        public void onDataWrite(String ga, String value) throws KnxServiceException {
                        // public void knxEvent(GroupAddressEvent event) throws KnxException {
                             log.info("------------------InfluxDB Event GA: -------------------");
                             log.info("GA {},Value {}", ga, value);
                    
                             // so wird mit Perl in die InfluxDB geschrieben
                             // pv_db ist Datenbankname , test ist Tabellenname , $ga_name ist der Spaltenname und $value der einzutragene Wert
                             // system("curl -i -XPOST 'http://192.168.2.74:8086/write?db=pv_db' --data-binary 'test $ga_name=$value $time'");
                        }    
                    }
                    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 Klasse muss nicht "WriteInfluxDB.java" sondern "LogicWriteInfluxDB.java" heissen. Dann siehst du beim start von KAD dass diese Logik auch gestartet wird.

                      Kommentar


                        Hallo
                        ja habe ich inzwischen auch gesehen.
                        Danke NetFritz
                        Als Ausgabe vom "LogicWriteInfluxDB.java" bekomme ich:
                        2016-10-12 15:06:36.290 INFO [KnxServiceOndataForwarding#1] samplescripts.LogicWriteInfluxDB.onDataWrite: ------------------InfluxDB Event GA: -------------------
                        2016-10-12 15:06:36.303 INFO [KnxServiceOndataForwarding#1] samplescripts.LogicWriteInfluxDB.onDataWrite: GA T Solarspeicher unten,Value 26.72
                        Jetzt nur noch in die InfluxDB eintragen.
                        Zuletzt geändert von NetFritz; 12.10.2016, 14:15.
                        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
                          Zur Info.
                          Seit 15.10.2016 läuft Build 02 | KAD Distribution 1.0.0-Beta1 (10.10.2016 15:59:13)
                          nun und schreibt die Werte der PV-Anlage in InbfluxDB.
                          Nochmal Danke 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


                            Super. Glückwunsch. Du bist damit der erste produktiv Benutzer von KAD. Magst du deine Logik vllt. Posten? So als praktisches Beispiel für andere?

                            Kommentar


                              Hallo

                              Meine Logik besteht z.Z. noch aus 2 Scripts 1 mal java und 1 mal ein Perl.
                              Perl Script deswegen weil ich noch keinen Weg gefunden habe
                              "curl -i -XPOST 'http://192.168.2.74:8086/write?db=pv_db' --data-binary 'test $GAname=$GAvalue $r_time'"
                              in java zu coden.
                              Gruß NetFritz

                              LogicWriteInfluxDB.java
                              Code:
                              ackage samplescripts;
                              
                              import de.root1.kad.knxservice.KnxServiceException;
                              import de.root1.kad.logicplugin.Logic;
                              import java.io.*;
                              /**
                               *
                               * @author NetFritz 10/16
                               */
                              public class LogicWriteInfluxDB extends Logic {
                              
                                  String gaInfluxDB1 = "PV Tagesertrag";
                                  String gaInfluxDB2 = "Haushalt_W";
                                  String gaInfluxDB3 = "PV_W";
                                  @Override
                                  public void init() {
                                      listenTo(gaInfluxDB1);
                                      listenTo(gaInfluxDB2);
                                      listenTo(gaInfluxDB3);
                                  }
                              
                                  @Override
                                  public void onDataWrite(String ga, String value) throws KnxServiceException {
                                       String str1 = ga.replaceAll(" ","_"); // Leerzeichen durch _ ersetzen
                                       log.info("GA= {},Value= {}", str1, value);
                                       String excestr = "/var/www/myhouse/influxdb/write_influxdb.pl ";
                                       excestr = excestr + str1 + " " + value;
                                       log.info("excestr= {}",excestr);
                                       try {
                                            Runtime.getRuntime().exec(excestr);
                                           }
                                       catch(java.io.IOException e) {
                                           log.info("InfluxDB Fehler");
                                       }
                                 }    
                              }
                              write_influxdb.pl
                              Code:
                              #!/usr/bin/perl
                              my $GAname = $ARGV[0];
                              my $GAvalue = $ARGV[1];
                              $t = localtime;
                              my $inpath = '/var/log/influxdb.log';
                              open (DATEI, ">>$inpath") or die $!;
                              my $tstp = int(time());
                              my $r_time = "$tstp"."000000000";
                              print "GAname= $GAname GAvalue= $GAvalue tr_time= $r_time \n";
                              my $ll = system("curl -i -XPOST 'http://192.168.2.74:8086/write?db=pv_db' --data-binary 'test $GAname=$GAvalue $r_time'");
                              print DATEI "$t  GAname=  $GAname GAvalue= $GAvalue ll= $ll \n";
                              close (DATEI);
                              KAD wird beim Rechnerstart von Cron augerufen.
                              Code:
                               @reboot  root  /opt/kad/startup.sh >> /var/log/kad.log 2>&1
                              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


                                Um mit Java HTTP POST zu machen und Parameter im Header zu senden, hat mir immer dieser Codeschnipsel geholfen:

                                http://www.java2s.com/Tutorial/Java/...aJavaClass.htm

                                Wenn es keine Header-Parameter braucht: Weglassen, und direkt in den Stream schreiben.

                                Kommentar

                                Lädt...
                                X