DEFINE MODEL AlarmRecord COLLAPSED ADD STRING "alarm_id" ADD STRING "equipment_id" ADD STRING "severity" ADD STRING "timestamp"DEFINE ACTION ProcessAlarmON TOPIC "alarms/+/input" DO SET "equipment_id" WITH TOPIC POSITION 2 SET "severity" WITH (GET JSON "severity" IN PAYLOAD AS STRING) PUBLISH MODEL AlarmRecord TO "alarms/structured/" + {equipment_id} WITH alarm_id = (RANDOM UUID) equipment_id = {equipment_id} severity = {severity} timestamp = TIMESTAMP "UTC" IF {severity} EQUALS "CRITICAL" THEN PUBLISH TOPIC "alerts/critical/" + {equipment_id} WITH PAYLOAD
Define an action that extracts data and publishes the model:
Copy
Ask AI
DEFINE ACTION ProcessSensorJSONON TOPIC "sensors/+/json_data" DO SET "sensor_id" WITH TOPIC POSITION 2 // Extract from JSON payload SET "temp" WITH (GET JSON "temperature" IN PAYLOAD AS DOUBLE) SET "hum" WITH (GET JSON "humidity" IN PAYLOAD AS DOUBLE) SET "type" WITH (GET JSON "type" IN PAYLOAD AS STRING) SET "quality" WITH (GET JSON "quality" IN PAYLOAD AS STRING) // Publish structured record PUBLISH MODEL SensorRecord TO "sensors/processed/" + {sensor_id} WITH sensor_id = {sensor_id} sensor_type = {type} temperature = {temp} humidity = {hum} quality_status = {quality} timestamp = TIMESTAMP "UTC"
Route alarms by severity while creating structured records:
Copy
Ask AI
DEFINE MODEL AlarmRecord COLLAPSED ADD STRING "alarm_id" ADD STRING "equipment_id" ADD STRING "alarm_type" ADD DOUBLE "trigger_value" ADD STRING "severity" ADD STRING "timestamp"DEFINE ACTION ProcessAlarmJSONON TOPIC "alarms/+/input" DO SET "equipment_id" WITH TOPIC POSITION 2 PUBLISH MODEL AlarmRecord TO "alarms/structured/" + {equipment_id} WITH alarm_id = (RANDOM UUID) equipment_id = {equipment_id} alarm_type = (GET JSON "type" IN PAYLOAD AS STRING) trigger_value = (GET JSON "value" IN PAYLOAD AS DOUBLE) severity = (GET JSON "severity" IN PAYLOAD AS STRING) timestamp = TIMESTAMP "UTC" // Route critical alarms SET "sev" WITH (GET JSON "severity" IN PAYLOAD AS STRING) IF {sev} EQUALS "CRITICAL" THEN PUBLISH TOPIC "alerts/critical/" + {equipment_id} WITH PAYLOAD
Calculate metrics and generate quality reports:
Copy
Ask AI
DEFINE MODEL QualityReport COLLAPSED ADD STRING "report_id" ADD STRING "station_id" ADD INT "items_tested" ADD INT "items_passed" ADD DOUBLE "pass_rate" ADD STRING "timestamp"DEFINE ACTION GenerateQualityReportON TOPIC "quality/+/results" DO SET "station" WITH TOPIC POSITION 2 SET "tested" WITH (GET JSON "total" IN PAYLOAD AS INT) SET "passed" WITH (GET JSON "passed" IN PAYLOAD AS INT) SET "rate" WITH ({passed} AS DOUBLE / {tested} AS DOUBLE * 100) PUBLISH MODEL QualityReport TO "reports/quality/" + {station} WITH report_id = (RANDOM UUID) station_id = {station} items_tested = {tested} items_passed = {passed} pass_rate = {rate} timestamp = TIMESTAMP "UTC" IF {rate} < 90 THEN PUBLISH TOPIC "alerts/quality/low_rate" WITH {station} + ": " + {rate} + "%"
Create structured event logs with context:
Copy
Ask AI
DEFINE MODEL EventLog COLLAPSED ADD STRING "event_id" ADD STRING "event_type" ADD STRING "source" ADD STRING "description" ADD STRING "severity" ADD STRING "timestamp" ADD OBJECT "context"DEFINE ACTION LogEventON TOPIC "events/+/occurred" DO SET "event_type" WITH TOPIC POSITION 2 PUBLISH MODEL EventLog TO "logs/events/" + {event_type} WITH event_id = (RANDOM UUID) event_type = {event_type} source = (GET JSON "source" IN PAYLOAD AS STRING) description = (GET JSON "message" IN PAYLOAD AS STRING) severity = (GET JSON "severity" IN PAYLOAD AS STRING) timestamp = TIMESTAMP "UTC" context = { "original_topic": "events/" + {event_type} + "/occurred", "payload_size": "standard" }
// GoodSET "temp" WITH (GET JSON "temperature" IN PAYLOAD AS DOUBLE)// RiskySET "temp" WITH (GET JSON "temperature" IN PAYLOAD)
Validate Extracted Data
Check data before publishing:
Copy
Ask AI
SET "value" WITH (GET JSON "value" IN PAYLOAD AS DOUBLE)IF {value} >= 0 AND {value} <= 100 THEN PUBLISH MODEL ValidData TO "output" WITH value = {value}ELSE PUBLISH TOPIC "errors/validation" WITH "Invalid value: " + {value}
Use Dynamic Topics
Include identifiers in output topics for easy filtering:
Copy
Ask AI
// For topic "sensors/temp001/data" - wildcard is at position 2SET "sensor_id" WITH TOPIC POSITION 2PUBLISH MODEL SensorData TO "processed/" + {sensor_id} + "/data" WITH ...
Generate Unique IDs
Use RANDOM UUID for record identification:
Copy
Ask AI
PUBLISH MODEL Record TO "records/new" WITH record_id = (RANDOM UUID) ...