-- S7 e2e smoke seed — closes #212 (umbrella #209). -- -- One-cluster seed pointing at the python-snap7 fixture -- (`docker compose -f tests/ZB.MOM.WW.OtOpcUa.Driver.S7.IntegrationTests/Docker/docker-compose.yml --profile s7_1500 up -d`). -- python-snap7 listens on port 1102 (non-priv); real S7 CPUs listen on 102. -- Publishes one Int16 tag at DB1.DBW0 under `ns=;s=DB1_DBW0` (driver -- sanitises the dot for browse names — see S7Driver.DiscoverAsync). -- -- Usage: -- sqlcmd -S "localhost,14330" -d OtOpcUaConfig -U sa -P "OtOpcUaDev_2026!" \ -- -i scripts/smoke/seed-s7-smoke.sql -- -- After seeding: -- Node:NodeId = "s7-smoke-node" -- Node:ClusterId = "s7-smoke" -- Then start server + run `./scripts/e2e/test-s7.ps1 -BridgeNodeId "ns=2;s=DB1_DBW0" -S7Host "127.0.0.1:1102"`. SET NOCOUNT ON; SET XACT_ABORT ON; SET QUOTED_IDENTIFIER ON; SET ANSI_NULLS ON; SET ANSI_PADDING ON; SET ANSI_WARNINGS ON; SET ARITHABORT ON; SET CONCAT_NULL_YIELDS_NULL ON; DECLARE @ClusterId nvarchar(64) = 's7-smoke'; DECLARE @NodeId nvarchar(64) = 's7-smoke-node'; DECLARE @DrvId nvarchar(64) = 's7-smoke-drv'; DECLARE @NsId nvarchar(64) = 's7-smoke-ns'; DECLARE @AreaId nvarchar(64) = 's7-smoke-area'; DECLARE @LineId nvarchar(64) = 's7-smoke-line'; DECLARE @EqId nvarchar(64) = 's7-smoke-eq'; DECLARE @EqUuid uniqueidentifier = '17BD5A10-17BD-417B-917B-D5A1017BD5A1'; DECLARE @TagId nvarchar(64) = 's7-smoke-tag-db1dbw0'; BEGIN TRAN; DELETE FROM dbo.Tag WHERE TagId IN (@TagId); DELETE FROM dbo.Equipment WHERE EquipmentId = @EqId; DELETE FROM dbo.UnsLine WHERE UnsLineId = @LineId; DELETE FROM dbo.UnsArea WHERE UnsAreaId = @AreaId; DELETE FROM dbo.DriverInstance WHERE DriverInstanceId = @DrvId; DELETE FROM dbo.Namespace WHERE NamespaceId = @NsId; DELETE FROM dbo.ConfigGeneration WHERE ClusterId = @ClusterId; DELETE FROM dbo.ClusterNodeCredential WHERE NodeId = @NodeId; DELETE FROM dbo.ClusterNodeGenerationState WHERE NodeId = @NodeId; DELETE FROM dbo.ClusterNode WHERE NodeId = @NodeId; DELETE FROM dbo.ServerCluster WHERE ClusterId = @ClusterId; INSERT dbo.ServerCluster(ClusterId, Name, Enterprise, Site, NodeCount, RedundancyMode, Enabled, CreatedBy) VALUES (@ClusterId, 'S7 Smoke', 'zb', 'lab', 1, 'None', 1, 's7-smoke'); INSERT dbo.ClusterNode(NodeId, ClusterId, RedundancyRole, Host, OpcUaPort, DashboardPort, ApplicationUri, ServiceLevelBase, Enabled, CreatedBy) VALUES (@NodeId, @ClusterId, 'Primary', 'localhost', 4840, 5000, 'urn:OtOpcUa:s7-smoke-node', 200, 1, 's7-smoke'); INSERT dbo.ClusterNodeCredential(NodeId, Kind, Value, Enabled, CreatedBy) VALUES (@NodeId, 'SqlLogin', 'sa', 1, 's7-smoke'); DECLARE @Gen bigint; INSERT dbo.ConfigGeneration(ClusterId, Status, CreatedBy) VALUES (@ClusterId, 'Draft', 's7-smoke'); SET @Gen = SCOPE_IDENTITY(); INSERT dbo.Namespace(GenerationId, NamespaceId, ClusterId, Kind, NamespaceUri, Enabled) VALUES (@Gen, @NsId, @ClusterId, 'Equipment', 'urn:s7-smoke:eq', 1); INSERT dbo.UnsArea(GenerationId, UnsAreaId, ClusterId, Name) VALUES (@Gen, @AreaId, @ClusterId, 'lab-floor'); INSERT dbo.UnsLine(GenerationId, UnsLineId, UnsAreaId, Name) VALUES (@Gen, @LineId, @AreaId, 's7-line'); INSERT dbo.Equipment(GenerationId, EquipmentId, EquipmentUuid, DriverInstanceId, UnsLineId, Name, MachineCode, Enabled) VALUES (@Gen, @EqId, @EqUuid, @DrvId, @LineId, 's7-sim', 's7-001', 1); -- S7 DriverInstance — python-snap7 S7-1500 profile, slot 0, port 1102. -- DriverConfig shape mirrors S7DriverConfigDto. INSERT dbo.DriverInstance(GenerationId, DriverInstanceId, ClusterId, NamespaceId, Name, DriverType, DriverConfig, Enabled) VALUES (@Gen, @DrvId, @ClusterId, @NsId, 'snap7-smoke', 'S7', N'{ "Host": "127.0.0.1", "Port": 1102, "CpuType": "S71500", "Rack": 0, "Slot": 0, "TimeoutMs": 5000, "Probe": { "Enabled": true, "IntervalMs": 5000, "TimeoutMs": 2000, "ProbeAddress": "MW0" }, "Tags": [ { "Name": "DB1_DBW0", "Address": "DB1.DBW0", "DataType": "Int16", "Writable": true, "WriteIdempotent": true } ] }', 1); INSERT dbo.Tag(GenerationId, TagId, DriverInstanceId, EquipmentId, Name, DataType, AccessLevel, TagConfig, WriteIdempotent) VALUES (@Gen, @TagId, @DrvId, @EqId, 'DB1_DBW0', 'Int16', 'ReadWrite', N'{"FullName":"DB1_DBW0","Address":"DB1.DBW0","DataType":"Int16"}', 1); EXEC dbo.sp_PublishGeneration @ClusterId = @ClusterId, @DraftGenerationId = @Gen, @Notes = N'S7 smoke — task #212'; COMMIT; PRINT ''; PRINT 'S7 smoke seed complete.'; PRINT ' Cluster: ' + @ClusterId; PRINT ' Node: ' + @NodeId; PRINT ' Generation: ' + CONVERT(nvarchar(20), @Gen); PRINT ''; PRINT 'Next steps:'; PRINT ' 1. Set src/.../Server/appsettings.json Node:NodeId = "s7-smoke-node"'; PRINT ' Node:ClusterId = "s7-smoke"'; PRINT ' 2. docker compose -f tests/.../S7.IntegrationTests/Docker/docker-compose.yml --profile s7_1500 up -d'; PRINT ' 3. dotnet run --project src/ZB.MOM.WW.OtOpcUa.Server'; PRINT ' 4. ./scripts/e2e/test-s7.ps1 -BridgeNodeId "ns=2;s=DB1_DBW0" -S7Host "127.0.0.1:1102"';