Fake Bayeux Tapestry - Monitoring Test Dataset
Test Dataset - Not for Production
This is a TEST DATASET using a fake Bayeux Tapestry for validating the S-MA-C-H platform (v0.3.0) before the real v1.0.0 release in May/June 2026.
Purpose:
- Validate core functionalities of back, front, and StaRT mobile apps
- Test artwork-centric monitoring workflow
- Demonstrate monitoring lifecycle from Setup to Stop
- Test multi-organization access control
Real Deployment: Scheduled for May/June 2026 with v1.0.0 release, full role management, and production data.
For Mobile Developers
This page is optimized for StaRT mobile app development. Jump to Quick Start for authentication and testing workflows.
Overview
This test dataset contains a complete artwork monitoring scenario: the fake Bayeux Tapestry replica with 3 monitoring sessions for system validation.
Test Monitoring Period: November 2024 - January 2025
- Monitoring 1 (Static): Museum storage monitoring (December 2024)
- Monitoring 2 (Transport): Bayeux → London (November 15, 2024)
- Monitoring 3 (Transport): London → Bayeux (December 10, 2024)
Validation Focus:
- ✅ Artwork-centric model (v0.3.0)
- ✅ Monitoring lifecycle (Setup → Start → Events → Stop)
- ✅ StaRT mobile app workflows
- ✅ Multi-organization access control
- ✅ IoT datalogger integration (Bluetooth connectivity)
- ✅ Real-time event streaming (SSE)
- ✅ Source-based event routing
Quick Start for Mobile Developers
API Configuration
Configure StaRT mobile app with these endpoints:
const config = {
apiBaseUrl: 'https://api.dev.smach.science',
keycloakUrl: 'https://id.smach.science/realms/smach',
keycloakClient: 'start', // StaRT mobile client
scope: 'openid organization' // Recommended for mobile
}Authentication Flow
Step 1: Get JWT Token with Organization Scope
# Recommended: Use 'organization' scope for StaRT (explicit org selection)
curl -X POST "https://id.smach.science/realms/smach/protocol/openid-connect/token" \
-d "client_id=start" \
-d "username=admin@bayeux.test" \
-d "password=PASSWORD" \
-d "grant_type=password" \
-d "scope=openid organization"Response:
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI...",
"expires_in": 300,
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI...",
"token_type": "Bearer",
"scope": "openid organization"
}Decoded Token (organization scope):
{
"email": "admin@bayeux.test",
"organization": {
"bayeux": {
"name": ["Bayeux Museum"]
}
},
"realm_access": {
"roles": ["administrator"]
}
}Organization Scopes
organization: User selects org at login (Keycloak selector if multi-org) → Token:"organization": {"bayeux": {...}}organization:*: All user orgs in token (no selector) → Token:"organizations": {"bayeux": {...}}
See Organization Management for details.
Step 2: Use Token in API Requests
curl -X GET "https://api.dev.smach.science/artworks?status=ready" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Organization: bayeux"Required Header
All API requests must include:
-H "X-Organization: bayeux"For single-organization users, this header is optional (auto-resolved from JWT).
Test Users & Authentication
All users authenticate via Keycloak OAuth2 JWT at: https://id.smach.science/realms/smach
Available Test Users
| Username | Role | Organizations | StaRT Access | Use Case |
|---|---|---|---|---|
| super.admin@smach.science | super-admin | All | ✅ Yes | Platform admin - StaRT execution (most likely) |
| admin@bayeux.test | administrator | bayeux | ✅ Yes | Museum admin - Full monitoring capabilities |
| viewer@bayeux.test | viewer | bayeux | ❌ No | View-only access (web only) |
Passwords
Contact the S-MA-C-H admin team for test user passwords.
Primary Mobile Users
For StaRT mobile testing, focus on:
- super.admin@smach.science - Full monitoring execution capabilities (S-MA-C-H experts)
- admin@bayeux.test - Full monitoring execution capabilities (museum staff)
User Capabilities by Role
Super Admin (super.admin@smach.science) - PRIMARY StaRT USER
Organizations: All (via X-Organization header)
Permissions:
- ✅ View all artworks across all organizations
- ✅ Create and execute monitorings using StaRT mobile app
- ✅ Update artwork status
- ✅ Complete checklist tasks
- ✅ Connect to IoT dataloggers via Bluetooth
- ✅ Start/stop monitorings
- ✅ Manage inventory
- ✅ Manage organizations and users
Mobile Workflow:
- Select organization to work with
- View artworks ready for monitoring (
status=ready) - Use StaRT to execute monitoring workflow
- Start monitoring when ready to record
- Monitor IoT sensors during session
- Stop monitoring upon completion
- Perform expert analysis (v1.0.0)
API Example:
# Get artworks for Bayeux organization
curl -X GET "https://api.dev.smach.science/artworks?status=ready" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Organization: bayeux"
# Create monitoring
curl -X POST "https://api.dev.smach.science/artworks/{id}/monitorings" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Organization: bayeux" \
-H "Content-Type: application/json" \
-d '{...}'Administrator (admin@bayeux.test) - StaRT USER
Organizations: bayeux
Permissions:
- ✅ View own organization's artworks
- ✅ Create and execute monitorings using StaRT mobile app (same as Super Admin)
- ✅ Update artwork status
- ✅ Complete checklist tasks
- ✅ Connect to IoT dataloggers via Bluetooth
- ✅ Start/stop monitorings
- ✅ Manage inventory
- ❌ Cannot access other organizations
Mobile Workflow:
- Use StaRT to execute monitoring workflow for own organization
- Start monitoring when ready to record
- Monitor IoT sensors during session
- Stop monitoring upon completion
- Perform analysis (own organization only)
API Example:
# Get own organization's artworks (X-Organization auto-detected from JWT)
curl -X GET "https://api.dev.smach.science/artworks?status=ready" \
-H "Authorization: Bearer $TOKEN"Viewer (viewer@bayeux.test) - WEB ONLY (NO MOBILE)
Organizations: bayeux
Permissions:
- ✅ View own organization's artworks (read-only)
- ✅ View monitoring details, events, alerts (read-only)
- ✅ View IoT sensor data (read-only)
- ❌ Cannot use StaRT mobile app
- ❌ Cannot modify anything
- ❌ No inventory access
Web Workflow:
- View artwork list for own organization
- Monitor artwork status
- View alerts and notifications
- No data entry or modifications
API Example:
# View artworks (read-only)
curl -X GET "https://api.dev.smach.science/artworks" \
-H "Authorization: Bearer $TOKEN"
# View artwork details (read-only)
curl -X GET "https://api.dev.smach.science/artworks/{id}" \
-H "Authorization: Bearer $TOKEN"Dataset Details
Artwork: Bayeux Tapestry (Test Replica)
{
"id": "674ebf66cf6f5c456e1e27a8",
"organization": "bayeux",
"tags": ["Medieval Art", "Tapestry", "11th Century", "Norman Conquest"],
"reference": "bayeux-tapestry-replica",
"name": "Bayeux Tapestry (Test Replica)",
"status": "ready",
"summary": "Fake replica of the famous Bayeux Tapestry for S-MA-C-H platform validation (v0.3.0)",
"content": "<p>This is a <strong>fake replica</strong> of the Bayeux Tapestry created for testing purposes only...</p>",
"creator": "Unknown (11th century original)",
"creation": "2025 (Replica for testing)",
"picture": "https://www.bayeuxmuseum.com/wp-content/uploads/2021/02/Stephane-Maurice-2014-DSC1447-750x450.jpg",
"medium": "Embroidered linen cloth (replica materials)",
"size": {
"width": 500,
"length": 68580,
"height": 500
},
"sizeWithPackaging": {
"width": 600,
"length": 69000,
"height": 600
},
"weight": 350000,
"weightWithPackaging": 450000,
"metadata": {
"period": "11th century (original)",
"technique": "Crewel embroidery",
"scenes": "58 scenes depicting Norman Conquest"
},
"inclosure": "INC001",
"crate": "CRT001",
"checklist": [
{
"title": "Verify environmental seals",
"description": "Check all seals are intact"
},
{
"title": "Activate dataloggers",
"description": "Ensure all loggers are powered"
},
{
"title": "Test sensor connectivity",
"description": "Verify sensors are reporting"
},
{
"title": "Document initial conditions",
"description": "Record temp/humidity before packaging"
}
],
"config": {
"sensors": {
"temperature": {
"interval": 300,
"min": 18,
"max": 22
},
"humidity": {
"interval": 300,
"min": 45,
"max": 55
},
"accelerometer": {
"range": "±4g",
"xMin": -5,
"xMax": 5,
"yMin": -5,
"yMax": 5,
"zMin": -5,
"zMax": 5
}
},
"logger": {
"battery": 15,
"storage": 100,
"frequency": 12
}
}
}Test Artifact
This is a fake replica of the Bayeux Tapestry created for testing purposes only. The real Bayeux Tapestry is an 11th-century embroidered cloth depicting the Norman Conquest of England and remains at the Bayeux Museum. This replica is used to validate the S-MA-C-H monitoring system before the v1.0.0 production release.
Inventory Items
Loggers (3 units)
| ID | IMEI | Name | Model | Status |
|---|---|---|---|---|
| ... | IMEI-LOGGER-001 | Datalogger 001 | AES Techno v1.0.0 | Available |
| ... | IMEI-LOGGER-002 | Datalogger 002 | AES Techno v1.1.2 | Available |
| ... | IMEI-LOGGER-003 | Datalogger 003 | AES Techno v1.0.3 | Available |
Features:
- GPS tracking (position events)
- Bluetooth Low Energy (BLE) connectivity
- Battery monitoring
- Storage monitoring
Sensors (3 units)
| ID | IMEI | Sensor Types | Name | Model |
|---|---|---|---|---|
| ... | IMEI-SENSOR-001 | Temperature, Humidity, Accelerometer | 3-sensor probe (T+H+A) | HDC3021 + IIS3DWB |
| ... | IMEI-SENSOR-002 | Temperature, Humidity, Accelerometer | 3-sensor probe (T+H+A) | HDC3021 + IIS3DWB |
| ... | IMEI-SENSOR-003 | Temperature, Humidity, Accelerometer | 3-sensor probe (T+H+A) | HDC3021 + IIS3DWB |
Sensor Capabilities:
- Temperature: Range -40°C to +125°C, Accuracy ±0.2°C
- Humidity: Range 0-100% RH, Accuracy ±2%
- Accelerometer: 3-axis, Range ±4g, Vibration detection
Bluetooth Connection
Sensors use BLE (Bluetooth Low Energy) for connectivity. Ensure StaRT app has Bluetooth permissions enabled.
Packaging
Inclosure: INC001
{
"identity": "INC001",
"organization": "bayeux",
"kind": "inclosure",
"name": "Climate-controlled protective case",
"description": "Custom inclosure for Bayeux Tapestry storage",
"type": "Climate-controlled",
"material1": "Aluminum frame",
"material2": "Plexiglass",
"thermalInsulation": "Thermal insulation foam",
"thermalRating": 4,
"vibrationProtection": "Vibration damping material",
"vibrationRating": 3,
"size": {
"width": 600,
"length": 69000,
"height": 600
},
"weight": 50000
}Crate: CRT001
{
"identity": "CRT001",
"organization": "bayeux",
"kind": "crate",
"name": "Bayeux Tapestry transport crate",
"description": "Secured isothermal container for transport",
"type": "Isothermal",
"material1": "Reinforced steel",
"material2": "Stainless steel",
"thermalInsulation": "Triple-layer thermal insulation",
"thermalRating": 5,
"vibrationProtection": "Advanced foam damping system",
"vibrationRating": 4,
"size": {
"width": 800,
"length": 70000,
"height": 800
},
"weight": 100000,
"images": ["https://s3.smach.science/bayeux/crate-bayeux.jpg"]
}Monitoring Sessions
Monitoring 1: Static Monitoring (Museum Storage)
Type: stationaryStatus: endedPeriod: December 2024 Purpose: Museum storage environmental monitoring
{
"id": "...",
"organization": "bayeux",
"artwork": "674ebf66cf6f5c456e1e27a8",
"type": "stationary",
"status": "ended",
"dataloggers": [
{
"logger": "IMEI-LOGGER-001",
"sensor": "IMEI-SENSOR-001",
"note": "Museum storage",
"position": null
}
],
"config": {
"sensors": {...},
"logger": {...}
}
}Notes:
- Single datalogger for static monitoring
- No GPS tracking (position events not needed)
- Focus on temperature and humidity thresholds
Monitoring 2: Transport Bayeux → London
Type: transportStatus: endedPeriod: November 15, 2024 (10:00 → 22:00 UTC) Route: Bayeux Museum → British Museum
{
"id": "...",
"organization": "bayeux",
"artwork": "674ebf66cf6f5c456e1e27a8",
"type": "transport",
"status": "ended",
"dataloggers": [
{
"logger": "IMEI-LOGGER-001",
"sensor": "IMEI-SENSOR-001",
"note": "Top right",
"position": {
"latitude": 3.23,
"longitude": 2.12
}
},
{
"logger": "IMEI-LOGGER-002",
"sensor": "IMEI-SENSOR-002",
"note": "Center",
"position": {
"latitude": 0.0,
"longitude": 0.0
}
},
{
"logger": "IMEI-LOGGER-003",
"sensor": "IMEI-SENSOR-003",
"note": "Bottom left",
"position": {
"latitude": -3.23,
"longitude": -2.12
}
}
],
"config": {...}
}Events Timeline:
| Time | Type | Location | Details |
|---|---|---|---|
| 10:00 | Start | Bayeux (49.276, -0.702) | Monitoring started |
| 12:00 | Position | En route (49.443, -1.266) | GPS update |
| 14:30 | Position | En route (50.718, -1.881) | GPS update |
| 15:30 | Alert | Paris area (48.856, 2.352) | High temperature: 25.5°C (threshold: 22°C) |
| 17:00 | Position | En route (51.366, -0.196) | GPS update |
| 22:00 | Stop | London (51.507, -0.127) | Monitoring stopped |
Distance: ~450 km Duration: 12 hours
Monitoring 3: Transport London → Bayeux
Type: transportStatus: endedPeriod: December 10, 2024 (09:00 → 18:00 UTC) Route: British Museum → Bayeux Museum
{
"id": "...",
"organization": "bayeux",
"artwork": "674ebf66cf6f5c456e1e27a8",
"type": "transport",
"status": "ended",
"dataloggers": [
{
"logger": "IMEI-LOGGER-001",
"sensor": "IMEI-SENSOR-001",
"note": "Top right",
"position": {"latitude": 3.23, "longitude": 2.12}
},
{
"logger": "IMEI-LOGGER-002",
"sensor": "IMEI-SENSOR-002",
"note": "Center",
"position": {"latitude": 0.0, "longitude": 0.0}
},
{
"logger": "IMEI-LOGGER-003",
"sensor": "IMEI-SENSOR-003",
"note": "Bottom left",
"position": {"latitude": -3.23, "longitude": -2.12}
}
],
"config": {...}
}Events Timeline:
| Time | Type | Location | Details |
|---|---|---|---|
| 09:00 | Start | London (51.507, -0.127) | Monitoring started |
| 11:00 | Position | En route (51.366, -0.196) | GPS update |
| 13:30 | Position | En route (50.718, -1.881) | GPS update |
| 18:00 | Stop | Bayeux (49.276, -0.702) | Monitoring stopped |
Distance: ~450 km Duration: 9 hours
Mobile App Testing (StaRT)
Test Scenario 1: Administrator Monitoring Execution
User: admin@bayeux.test (Administrator role)
Workflow:
- Login to StaRT app with administrator credentials
- View artworks ready for monitoring (
GET /artworks?status=ready) - Select "Bayeux Tapestry (Test Replica)" artwork
- View artwork details (tags, checklist, base configuration)
Phase 1: Setup 5. Complete checklist tasks in UI 6. Scan for dataloggers via Bluetooth (auto-detect Logger+Sensor pairs) 7. Verify detected dataloggers:
- IMEI-LOGGER-001 + IMEI-SENSOR-001 (Top right: 3.23, 2.12)
- IMEI-LOGGER-002 + IMEI-SENSOR-002 (Center: 0.0, 0.0)
- IMEI-LOGGER-003 + IMEI-SENSOR-003 (Bottom left: -3.23, -2.12)
- Review/adjust configuration (temperature, humidity, accelerometer thresholds)
- Create monitoring:
POST /artworks/{id}/monitorings- Response: Monitoring object with
pendingstatus - Artwork status:
ready→standby
- Response: Monitoring object with
Phase 2: Start 10. Press START button 11. Push start event: POST /artworks/{id}/monitorings/events (type: start) - Monitoring status: pending → in_progress - Artwork status: standby → monitoring - Dataloggers start recording via Bluetooth
Phase 3: Monitoring 12. App automatically pushes position events every 5-15 min 13. Sensors push alert events on threshold violations 14. Real-time data displayed in app
Phase 4: Stop 15. Press STOP button 16. Push stop event: POST /artworks/{id}/monitorings/events (type: stop) - Monitoring status: in_progress → ended - Artwork status: monitoring → ready - Dataloggers stop recording via Bluetooth
Expected Behavior: Full monitoring execution capabilities
Test Scenario 2: Super Admin Multi-Organization Access
User: super.admin@smach.science (Super Admin role)
Workflow:
- Login to StaRT app
- Organization Selection: Choose
bayeuxfrom organization list - View artworks ready for monitoring (
GET /artworks?status=readywithX-Organization: bayeux) - Execute monitoring workflow (same as Administrator)
- Switch Organization: Change to
smach - Verify data isolation between organizations
Expected Behavior: Can access any organization, same monitoring permissions as Administrator
Test Scenario 3: Bluetooth IoT Connection
User: admin@bayeux.test or super.admin@smach.science
Workflow:
- Open artwork details in StaRT
- Navigate to IoT devices screen
- Scan for dataloggers:
- Tap "Scan" button
- Wait for Bluetooth discovery (5-10 seconds)
- Verify detected devices:
- Logger IMEI-LOGGER-001 paired with Sensor IMEI-SENSOR-001
- Logger IMEI-LOGGER-002 paired with Sensor IMEI-SENSOR-002
- Logger IMEI-LOGGER-003 paired with Sensor IMEI-SENSOR-003
- Connect to each datalogger via Bluetooth:
- Tap device to connect
- Wait for connection confirmation
- Read sensor data (real-time):
- Temperature (°C)
- Humidity (% RH)
- Accelerometer (3-axis, mm/s)
- Push configuration to dataloggers:
- Send thresholds via Bluetooth
- Verify configuration acknowledged
- During monitoring:
- Sensors automatically push alerts on threshold violations
- Loggers automatically push position updates
Expected Behavior: Successful Bluetooth pairing, real-time data streaming
API Endpoints for Mobile App
Core Artwork Endpoints
| Endpoint | Method | Description | Required Header | Mobile Priority |
|---|---|---|---|---|
/artworks?status=ready | GET | List artworks ready for Setup | X-Organization | ⭐⭐⭐ |
/artworks?status=standby | GET | List artworks with monitoring pending | X-Organization | ⭐⭐⭐ |
/artworks/{id} | GET | Get artwork details | Auto from context | ⭐⭐⭐ |
/artworks/{id}/monitorings | GET | Get monitoring history | Auto from context | ⭐⭐ |
/artworks/{id}/monitorings | POST | Setup (create monitoring) | Auto from context | ⭐⭐⭐ |
/artworks/{id}/monitorings/events | POST | Push event (unified) | Auto from context | ⭐⭐⭐ |
Inventory Endpoints
| Endpoint | Method | Description | Required Header | Mobile Priority |
|---|---|---|---|---|
/inventories/loggers | GET | List loggers | X-Organization | ⭐⭐⭐ |
/inventories/sensors | GET | List sensors | X-Organization | ⭐⭐⭐ |
/inventories/packaging | GET | List packaging | X-Organization | ⭐⭐ |
Monitoring Endpoints
| Endpoint | Method | Description | Required Header | Mobile Priority |
|---|---|---|---|---|
/monitorings/{id} | GET | Get monitoring by ID | Auto from context | ⭐⭐ |
/monitorings/{id}/events | GET | Get monitoring events timeline | Auto from context | ⭐⭐⭐ |
/monitorings/events/stream | GET | SSE streaming (real-time) | X-Organization | ⭐ |
Organization Header
For multi-org users (like super.admin@smach.science), always include:
-H "X-Organization: bayeux"For single-org users (like admin@bayeux.test), this header is optional.
Status Workflows
Artwork Status Transitions
Monitoring Status Transitions
Troubleshooting
Issue: 401 Unauthorized
- Check JWT token is valid and not expired
- Verify token includes correct organization claims
- Ensure Keycloak realm and client are correct
Solution:
# Refresh token (with organization scope)
TOKEN=$(curl -X POST "https://id.smach.science/realms/smach/protocol/openid-connect/token" \
-d "client_id=start" \
-d "username=admin@bayeux.test" \
-d "password=YOUR_PASS" \
-d "grant_type=password" \
-d "scope=openid organization" | jq -r '.access_token')Issue: 403 Forbidden
- User doesn't have permission for the operation
- Check user role (super-admin, administrator, viewer)
- Verify organization access in user profile
Example: Viewer cannot create monitoring (read-only role)
Issue: 400 Artwork Already Has Active Monitoring
- Cannot create 2nd monitoring while one is
PendingorInProgress - Complete current monitoring before creating new one
Solution: Press STOP to end current monitoring, then create new one
Issue: 404 No Active Monitoring for Sensor
- Sensor IMEI not associated with any active monitoring
- Verify sensor was included in monitoring Setup
Solution: Check dataloggers array in monitoring object
Issue: Bluetooth Connection Fails (StaRT Mobile)
- Ensure Bluetooth is enabled on device
- Check app has Bluetooth permissions granted
- Verify datalogger is powered on and in range
- Try scanning again or restarting Bluetooth
Issue: Missing X-Organization Header
- Multi-org users must specify organization
- Single-org users can omit header
Solution:
-H "X-Organization: bayeux"Organization Management
| Organization | Alias | Description |
|---|---|---|
| S-MA-C-H | smach | Platform administrator organization |
| Bayeux Museum | bayeux | Museum owning the Bayeux Tapestry |
Next Steps
- 📱 Integrate with StaRT mobile app (see API workflow)
- 🧪 Test with Bayeux dataset (use test users above)
- 📊 Monitor via web app: https://app.dev.smach.science
- 🎯 Prepare for beta test: January 8, 2025
Additional Resources
- OpenAPI Documentation: https://api.dev.smach.science/swagger-ui.html
- API Workflow Guide: StaRT Mobile API Workflow
- User Roles: User Roles & Permissions
- Organization Management: Organization Management