-
Soaker Hose End Plug
One of the soaker hoses in Mary’s Vassar Farms garden split lengthwise near one end:

Soaker Hose Plug – hose split Although the hose is fully depreciated, I thought it’d be worthwhile to cut off the damaged end and conjure an end cap to see if a simple plug can withstand 100 psi water pressure.
A pair of Delrin (because I have it) plugs with serrations fill the hose channels, with the outer clamp squishing the hose against them:

Soaker Hose Plug – channel plugs – side view In real life, they’ll be pushed completely into the hose, with a generous layer of silicone
snotcaulk improving their griptivity.I started with 8 mm plugs, but they didn’t quite fill the channels:

Soaker Hose Plug – channel plugs – 8 mm test fit Going to 8.5 mm worked better, although there’s really no way to force the granulated rubber shape into a snug fit around a cylinder:

Soaker Hose Plug – channel plugs test fit Fortunately, they need not be leakproof, because leaking is what the hose does for a living. Well, did for a living, back before it died.
The clamps have a solid endstop, although it’s more to tidy the end than to hold the plugs in place:

Soaker Hose End Plug – Slic3r The clamps need aluminum backing plates to distribute the stress evenly across their flat sides:

Soaker Hose Plug – installed Those are 8-32 stainless steel screws. The standard 1 inch length worked out exactly right through no fault of my own.
The OpenSCAD source code as a GitHub Gist:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters// Rubber Soaker Hose End Plug // Ed Nisley KE4ZNU June 2019 // 2020-05 Two-channel hose end plug Layout = "Hose"; // [Hose,Block,Show,Build] //- Extrusion parameters must match reality! /* [Hidden] */ ThreadThick = 0.25; ThreadWidth = 0.40; HoleWindage = 0.2; Protrusion = 0.1; // make holes end cleanly inch = 25.4; function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); //———- // Dimensions // Hose lies along X axis HoseTubeOD = 12.0; // water tube diameter HoseTubeOC = 12.5; // .. spacing HoseWebThick = 7.8; // center joining tubes Hose = [100,25.0,HoseTubeOD]; // X=very long, Y=overall width, Z=thickness HoseSides = 12*4; PlugLength = 25.0; // plugs in hose channels PlateThick = 5.0; // end block thickness WallThick = 2.0; // overall minimum thickness Kerf = 0.75; // cut through middle to apply compression ID = 0; OD = 1; LENGTH = 2; // 8-32 stainless screws Screw = [4.1,8.0,3.0]; // OD = head LENGTH = head thickness Washer = [4.4,9.5,1.0]; Nut = [4.1,9.7,6.0]; CornerRadius = Washer[OD]/2; ScrewOC = Hose.y + Washer[OD]; echo(str("Screw OC: ",ScrewOC)); BlockOAL = [PlugLength + PlateThick,ScrewOC + Washer[OD],2*WallThick + Hose.z]; // overall splice block size echo(str("Block: ",BlockOAL)); //———————- // Useful routines module PolyCyl(Dia,Height,ForceSides=0) { // based on nophead's polyholes Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2); FixDia = Dia / cos(180/Sides); cylinder(d=(FixDia + HoleWindage),h=Height,$fn=Sides); } // Hose shape module HoseProfile() { rotate([0,-90,0]) translate([0,0,-Hose.x/2]) linear_extrude(height=Hose.x,convexity=4) union() { for (j=[-1,1]) // outer channels translate([0,j*HoseTubeOC/2]) circle(d=HoseTubeOD,$fn=HoseSides); translate([0,0]) square([HoseWebThick,HoseTubeOC],center=true); } } // Outside shape of splice Block // Z centered on hose rim circles, not overall thickness through center ridge module SpliceBlock() { difference() { hull() for (i=[-1,1], j=[-1,1]) // rounded block translate([i*(BlockOAL.x/2 – CornerRadius),j*(BlockOAL.y/2 – CornerRadius),-BlockOAL.z/2]) cylinder(r=CornerRadius,h=BlockOAL.z,$fn=4*8); for (j=[-1,1]) // screw holes translate([0, j*ScrewOC/2, -(BlockOAL.z/2 + Protrusion)]) PolyCyl(Screw[ID],BlockOAL.z + 2*Protrusion,6); cube([2*BlockOAL.x,2*BlockOAL.y,Kerf],center=true); // slice through center } } // Splice block less hose module ShapedBlock() { difference() { SpliceBlock(); translate([(-Hose.x/2) + (BlockOAL.x/2) – PlateThick,0,0]) HoseProfile(); } } //———- // Build them if (Layout == "Hose") HoseProfile(); if (Layout == "Block") SpliceBlock(); if (Layout == "Show") { ShapedBlock(); translate([(-Hose.x/2) + (BlockOAL.x/2) – PlateThick,0,0]) color("Green",0.25) HoseProfile(); } if (Layout == "Build") { SliceOffset = 0; intersection() { translate([SliceOffset,0,BlockOAL.z/4]) cube([4*BlockOAL.x,4*BlockOAL.y,BlockOAL.z/2],center=true); union() { translate([0,0.6*BlockOAL.y,BlockOAL.z/2]) ShapedBlock(); translate([0,-0.6*BlockOAL.y,BlockOAL.z/2]) rotate([0,180,0]) ShapedBlock(); } } } The original doodle, with dimensions vaguely related to the final model:

Soaker Hose End Plug – hose dimensions There is, as far as I can tell, no standardization of dimensions or shapes across manufacturers, apart from the threaded hose fittings.