Skip to content
Snippets Groups Projects
Commit 26df0a67 authored by Martin Hoppen's avatar Martin Hoppen
Browse files

Demo-Feinspezifikation v1.0

parent 4cdaedbd
No related branches found
No related tags found
No related merge requests found
Pipeline #301627 passed
...@@ -33,38 +33,54 @@ end box ...@@ -33,38 +33,54 @@ end box
== Aufnahme von Notizen (hier: Beobachtung) == == Aufnahme von Notizen (hier: Beobachtung) ==
Waldbesitzer -> WaldmanagerApp: Beobachtung eintragen Waldbesitzer -> WaldmanagerApp: UI-Aktion S3I-Login
activate WaldmanagerApp activate WaldmanagerApp
WaldmanagerApp -> DZ_Wald: Speichern der Beobachtung note over WaldmanagerApp #FF0000
note over DZ_Wald #00FF00 TODO: Christian H. S3I-Login mit individueller ThingId pro Benutzer + Benutzer-Login
-> FM: Umring sollte optional sein, Beispiel in demos/demo_example_finale
end note end note
deactivate WaldmanagerApp
Waldbesitzer -> WaldmanagerApp: UI-Aktion: Beobachtung eintragen
activate WaldmanagerApp
Waldbesitzer -> WaldmanagerApp: UI-Aktion: In DZ Wald speichern
WaldmanagerApp -> DZ_Wald: S3I-SetValueRequest (path=/aas/submodels/{submodel_id}/submodel) mit neuem Submodel Beobachtung; submodel_id selber generieren und BASE64 kodieren
activate DZ_Wald activate DZ_Wald
DZ_Wald --> WaldmanagerApp: gespeichert DZ_Wald --> WaldmanagerApp: S3I-SetValueReply "ok"
deactivate DZ_Wald deactivate DZ_Wald
deactivate WaldmanagerApp deactivate WaldmanagerApp
note over WaldmanagerApp #FF0000
TODO: Klärung submodel_id Format (Igor/Ahmed)
end note
note over DZ_Wald #FF0000
TODO: Log-Ausgaben in DZ-Wald (Ahmed)
end note
== Aufnahme eines Waldweges == == Aufnahme eines Waldweges ==
Waldbesitzer -> WaldmanagerApp: Waldweg abgehen Waldbesitzer -> WaldmanagerApp: Waldweg abgehen
activate WaldmanagerApp note over WaldmanagerApp #FF0000
Waldbesitzer -> WaldmanagerApp: Wendepunkt anlegen TODO: Klärung wie könnte man das in einer Online-Demo präsentieren ("abgehen"?) (Christian H.)
WaldmanagerApp -> DZ_Wald: Speichern des Waldweges
note over DZ_Wald #00FF00
-> FM: wie in Modellierung, Beispiel in demos/demo_example_finale
end note end note
activate WaldmanagerApp
Waldbesitzer -> WaldmanagerApp: UI-Aktion: Wendepunkt anlegen
Waldbesitzer -> WaldmanagerApp: UI-Aktion: In DZ Wald speichern
WaldmanagerApp -> DZ_Wald: S3I-SetValueRequest (path=/aas/submodels/{submodel_id}/submodel) mit neuem Submodel Waldweg; submodel_id selber generieren und BASE64 kodieren
activate DZ_Wald activate DZ_Wald
DZ_Wald --> WaldmanagerApp: gespeichert DZ_Wald --> WaldmanagerApp: S3I-SetValueReply "ok"
deactivate DZ_Wald deactivate DZ_Wald
deactivate WaldmanagerApp deactivate WaldmanagerApp
== Holzeinschlag und Holzaufnahme == == Holzeinschlag und Holzaufnahme ==
Waldbesitzer -> WaldmanagerApp: Arbeitsauftrag für Maßnahme erstellen Waldbesitzer -> WaldmanagerApp: UI-Aktion Arbeitsauftrag für Maßnahme erstellen
activate WaldmanagerApp note over WaldmanagerApp
Waldbesitzer -> WaldmanagerApp: zu fällende Bäume zu Arbeitsauftrag hinzufügen Umfang Arbeitsauftrag
WaldmanagerApp -> DZ_Wald: speichern des Arbeitsauftrags * alle Pflichtfelder
note over DZ_Wald #00FF00 * Sortimente
* ZuFaellendeBäume
end note
note over WaldmanagerApp #00FF00
-> FM: Umring sollte optional sein, -> FM: Umring sollte optional sein,
Sortimente werden vom FM nicht unterstützt Sortimente werden vom FM nicht unterstützt
...@@ -74,73 +90,89 @@ Waldbesitzer -> WaldmanagerApp: zu fällende Bäume zu Arbeitsauftrag hinzufüge ...@@ -74,73 +90,89 @@ Waldbesitzer -> WaldmanagerApp: zu fällende Bäume zu Arbeitsauftrag hinzufüge
Beispiel für Erstellung eines Arbeitsauftrags in demos/demo_example_finale Beispiel für Erstellung eines Arbeitsauftrags in demos/demo_example_finale
end note end note
note over WaldmanagerApp #FF0000
TODO: Klären mit Christian H. (Martin)
Unklar: Inwiefern hilft "Abgespeckte Variante des Sortiments"?
Vorschlag:
* In Waldmanager-UI nur Hinweis auf "Standard-Sortimente" anzeigen
* Im Hintergrund in die Nachricht an den DZ Wald ein vorbereiteten JSON-Ausschnitt reinkopieren
TODO: Klären mit Markus (Martin)
* Sinnhaftigkeit des Demo-Ablaufs überprüfen
* insb. "zu fällende Bäume zu Arbeitsauftrag hinzufügen"
end note
activate WaldmanagerApp
Waldbesitzer -> WaldmanagerApp: UI-Aktion zu fällende Bäume zu Arbeitsauftrag hinzufügen
Waldbesitzer -> WaldmanagerApp: UI-Aktion Arbeitsauftrag in DZ Wald speichern
WaldmanagerApp -> DZ_Wald: S3I-SetValueRequest (path=/aas/submodels/{submodel_id}/submodel) mit neuem Submodel Arbeitsauftrag; submodel_id "s3i:{DZ Wald thingID}/Arbeitsauftrag" und BASE64 kodieren; inkl. Referenzierung von u.g. Holzliste-Submodel
activate DZ_Wald
DZ_Wald --> WaldmanagerApp: S3I-SetValueReply "ok"
deactivate DZ_Wald
note over WaldmanagerApp #FF0000
eine leere Holzliste für Sortiment ??? im Arbeitsauftrag anlegen
TODO Markus welches Sortiment befüllen wir exemplarisch?
end note
WaldmanagerApp -> DZ_Wald: S3I-SetValueRequest (path=/aas/submodels/{submodel_id}/submodel) mit neuem Submodel Holzliste; submodel_id "s3i:{DZ Wald thingID}/Holzliste" und BASE64 kodieren
activate DZ_Wald activate DZ_Wald
DZ_Wald --> WaldmanagerApp: Fertig DZ_Wald --> WaldmanagerApp: S3I-SetValueReply "ok"
deactivate DZ_Wald deactivate DZ_Wald
deactivate WaldmanagerApp deactivate WaldmanagerApp
Waldbesitzer -> WaldmanagerApp: Den Dienstleister die Maßnahme durchführen lassen Waldbesitzer -> WaldmanagerApp: UI-Aktion "Dienstleister die Maßnahme durchführen lassen"
note over WaldmanagerApp #FF0000
TODO (Christian H.)
* vorgefertigte Nachricht für Freigabe des Arbeitsauftrags und der leeren Holzliste - ok?
* (ggf. mit Auswahl eines Dienstleisters, sonst default)
TODO (Ahmed)
* Beispiel-Nachricht für Freigabe vorbereiten
end note
activate WaldmanagerApp activate WaldmanagerApp
WaldmanagerApp -> DZ_Wald: Zugriff auf Arbeitsauftrag und Holzliste für Dienstleister freigeben WaldmanagerApp -> DZ_Wald: S3I-SetValueRequest (path=/aas/submodels/{submodel_id für Autorisierung}/submodel/submodelElements/???) mit value o.g. vorbereitete Nachricht
note right #FF0000: TODO konkreten path nennen (Ahmed)
activate DZ_Wald activate DZ_Wald
DZ_Wald -> DienstleisterApp: Dienstleister benachrichtigen DZ_Wald -> DienstleisterApp: S3I-UserMessage "Sie haben eine neue Freigabe"
note top
Autragsdaten übergeben
end note
activate DienstleisterApp activate DienstleisterApp
DZ_Wald --> WaldmanagerApp: Ok DZ_Wald --> WaldmanagerApp: S3I-SetValueReply "ok"
deactivate DZ_Wald
deactivate WaldmanagerApp deactivate WaldmanagerApp
deactivate DZ_Wald
DienstleisterApp -> DZ_Wald: Abruf Arbeitsauftrag, Holzliste Dienstleister -> DienstleisterApp: UI-Aktion "Arbeitsaufträge und Holzlisten abrufen"
DienstleisterApp -> DZ_Wald: S3I-GetValueRequest (path=GetAllSubmodelsBySemanticId als Path ?! + semantic id von Arbeitsauftrag)
activate DZ_Wald activate DZ_Wald
DZ_Wald --> DienstleisterApp: Arbeitsauftrag, Holzliste note right #FF0000: TODO GetAllSubmodelsBySemanticId als path klären und umsetzen (Ahmed)
DZ_Wald --> DienstleisterApp: S3I-GetValueReply mit Liste von Arbeitsaufträgen mit einem Eintrag
DienstleisterApp -> DZ_Wald: S3I-GetValueRequest (path=GetAllSubmodelsBySemanticId als Path ?! + semantic id von Holzliste)
DZ_Wald --> DienstleisterApp: S3I-GetValueReply mit Liste von Holzlisten mit einem Eintrag (= leere Holzliste)
deactivate DZ_Wald deactivate DZ_Wald
DienstleisterApp -> Dienstleister: Dienstleister benachrichtigen DienstleisterApp -> Dienstleister: UI-Info: "fertig"
deactivate DienstleisterApp deactivate DienstleisterApp
activate Dienstleister activate Dienstleister
loop n times
note over Dienstleister: z.B. Bäume fällen etc.
Dienstleister -> Dienstleister: Maßnahme durchführen (lassen) Dienstleister -> Dienstleister: Maßnahme durchführen (lassen)
end
note right: Erntemaßnahme außerhalb Projekt-Scope. note right: Erntemaßnahme außerhalb Projekt-Scope.
Dienstleister -> DienstleisterApp: UI-Aktion Holzliste ausfüllen
loop Holzaufnahme n times
Dienstleister -> DienstleisterApp: Maßnahme digital erfassen
note right:Auch von Waldbesitzer durchführbar
activate DienstleisterApp activate DienstleisterApp
DienstleisterApp -> DZ_Wald: Erstelle Holzliste Dienstleister -> DienstleisterApp: UI-Aktion Holzliste in DZ Wald speichern
DienstleisterApp -> DZ_Wald: S3I-SetValueRequest (path=/aas/submodels/{submodel_id der einen Holzliste}/submodel) value= neuer Inhalt der Holzliste
activate DZ_Wald activate DZ_Wald
DZ_Wald --> DienstleisterApp: Fertig DZ_Wald --> DienstleisterApp: S3I-SetValueReply "ok"
deactivate DZ_Wald deactivate DZ_Wald
DienstleisterApp --> Dienstleister: Fertig DienstleisterApp --> Dienstleister: UI-Info "Fertig"
deactivate DienstleisterApp deactivate DienstleisterApp
note over Dienstleister
Auch innerhalb der
oberen Loop möglich
end note
end
Dienstleister -> DienstleisterApp: Arbeitsauftrag abgeschlossen Dienstleister -> DienstleisterApp: UI-Aktion Arbeitsauftrag abgeschlossen
deactivate Dienstleister deactivate Dienstleister
activate DienstleisterApp activate DienstleisterApp
DienstleisterApp -> DZ_Wald: Update Arbeitsauftrag (Status) DienstleisterApp -> DZ_Wald: S3I-SetValueRequest (path=/aas/submodels/{submodel_id des Arbeitsauftrags}/submodel/submodelElements/Auftragsstatus, value 150 ("Auftragsende")
deactivate DienstleisterApp
activate DZ_Wald activate DZ_Wald
DZ_Wald --> DienstleisterApp: S3I-SetValueReply "ok"
deactivate DienstleisterApp
DZ_Wald -> DZ_Wald: Soll-Ist Vergleich gefälltes Holz DZ_Wald -> DZ_Wald: Soll-Ist Vergleich gefälltes Holz
DZ_Wald -> WaldmanagerApp: Arbeitsauftrag abgeschlossen DZ_Wald -> WaldmanagerApp: S3I-Event-Nachricht (path=/aas/submodels/{submodel_id des Submodells für Arbeitsauftrag}/submodel/submodelElements/Auftragsstatus, timestamp, neuer Wert 150 ("Auftragsende"))
deactivate DZ_Wald deactivate DZ_Wald
activate WaldmanagerApp activate WaldmanagerApp
WaldmanagerApp -> DZ_Wald: Zugriff für Dienstleister beenden WaldmanagerApp -> Waldbesitzer: UI-Info Arbeitsauftrag abgeschlossen
activate DZ_Wald
WaldmanagerApp <-- DZ_Wald: Ok
deactivate DZ_Wald
WaldmanagerApp -> Waldbesitzer: Arbeitsauftrag abgeschlossen
deactivate WaldmanagerApp deactivate WaldmanagerApp
== OPTIONAL: Preisangebote einholen (vor oder nach Einschlag) == == OPTIONAL: Preisangebote einholen (vor oder nach Einschlag) ==
...@@ -149,7 +181,7 @@ Waldbesitzer -> WaldmanagerApp: Benutzer wählt in UI Holzliste und fordert Prei ...@@ -149,7 +181,7 @@ Waldbesitzer -> WaldmanagerApp: Benutzer wählt in UI Holzliste und fordert Prei
activate WaldmanagerApp activate WaldmanagerApp
WaldmanagerApp -> DZ_Wald: S3I-ServiceRequest an DZ Wald auf AAS Operation getHolzpreisbereich(Submodel-Id der Holzliste) WaldmanagerApp -> DZ_Wald: S3I-ServiceRequest an DZ Wald auf AAS Operation getHolzpreisbereich(Submodel-Id der Holzliste)
activate DZ_Wald activate DZ_Wald
DZ_Wald -> Holzhandelsplattform: REST Call GET: /api/v2/external/priceestimate DZ_Wald -> Holzhandelsplattform: REST Call GET: /api/v2/external/priceestimate mit Body Holzliste JSON-serialisiert
activate Holzhandelsplattform activate Holzhandelsplattform
Holzhandelsplattform --> DZ_Wald: Forstify-proprietäres JSON mit allen Parametern für Holzpreisbereich Holzhandelsplattform --> DZ_Wald: Forstify-proprietäres JSON mit allen Parametern für Holzpreisbereich
deactivate Holzhandelsplattform deactivate Holzhandelsplattform
...@@ -165,14 +197,8 @@ note over DZ_Wald ...@@ -165,14 +197,8 @@ note over DZ_Wald
"Quelle": "Forstify Marktplatz Angebote" "Quelle": "Forstify Marktplatz Angebote"
} }
end note end note
DZ_Wald -> DZ_Wald: Einlesen des prop. Forstify-JSON; Anlegen einer SMEC Holzpreisbereich in Submodel Holzpreisbereiche (ggf. Erzeugen); Verknüpfung mit zugehöriger Holzliste DZ_Wald -> DZ_Wald: Einlesen des prop. Forstify-JSON; Anlegen einer SMEC Holzpreisbereich in Submodel Holzpreisbereiche (ggf. dieses Erzeugen); Verknüpfung mit zugehöriger Holzliste; Nutzung
DZ_Wald --> WaldmanagerApp: S3I-ServiceReply "ok" DZ_Wald --> WaldmanagerApp: S3I-ServiceReply mit prop. Forstify-JSON
note over DZ_Wald #FF0000
TODO: Welches Rückgabeformat bevorzugt ForestManager?
end note
note over DZ_Wald #00FF00
-> FM: JSON wie oben OK
end note
deactivate DZ_Wald deactivate DZ_Wald
WaldmanagerApp --> Waldbesitzer: UI-Anzeige des Holzpreisbereichs in ForestManager WaldmanagerApp --> Waldbesitzer: UI-Anzeige des Holzpreisbereichs in ForestManager
deactivate WaldmanagerApp deactivate WaldmanagerApp
...@@ -184,47 +210,43 @@ Dienstleister -> Holzhandelsplattform: S3I-Login ...@@ -184,47 +210,43 @@ Dienstleister -> Holzhandelsplattform: S3I-Login
'Holzliste zum Verkauf veröffentlichen! 'Holzliste zum Verkauf veröffentlichen!
activate Holzhandelsplattform activate Holzhandelsplattform
activate Dienstleister activate Dienstleister
note over Dienstleister #FF0000
TODO Autorisierung auf Basis der HMI der Person (=ThingID) oder der Person selbst (=PersonID)?
end note
Dienstleister -> Holzhandelsplattform: Dienstleister wählt in UI von Forstify im Profil die Funktion "Alle Holzlisten von Wald des Waldbesitzers abrufen" Dienstleister -> Holzhandelsplattform: Dienstleister wählt in UI von Forstify im Profil die Funktion "Alle Holzlisten von Wald des Waldbesitzers abrufen"
note over Dienstleister note over Dienstleister
Vollständig sauber müsste der Dienstleister an dieser Stelle über das S3I-Dir nach dem entsprechenden Waldbesitzer und dessen DZ Wald suchen und dann den richtigen auswählen. Aktuell hart verdrahtet. Vollständig sauber müsste der Dienstleister an dieser Stelle über das S3I-Dir nach dem entsprechenden Waldbesitzer und dessen DZ Wald suchen und dann den richtigen auswählen. Aktuell hart verdrahtet.
end note end note
note over Dienstleister #FF0000 Holzhandelsplattform -> DZ_Wald: S3I-GetValueRequest (path=/aas/submodels/{submodel_id der einen Holzliste}/submodel)
TODO attributePath für Abruf *aller* Holzlisten? Evtl. Suche nach allen SM mit bestimmter SemanticId möglich?
end note
Holzhandelsplattform -> DZ_Wald: S3I-GetValueRequest an DZ Wald mit
activate DZ_Wald activate DZ_Wald
DZ_Wald --> Holzhandelsplattform: Holzlisten-Daten DZ_Wald --> Holzhandelsplattform: S3I-GetValueReply mit Holzliste
deactivate DZ_Wald deactivate DZ_Wald
Holzhandelsplattform --> Dienstleister: Ok! Holzhandelsplattform --> Dienstleister: UI-Info: Ok!
Dienstleister -> Holzhandelsplattform: Verkaufslose bilden, Preise etc. eingeben Dienstleister -> Holzhandelsplattform: UI-Aktion: Verkaufslose bilden, Preise etc. eingeben
Holzhandelsplattform -> Holzhandelsplattform: Verkauflose bilden Holzhandelsplattform -> Holzhandelsplattform: Forstify-intern: Verkauflose bilden...
Holzhandelsplattform -> DZ_Wald: Put Verkaufslose, verknüpfe Holzlisten note over Holzhandelsplattform #FF0000
TODO erstmal Button bauen der vorgefertigtes Verkauflos in DZ Wald schreibt (Forstify)
end note
Dienstleister -> Holzhandelsplattform: UI-Aktion: Speichern der Verkaufslose in DZ Wald
Holzhandelsplattform -> DZ_Wald: S3I-SetValueRequest (path=/aas/submodels/{submodel_id}/submodel) mit neuem Submodel Verkauflos; submodel_id "s3i:{DZ Wald thingID}/Verkaufslos" und BASE64 kodieren; im Submodel Verkaufslos das Submodel Holzernte referenzieren
activate DZ_Wald activate DZ_Wald
DZ_Wald --> Holzhandelsplattform: Fertig DZ_Wald --> Holzhandelsplattform: "ok"
deactivate DZ_Wald deactivate DZ_Wald
Holzhandelsplattform --> Dienstleister: Fertig
Holzhandelsplattform --> Dienstleister: UI-Info: "gespeichert!"
deactivate Dienstleister deactivate Dienstleister
Käufer <-> Holzhandelsplattform: Interaktion... Käufer <-> Holzhandelsplattform: Verkaufslos wird verkauft...
note right: Eigentlicher Abschluss außerhalb des Projekt-Scope. note right: Eigentlicher Abschluss außerhalb des Projekt-Scope.
activate Käufer activate Käufer
Holzhandelsplattform -> DZ_Wald: Get Holzlistenstatus in Holzlisten Holzhandelsplattform -> Holzhandelsplattform: Kontakt zwischen Käufer und Verkäufer hergestellt. Für Demo als "verkauft" einstufen und entsprechend an DZ Wald vermitteln
Holzhandelsplattform -> DZ_Wald: S3I-SetValueRequest (path=/aas/submodels/{submodel_id des Verkaufslos}/submodel/submodelElements/Verkaufsstatus) mit Wert 30 ("Verkauft")
activate DZ_Wald activate DZ_Wald
Holzhandelsplattform <-- DZ_Wald: Holzlistenstatus DZ_Wald --> Holzhandelsplattform: S3I-SetValueReply "ok"
deactivate DZ_Wald DZ_Wald -> WaldmanagerApp: S3I-Event-Nachricht (path=/aas/submodels/{submodel_id des Submodells für Verkauflos}/submodel/submodelElements/Verkaufsstatus, timestamp, neuer Wert 30 ("Verkauft"))
note over WaldmanagerApp #00FF00 note over DZ_Wald #FF0000
-> FM: Möglichst einfach, keine Zeit mehr für Implementierung Verkaufslos TODO Event-Nachrichten-Format klären (Ahmed/Martin)
-> simple Benachrichtigung über Verkauf anzeigen
end note end note
Holzhandelsplattform -> DZ_Wald: Update Verkaufsstatus in Verkaufslos
activate DZ_Wald
DZ_Wald -> WaldmanagerApp: Update Verkaufsstatus in Verkaufslos (Benachrichtigung / Event?)
deactivate DZ_Wald deactivate DZ_Wald
activate WaldmanagerApp activate WaldmanagerApp
WaldmanagerApp -> Dienstleister: Verkaufsstatus WaldmanagerApp -> Waldbesitzer: UI-Info über Event-Nachricht "verkauft"
deactivate WaldmanagerApp deactivate WaldmanagerApp
deactivate Käufer deactivate Käufer
......
...@@ -53,7 +53,7 @@ class Umring <<SubmodelElementCollection>>{ ...@@ -53,7 +53,7 @@ class Umring <<SubmodelElementCollection>>{
class Beobachtung <<Submodel>>{ class Beobachtung <<Submodel>>{
Name: String [1] Name: String [1]
Beschreibung: String [1] Beschreibung: String [1]
Umring: SEC.Umring [1] Umring: SEC.Umring [0..1]
Position: SEC.Standort [0..1] Position: SEC.Standort [0..1]
} }
...@@ -146,7 +146,7 @@ Sortiment o--> "0..*" Holzliste ...@@ -146,7 +146,7 @@ Sortiment o--> "0..*" Holzliste
' Holzliste ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' Holzliste ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Holzliste <<Submodel>>{ class Holzliste <<Submodel>>{
Kopfdaten: SEC.Kopfdaten [1] Kopfdaten: SEC.Kopfdaten [1]
PolterListe: SEList.SEC.Polter [1..*] PolterListe: SEList.SEC.Polter [0..*]
Sortimentstyp: ENUM.Sortimentstyp [1] Sortimentstyp: ENUM.Sortimentstyp [1]
'z.B. Stammholz, Energieholz, Industrieholz, Sondersortimente 'z.B. Stammholz, Energieholz, Industrieholz, Sondersortimente
Sorte: ENUM.Sorte [1] Sorte: ENUM.Sorte [1]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment