diff --git a/docker-compose.yaml b/docker-compose.yaml
new file mode 100755
index 0000000..394f2aa
--- /dev/null
+++ b/docker-compose.yaml
@@ -0,0 +1,21 @@
+services:
+ appRobotHoming:
+ image: node:20-bullseye
+ container_name: appRobot_Homing
+ working_dir: /app
+ volumes:
+ - /home/chk/Documents/appRobotHoming:/app
+ environment:
+ - WSS_VIDEO_DRIVER=wss://localhost:8448
+ - WSS_URL=wss://appRobot_Driver:2095
+ - HTTPS_PORT=2093
+ ports:
+ - "2093:2093"
+ depends_on:
+ - appRobotDriver
+ command: >
+ /bin/bash -lc "npm ci || npm install && node server/server.js"
+ networks:
+ - default
+ restart: unless-stopped
+
\ No newline at end of file
diff --git a/public/client.js b/public/client.js
index 8693f0e..6a8e7d7 100755
--- a/public/client.js
+++ b/public/client.js
@@ -19,12 +19,42 @@
}catch(e){ connEl.textContent = 'unbekannt'; connEl.className = 'badge'; }
}
+ function processDataShortenPosition(data){
+ if(data?.text){
+ try{
+ let obj = JSON.parse(data.text);
+ if(obj?.position){
+ obj.position.x = parseFloat(obj.position.x.toFixed(3));
+ obj.position.y = parseFloat(obj.position.y.toFixed(3));
+ obj.position.z = parseFloat(obj.position.z.toFixed(3));
+ obj.position.a = parseFloat(obj.position.a.toFixed(3));
+ obj.position.b = parseFloat(obj.position.b.toFixed(3));
+ obj.position.c = parseFloat(obj.position.c.toFixed(3));
+ }
+ if(obj?.motorCounts){
+ obj.motorCounts.x = parseFloat(obj.motorCounts.x.toFixed(3));
+ obj.motorCounts.y = parseFloat(obj.motorCounts.y.toFixed(3));
+ obj.motorCounts.z = parseFloat(obj.motorCounts.z.toFixed(3));
+ obj.motorCounts.a = parseFloat(obj.motorCounts.a.toFixed(3));
+ obj.motorCounts.b = parseFloat(obj.motorCounts.b.toFixed(3));
+ obj.motorCounts.c = parseFloat(obj.motorCounts.c.toFixed(3));
+ if(obj.motorCounts.e !== undefined) obj.motorCounts.e = parseFloat(obj.motorCounts.e.toFixed(3));
+ }
+ return "text: " + JSON.stringify(obj);
+ }catch(e){
+ return "text: " + data.text;
+ }
+ }
+ return "";
+ }
+
function connectSSE(){
const es = new EventSource('/api/events');
es.onmessage = (ev)=>{
try{
const p = JSON.parse(ev.data);
- if (p.level === 'msg') append(`WSS → ${p.data?.text ?? ''}`);
+ if (p.level === 'msg' && p.data?.text !== 'Ping') append(`WSS → ${processDataShortenPosition(p.data)}`);
+ //if (p.level === 'msg') append(`WSS → ${processDataShortenPosition(p.data)}`);
else if (p.level === 'tx') append(`TX → ${JSON.stringify(p.data)}`);
else append(`${p.level?.toUpperCase?.()}: ${p.message}`);
}catch{ append(ev.data); }
@@ -60,7 +90,47 @@
});
}
+ async function loadLatestSnapshot() {
+ try {
+ const res = await fetch('/api/latest-snapshot');
+ if (!res.ok) throw new Error('Fehler beim Laden des Snapshots');
+ let data;
+ if (res.headers.get('content-type')?.includes('application/json')) {
+ data = await res.json();
+ } else {
+ const csvData = await res.text();
+ // Fallback: filename aus dem Pfad oder unbekannt, mtime jetzt
+ data = { filename: 'latest.csv', mtime: new Date().toISOString(), content: csvData };
+ }
+ const infoEl = document.getElementById('snapshot-info');
+ const tableEl = document.getElementById('snapshot-table');
+
+ // Info anzeigen
+ const mtime = new Date(data.mtime).toLocaleString();
+ infoEl.textContent = `Datei: ${data.filename} | Erstellt: ${mtime}`;
+
+ // CSV parsen und Tabelle bauen
+ const lines = data.content.trim().split('\n');
+ if (lines.length === 0) {
+ tableEl.innerHTML = '
| Keine Daten |
';
+ return;
+ }
+ const headers = lines[0].split(',');
+ let html = '' + headers.map(h => `| ${h.trim()} | `).join('') + '
';
+ for (let i = 1; i < lines.length; i++) {
+ const cells = lines[i].split(',');
+ html += '' + cells.map(c => `| ${c.trim()} | `).join('') + '
';
+ }
+ html += '';
+ tableEl.innerHTML = html;
+ } catch (err) {
+ document.getElementById('snapshot-info').textContent = 'Fehler: ' + err.message;
+ document.getElementById('snapshot-table').innerHTML = '';
+ }
+ }
+
bindButtons();
connectSSE();
refreshStatus();
+ loadLatestSnapshot();
})();
diff --git a/public/index.html b/public/index.html
index 6182be2..48ef3bc 100755
--- a/public/index.html
+++ b/public/index.html
@@ -33,6 +33,12 @@
+
+
+
+
+
+