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

Demo-Feinspezifikation v1.0

parent 4cdaedbd
Branches
No related tags found
No related merge requests found
Pipeline #301627 passed
......@@ -33,38 +33,54 @@ end box
== Aufnahme von Notizen (hier: Beobachtung) ==
Waldbesitzer -> WaldmanagerApp: Beobachtung eintragen
Waldbesitzer -> WaldmanagerApp: UI-Aktion S3I-Login
activate WaldmanagerApp
WaldmanagerApp -> DZ_Wald: Speichern der Beobachtung
note over DZ_Wald #00FF00
-> FM: Umring sollte optional sein, Beispiel in demos/demo_example_finale
note over WaldmanagerApp #FF0000
TODO: Christian H. S3I-Login mit individueller ThingId pro Benutzer + Benutzer-Login
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
DZ_Wald --> WaldmanagerApp: gespeichert
DZ_Wald --> WaldmanagerApp: S3I-SetValueReply "ok"
deactivate DZ_Wald
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 ==
Waldbesitzer -> WaldmanagerApp: Waldweg abgehen
activate WaldmanagerApp
Waldbesitzer -> WaldmanagerApp: Wendepunkt anlegen
WaldmanagerApp -> DZ_Wald: Speichern des Waldweges
note over DZ_Wald #00FF00
-> FM: wie in Modellierung, Beispiel in demos/demo_example_finale
note over WaldmanagerApp #FF0000
TODO: Klärung wie könnte man das in einer Online-Demo präsentieren ("abgehen"?) (Christian H.)
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
DZ_Wald --> WaldmanagerApp: gespeichert
DZ_Wald --> WaldmanagerApp: S3I-SetValueReply "ok"
deactivate DZ_Wald
deactivate WaldmanagerApp
== Holzeinschlag und Holzaufnahme ==
Waldbesitzer -> WaldmanagerApp: Arbeitsauftrag für Maßnahme erstellen
activate WaldmanagerApp
Waldbesitzer -> WaldmanagerApp: zu fällende Bäume zu Arbeitsauftrag hinzufügen
WaldmanagerApp -> DZ_Wald: speichern des Arbeitsauftrags
note over DZ_Wald #00FF00
Waldbesitzer -> WaldmanagerApp: UI-Aktion Arbeitsauftrag für Maßnahme erstellen
note over WaldmanagerApp
Umfang Arbeitsauftrag
* alle Pflichtfelder
* Sortimente
* ZuFaellendeBäume
end note
note over WaldmanagerApp #00FF00
-> FM: Umring sollte optional sein,
Sortimente werden vom FM nicht unterstützt
......@@ -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
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
DZ_Wald --> WaldmanagerApp: Fertig
DZ_Wald --> WaldmanagerApp: S3I-SetValueReply "ok"
deactivate DZ_Wald
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
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
DZ_Wald -> DienstleisterApp: Dienstleister benachrichtigen
note top
Autragsdaten übergeben
end note
DZ_Wald -> DienstleisterApp: S3I-UserMessage "Sie haben eine neue Freigabe"
activate DienstleisterApp
DZ_Wald --> WaldmanagerApp: Ok
deactivate DZ_Wald
DZ_Wald --> WaldmanagerApp: S3I-SetValueReply "ok"
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
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
DienstleisterApp -> Dienstleister: Dienstleister benachrichtigen
DienstleisterApp -> Dienstleister: UI-Info: "fertig"
deactivate DienstleisterApp
activate Dienstleister
loop n times
note over Dienstleister: z.B. Bäume fällen etc.
Dienstleister -> Dienstleister: Maßnahme durchführen (lassen)
end
note right: Erntemaßnahme außerhalb Projekt-Scope.
loop Holzaufnahme n times
Dienstleister -> DienstleisterApp: Maßnahme digital erfassen
note right:Auch von Waldbesitzer durchführbar
Dienstleister -> DienstleisterApp: UI-Aktion Holzliste ausfüllen
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
DZ_Wald --> DienstleisterApp: Fertig
DZ_Wald --> DienstleisterApp: S3I-SetValueReply "ok"
deactivate DZ_Wald
DienstleisterApp --> Dienstleister: Fertig
DienstleisterApp --> Dienstleister: UI-Info "Fertig"
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
activate DienstleisterApp
DienstleisterApp -> DZ_Wald: Update Arbeitsauftrag (Status)
deactivate DienstleisterApp
DienstleisterApp -> DZ_Wald: S3I-SetValueRequest (path=/aas/submodels/{submodel_id des Arbeitsauftrags}/submodel/submodelElements/Auftragsstatus, value 150 ("Auftragsende")
activate DZ_Wald
DZ_Wald --> DienstleisterApp: S3I-SetValueReply "ok"
deactivate DienstleisterApp
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
activate WaldmanagerApp
WaldmanagerApp -> DZ_Wald: Zugriff für Dienstleister beenden
activate DZ_Wald
WaldmanagerApp <-- DZ_Wald: Ok
deactivate DZ_Wald
WaldmanagerApp -> Waldbesitzer: Arbeitsauftrag abgeschlossen
WaldmanagerApp -> Waldbesitzer: UI-Info Arbeitsauftrag abgeschlossen
deactivate WaldmanagerApp
== OPTIONAL: Preisangebote einholen (vor oder nach Einschlag) ==
......@@ -149,7 +181,7 @@ Waldbesitzer -> WaldmanagerApp: Benutzer wählt in UI Holzliste und fordert Prei
activate WaldmanagerApp
WaldmanagerApp -> DZ_Wald: S3I-ServiceRequest an DZ Wald auf AAS Operation getHolzpreisbereich(Submodel-Id der Holzliste)
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
Holzhandelsplattform --> DZ_Wald: Forstify-proprietäres JSON mit allen Parametern für Holzpreisbereich
deactivate Holzhandelsplattform
......@@ -165,14 +197,8 @@ note over DZ_Wald
"Quelle": "Forstify Marktplatz Angebote"
}
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 --> WaldmanagerApp: S3I-ServiceReply "ok"
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
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 mit prop. Forstify-JSON
deactivate DZ_Wald
WaldmanagerApp --> Waldbesitzer: UI-Anzeige des Holzpreisbereichs in ForestManager
deactivate WaldmanagerApp
......@@ -184,47 +210,43 @@ Dienstleister -> Holzhandelsplattform: S3I-Login
'Holzliste zum Verkauf veröffentlichen!
activate Holzhandelsplattform
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"
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.
end note
note over Dienstleister #FF0000
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
Holzhandelsplattform -> DZ_Wald: S3I-GetValueRequest (path=/aas/submodels/{submodel_id der einen Holzliste}/submodel)
activate DZ_Wald
DZ_Wald --> Holzhandelsplattform: Holzlisten-Daten
DZ_Wald --> Holzhandelsplattform: S3I-GetValueReply mit Holzliste
deactivate DZ_Wald
Holzhandelsplattform --> Dienstleister: Ok!
Dienstleister -> Holzhandelsplattform: Verkaufslose bilden, Preise etc. eingeben
Holzhandelsplattform -> Holzhandelsplattform: Verkauflose bilden
Holzhandelsplattform -> DZ_Wald: Put Verkaufslose, verknüpfe Holzlisten
Holzhandelsplattform --> Dienstleister: UI-Info: Ok!
Dienstleister -> Holzhandelsplattform: UI-Aktion: Verkaufslose bilden, Preise etc. eingeben
Holzhandelsplattform -> Holzhandelsplattform: Forstify-intern: Verkauflose bilden...
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
DZ_Wald --> Holzhandelsplattform: Fertig
DZ_Wald --> Holzhandelsplattform: "ok"
deactivate DZ_Wald
Holzhandelsplattform --> Dienstleister: Fertig
Holzhandelsplattform --> Dienstleister: UI-Info: "gespeichert!"
deactivate Dienstleister
Käufer <-> Holzhandelsplattform: Interaktion...
Käufer <-> Holzhandelsplattform: Verkaufslos wird verkauft...
note right: Eigentlicher Abschluss außerhalb des Projekt-Scope.
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
Holzhandelsplattform <-- DZ_Wald: Holzlistenstatus
deactivate DZ_Wald
note over WaldmanagerApp #00FF00
-> FM: Möglichst einfach, keine Zeit mehr für Implementierung Verkaufslos
-> simple Benachrichtigung über Verkauf anzeigen
DZ_Wald --> Holzhandelsplattform: S3I-SetValueReply "ok"
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 DZ_Wald #FF0000
TODO Event-Nachrichten-Format klären (Ahmed/Martin)
end note
Holzhandelsplattform -> DZ_Wald: Update Verkaufsstatus in Verkaufslos
activate DZ_Wald
DZ_Wald -> WaldmanagerApp: Update Verkaufsstatus in Verkaufslos (Benachrichtigung / Event?)
deactivate DZ_Wald
activate WaldmanagerApp
WaldmanagerApp -> Dienstleister: Verkaufsstatus
WaldmanagerApp -> Waldbesitzer: UI-Info über Event-Nachricht "verkauft"
deactivate WaldmanagerApp
deactivate Käufer
......
......@@ -53,7 +53,7 @@ class Umring <<SubmodelElementCollection>>{
class Beobachtung <<Submodel>>{
Name: String [1]
Beschreibung: String [1]
Umring: SEC.Umring [1]
Umring: SEC.Umring [0..1]
Position: SEC.Standort [0..1]
}
......@@ -146,7 +146,7 @@ Sortiment o--> "0..*" Holzliste
' Holzliste ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Holzliste <<Submodel>>{
Kopfdaten: SEC.Kopfdaten [1]
PolterListe: SEList.SEC.Polter [1..*]
PolterListe: SEList.SEC.Polter [0..*]
Sortimentstyp: ENUM.Sortimentstyp [1]
'z.B. Stammholz, Energieholz, Industrieholz, Sondersortimente
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