Skip to content

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:

typescript
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

bash
# 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:

json
{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI...",
  "expires_in": 300,
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI...",
  "token_type": "Bearer",
  "scope": "openid organization"
}

Decoded Token (organization scope):

json
{
  "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

bash
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:

bash
-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

UsernameRoleOrganizationsStaRT AccessUse Case
super.admin@smach.sciencesuper-adminAll✅ YesPlatform admin - StaRT execution (most likely)
admin@bayeux.testadministratorbayeux✅ YesMuseum admin - Full monitoring capabilities
viewer@bayeux.testviewerbayeux❌ NoView-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:

  1. Select organization to work with
  2. View artworks ready for monitoring (status=ready)
  3. Use StaRT to execute monitoring workflow
  4. Start monitoring when ready to record
  5. Monitor IoT sensors during session
  6. Stop monitoring upon completion
  7. Perform expert analysis (v1.0.0)

API Example:

bash
# 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:

  1. Use StaRT to execute monitoring workflow for own organization
  2. Start monitoring when ready to record
  3. Monitor IoT sensors during session
  4. Stop monitoring upon completion
  5. Perform analysis (own organization only)

API Example:

bash
# 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:

  1. View artwork list for own organization
  2. Monitor artwork status
  3. View alerts and notifications
  4. No data entry or modifications

API Example:

bash
# 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)

json
{
  "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)

IDIMEINameModelStatus
...IMEI-LOGGER-001Datalogger 001AES Techno v1.0.0Available
...IMEI-LOGGER-002Datalogger 002AES Techno v1.1.2Available
...IMEI-LOGGER-003Datalogger 003AES Techno v1.0.3Available

Features:

  • GPS tracking (position events)
  • Bluetooth Low Energy (BLE) connectivity
  • Battery monitoring
  • Storage monitoring

Sensors (3 units)

IDIMEISensor TypesNameModel
...IMEI-SENSOR-001Temperature, Humidity, Accelerometer3-sensor probe (T+H+A)HDC3021 + IIS3DWB
...IMEI-SENSOR-002Temperature, Humidity, Accelerometer3-sensor probe (T+H+A)HDC3021 + IIS3DWB
...IMEI-SENSOR-003Temperature, Humidity, Accelerometer3-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

json
{
  "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

json
{
  "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

json
{
  "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

json
{
  "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:

TimeTypeLocationDetails
10:00StartBayeux (49.276, -0.702)Monitoring started
12:00PositionEn route (49.443, -1.266)GPS update
14:30PositionEn route (50.718, -1.881)GPS update
15:30AlertParis area (48.856, 2.352)High temperature: 25.5°C (threshold: 22°C)
17:00PositionEn route (51.366, -0.196)GPS update
22:00StopLondon (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

json
{
  "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:

TimeTypeLocationDetails
09:00StartLondon (51.507, -0.127)Monitoring started
11:00PositionEn route (51.366, -0.196)GPS update
13:30PositionEn route (50.718, -1.881)GPS update
18:00StopBayeux (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:

  1. Login to StaRT app with administrator credentials
  2. View artworks ready for monitoring (GET /artworks?status=ready)
  3. Select "Bayeux Tapestry (Test Replica)" artwork
  4. 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)
  1. Review/adjust configuration (temperature, humidity, accelerometer thresholds)
  2. Create monitoring: POST /artworks/{id}/monitorings
    • Response: Monitoring object with pending status
    • Artwork status: readystandby

Phase 2: Start 10. Press START button 11. Push start event: POST /artworks/{id}/monitorings/events (type: start) - Monitoring status: pendingin_progress - Artwork status: standbymonitoring - 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_progressended - Artwork status: monitoringready - 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:

  1. Login to StaRT app
  2. Organization Selection: Choose bayeux from organization list
  3. View artworks ready for monitoring (GET /artworks?status=ready with X-Organization: bayeux)
  4. Execute monitoring workflow (same as Administrator)
  5. Switch Organization: Change to smach
  6. 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:

  1. Open artwork details in StaRT
  2. Navigate to IoT devices screen
  3. Scan for dataloggers:
    • Tap "Scan" button
    • Wait for Bluetooth discovery (5-10 seconds)
  4. 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
  5. Connect to each datalogger via Bluetooth:
    • Tap device to connect
    • Wait for connection confirmation
  6. Read sensor data (real-time):
    • Temperature (°C)
    • Humidity (% RH)
    • Accelerometer (3-axis, mm/s)
  7. Push configuration to dataloggers:
    • Send thresholds via Bluetooth
    • Verify configuration acknowledged
  8. 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

EndpointMethodDescriptionRequired HeaderMobile Priority
/artworks?status=readyGETList artworks ready for SetupX-Organization⭐⭐⭐
/artworks?status=standbyGETList artworks with monitoring pendingX-Organization⭐⭐⭐
/artworks/{id}GETGet artwork detailsAuto from context⭐⭐⭐
/artworks/{id}/monitoringsGETGet monitoring historyAuto from context⭐⭐
/artworks/{id}/monitoringsPOSTSetup (create monitoring)Auto from context⭐⭐⭐
/artworks/{id}/monitorings/eventsPOSTPush event (unified)Auto from context⭐⭐⭐

Inventory Endpoints

EndpointMethodDescriptionRequired HeaderMobile Priority
/inventories/loggersGETList loggersX-Organization⭐⭐⭐
/inventories/sensorsGETList sensorsX-Organization⭐⭐⭐
/inventories/packagingGETList packagingX-Organization⭐⭐

Monitoring Endpoints

EndpointMethodDescriptionRequired HeaderMobile Priority
/monitorings/{id}GETGet monitoring by IDAuto from context⭐⭐
/monitorings/{id}/eventsGETGet monitoring events timelineAuto from context⭐⭐⭐
/monitorings/events/streamGETSSE streaming (real-time)X-Organization

Organization Header

For multi-org users (like super.admin@smach.science), always include:

bash
-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:

bash
# 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 Pending or InProgress
  • 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:

bash
-H "X-Organization: bayeux"

Organization Management

OrganizationAliasDescription
S-MA-C-HsmachPlatform administrator organization
Bayeux MuseumbayeuxMuseum 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

Science & Mechanics in Conservation of Heritage