This is an automated email from the ASF dual-hosted git repository.

cgarcia pushed a commit to branch feature/merlot
in repository https://gitbox.apache.org/repos/asf/plc4x-extras.git


The following commit(s) were added to refs/heads/feature/merlot by this push:
     new 06ca509  HTC Support test.
06ca509 is described below

commit 06ca50935c131e3195cc33bb9c33f340bad650c1
Author: César García <[email protected]>
AuthorDate: Thu Apr 9 10:23:08 2026 -0400

    HTC Support test.
---
 .../org.apache.plc4x.merlot.archiver/pom.xml       | 41 +++++++------------
 .../archiver/core/MerlotPBRawSerializer.java       | 46 +++++++++++++++++++---
 .../impl/MerlotDataBrowserRTGetDataPVImpl.java     |  2 +-
 .../merlot/archiver/impl/MerlotHtcRTImpl.java      | 30 ++++++++++----
 4 files changed, 79 insertions(+), 40 deletions(-)

diff --git a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/pom.xml 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/pom.xml
index 3441e75..e5ca887 100644
--- a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/pom.xml
+++ b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/pom.xml
@@ -140,6 +140,11 @@
             <artifactId>org.osgi.compendium</artifactId>
             <version>5.0.0</version>
         </dependency>
+        <dependency>
+            <groupId>org.epics</groupId>
+            <artifactId>epics-util</artifactId>
+            <version>1.0.8</version>
+        </dependency>        
         <dependency>
             <groupId>org.epics</groupId>
             <artifactId>gpclient</artifactId>
@@ -156,36 +161,15 @@
             <artifactId>gpclient-sim</artifactId>
             <version>1.0.8</version>
         </dependency>
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-            <version>3.17.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.epics</groupId>
-            <artifactId>epics-ntypes</artifactId>
-            <version>0.3.9</version>
-        </dependency>
-        <dependency>
-            <groupId>org.epics</groupId>
-            <artifactId>vtype</artifactId>
-            <version>1.0.7</version>
-        </dependency>
-        <dependency>
-            <groupId>org.epics</groupId>
-            <artifactId>epics-vtype-all</artifactId>
-            <version>1.0.7</version>
-            <type>pom</type>
-        </dependency>
-        <dependency>
-            <groupId>org.epics</groupId>
-            <artifactId>vtype-json</artifactId>
-            <version>2.9.0</version>
-        </dependency>
         <dependency>
             <groupId>org.epics</groupId>
             <artifactId>gpclient-core</artifactId>
             <version>1.0.8</version>
+        </dependency>                      
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.17.0</version>
         </dependency>
         <dependency>
             <groupId>javax.servlet</groupId>
@@ -242,5 +226,10 @@
             <artifactId>org.apache.plc4x.merlot.api</artifactId>
             <version>0.13.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>org.epics</groupId>
+            <artifactId>vtype</artifactId>
+            <version>1.0.8</version>
+        </dependency>
     </dependencies>
 </project>
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/core/MerlotPBRawSerializer.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/core/MerlotPBRawSerializer.java
index b608511..51af9f8 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/core/MerlotPBRawSerializer.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/core/MerlotPBRawSerializer.java
@@ -20,8 +20,12 @@ import org.apache.plc4x.merlot.api.PB.EPICSEvent;
 import org.epics.vtype.VType;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.time.Instant;
+import java.time.ZoneId;
 import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
 import java.util.List;
+import org.apache.plc4x.merlot.api.PB.EPICSEvent.ScalarDouble;
 import org.epics.vtype.VDouble;
 
 
@@ -62,19 +66,51 @@ public final class MerlotPBRawSerializer {
                         .getTime()
                         .getTimestamp()
                         .atOffset(ZoneOffset.UTC).getYear())
-                .setElementCount(events.size())
+                .setElementCount(1)
                 .build();
 
-        info.writeDelimitedTo(out);
-
+//        info.writeDelimitedTo(out);
+        out.write(info.toByteArray());
+        out.write('\n');  
+        
+//        
+//            // Tiempo actual
+//            Instant now = Instant.now();
+//            ZonedDateTime zdt = now.atZone(ZoneId.systemDefault());
+//
+//            int year = zdt.getYear();
+//
+//            int secondsIntoYear
+//                    = (zdt.getDayOfYear() - 1) * 86400
+//                    + zdt.getHour() * 3600
+//                    + zdt.getMinute() * 60
+//                    + zdt.getSecond();        
+        
+        
         // 2. Serializar cada evento VType usando la factoría 
MerlotPayloadMapping 
         for (VType vType : events) {
             Object pbEvent = MerlotPayloadMapping.createEvent(vType);
 
             if (pbEvent != null) {
-                writeEventToStream(out, pbEvent);
+//                writeEventToStream(out, pbEvent);
+                out.write(((ScalarDouble) pbEvent).toByteArray());
+                
+                out.write('\n');  
             }
         }
+//        
+//            ScalarDouble event = ScalarDouble.newBuilder()
+//                    .setSecondsintoyear(secondsIntoYear)
+//                    .setNano(zdt.getNano())
+//                    .setVal(10.0)
+//                    .setSeverity(0)
+//                    .setStatus(0)
+//                    .build();
+//
+//            out.write(event.toByteArray());        
+        
+        
+        out.flush();
     }
 
     /**
@@ -87,7 +123,7 @@ public final class MerlotPBRawSerializer {
             // Manejo manual de varint si no es un mensaje directo de Protobuf
             byte[] bytes = serializeToBytes(pbEvent);
             if (bytes != null) {
-                writeVarint32(out, bytes.length);
+//                writeVarint32(out, bytes.length);
                 out.write(bytes);
                 out.write(0x0A);                
             }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotDataBrowserRTGetDataPVImpl.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotDataBrowserRTGetDataPVImpl.java
index a5973c0..a83a76b 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotDataBrowserRTGetDataPVImpl.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotDataBrowserRTGetDataPVImpl.java
@@ -63,7 +63,7 @@ public class MerlotDataBrowserRTGetDataPVImpl extends 
HttpServlet {
         if ((null == pvs) || (pvs.length == 0)) return;
                         
         LOGGER.info(pvs[0] + " : " + from + " : " + to);
-               
+        resp.setContentType("application/octet-stream");
         for (String pv:pvs){
             opti_matcher    = opti_pattern.matcher(pv);
             ncount_matcher  = ncount_pattern.matcher(pv);
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotHtcRTImpl.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotHtcRTImpl.java
index aadba4f..017077c 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotHtcRTImpl.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotHtcRTImpl.java
@@ -17,7 +17,6 @@
 package org.apache.plc4x.merlot.archiver.impl;
 
 import java.time.Instant;
-import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatterBuilder;
 import java.util.HashSet;
@@ -34,10 +33,12 @@ import org.epics.gpclient.GPClientInstance;
 import org.epics.gpclient.PVEvent;
 import org.epics.gpclient.PVReader;
 import org.epics.gpclient.datasource.CompositeDataSource;
+import org.epics.vtype.Time;
 import org.epics.vtype.VDouble;
 import org.epics.vtype.VType;
 import org.slf4j.LoggerFactory;
 
+
 /**
  *
  * @author cgarcia
@@ -59,7 +60,7 @@ public class MerlotHtcRTImpl implements MerlotHtc {
 
     private Map<String, PVReader<VType>> readerPvs = new ConcurrentHashMap<>();
     private Map<String, CircularFifoQueue<VType>> pvs = new 
ConcurrentHashMap<>();
-
+    
     GPClientInstance gpClient;
     
 
@@ -90,7 +91,7 @@ public class MerlotHtcRTImpl implements MerlotHtc {
     public void addPV(String strPV, Double maxRate) {
         
         PVReader<VType> pv ;
-        CircularFifoQueue<VType> queue = new CircularFifoQueue<VType>(2400);   
     
+        CircularFifoQueue<VType> queue = new CircularFifoQueue<VType>(5000);   
     
         pvs.put(strPV, queue);
         String strPVA = "pva://" + strPV.trim();
         
@@ -102,8 +103,7 @@ public class MerlotHtcRTImpl implements MerlotHtc {
                 })
                 .start();
         
-        readerPvs.put(strPV, pv);        
-                
+        readerPvs.put(strPV, pv);          
     }
 
     @Override
@@ -136,13 +136,27 @@ public class MerlotHtcRTImpl implements MerlotHtc {
         Instant fin    = Instant.parse(end);
        
         var queue = pvs.get(strPV);
-
-        return queue.stream()              
+        List<VType> listPVs = queue.stream()              
             .filter(v -> {
                     Instant fecha = ((VDouble) v).getTime().getTimestamp();
                     return !fecha.isBefore(inicio) && !fecha.isAfter(fin);     
                   
             })
-            .collect(Collectors.toList());                
+            .collect(Collectors.toList());   
+        if (listPVs.size() == 0) {
+            System.out.println("Tamaño es cero.");
+            VType lastvalue = queue.get(0);
+            VDouble valorOriginal = (VDouble) lastvalue;
+            Time tv = Time.of(Instant.parse(init));
+            // 3. Re-empaquetar el valor usando ValueFactory
+            VDouble valorModificado = VDouble.of(
+                    valorOriginal.getValue(),
+                    valorOriginal.getAlarm(),
+                    tv,
+                    valorOriginal.getDisplay());
+            listPVs.add(valorModificado);
+        }
+
+        return listPVs;             
     }
 
     @Override

Reply via email to