Skip to content
Merged
34 changes: 26 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,25 +22,43 @@ docker compose run --rm sim-cli --help
# List all gateways (requires -it for styled output)
docker compose run --rm -it sim-cli gateways list

# Create 5 gateways for a tenant
docker compose run --rm sim-cli gateways create --count 5 --tenant <uuid>

# Delete a gateway by ID
docker compose run --rm sim-cli gateways delete <id>
# Create a single gateway
docker compose run --rm sim-cli gateways create \
--factory-id FAC-001 \
--factory-key KEY-001 \
--model GW-X \
--firmware 1.0.0 \
--freq 1000

# Bulk create 5 gateways
docker compose run --rm sim-cli gateways bulk \
--count 5 \
--factory-id FAC-001 \
--factory-key KEY-001 \
--model GW-X \
--firmware 1.0.0 \
--freq 1000

# Delete a gateway by UUID
docker compose run --rm sim-cli gateways delete <gateway-uuid>
```

### Sensors

```bash
# Add a temperature sensor to a gateway
docker compose run --rm sim-cli sensors add <gateway-id> --type temperature --min 20.0 --max 80.0
# Add a temperature sensor to a gateway (numeric ID or UUID)
docker compose run --rm sim-cli sensors add <gateway-id-or-uuid> \
--type temperature \
--min 20.0 \
--max 80.0 \
--algorithm uniform_random
```

### Anomalies

```bash
# Trigger a disconnect anomaly on a gateway
docker compose run --rm sim-cli anomalies disconnect <gateway-id>
docker compose run --rm sim-cli anomalies disconnect <gateway-uuid> --duration 10
```

## Docker Compose configuration
Expand Down
14 changes: 5 additions & 9 deletions cmd/anomalies.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package cmd
import (
"fmt"
"os"
"strconv"

"github.com/NoTIPswe/notip-simulator-cli/internal/client"
"github.com/spf13/cobra"
Expand Down Expand Up @@ -70,14 +69,11 @@ var anomaliesNetworkDegradationCmd = &cobra.Command{
// ── outlier ───────────────────────────────────────────────────────────────────

var anomaliesOutlierCmd = &cobra.Command{
Use: "outlier <sensor-int-id>",
Short: "Inject an outlier reading into a sensor (uses the numeric sensor ID)",
Use: "outlier <sensor-uuid>",
Short: "Inject an outlier reading into a sensor",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
sensorID, err := strconv.ParseInt(args[0], 10, 64)
if err != nil {
return fmt.Errorf("sensor-id must be a numeric ID: %w", err)
}
sensorID := args[0]

var valuePtr *float64
if cmd.Flags().Changed("value") {
Expand All @@ -86,13 +82,13 @@ var anomaliesOutlierCmd = &cobra.Command{
}

spinner := startSpinner(
fmt.Sprintf("Injecting outlier into sensor %d...", sensorID),
fmt.Sprintf("Injecting outlier into sensor %s...", sensorID),
)
if err := client.New(simulatorURL).WithContext(cmd.Context()).InjectOutlier(sensorID, valuePtr); err != nil {
spinner.Fail("Failed to inject outlier")
return err
}
spinner.Success(fmt.Sprintf("Outlier injected into sensor %d", sensorID))
spinner.Success(fmt.Sprintf("Outlier injected into sensor %s", sensorID))
return nil
},
}
Expand Down
Loading