Zum Hauptinhalt springen

5. Site-Service

Greifen Sie über client.site() zu. Eine Site (Werk) ist ein Asset-Knoten auf der Ebene direkt unter dem Unternehmen (asset_type=S); alle OPC, Assets, Tags und Orders sind einer Site zugeordnet.

Pro Installation gibt es nur ein Unternehmen. Die enterprise_id der Site verweist auf dieses Unternehmen, und das Elternelement des Site-Knotens ist somit das Unternehmen. Der Versuch, ein zweites Unternehmen zu erstellen oder das einzige vorhandene Unternehmen zu löschen, wird mit 409(enterprise.only_one) abgelehnt — Name und Attribute können jedoch geändert werden.

ID-Regel: Präfix SITE_ ist obligatorisch. Weitere Details finden Sie unter Domain-ID-Regeln.

5.1 Methodenübersicht​

MethodeRückgabetypHTTPEndpunkt
create(SiteRequestV5)SiteResponseV5 oder nullPOST/api/v5/site
update(site_id, SiteRequestV5)SiteResponseV5 oder nullPUT/api/v5/site/{id}
delete(site_id)booleanDELETE/api/v5/site/{id}
get(site_id)SiteResponseV5 oder nullGET/api/v5/site/{id}
list()List<SiteResponseV5>GET/api/v5/site
exists(site_id)booleanGET/api/v5/site/{id}/exists

5.2 SiteRequestV5 (Request DTO)​

FeldTypErforderlichBeschreibung
site_idString✅Beginnt mit SITE_
site_nameString✅Site-Name
descriptionString-Beschreibung
lat / lngString-Breitengrad/Längengrad (für Karten)
enterprise_idString-Unternehmens-ID (ISA-95 Enterprise, z. B. ENTERPRISE_01)
site_codeString-Werks-Code gemäß ERP/MES (max. 50 Zeichen)
operational_status_codeString-Betriebszustand — PLANNED · COMMISSIONING · IN_OPERATION · STANDBY · OUT_OF_SERVICE · DECOMMISSIONED
external_system / external_idString-Kennungen anderer Systeme für diesen Knoten. Beide müssen gemeinsam befüllt oder gemeinsam leer sein
timezoneString-IANA-Zeitzone. Wenn leer, wird die Installationszeitzone (PP_TZ) verwendet
countryString-ISO 3166-1 alpha-2 Ländercode
addressString-Adresse (max. 500 Zeichen)

5.3 SiteResponseV5 (Response DTO)​

Obige Request-Felder + folgende Zusatzfelder:

FeldTypBeschreibung
insert_date / update_dateStringZeitpunkt der Registrierung/Änderung
total_area_countintAnzahl der Areas der Site
total_line_countintAnzahl der Lines
total_equipment_countintAnzahl der Equipments
total_tag_countintAnzahl der Tags

5.4 Anwendungsbeispiele​

Site erstellen​

import plantpulse.api.v5.dto.request.SiteRequestV5;
import plantpulse.api.v5.dto.response.SiteResponseV5;

SiteRequestV5 req = new SiteRequestV5();
req.setSite_id("SITE_DJ");
req.setSite_name("대전 1공장");
req.setDescription("주력 생산 공장");
req.setLat("36.3504");
req.setLng("127.3845");

SiteResponseV5 created = client.site().create(req);
if (created != null) {
System.out.println("등록 완료: " + created.getSite_id());
}

Einzelabfrage​

SiteResponseV5 site = client.site().get("SITE_DJ");
if (site != null) {
System.out.println(site.getSite_name());
System.out.println("Area 수: " + site.getTotal_area_count());
System.out.println("Line 수: " + site.getTotal_line_count());
System.out.println("Equipment 수: " + site.getTotal_equipment_count());
System.out.println("Tag 수: " + site.getTotal_tag_count());
}

Gesamtliste​

import java.util.List;

List<SiteResponseV5> sites = client.site().list();
for (SiteResponseV5 s : sites) {
System.out.println(s.getSite_id() + " — " + s.getSite_name());
}

Site ändern​

SiteRequestV5 update = new SiteRequestV5();
update.setSite_id("SITE_DJ"); // 동일하게 채워서 보내야 합니다
update.setSite_name("대전 1공장 (확장)");
update.setDescription("2026년 라인 증설 완료");

SiteResponseV5 updated = client.site().update("SITE_DJ", update);

Existenz prüfen​

if (client.site().exists("SITE_DJ")) {
// ...
}

Site löschen​

⚠️ Vor dem Löschen einer Site müssen alle zugehörigen Assets, OPCs, Tags und Orders gelöscht werden. Andernfalls wird eine E1200 (CONFLICT)-Antwort mit false zurückgegeben.

boolean ok = client.site().delete("SITE_OLD");
if (!ok) {
System.err.println("삭제 실패 — 하위 리소스 존재 가능");
}

5.5 Anwendungsszenarien​

Szenario — KPI-Dashboard pro Site​

for (SiteResponseV5 site : client.site().list()) {
String siteId = site.getSite_id();

// 사이트별 자산 통계는 SiteResponseV5에 이미 포함됨
int eqCount = site.getTotal_equipment_count();
int tagCount = site.getTotal_tag_count();

// 사이트별 OPC 수
long opcCount = client.opc().countBySite(siteId);

System.out.printf("%s — Equipment %d, Tag %d, OPC %d%n",
site.getSite_name(), eqCount, tagCount, opcCount);
}

Nächste Schritte​