Qt6 Migration: Complete migration with DDS/RTI support and build validation

Major Changes:
- Merged latest Qt5 devel content from dlbo (292 files changed, 7 new dirs)
- Consolidated forward-declarations and include folders
- Removed unneeded modules per Niklas' repo check list

Build System Fixes:
- Fixed CMake VERSION_GREATER syntax in ParticipantManagement/CMakeLists.txt
- Added VLC packages (libvlc-dev, vlc-plugin-base) to docker_build.sh
- Added PostgreSQL dev packages (libpq-dev, postgresql-server-dev-all) to Dockerfile
- Fixed locale warnings (ANSI_X3.4-1968 → C.UTF-8)
- Fixed ArcGIS SDK path warnings when BUILD_ARCGIS=OFF

Code Generation Fixes:
- Fixed IDL enum collisions (PortType→CorePortType/DdsutPortType, PdmEventType)
- Fixed Grantlee template svc_translation.cpp.grantlee:
  - Changed {{ idl_enum.name }}_def:: to {{ idl_enum.name }}::
  - Fixed .underlying() calls for C++11 scoped enums (enum class)
- Removed generated files from repo (moc_*, *_dtc.h, *_ftc.h)

Validation:
- BUILD_RTI=ON: SUCCESS
- BUILD_RTI=OFF: SUCCESS
- C++17 standard maintained for RTI 7.7 compatibility
- Ubuntu 26.04 Docker environment verified

Remaining Warnings (expected):
- BgViewer, KDChart, KDReports, Poppler-Qt6 not found (optional features)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
torstenandCopilot committed 2026-09-15 18:20:26 +00:00
1 parent f23384bb68
commit 7173785915
18662 files changed
+4115092 -5435

No files matched your search

@@ -0,0 +1,17 @@
#
# $Id$
# $HeadURL$
# $Author$
#
SET(SCRIPTS
infrastructure.html
)
SET(JS
js/infrastructure.js
)
NGL_INSTALL(AAR SV FILES ${SCRIPTS} DESTINATION testing/InfrastructureManagement)
NGL_INSTALL(AAR SV FILES ${JS} DESTINATION testing/InfrastructureManagement/js)
@@ -0,0 +1,32 @@
/* Spaltenbreite */
.columnstyle {
width: 600px;
height: 600px;
column-width: 200px;
}
/* Spaltenanzahl */
.columnstyle {
width: 600px;
height: 600px;
column-count: 3;
}
/* Abstand und Trennlinie */
.columnstyle {
width: 600px;
height: 600px;
column-count: 3;
column-gap: 10px;
}
.columnstyle {
width: 600px;
height: 600px;
column-count: 3;
column-rule-color: red;
column-rule-width: 1px;
column-rule-style: dotted;
}
@@ -0,0 +1,572 @@
<!DOCTYPE HTML>
<meta charset="utf-8" />
<html>
<head>
<title>Infrastructure</title>
<style>
th {
text-align: left;
}
table {
text-align: left;
table-layout: fixed;
width: 100%;
}
</style>
<link href="css/columnlayout.css" rel="stylesheet">
<script type="text/javascript" src="js/infrastructure.js"></script>
</head>
<body>
<!-- divFunctions -->
<hr>
<table style="width:40.5%" id="HeaderTable">
<tr id="HeaderTableRow">
<td>
<div id="WebSocketStart">
<input type="button" id="create" value="Connect to Server" onclick="WebSocketTest()">
</div>
</td>
<td>
<form>
<input type="text" value="EXCTDS01:2080" id="ipadresse" />
</form>
</td>
<td>
<div id="Serverconnect">
<font color="red">
Server: not connected
</font>
</div>
</td>
</tr>
</table>
<hr>
<H1>Mounting Points</H1>
<table>
<th>
<H2>BT 56</H2>
</th>
<th>
<H2>BT 575</H2>
</th>
<th>
<H2>BT 576</H2>
</th>
<th>
<H2>BT 577</H2>
</th>
<tr>
<td>
<a href="Documents/BT56neuBSM.pdf">Mounting Points BSM</a>
<br>
<a href="Documents/BT56neuIPS.pdf">Mounting Points IPS</a>
<br>
</td>
<td>
<a href="Documents/BT575/BT575_GSM.pdf">Mounting Points GSM</a>
<br>
<a href="Documents/BT575/BT575E_IPS.pdf">Mounting Points E IPS</a>
<br>
<a href="Documents/BT575/BT575O_IPS.pdf">Mounting Points 0 IPS</a>
<br>
</td>
<td>
<a href="Documents/BT576/BT576_GSM.pdf">Mounting Points GSM</a>
<br>
<a href="Documents/BT576/BT576_IPS.pdf">Mounting Points IPS</a>
<br>
</td>
<td>
<a href="Documents/BT577/BT577GSM.pdf">Mounting Points GSM</a>
<br>
<a href="Documents/BT577/BT577IPS.pdf">Mounting Points IPS</a>
<br>
</td>
</tr>
</table>
<input type="button" value="Show/Hide functions" onclick="toggle('divFunctions');return false">
<hr>
<div style="display: none" id="divFunctions">
<h2>Mount by ID's</h2>
<label type="number" for="mount_mountingPointId">Mounting Point Id:</label>
<input id="mount_mountingPointId" name="mount_mountingPointId">
<label type="number" for="mount_assetId"></label>
Asset Id:
<input id="mount_assetId" name="mount_assetId">
<input type="button" id="sendMount" value="Send mount" onclick="sendMount()">
<h2>Mount by tag</h2>
<label type="text" for="mountTag_mountingPointTag">Mounting Point tag:</label>
<input id="mountTag_mountingPointTag" name="mountTag_mountingPointTag">
<label type="text" for="mountTag_assetTag">
Asset tag:
</label>
<input id="mountTag_assetTag" name="mountTag_assetTag">
<input type="button" id="sendMountTag" value="Send mountTag" onclick="sendMountTag()">
<h2>Unmount asset</h2>
<label type="number" for="unmountAsset_assetId"></label>
<label>
Asset ID:
</label>
<input id="unmountAsset_assetId" name="unmountAsset_assetId">
<input type="button" id="unmountAsset" value="Send unmountAsset" onclick="sendUnmountAsset()">
<h2>Unmount mounting point</h2>
<label type="number" for="unmountMountingPoint_assetId">
Mounting Point ID:
</label>
<input id="unmountMountingPoint_mountingPointId" name="unmountMountingPoint_mountingPointId">
<input type="button" id="unmountMountingPoint" value="Send unmountMountingPoint" onclick="sendUnmountMountingPoint()">
<h2>Unmount object (=building)</h2>
<label type="number" for="unmountObject_objectId">
Object ID:
</label>
<input id="unmountObject_objectId" name="unmountObject_objectId">
<input type="button" id="unmountObject" value="Send unmountObject" onclick="sendUnmountObject()">
<h2>Unmount area</h2>
<label type="number" for="unmountArea_areaId">
Area ID:
</label>
<input id="unmountArea_areaId" name="unmountArea_areaId">
<input type="button" id="unmountArea" value="Send unmountArea" onclick="sendUnmountArea()">
<h2>Object mounting ready</h2>
<label type="number" for="objectMountingReady_plannedMountingId">Planned mounting ID:</label>
<input id="objectMountingReady_plannedMountingId" name="objectMountingReady_plannedMountingId">
<label type="number" for="objectMountingReady_objectId">
Object ID:
</label>
<input id="objectMountingReady_objectId" name="objectMountingReady_objectId">
<input type="button" id="objectMountingReady" value="Send objectMountingReady" onclick="sendObjectMountingReady()">
<h2>Get asset state</h2>
<label type="number" for="getAssetState_assetId">Asset ID:
</label>
<input id="getAssetState_assetId" name="getAssetState_assetId">
<label type="text" for="getAssetState_assetTag">
Asset tag:
</label>
<input id="getAssetState_assetTag" name="getAssetState_assetTag">
<input type="button" id="getAssetState" value="Send getAssetState" onclick="sendGetAssetState()">
<h2>Get building state</h2>
<label type="number" for="getBuildingState_buildingId">
Building ID:</label>
<input id="getBuildingState_buildingId" name="getBuildingState_buildingId">
<input type="button" id="getBuildingState" value="Send getBuildingState" onclick="sendGetBuildingStateManually()">
<hr>
<div id="sendGet">
<input type="button" id="GetEssentials" value="GetEssentials" onclick="sendGetEssentials()">
<input type="button" id="SendGetBuildingState" value="GetBuildingState" onclick="sendGetBuildingState(1)">
<input type="button" id="SendGetAssets" value="GetAssets" onclick="sendGetAssets()">
</div>
<!-- sendGet -->
<h2>Mounten für Faule -- USE WITH CAUTION!</h2>
<input type="button" id="mountingHack" value="send mounting hack" onclick="mountingHackForBldg56Ref()">
</div>
<!-- divFunctions -->
<H2>Select Building</H2>
<form name="BuildingForm" id="BuildingForm">
<table>
<div class="columnstyle">
<p id="rbBuildings">
</div>
</table>
<input type="button" id="Submit" value="Submit" onclick="checkedBuilding(document.BuildingForm.bg)">
</form>
<hr>
<H1 id="BuildingTable">No Building selected</h1>
<div style="display: none" id="mountAssets">
<!-- Choose Asset Type -->
<h2>Choose Asset Type</h2>
<form action="#">
<label>AssetType:
<select name="AssetTypes" onchange="selectAssetType(this.value)" id="selectAsset">
<option value=1>BuildingSensorModule</option>
<!--<option value=2>BuildingControlUnit</option>-->
<option value=3>OutdoorCamera</option>
<option value=4>IndoorCamera</option>
<option value=5>OutdoorIPS</option>
<option value=6>IndoorIPS</option>
<option value=7>MeteoDataUnit</option>
<option value=10>AnnouncementUnit</option>
<option value=12>EffectGenerationControlUnit</option>
<option value=13>OutdoorControlUnit</option>
<option value=14>BuildingNetworkSwitch</option>
</select>
</label>
</form>
<!-- Mount BSM's-->
<div style="display: none" id="divBuildingSensorModule">
<H2>Mount BSM </H2>
Assign BSM to Mountpoint:
<form name="MountFormBsm" id="MountFormBsm">
<table style="width:50.0%">
<tr>
<th>
Mountpoint
</th>
<th>
Asset
</th>
</tr>
<tr>
<td>
<p id="rbMountPointsBsm">
</td>
<td>
<div class="columnstyle">
<p id="rbAssetsBsm">
</div>
</td>
</tr>
</table>
<input type="button" id="Mount" value="Mount" onclick="sendMountAssets(document.MountFormBsm.mp, document.MountFormBsm.ASSET)">
</form>
</div>
<!--divBuildingSensorModule-->
<!-- Mount BCU's-->
<div style="display: none" id="divBuildingControlUnit">
<H2>Mount BCU </H2>
Assign BCU to Mountpoint:
<form name="MountFormBcu" id="MountFormBcu">
<table style="width:30.0%">
<tr>
<th>
Mountpoint
</th>
<th>
Asset
</th>
</tr>
<tr>
<td>
<p id="rbMountPointsBcu">
</td>
<td>
<div class="columnstyle">
<p id="rbAssetsBcu">
</div>
</td>
</tr>
</table>
<input type="button" id="Mount" value="Mount" onclick="sendMountAssets(document.MountFormBcu.mp, document.MountFormBcu.ASSET)">
</form>
</div>
<!--divBuildingControlUnit-->
<!-- Mount IPS in's-->
<div style="display: none" id="divIndoorIPS">
<H2>Mount IPS In</H2>
Assign IPS In to Mountpoint:
<form name="MountFormIpsIn" id="MountFormIpsIn">
<table style="width:30.0%">
<tr>
<th>
Mountpoint
</th>
<th>
Asset
</th>
</tr>
<tr>
<td>
<p id="rbMountPointsIpsIn">
</td>
<td>
<div class="columnstyle">
<p id="rbAssetsIpsIn">
</p>
</div>
</td>
</tr>
</table>
<input type="button" id="Mount" value="Mount" onclick="sendMountAssets(document.MountFormIpsIn.mp, document.MountFormIpsIn.ASSET)">
</form>
</div>
<!--divIndoorIPS-->
<!-- Mount IPS Out -->
<div style="display: none" id="divOutdoorIPS">
<H2>Mount IPS Out</H2>
Assign IPS Out to Mountpoint:
<form name="MountFormIpsOut" id="MountFormIpsOut">
<table style="width:30.0%">
<tr>
<th>
Mountpoint
</th>
<th>
Asset
</th>
</tr>
<tr>
<td>
<p id="rbMountPointsIpsOut">
</td>
<td>
<div class="columnstyle">
<p id="rbAssetsIpsOut">
</div>
</td>
</tr>
</table>
<input type="button" id="Mount" value="Mount" onclick="sendMountAssets(document.MountFormIpsOut.mp, document.MountFormIpsOut.ASSET)">
</form>
</div>
<!--divOutdoorIPS-->
<!-- Mount Cameras-->
<div style="display: none" id="divIndoorCamera">
<H2>Mount Camera In</H2>
Assign Camera in to Mountpoint:
<form name="MountFormCameraIn" id="MountFormCameraIn">
<table style="width:30.0%">
<tr>
<th>
Mountpoint
</th>
<th>
Asset
</th>
</tr>
<tr>
<td>
<p id="rbMountPointsCameraIn">
</td>
<td>
<div class="columnstyle">
<p id="rbAssetsCameraIn">
</div>
</td>
</tr>
</table>
<input type="button" id="Mount" value="Mount" onclick="sendMountAssets(document.MountFormCameraIn.mp, document.MountFormCameraIn.ASSET)">
</form>
</div>
<!--divIndoorCamera-->
<!-- Mount Cameras-->
<div style="display: none" id="divOutdoorCamera">
<H2>Mount Camera Out</H2>
Assign Camera in to Mountpoint:
<form name="MountFormCameraOut" id="MountFormCameraOut">
<table style="width:30.0%">
<tr>
<th>
Mountpoint
</th>
<th>
Asset
</th>
</tr>
<tr>
<td>
<p id="rbMountPointsCameraOut">
</td>
<td>
<div class="columnstyle">
<p id="rbAssetsCameraOut">
</div>
</td>
</tr>
</table>
<input type="button" id="Mount" value="Mount" onclick="sendMountAssets(document.MountFormCameraOut.mp, document.MountFormCameraOut.ASSET)">
</form>
</div>
<!--divOutdoorCamera-->
<!-- MDU-->
<div style="display: none" id="divMeteoDataUnit">
<H2>Mount Meteo Data Unit</H2>
Assign Meteo Data Unit to Mountpoint:
<form name="MountFormMdu" id="MountFormMdu">
<table style="width:30.0%">
<tr>
<th>
Mountpoint
</th>
<th>
Asset
</th>
</tr>
<tr>
<td>
<p id="rbMountPointsMdu">
</td>
<td>
<div class="columnstyle">
<p id="rbAssetsMdu">
</div>
</td>
</tr>
</table>
<input type="button" id="Mount" value="Mount" onclick="sendMountAssets(document.MountFormMdu.mp, document.MountFormMdu.ASSET)">
</form>
</div>
<!--divMeteoDataUnit-->
<!-- Announcemenmt-->
<div style="display: none" id="divAnnouncementUnit">
<H2>Mount AnnouncementUnit </H2>
Assign AnnouncementUnit to Mountpoint:
<form name="MountFormAnnouncement" id="MountFormAnnouncement">
<table style="width:30.0%">
<tr>
<th>
Mountpoint
</th>
<th>
Asset
</th>
</tr>
<tr>
<td>
<p id="rbMountPointsAnnouncement">
</td>
<td>
<div class="columnstyle">
<p id="rbAssetsAnnouncement">
</div>
</td>
</tr>
</table>
<input type="button" id="Mount" value="Mount" onclick="sendMountAssets(document.MountFormAnnouncement.mp, document.MountFormAnnouncement.ASSET)">
</form>
</div>
<!--divAnnouncementUnit-->
<!-- EGCU-->
<div style="display: none" id="divEffectGenerationControlUnit">
<H2>Mount Effect Generation Unit</H2>
Assign Effect Generation Unit to Mountpoint:
<form name="MountFormEgcu" id="MountFormEgcu">
<table style="width:30.0%">
<tr>
<th>
Mountpoint
</th>
<th>
Asset
</th>
</tr>
<tr>
<td>
<p id="rbMountPointsEgcu">
</td>
<td>
<div class="columnstyle">
<p id="rbAssetsEgcu">
</div>
</td>
</tr>
</table>
<input type="button" id="Mount" value="Mount" onclick="sendMountAssets(document.MountFormEgcu.mp, document.MountFormEgcu.ASSET)">
</form>
</div>
<!--divEffectGenerationControlUnit-->
<!-- OCU-->
<div style="display: none" id="divOutdoorControlUnit">
<H2>Mount Outdoor Control Unit</H2>
Assign Outdoor Control Unit to Mountpoint:
<form name="MountFormOcu" id="MountFormOcu">
<table style="width:30.0%">
<tr>
<th>
Mountpoint
</th>
<th>
Asset
</th>
</tr>
<tr>
<td>
<p id="rbMountPointsOcu">
</td>
<td>
<div class="columnstyle">
<p id="rbAssetsOcu">
</div>
</td>
</tr>
</table>
<input type="button" id="Mount" value="Mount" onclick="sendMountAssets(document.MountFormOcu.mp, document.MountFormOcu.ASSET)">
</form>
</div>
<!--divEffectGenerationControlUnit-->
<div style="display: none" id="divBuildingNetworkSwitch">
<H2>Mount Building Network Switch</H2>
Assign Building Network Switch to Mountpoint:
<form name="MountFormBns" id="MountFormBns">
<table style="width:30.0%">
<tr>
<th>
Mountpoint
</th>
<th>
Asset
</th>
</tr>
<tr>
<td>
<p id="rbMountPointsBuildingNetworkSwitch">
</td>
<td>
<div class="columnstyle">
<p id="rbAssetsBuildingNetworkSwitch">
</div>
</td>
</tr>
</table>
<input type="button" id="Mount" value="Mount" onclick="sendMountAssets(document.MountFormBns.mp, document.MountFormBns.ASSET)">
</form>
</div>
<!-- Unmount -->
<hr>
<H2>unmount Asset</h2>
<table id="AssetStateTable">
</table>
<hr>
<input type="button" value="Show/Hide Details" onclick="toggle('divText');return false">
<div style="display: none" id="divText">
<H1>Area</h1>
<p id="area">
<hr>
<H1>Asset State</h1>
<p id="assetState">
<hr>
<H1>Asset State Object</h1>
<p id="assetStateObject">
<hr>
<H1>Assets</h1>
<p id="assets">
<hr>
<H1>Asset Type</h1>
<p id="assetType">
<hr>
<H1>Error</h1>
<p id="error">
<hr>
<H1>Level</h1>
<p id="level">
<hr>
<H2>Mount Point Table</H2>
<table id="mountingPointTable">
</table>
<p id="mountingPoint">
<hr>
<H1>Object</h1>
<p id="object">
<hr>
<H1>Object Mounting</h1>
<p id="objectMounting">
<hr>
<H1>Ok</h1>
<p id="ok">
<hr>
<H1>Planned Mounting</h1>
<p id="plannedMounting">
<hr>
<H1>Room</h1>
<p id="room">
<hr>
<H1>Training Area
</h1>
<p id="trainingArea">
<body/>
</div>
<!-- divText -->
</html>
@@ -0,0 +1,834 @@
'use strict';
var exampleSocket;
var SelBranchVal = "";
var connectedToServer = false;
var assetType = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]; // Todo Eintraege beim fuellen erstellen.
var buildingsArr = [];
var assetsArrBsm = [];
var assetsArrBcu = [];
var assetsArrIpsIn = [];
var assetsArrIpsOut = [];
var assetsArrCameraIn = [];
var assetsArrCameraOut = [];
var assetsArrMdu = [];
var assetsArrEgcu = [];
var assetsArrAnnouncements = [];
var assetsArrBuildingNetworkSwitch = [];
var mountPointArr = [];
var objectArr = [];
var buildingId = -1;
var tempType = 1;
var collator = new Intl.Collator(undefined, {
numeric: true,
sensitivity: "base"
});
function sortEntries(a, b)
{
return collator.compare(a.designation, b.designation);
}
window.onload = function () {
WebSocketTest();
}
function debug() {
console.log("BSMAssets: " + assetsArrBsm);
console.log("BCUAssets: " + assetsArrBcu);
console.log("IpsInAssets; " + assetsArrIpsIn);
console.log("IpsOutAssets: " + assetsArrIpsOut);
console.log("CameraInAssets: " + assetsArrCameraIn);
console.log("CameraOutAssets: " + assetsArrCameraOut);
console.log("MDUAssets: " + assetsArrMdu);
console.log("EGCUAssets: " + assetsArrEgcu);
console.log("AnnouncementAssets: " + assetsArrAnnouncements);
console.log("BuildingNetworkSwitch: " + assetsArrBuildingNetworkSwitch);
console.log("Buildings: " + buildingsArr);
}
function WebSocketTest() {
if ("WebSocket" in window) {
{
var ipadresse = document.getElementById("ipadresse").value;
exampleSocket = new WebSocket("ws://" + ipadresse);
connectedToServer = true;
}
exampleSocket.onopen = function () {
document.getElementById("Serverconnect").innerHTML = "Server: connected";
document.getElementById("Serverconnect").style.color = "green"
sendGetEssentials();//sendet Anfrage erhält obj mit arrays der Essentials
document.getElementById('selectAsset').value = 1;
};
//wird immer aufgerufen wenn der Socket eine Nachricht vom Server empfängt
exampleSocket.onmessage = function (event) {
var msg = JSON.parse(event.data);
console.log (JSON.stringify(msg));
console.log (JSON.stringify(event));
switch (msg.type) {
case "essentials":
objectArr = []
buildingsArr = []
msg.data.objects.forEach(element => {
var bg = {
designation: element.designation,
id: element.id
};
objectArr.push(bg);
buildingsArr.push(element.designation);
});
createBuildingsHtml();
var html = ""
msg.data.areas.forEach(element => {
html += JSON.stringify(element) + "<br>"
});
document.getElementById("area").innerHTML = html;
html = ""
msg.data.trainingAreas.forEach(element => {
html += JSON.stringify(element) + "<br>"
});
document.getElementById("trainingArea").innerHTML = html;
handleMountingPoint(msg.data.mountingPoints);
//console.log("essentials finish");
break;
case "assets":
console.log("msg=");
console.log(msg);
handleAssets(msg);
break;
case "assetStateObject":
html = JSON.stringify(msg) + "<br>"
document.getElementById("assetStateObject").innerHTML = html;
handleAssetStateObject(msg);
break;
default:
break;
}
};
exampleSocket.onclose = function () {
// websocket is closed.
document.getElementById("Serverconnect").innerHTML = "Server: not connected";
document.getElementById("Serverconnect").style.color = "grey";
document.getElementById("Wlsconnect").innerHTML = "Wls: not connected";
document.getElementById("Wlsconnect").style.color = "red";
connectedToServer = false;
alert("Connection to Server closed.");
};
}
else {
// The browser doesn't support WebSocket
alert("WebSocket is NOT supported by your Browser!");
}
}
function update() {
switch (tempType)
{
case 1: updateBsm(); break;
case 2: updateBcu(); break;
case 3: updateCameraOut(); break;
case 4: updateCameraIn(); break;
case 5: updateIpsOut(); break;
case 6: updateIpsIn(); break;
case 7: updateMdu(); break;
case 10: updateAnnouncement(); break;
case 12: updateEgcu(); break;
case 14: updateBuildingNetworkSwitch(); break;
}
}
function checkedBuilding(rObj) {
//array der radiobuttons abfragen
clearAssetArrays();
setBuilding(rObj.value);
return false;
}
function findIdByDesignation(arr, designation)
{
for (var i = 0; i < arr.length; i++) {
if (designation == arr[i].designation) {
return arr[i].id;
}
}
return -1;
}
async function setBuilding(building) {
buildingId = findIdByDesignation(objectArr, building);
document.getElementById("BuildingTable").innerHTML = building;
sendGetAssets();//schickt anfragen an den Server
sendGetEssentials();
sendGetBuildingState();
show('mountAssets');
}
function sendMountAssets(MountingPoints, Assets) {
var mountPoint = document.querySelector('input[name="mp"]:checked').value;
//console.log("Asset="+document.querySelector('input[name="ASSET"]:checked').value);
var asset = document.querySelector('input[name="ASSET"]:checked').value;
var mountPointId = findIdByDesignation(mountPointArr, mountPoint);
var assetId = findIdByDesignation(assetsArrBsm, asset);
if (assetId < 0)
assetId = findIdByDesignation(assetsArrBcu, asset);
if (assetId < 0)
assetId = findIdByDesignation(assetsArrIpsIn, asset);
if (assetId < 0)
assetId = findIdByDesignation(assetsArrIpsOut, asset);
if (assetId < 0)
assetId = findIdByDesignation(assetsArrCameraIn, asset);
if (assetId < 0)
assetId = findIdByDesignation(assetsArrCameraOut, asset);
if (assetId < 0)
assetId = findIdByDesignation(assetsArrMdu, asset);
if (assetId < 0)
assetId = findIdByDesignation(assetsArrAnnouncements, asset);
if (assetId < 0)
assetId = findIdByDesignation(assetsArrEgcu, asset);
if (assetId < 0)
assetId = findIdByDesignation(assetsArrBuildingNetworkSwitch, asset);
if ((mountPointId > 0) && (assetId > 0)) {
var message = JSON.stringify({
type: "mount",
uuid: "UUID",
data: {
mountingPointId: mountPointId,
assetId: assetId
}
});
} else {
return;
}
console.log(message);
exampleSocket.send(message);
sendGetEssentials();
sendGetBuildingState();
sendGetAssets();
document.querySelector('#rbMountPointsBsm').innerHTML = "";
document.querySelector('#rbMountPointsBcu').innerHTML = "";
document.querySelector('#rbMountPointsIpsIn').innerHTML = "";
document.querySelector('#rbMountPointsIpsOut').innerHTML = "";
document.querySelector('#rbMountPointsCameraIn').innerHTML = "";
document.querySelector('#rbMountPointsCameraOut').innerHTML = "";
document.querySelector('#rbMountPointsMdu').innerHTML = "";
document.querySelector('#rbMountPointsAnnouncement').innerHTML = "";
document.querySelector('#rbMountPointsEgcu').innerHTML = "";
document.querySelector('#rbMountPointsBuildingNetworkSwitch').innerHTML = "";
}
function sendMount() {
var mountingPointId = String(mount_mountingPointId.value);
var assetId = String(mount_assetId.value);
if (mountingPointId.length == 0)
mountingPointId = null;
else
mountingPointId = Number(mountingPointId);
if (assetId.length == 0)
assetId = null;
else
assetId = Number(assetId);
message = JSON.stringify({
type: "mount",
uuid: "UUID",
data: {
mountingPointId: mountingPointId,
assetId: assetId
}
});
exampleSocket.send(message);
sendGetAssets();
sendGetBuildingState();
sendGetEssentials();
}
function mountingHackForBldg56Ref() {
var messages = ['{"type":"mount","uuid":"UUID","data":{"mountingPointId":36,"assetId":10}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":40,"assetId":11}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":45,"assetId":12}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":53,"assetId":13}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":31,"assetId":31}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":56,"assetId":32}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":51,"assetId":33}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":64,"assetId":34}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":88,"assetId":35}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":83,"assetId":36}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":54,"assetId":23}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":61,"assetId":24}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":46,"assetId":25}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":34,"assetId":22}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":67,"assetId":29}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":92,"assetId":26}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":85,"assetId":27}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":77,"assetId":21}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":89,"assetId":28}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":18,"assetId":50}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":19,"assetId":51}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":20,"assetId":52}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":21,"assetId":53}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":22,"assetId":54}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":23,"assetId":55}}',
'{"type":"mount","uuid":"UUID","data":{"mountingPointId":27,"assetId":41}}'];
function sendMessage(message) {
exampleSocket.send(message);
}
messages.forEach(sendMessage);
}
function sendMountTag() {
//console.log("sendMountTag ");
var mountingPointTag = String(mountTag_mountingPointTag.value);
//console.log(mountTag_mountingPointTag.value);
if (mountingPointTag.length == 0)
mountingPointTag = null;
var assetTag = String(mountTag_assetTag.value);
if (assetTag.length == 0)
assetTag = null;
exampleSocket.send(JSON.stringify({
type: "mountTag",
uuid: "UUID",
data: {
mountingPointTag: mountingPointTag,
assetTag: assetTag
}
}));
}
function sendUnmountAsset() {
//console.log("sendUnmountAsset ");
exampleSocket.send(JSON.stringify({
type: "unmountAsset",
uuid: "UUID",
data: {
assetId: Number(unmountAsset_assetId.value)
}
}));
sendGetEssentials();
sendGetBuildingState();
sendGetAssets();
}
function sendUnmountMountingPoint() {
//console.log("sendUnmountMountingPoint ");
exampleSocket.send(JSON.stringify({
type: "unmountMountingPoint",
uuid: "UUID",
data: {
mountingPointId: Number(unmountMountingPoint_mountingPointId.value)
}
}));
sendGetEssentials();
sendGetBuildingState();
sendGetAssets();
}
//---------noch nicht funktionsfähig/getestet----------//
function sendUnmountObject() {
//console.log("sendUnmountObject ");js/infrastructure.js:219
exampleSocket.send(JSON.stringify({
type: "unmountObject",
uuid: "UUID",
data: {
objectId: Number(unmountObject_objectId.value)
}
}));
}
function sendUnmountArea() {
//console.log("sendUnmountArea ");
exampleSocket.send(JSON.stringify({
type: "unmountArea",
uuid: "UUID",
data: {
areaId: Number(unmountArea_areaId.value)
}
}));
}
function sendObjectMountingReady() {
//console.log("sendObjectMountingReady ");
exampleSocket.send(JSON.stringify({
type: "objectMountingReady",
uuid: "UUID",
data: {
plannedMountingId: Number(objectMountingReady_plannedMountingId.value),
objectId: Number(objectMountingReady_objectId.value)
}
}));
}
function sendGetAssetState() {
var assetTag = String(getAssetState_assetTag.value);
if (assetTag.length == 0)
assetTag = null;
exampleSocket.send(JSON.stringify({
type: "getAssetState",
uuid: "UUID",
data: {
assetId: Number(getAssetState_assetId.value),
assetTag: assetTag
}
}));
}
function sendGetBuildingStateManually() {
//console.log("sendGetBuildingState ");
exampleSocket.send(JSON.stringify({
type: "getBuildingState",
uuid: "UUID",
data: {
buildingId: Number(getBuildingState_buildingId.value)
}
}));
}
function sendGetBuildingState() {
exampleSocket.send(JSON.stringify({
type: "getBuildingState",
uuid: "UUID",
data: {
buildingId: buildingId
}
}));
}
//--------------------------------------------------------//
function sendGetAssets() {
//exampleSocket schickt eine Abfrage an den Server
//liefert das asset mit der TypId zurück
// BSM
exampleSocket.send(JSON.stringify({
type: "getAssets",
uuid: "UUID",
data: {
assetTypeId: [1, 2, 3, 4, 5, 6, 10, 12, 14]
}
}));
}
function sendGetEssentials() {
mountPointArr = [];
initMountingPointTable();
document.getElementById("area").innerHTML = "";
document.getElementById("assetState").innerHTML = "";
document.getElementById("assetStateObject").innerHTML = "";
document.getElementById("assetType").innerHTML = "";
document.getElementById("error").innerHTML = "";
document.getElementById("level").innerHTML = "";
document.getElementById("mountingPoint").innerHTML = "";
document.getElementById("object").innerHTML = "";
document.getElementById("objectMounting").innerHTML = "";
document.getElementById("ok").innerHTML = "";
document.getElementById("plannedMounting").innerHTML = "";
document.getElementById("room").innerHTML = "";
document.getElementById("trainingArea").innerHTML = "";
exampleSocket.send(JSON.stringify({
type: "getEssentials",
uuid: "UUID"
}));
}
async function sendUnmountAssetById(id) {
exampleSocket.send(JSON.stringify({
type: "unmountAsset",
uuid: "UUID",
data: {
assetId: id
}
}));
sendGetEssentials();
sendGetBuildingState();
sendGetAssets();
}
function handleAssetStateObject(msg) {
var table = "";
var assetDesignator = "";
var mountPointDesignation = "";
table += "<tr><th>assetId</th>";
table += "<th>assetTypeId</th>";
// table += "<th>assetType</th>";
table += "<th>ipAddr</th>";
table += "<th>mountingPointId</th>";
table += "<th>state</th>";
table += "<th>unmount</th></tr>";
// no assetsArrBcu - they are internal and must not be unmounted
const items = [assetsArrBsm, assetsArrIpsIn, assetsArrIpsOut,
assetsArrCameraIn, assetsArrCameraOut, assetsArrMdu, assetsArrEgcu, assetsArrBuildingNetworkSwitch];
msg.data.assetStates.forEach(asset => {
var assetIdToSearchFor = asset.assetId;
var assetDesignator = null;
for (var i = 0; i < items.length; i++) {
var searchedAsset = items[i].find(entry => {
return (entry.id == assetIdToSearchFor);
});
if (searchedAsset)
{
assetDesignator = searchedAsset.designation;
break;
}
}
if (assetDesignator) {
table += "<tr>";
table += "<td>" + assetDesignator;
table += " (" + asset.assetId + ")</td>";
table += "<td>" + asset.assetTypeId + "</td>";
// table += "<td>" + assetType[asset.assetTypeId] + "</td>";
table += "<td>" + asset.ipAddr + "</td>";
for (var i = 0; i < mountPointArr.length; i++) {
if (mountPointArr[i].id == asset.mountingPointId) {
mountPointDesignation = mountPointArr[i].designation;
break;
}
}
table += "<td>" + mountPointDesignation;
table += " (" + asset.mountingPointId + ")</td>";
table += "<td>" + asset.state + "</td>";
var id = asset.assetId;
table += "<td><input type=\"button\" id=\"unmount\" value=\"unmount\" onclick=\"Javascript:sendUnmountAssetById(" + id + ")\"></td>";
table += "</tr>";
}
});
document.querySelector('#AssetStateTable').innerHTML = table;
}
// Assets: Speichern aller Assets
function handleAssets(msg) {
clearAssetArrays();
document.querySelector('#rbAssetsBsm').innerHTML = "";
document.querySelector('#rbAssetsBcu').innerHTML = "";
document.querySelector('#rbAssetsCameraOut').innerHTML = "";
document.querySelector('#rbAssetsCameraIn').innerHTML = "";
document.querySelector('#rbAssetsIpsIn').innerHTML = "";
document.querySelector('#rbAssetsIpsOut').innerHTML = "";
document.querySelector('#rbAssetsMdu').innerHTML = "";
document.querySelector('#rbAssetsAnnouncement').innerHTML = "";
document.querySelector('#rbAssetsEgcu').innerHTML = "";
document.querySelector('#rbAssetsBuildingNetworkSwitch').innerHTML = "";
msg.data.forEach(msg => {
switch (msg.assetTypeId)
{
case 1: assetsArrBsm.push(msg);
console.log("push assetsArrBsm");
break;
case 2: assetsArrBcu.push(msg); break;
case 3: assetsArrCameraOut.push(msg); break;
case 4: assetsArrCameraIn.push(msg); break;
case 5:
case 6: assetsArrIpsIn.push(msg);
assetsArrIpsOut.push(msg); break;
case 7: assetsArrMdu.push(msg); break;
case 10: assetsArrAnnouncements.push(msg); break;
case 12: assetsArrEgcu.push(msg); break;
case 14: assetsArrBuildingNetworkSwitch.push(msg);
console.log("push assetsArrBuildingNetworkSwitch");
break;
default: console.log("Unknown assetTypeId: " + msg);
}
});
update();
}
function clearAssetArrays() {
assetsArrBsm = [];
assetsArrBcu = [];
assetsArrIpsIn = [];
assetsArrIpsOut = [];
assetsArrCameraIn = [];
assetsArrCameraOut = [];
assetsArrMdu = [];
assetsArrEgcu = [];
assetsArrAnnouncements = [];
assetsArrBuildingNetworkSwitch = [];
}
function initMountingPointTable() {
var table = "";
table += "<tr><th>assetId</th>";
table += "<th>designation</th>";
table += "<th>id</th>";
table += "<th>levelId</th>";
table += "<th>objectId</th>";
table += "<th>supportedAssetTypeIds</th>";
table += "</tr>";
document.querySelector('#mountingPointTable').innerHTML = table;
}
function createRadioButtonHtml(arr, type)
{
function createHtml(entry)
{
return "<input type=\"radio\" name=\"mp\" value=\"" + entry.designation + "\"> " + entry.designation + "<br>";
}
var html = "";
arr.sort(sortEntries);
arr.forEach(entry => {
if (entry.assetId < 0 && entry.supportedAssetTypeIds[0] == type) {
html += createHtml(entry);
}
});
return html;
}
function createRadioButtonAssetHtml(arr)
{
function createHtml(entry)
{
return "<input type=\"radio\" name=\"ASSET\" value=\"" + entry.designation + "\"> " + entry.designation + "<br>";
}
var html = "";
arr.sort(sortEntries);
arr.forEach(entry => {
console.log(entry);
//if (entry.state == "Unmounted") {
if (entry.mountingPointId == -1) {
html += createHtml(entry);
}
});
return html;
}
// BSM's mounten
// Radio-Buttons zur Auswahl von BSM's und Assets
function updateBsm() {
document.querySelector('#rbMountPointsBsm').innerHTML
= createRadioButtonHtml(mountPointArr, 1); // Only BSM
document.querySelector('#rbAssetsBsm').innerHTML
= createRadioButtonAssetHtml(assetsArrBsm);
}
// BCU's mounten
// Radio-Buttons zur Auswahl von BCU's und Assets
function updateBcu() {
console.log("updateBcu");
console.log(assetsArrBcu.length);
document.querySelector('#rbMountPointsBcu').innerHTML
= createRadioButtonHtml(mountPointArr, 2); // Only BCU
document.querySelector('#rbAssetsBcu').innerHTML
= createRadioButtonAssetHtml(assetsArrBcu);
}
// Radio-Buttons zur Auswahl von IPS's und Assets
function updateIpsIn() {
document.querySelector('#rbMountPointsIpsIn').innerHTML
= createRadioButtonHtml(mountPointArr, 6); // Only IPS In
document.querySelector('#rbAssetsIpsIn').innerHTML
= createRadioButtonAssetHtml(assetsArrIpsIn);
}
// Radio-Buttons zur Auswahl von IPS's und Assets
function updateIpsOut() {
document.querySelector('#rbMountPointsIpsOut').innerHTML
= createRadioButtonHtml(mountPointArr, 5); // Only IPS Out
document.querySelector('#rbAssetsIpsOut').innerHTML
= createRadioButtonAssetHtml(assetsArrIpsOut);
}
// Radio-Buttons zur Auswahl von Indoor Cameras und Assets
function updateCameraIn() {
document.querySelector('#rbMountPointsCameraIn').innerHTML
= createRadioButtonHtml(mountPointArr, 4); // Only Camera In
document.querySelector('#rbAssetsCameraIn').innerHTML
= createRadioButtonAssetHtml(assetsArrCameraIn);
}
// Radio-Buttons zur Auswahl von Outdoor Cameras und Assets
function updateCameraOut() {
document.querySelector('#rbMountPointsCameraOut').innerHTML
= createRadioButtonHtml(mountPointArr, 3); // Only Camera Out
document.querySelector('#rbAssetsCameraOut').innerHTML
= createRadioButtonAssetHtml(assetsArrCameraOut);
}
// Radio-Buttons zur Auswahl von Indoor Cameras und Assets
function updateMdu() {
document.querySelector('#rbMountPointsMdu').innerHTML
= createRadioButtonHtml(mountPointArr, 7); // Only Meteo Data Unit
document.querySelector('#rbAssetsMdu').innerHTML
= createRadioButtonAssetHtml(assetsArrMdu);
}
// Radio-Buttons zur Auswahl von EGCU's
function updateEgcu() {
document.querySelector('#rbMountPointsEgcu').innerHTML
= createRadioButtonHtml(mountPointArr, 12); // Only EGCU
document.querySelector('#rbAssetsEgcu').innerHTML
= createRadioButtonAssetHtml(assetsArrEgcu);
}
// Radio-Buttons zur Auswahl von AnnouncementUnits
function updateAnnouncement() {
document.querySelector('#rbMountPointsAnnouncement').innerHTML
= createRadioButtonHtml(mountPointArr, 10); // Only AnnouncementUnits
document.querySelector('#rbAssetsAnnouncement').innerHTML
= createRadioButtonAssetHtml(assetsArrAnnouncements);
}
// Radio-Buttons zur Auswahl von BuildingNetworkSwitch
function updateBuildingNetworkSwitch() {
console.log("updateBuildingNetworkSwitch");
console.log(assetsArrBuildingNetworkSwitch.length);
document.querySelector('#rbMountPointsBuildingNetworkSwitch').innerHTML
= createRadioButtonHtml(mountPointArr, 14); // Only BuildingNetworkSwitch
document.querySelector('#rbAssetsBuildingNetworkSwitch').innerHTML
= createRadioButtonAssetHtml(assetsArrBuildingNetworkSwitch);
}
function handleMountingPoint(msg) {
if (buildingId == -1)
return;
mountPointArr = []
msg.forEach(function(obj) {
if (obj.objectId == buildingId) {
var mp = {
assetId: obj.assetId,
designation: obj.designation,
id: obj.id,
levelId: obj.levelId,
objectId: obj.objectId,
supportedAssetTypeIds: obj.supportedAssetTypeIds
};
mountPointArr.push(mp);
}
});
mountPointArr.sort(sortEntries);
var header = "<tr>";
header += "<th>assetId</th>";
header += "<th>designation</th>";
header += "<th>id</th>";
header += "<th>levelId</th>";
header += "<th>objectId</th>";
header += "<th>supportedAssetTypeIds</th>";
header += "</tr>";
mountPointArr.forEach(function (entry) {
header += "<tr>";
header += "<td>" + entry.assetId + "</td>";
header += "<td>" + entry.designation + "</td>";
header += "<td>" + entry.id + "</td>";
header += "<td>" + entry.levelId + "</td>";
header += "<td>" + entry.objectId + "</td>";
header += "<td>" + entry.supportedAssetTypeIds + "</td>";
header += "</tr>";
});
document.querySelector('#mountingPointTable').innerHTML = header;
selectAssetType(tempType);
}
function createBuildingsHtml() {
buildingsArr.sort();
var rows = "";
buildingsArr.forEach(building => {
//console.log("buildingsArr[" + i + "]=" + buildingsArr[i] + " buildingCounter=" + buildingCounter);
rows += "<input type=\"radio\" name=\"bg\" value=\"";
rows += building;
rows += "\" id= \"";
rows += building;
rows += "\"> ";
rows += building;
rows += "<br>";
});
document.getElementById("rbBuildings").innerHTML = rows
}
function show(id) {
if (document.getElementById) {
var mydiv = document.getElementById(id);
mydiv.style.display = "block";
}
}
function toggle(id) {
if (document.getElementById) {
var mydiv = document.getElementById(id);
mydiv.style.display = (mydiv.style.display == 'block' ? 'none' : 'block');
}
}
function selectAssetType(type) {
type = Number(type);
tempType = type;
document.getElementById('divBuildingSensorModule').style.display = 'none';
document.getElementById('divBuildingControlUnit').style.display = 'none';
document.getElementById('divOutdoorCamera').style.display = 'none';
document.getElementById('divIndoorCamera').style.display = 'none';
document.getElementById('divOutdoorIPS').style.display = 'none';
document.getElementById('divIndoorIPS').style.display = 'none';
document.getElementById('divAnnouncementUnit').style.display = 'none';
document.getElementById('divMeteoDataUnit').style.display = 'none';
document.getElementById('divEffectGenerationControlUnit').style.display = 'none';
document.getElementById('divOutdoorControlUnit').style.display = 'none';
document.getElementById('divBuildingNetworkSwitch').style.display = 'none';
switch (type) {
case 1:
document.getElementById('divBuildingSensorModule').style.display = 'block';
break;
case 2:
document.getElementById('divBuildingControlUnit').style.display = 'block';
break;
case 3:
document.getElementById('divOutdoorCamera').style.display = 'block';
break;
case 4:
document.getElementById('divIndoorCamera').style.display = 'block';
break;
case 5:
document.getElementById('divOutdoorIPS').style.display = 'block';
break;
case 6:
document.getElementById('divIndoorIPS').style.display = 'block';
break;
case 7:
document.getElementById('divMeteoDataUnit').style.display = 'block';
break;
case 10:
document.getElementById('divAnnouncementUnit').style.display = 'block';
break;
case 12:
document.getElementById('divEffectGenerationControlUnit').style.display = 'block';
break;
case 13:
document.getElementById('divOutdoorControlUnit').style.display = 'block';
break;
case 14:
document.getElementById('divBuildingNetworkSwitch').style.display = 'block';
break;
}
update();
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,58 @@
#!/bin/bash
#
# Das Skript erfüllt die gleiche Funktionalität wie das "Mounten für Faule".
# Das Skritt geht davon aus, dass die virtuelle Umgebung (venv) unter ~/venv3 lokalisiert ist.
#
# 1. Spalte der Tabelle: Geraetename (Wie in Tabelle ism.ism_asset Spalte Name)
# 2. Spalte der Tabelle: Gebaeudename (Wie in Tabelle ism.ism_main_structure_element Spalte Name)
# zwischen den beiden Bezeichnungen " - "
# Name des Anbaupunktes (Wie in Tabelle ism.ism_structure_element_type_id Spalte Name)
#
# @author Christian Fröbel
#
PYTHON=$HOME/venv3/bin/python
this_script=$(realpath "$0")
this_dir=$(dirname "$this_script")
ism_client=$this_dir/ism_client.py
"$PYTHON" "$ism_client" mount-many \
'[["CAM_UBEICE0001", "bldg_56_ref - CAMERA_IN_AP_1"],
["CAM_UBEICE0002", "bldg_56_ref - CAMERA_IN_AP_2"],
["CAM_UBEICE0003", "bldg_56_ref - CAMERA_IN_AP_3"],
["CAM_UBEICE0004", "bldg_56_ref - CAMERA_IN_AP_4"],
["UEPOKAA0001" , "bldg_56_ref - CAMERA_IN_AP_5"],
["UEPOKAI0015" , "bldg_56_ref - CAMERA_IN_AP_6"],
["CAM_UBEICE0006", "bldg_56_ref - CAMERA_IN_AP_7"],
["UEPOKAI0012" , "bldg_56_ref - CAMERA_IN_AP_8"],
["UEPOKAI0014" , "bldg_56_ref - CAMERA_IN_AP_9"],
["UEPOKAI0011" , "bldg_56_ref - CAMERA_IN_AP_10"],
["UEPOKAA0002" , "bldg_56_ref - CAMERA_IN_AP_11"],
["UEPOKAI0013" , "bldg_56_ref - CAMERA_IN_AP_12"],
["CAM_UBEOCE0001", "MP_OUT0001"],
["CAM_UBEOCE0002", "MP_OUT0002"],
["CAM_UBEOCE0003", "MP_OUT0003"],
["Announcement-Unit", "MP_ANNOUNCEMENT_UNIT"],
["BSM_0001", "bldg_56_ref - REF_MOD_AP_1"],
["BSM_0002", "bldg_56_ref - REF_MOD_AP_2"],
["BSM_0003", "bldg_56_ref - REF_MOD_AP_3"],
["BSM_0004", "bldg_56_ref - REF_MOD_AP_4"],
["BSM_0005", "bldg_56_ref - REF_MOD_AP_5"],
["BSM_0006", "bldg_56_ref - REF_MOD_AP_6"],
["IPS-IN_2103", "bldg_56_ref - IPS_IN_AP_6"],
["IPS-IN_2061", "bldg_56_ref - IPS_IN_AP_8"],
["IPS-IN_2101", "bldg_56_ref - IPS_IN_AP_4"],
["IPS-IN_2108", "bldg_56_ref - IPS_IN_AP_1"],
["IPS-IN_2206", "bldg_56_ref - IPS_IN_AP_9"],
["IPS-IN_2071", "bldg_56_ref - IPS_IN_AP_15"],
["IPS-IN_2204", "bldg_56_ref - IPS_IN_AP_13"],
["IPS-IN_2202", "bldg_56_ref - IPS_IN_AP_11"],
["IPS-IN_2052", "bldg_56_ref - IPS_IN_AP_14"],
["IPS-OUT_1101", "bldg_56_ref - IPS_OUT_AP_3"],
["IPS-OUT_1131", "bldg_56_ref - IPS_OUT_AP_4"],
["IPS-OUT_1132", "bldg_56_ref - IPS_OUT_AP_5"],
["IPS-OUT_1121", "bldg_56_ref - IPS_OUT_AP_6"],
["IPS-OUT_1122", "bldg_56_ref - IPS_OUT_AP_7"],
["IPS-OUT_1111", "bldg_56_ref - IPS_OUT_AP_8"],
["EGCU0001", "bldg_56_ref - BDI_P_1"]]'
@@ -0,0 +1,21 @@
ism_client.py benötigt python3 und ein weiteres Modul, welches nicht im Standardumfang enthalten ist.
Dieses Modul kann man sich in eine virtuelle python-Umgebung (virtual env oder kurz venv) installieren.
Das Skript mounting_hack.sh geht davon aus, dass diese python-venv in ~/venv3 lokalisiert ist.
1. Virtuelle Umgebung anlegen:
$ python3 -m venv ~/venv3
2. venv aktivieren
$ source ~/venv3/bin/activate
3. Dependencies installieren.
$ https_proxy=http://<user>:<password>@proxy-rde:8080 pip install -r requirements.txt
(User ist die Rheinmetall-eMail)
4. Optional: Deaktivieren der venv
$ deactivate
Das Skript mounting_hack.sh kann aufgerufen werden, ohne zuvor die venv zu aktivieren.
Will man das python-Skript ism_client.py selbst direkt aufrufen, muss man zuvor die
venv wie oben unter 2 beschrieben aktivieren.
@@ -0,0 +1 @@
websocket-client==0.46.0