The New Engineer — HVAC

European HVAC sizing: EN 12828 expansion vessels, EN 378 zones, Swiss refrigerant rules.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
100%
Integridad del esquema
89%
Calidad de los nombres
90%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~7,793Tokens (definiciones de herramientas)
~8.3 KBTamaño de respuesta típico
Impacto significativo en la atención (6.09% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "hvac": {
      "url": "https://thenewengineer.com/mcp"
    }
  }
}

Puntos de conexión remotos

https://thenewengineer.com/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (6)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢size_expansion_vessel(installation_volume_l, highest_point_above_unit_m, lowest_point_from_unit_m, safety_valve_from_unit_m, installation, ...)

DETERMINISTIC: the same inputs always give the same result — from any AI, on any day. Figures come from the standard's tables and formulas, never from a language model's estimate. Every step is auditable. Size the expansion vessel and pressurisation of a closed heating or chilled-water circuit to EN 12828: static height, minimum pressure p0, fill pressure pa, final pressure pe, expansion volume, water reserve, nominal vessel volume with the standard vessel to buy, safety valve setting together with the minimum it must not fall below, pressure class of the lowest equipment, intermediate vessel when needed. Heights become pressures through the real density of the fluid, at the temperature that matters for each: the coldest for p0, the design temperature for the valve and the lowest point. Water and glycols therefore give different figures for the same height. Use it whenever the user asks to size or check an expansion vessel, pressurisation unit, pre-charge pressure or safety valve — in any language: vase d'expansion, maintien de pression, Ausdehnungsgefäss, Druckhaltung, vaso di espansione, vaso de expansión. Needs the installation water volume and THREE heights, all measured from the point where the expansion vessel connects to the network: - the highest point of the installation, above it; - the lowest point, usually below it (negative) or level with it; - the safety valve, which always sits on the heat generator or chiller. If the user does not know it, it is assumed 1 m above the vessel connection, and the result says so. Ask the user for the volume and the three heights before calling. NEVER invent a height: if the lowest point or the valve height is unknown, omit it. The result is then marked provisional and lists the questions to ask. Build your answer on `answer_outline`: it carries the assumptions, the questions and the link to the website, which measures all of these on the user's IFC model.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "installation_volume_l": {
      "description": "Total water content of the closed circuit, in litres: pipes, emitters, generator, buffer tank. THIS IS THE WATER, NOT THE VESSEL. If you know the vessel and want the water content, this is the wrong tool: call water_content_from_vessel.",
      "exclusiveMinimum": 0,
      "maximum": 5000000,
      "title": "Installation Volume L",
      "type": "number"
    },
    "highest_point_above_unit_m": {
      "anyOf": [
        {
          "maximum": 300,
          "minimum": -50,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Height of the REAL highest point of the installation - the top air vent - above the point where the expansion vessel connects to the network, in metres. Taken as given: no margin is added. NEEDED FOR A STATIC VESSEL ONLY: a compressor or pump unit holds the pressure itself, and heights play no part in its sizing — do not ask for them.",
      "title": "Highest Point Above Unit M"
    },
    "lowest_point_from_unit_m": {
      "anyOf": [
        {
          "maximum": 300,
          "minimum": -300,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Height of the REAL lowest point of the installation - the lowest drain - relative to the point where the expansion vessel connects to the network, in metres. NEGATIVE when below it, 0 when the vessel connects at the lowest point. Taken as given: no margin is added. Ask the user. NEVER invent it: if the user has not given it, omit it - the result is then marked provisional and returns the question to ask.",
      "title": "Lowest Point From Unit M"
    },
    "safety_valve_from_unit_m": {
      "anyOf": [
        {
          "maximum": 300,
          "minimum": -300,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Height of the safety valve relative to the point where the expansion vessel connects to the network, in metres. The safety valve always sits on the heat generator (boiler, heat pump) or chiller - tell the user so, it helps them find it. Ask for it; if they cannot say, omit it: it is then assumed 1 m above the vessel connection, and the result says so.",
      "title": "Safety Valve From Unit M"
    },
    "installation": {
      "anyOf": [
        {
          "enum": [
            "chauffage",
            "refroidissement"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "'chauffage' for heating, 'refroidissement' for cooling / chilled water. Omit: heating.",
      "title": "Installation"
    },
    "fluid": {
      "anyOf": [
        {
          "enum": [
            "eau",
            "meg",
            "mpg",
            "tyfocor"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Heat-transfer fluid: 'eau' (Water), 'meg' (MEG), 'mpg' (MPG), 'tyfocor' (TYFOCOR L (MPG)). Omit: plain water.",
      "title": "Fluid"
    },
    "glycol_pct": {
      "anyOf": [
        {
          "maximum": 60,
          "minimum": 0,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Glycol concentration in %, ignored for water. Defaults to 30 %.",
      "title": "Glycol Pct"
    },
    "flow_temperature_c": {
      "anyOf": [
        {
          "maximum": 100,
          "minimum": 0,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Flow temperature, °C. Omit: 80 in heating, 6 in cooling.",
      "title": "Flow Temperature C"
    },
    "return_temperature_c": {
      "anyOf": [
        {
          "maximum": 100,
          "minimum": -20,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Return temperature, °C. Omit: 60 in heating, 12 in cooling.",
      "title": "Return Temperature C"
    },
    "filling_temperature_c": {
      "anyOf": [
        {
          "maximum": 90,
          "minimum": 0,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Temperature at which the circuit is filled, °C. Omit: 10.",
      "title": "Filling Temperature C"
    },
    "min_temperature_c": {
      "anyOf": [
        {
          "maximum": 100,
          "minimum": -50,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "LOWEST temperature the fluid can reach, °C — including a breakdown, not just normal running. Omit and the filling temperature is used; in a glycol mix the calculation already goes down to the frost protection point.",
      "title": "Min Temperature C"
    },
    "design_temperature_c": {
      "anyOf": [
        {
          "maximum": 100,
          "minimum": 0,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Hottest the fluid ever gets, standstill included. Omit: the warmer of flow and return in heating, 40 °C in cooling.",
      "title": "Design Temperature C"
    },
    "pressurisation": {
      "anyOf": [
        {
          "enum": [
            "statique",
            "compresseur",
            "pompe"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Type of pressurisation: 'statique' (Pressure-maintained by gas cushion (Statico)), 'compresseur' (Compressor-driven (Compresso)), 'pompe' (Pump-driven (Transfero)). Omit: gas-cushion vessel.",
      "title": "Pressurisation"
    },
    "safety_valve_setting_bar": {
      "anyOf": [
        {
          "maximum": 10,
          "minimum": 2,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Safety valve setting in bar, one of the standard settings. Omit to take the smallest standard setting that works here. A setting below the minimum the installation needs is raised, and the result says so.",
      "title": "Safety Valve Setting Bar"
    },
    "minimum_required_pressure_bar": {
      "anyOf": [
        {
          "maximum": 10,
          "minimum": 0,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Pressure the installation requires at the pressurisation unit whatever the height - against cavitation at a pump suction, for instance. p0 never falls below it. Omit: zero.",
      "title": "Minimum Required Pressure Bar"
    },
    "language": {
      "default": "en",
      "description": "The user's language, for labels and alerts.",
      "enum": [
        "fr",
        "de",
        "en",
        "es",
        "it"
      ],
      "title": "Language",
      "type": "string"
    }
  },
  "required": [
    "installation_volume_l"
  ],
  "title": "size_expansion_vesselArguments"
}

Esquema de salida

{
  "type": "object",
  "additionalProperties": true,
  "title": "size_expansion_vesselDictOutput"
}
🟢water_content_from_vessel(vessel_volume_l, flow_temperature_c, return_temperature_c, pressurisation, static_height_m, ...)

DETERMINISTIC: the same inputs always give the same result — from any AI, on any day. Figures come from the standard's tables and formulas, never from a language model's estimate. Every step is auditable. Deduce the water content of an installation from the expansion vessel already fitted. WHAT THIS IS FOR. Refurbishment, and site visits with no drawings. Sizing a new vessel, a new pump or a new generator needs the water content, and on an existing installation nobody has it: the drawings are lost, or never matched what was built. The vessel on the wall is the one piece of evidence still standing, and it was chosen from that very figure. ASK THE OPERATOR FIRST. Whoever filled or refilled the system knows the real figure — from the meter, the filling station, or the maintenance log — and that figure beats any deduction. This tool is what you use when nobody knows, or to check a number that looks wrong. It gets the conversation moving; it does not close it. HOW. The sizing calculation is run backwards: a trial water content is fed to the EN 12828 sizing, the resulting vessel is compared with the one on site, and the trial is adjusted until they match. The formulas are never rewritten in reverse — the answer cannot contradict the direct calculation, because it is the same code. WHAT THE ANSWER IS WORTH. A vessel is picked from a catalogue range: a 200 L unit covers everything needing between 141 and 200 L. The result is therefore A RANGE, never a single figure. And an oversized vessel — common — will overstate the content. Compare the range with what you see on site; it does not replace looking. It also assumes the vessel was sized correctly in the first place. If it was not, the deduction inherits the mistake — which is itself worth knowing: a range far from what the installation plainly holds means the vessel is wrong, and that is a finding in its own right.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "vessel_volume_l": {
      "description": "Nominal capacity of the expansion vessel actually installed, in litres — read it on the nameplate.",
      "exclusiveMinimum": 0,
      "maximum": 100000,
      "title": "Vessel Volume L",
      "type": "number"
    },
    "flow_temperature_c": {
      "description": "Design flow temperature, °C. In heating this is the highest the water reaches.",
      "maximum": 200,
      "minimum": -50,
      "title": "Flow Temperature C",
      "type": "number"
    },
    "return_temperature_c": {
      "description": "Design return temperature, °C.",
      "maximum": 200,
      "minimum": -50,
      "title": "Return Temperature C",
      "type": "number"
    },
    "pressurisation": {
      "default": "static",
      "description": "How pressure is held: 'static' for a plain membrane vessel, 'compressor' for a compressor unit (Compresso and the like), 'pump' for a pump unit. A compressor or pump unit holds the pressure itself, so height and valve setting play no part.",
      "title": "Pressurisation",
      "type": "string"
    },
    "static_height_m": {
      "anyOf": [
        {
          "maximum": 300,
          "minimum": 0,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Height of the highest point above the vessel, in metres. Required for 'static' only — a compressor or pump unit does not use it.",
      "title": "Static Height M"
    },
    "valve_setting_bar": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "maximum": 25,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Safety valve setting, bar. Required for 'static' only.",
      "title": "Valve Setting Bar"
    },
    "fill_temperature_c": {
      "anyOf": [
        {
          "maximum": 100,
          "minimum": -50,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Temperature the water was at when the system was filled, °C. 10 °C is the usual mains temperature indoors. Ask, or state the assumption.",
      "title": "Fill Temperature C"
    },
    "min_temperature_c": {
      "anyOf": [
        {
          "maximum": 100,
          "minimum": -50,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "LOWEST temperature the fluid can reach, °C — including a breakdown, not just normal running. Indoors, 10 °C. Outdoors, 0 °C, or down to the freezing point of the glycol mix. This is what fixes the reference volume.",
      "title": "Min Temperature C"
    },
    "max_temperature_c": {
      "anyOf": [
        {
          "maximum": 250,
          "minimum": -50,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "HIGHEST temperature the fluid can reach, °C — in extreme conditions, running OR stopped. In heating it is the flow temperature. In cooling it is not the regime at all: a stopped chiller lets the water warm to ambient — 40 °C outdoors, 30 °C indoors in a temperate climate. This is what fixes the expansion.",
      "title": "Max Temperature C"
    },
    "fluid": {
      "default": "water",
      "description": "Heat-transfer fluid: 'eau' (Water), 'meg' (MEG), 'mpg' (MPG), 'tyfocor' (TYFOCOR L (MPG)).",
      "title": "Fluid",
      "type": "string"
    },
    "glycol_percent": {
      "default": 0,
      "description": "Glycol concentration in %, ignored for water.",
      "maximum": 60,
      "minimum": 0,
      "title": "Glycol Percent",
      "type": "number"
    },
    "installation": {
      "default": "heating",
      "description": "'heating' or 'cooling'.",
      "title": "Installation",
      "type": "string"
    }
  },
  "required": [
    "vessel_volume_l",
    "flow_temperature_c",
    "return_temperature_c"
  ],
  "title": "water_content_from_vesselArguments"
}
🟢check_refrigerant_switzerland(refrigerant, application, cooling_capacity_kw, heating_capacity_kw, refrigerant_charge_kg, ...)

DETERMINISTIC: the same inputs always give the same result — from any AI, on any day. Figures come from the regulation's annexes and thresholds, never from a language model's estimate. Every step is auditable. Swiss refrigerant regulation check (ORRChim / ChemRRV annex 2.10, OFEV synthesis of May 2026, rules adopted 29.10.2025) plus refrigerant data from EN 378-1 Annex E: GWP (AR4, the ORRChim basis), ODP, LFL, safety class, practical limit. Returns, for a given refrigerant and installation: the date from which machines using it can no longer be placed on the Swiss market (import from 01.01.2027, sale to third parties from 01.07.2027), the date from which filling with virgin refrigerant is banned, the period when only reclaimed refrigerant may be used, and the date from which all filling is banned. SCOPE: heating, air conditioning, building cooling and process cooling, data centres included. NOT food refrigeration, cold rooms or deep freezing: those are a different trade, and the tool declines them instead of answering. Use it whenever the user asks about a refrigerant in Switzerland — its GWP / PRG, flammability, whether a chiller, heat pump, split, VRF or cold room using it may still be sold or refilled — in any language: fluide frigorigène, Kältemittel, refrigerante, refrigerant, R-32, R-410A, R-290, CO2, NH3... The answer depends on the installation. The regulation distinguishes: use (building cooling, food refrigeration medium / low temperature / combined / deep freezing, process cooling, heat pump mainly for heating, ice rink), cooling capacity Q0K or heating capacity Q0H, self-contained (factory-built packaged unit) or not, split, direct expansion (incl. VRF), secondary coolant loop (chilled water / brine), air-cooled condenser and refrigerant charge. THIS TOOL ANSWERS ONE QUESTION ONLY: may the refrigerant still be sold and refilled in Switzerland, and until when. It says NOTHING about safety in the room - charge limits, machine room, detection, ventilation, ATEX. That is `check_en378_zones`. A question that mixes both - « may I use R-32 for 3 kg in a server room, and until when can I refill it » - needs BOTH tools: call this one for the dates, and check_en378_zones for the room. Do not answer half the question. NEVER guess these. Call the tool with what the user gave: it returns `provisional: true`, the possible `scenarios`, and `questions_to_ask` in the order that matters most. Ask them (one or two at a time), then call again. Natural refrigerants need no questions. Build your answer on `answer_outline`; quote exceptions as possible, never as granted.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "refrigerant": {
      "description": "Refrigerant designation as the user wrote it: 'R-32', 'R410A', 'R1234ze', 'CO2', 'propane'…",
      "title": "Refrigerant",
      "type": "string"
    },
    "application": {
      "anyOf": [
        {
          "enum": [
            "climatisation_batiment",
            "froid_alimentaire_positif",
            "froid_alimentaire_negatif",
            "froid_alimentaire_combine",
            "surgelation",
            "froid_process",
            "pac_chauffage",
            "patinoire_permanente",
            "patinoire_temporaire"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Use of the installation: 'climatisation_batiment' (building cooling, incl. reversible heat pump used mainly for cooling), 'froid_alimentaire_positif' (food/perishables, use temp ≥ 0 °C), 'froid_alimentaire_negatif' (≥ −25 °C), 'froid_alimentaire_combine' (multiplex medium + low temp with common discharge), 'surgelation' (< −25 °C), 'froid_process' (industrial process cooling), 'pac_chauffage' (heat pump mainly for heating), 'patinoire_permanente', 'patinoire_temporaire'. Omit if unknown.",
      "title": "Application"
    },
    "cooling_capacity_kw": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "maximum": 100000,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Peak useful cooling capacity Q0K, kW. Omit if unknown.",
      "title": "Cooling Capacity Kw"
    },
    "heating_capacity_kw": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "maximum": 100000,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Peak useful heating capacity Q0H, kW (heat pumps). Omit if unknown.",
      "title": "Heating Capacity Kw"
    },
    "refrigerant_charge_kg": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "maximum": 100000,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Total refrigerant charge, kg. Omit if unknown.",
      "title": "Refrigerant Charge Kg"
    },
    "self_contained": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "True if 'autonome': factory-built circuits in a frame/casing and no gas-carrying part connected on site (packaged chiller, monobloc heat pump, rooftop). Omit if unknown.",
      "title": "Self Contained"
    },
    "split": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "True for a split system (indoor/outdoor units linked by refrigerant lines laid on site). Omit if unknown.",
      "title": "Split"
    },
    "direct_expansion": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "True if the refrigerant evaporates directly in the room units / evaporators (DX, incl. VRF); False if it cools a water or brine loop. Omit if unknown.",
      "title": "Direct Expansion"
    },
    "secondary_circuit": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "True if cold is distributed through a secondary coolant loop (chilled water, glycol, brine). Omit if unknown.",
      "title": "Secondary Circuit"
    },
    "air_cooled_condenser": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "True if heat is rejected through an air-cooled condenser (heat pump: its air heat exchanger). Omit if unknown.",
      "title": "Air Cooled Condenser"
    },
    "evaporator_count": {
      "anyOf": [
        {
          "maximum": 1000,
          "minimum": 1,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Number of evaporators.",
      "title": "Evaporator Count"
    },
    "refrigerant_circuit_count": {
      "anyOf": [
        {
          "maximum": 100,
          "minimum": 1,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Number of refrigerant circuits.",
      "title": "Refrigerant Circuit Count"
    },
    "heat_recovery": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "True if rejected heat is recovered.",
      "title": "Heat Recovery"
    },
    "simultaneous_heating_cooling": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "True for simultaneous heating and cooling with at least 2 air heat exchangers.",
      "title": "Simultaneous Heating Cooling"
    },
    "gwp_if_unlisted": {
      "anyOf": [
        {
          "maximum": 30000,
          "minimum": 0,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "ONLY if a previous call said the refrigerant is not in the database: its GWP (AR4) from the manufacturer's datasheet, given by the user.",
      "title": "Gwp If Unlisted"
    },
    "odp_if_unlisted": {
      "anyOf": [
        {
          "maximum": 20,
          "minimum": 0,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "ONLY with gwp_if_unlisted: its ODP (0 for HFC/HFO).",
      "title": "Odp If Unlisted"
    },
    "family_if_unlisted": {
      "anyOf": [
        {
          "enum": [
            "naturel",
            "stable",
            "hfo"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "ONLY with gwp_if_unlisted: 'naturel' (natural), 'stable' (contains any HFC/PFC — e.g. R-454B, R-454C, R-455A), 'hfo' (only HFO and/or natural components).",
      "title": "Family If Unlisted"
    },
    "language": {
      "default": "en",
      "description": "The user's language, for labels. French or English text; translate for de/it/es.",
      "enum": [
        "fr",
        "de",
        "en",
        "es",
        "it"
      ],
      "title": "Language",
      "type": "string"
    }
  },
  "required": [
    "refrigerant"
  ],
  "title": "check_refrigerant_switzerlandArguments"
}

Esquema de salida

{
  "type": "object",
  "additionalProperties": true,
  "title": "check_refrigerant_switzerlandDictOutput"
}
🟢check_en378_zones(refrigerant, configuration, charge_kg, volume_local_m3, volume_enceinte_m3, ...)

DETERMINISTIC: the same inputs always give the same result — from any AI, on any day. Figures come from the standard's tables and formulas, never from a language model's estimate. Every step is auditable. EN 378 applied to BUILDING projects, volume by volume. An installation does not occupy one room but several: the machine, the rooms crossed by refrigerant lines, the rooms served by indoor units. Each volume is classified on its own — access category (a/b/c) and location class (I–IV) — and each classification calls for its own measures. The tool answers per volume, never as a single verdict. It returns, for every volume: its classification and why, the charge limit from Tables C.1 and C.2 of EN 378-1 (with the C.2 formula computed when the table calls for it), whether the charge exceeds it, the EN 378-3 measures that follow, the applicable texts (EN 378-1 to -4, EN IEC 60079-10-1, SUVA 66139 and 2153) and the ventilation flow rates. FOUR CONFIGURATIONS COVER ALMOST EVERY BUILDING PROJECT. Bring the user's case back to one of them wherever possible: machine_en_local_technique chiller or heat pump, all refrigerant inside the machine, standing in a plant room -> c III enceinte_accessible_fermee all refrigerant inside a walk-in ventilated enclosure that stays closed even for maintenance -> the enclosure is c III, the room around it carries no requirement enceintes_inaccessibles one or more units, each in a manufacturer's non-accessible ventilated enclosure -> TWO analyses: the enclosure in operation (class IV, the manufacturer sizes and justifies it, ask him for the enclosure ventilation), and the plant room with the enclosure OPEN for maintenance, which comes back to c III split_traversant split or VRF outdoors, refrigerant lines crossing occupied rooms -> each room on its own; offices and their circulations are b I, and formula C.2 gives the maximum charge for the floor area, or the minimum floor area for the charge THIS TOOL ANSWERS SAFETY IN THE ROOM. It says NOTHING about whether the refrigerant may still be placed on the market or refilled: in Switzerland that is `check_refrigerant_switzerland`. A question that mixes both - « may I use R-32 for 3 kg in a server room, and until when can I refill it » - needs BOTH tools: call this one for the room, and check_refrigerant_switzerland for the dates. Do not answer half the question. NEVER guess. The refrigerant, the configuration and the charge are always needed; a split also needs the floor area and how the indoor unit is mounted (floor, wall, window, ceiling), since C.2 depends on it. Without them the result is `provisional` and carries `questions_to_ask`: ask them, one or two at a time, then call again. Answer from `answer_outline`, volume by volume. In building projects, detection is preferred over treating a plant room as an ATEX zone. C.3 is never used. Say that the practical limit alone proves nothing: the charge limit of Tables C.1 and C.2 is what counts. SCOPE: building services. Cold rooms, food refrigeration and industrial process refrigeration are a different trade.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "refrigerant": {
      "description": "Refrigerant as the user wrote it: 'R-32', 'R410A', 'R290', 'R717', 'propane'…",
      "title": "Refrigerant",
      "type": "string"
    },
    "configuration": {
      "anyOf": [
        {
          "enum": [
            "machine_en_local_technique",
            "enceinte_accessible_fermee",
            "enceintes_inaccessibles",
            "split_traversant"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "How the installation is laid out. Omit if unknown: the tool returns the question to ask.",
      "title": "Configuration"
    },
    "charge_kg": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "maximum": 100000,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Refrigerant charge of the largest circuit, in kg.",
      "title": "Charge Kg"
    },
    "volume_local_m3": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "maximum": 10000000,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Volume of the plant room, in m³.",
      "title": "Volume Local M3"
    },
    "volume_enceinte_m3": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "maximum": 10000000,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Volume of the ventilated enclosure, in m³.",
      "title": "Volume Enceinte M3"
    },
    "volume_local_desservi_m3": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "maximum": 10000000,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Volume of the smallest room crossed or served by an indoor unit, in m³.",
      "title": "Volume Local Desservi M3"
    },
    "surface_local_desservi_m2": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "maximum": 1000000,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Floor area of that room, in m². Formula C.2 needs it; without it the tool returns the minimum area required instead.",
      "title": "Surface Local Desservi M2"
    },
    "pose": {
      "anyOf": [
        {
          "enum": [
            "sol",
            "mural",
            "fenetre",
            "plafond"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "How the indoor unit is mounted: on the floor, wall, window or ceiling. Formula C.2 depends on it.",
      "title": "Pose"
    },
    "acces_local": {
      "anyOf": [
        {
          "enum": [
            "a",
            "b",
            "c"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Access category of the plant room. Omit: 'c', authorised persons only.",
      "title": "Acces Local"
    },
    "acces_locaux_desservis": {
      "anyOf": [
        {
          "enum": [
            "a",
            "b",
            "c"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Access category of the rooms crossed or served: 'b' for offices, laboratories, workplaces; 'a' for hotels, schools, shops, hospitals, homes.",
      "title": "Acces Locaux Desservis"
    },
    "language": {
      "default": "fr",
      "description": "The user's language. Texts are in French: translate them.",
      "enum": [
        "fr",
        "de",
        "en",
        "es",
        "it"
      ],
      "title": "Language",
      "type": "string"
    }
  },
  "required": [
    "refrigerant"
  ],
  "title": "check_en378_zonesArguments"
}

Esquema de salida

{
  "type": "object",
  "additionalProperties": true,
  "title": "check_en378_zonesDictOutput"
}
🟢read_ifc_networks(token)

DETERMINISTIC: networks come from geometry, not from a guess. The same model always gives the same networks, from any AI, on any day. Read the networks of an IFC model already uploaded by the user. WHAT A NETWORK IS. A set of parts that touch each other, cut at equipment: a pump, an air handling unit, a chiller separates two systems, so the tool does not run through them. This is measured on the geometry — you cannot and need not check it. WHAT YOU GET, PER NETWORK state 'homogeneous' — a system exists, some parts were mis-named by the modeller; the tool will correct them. 'undetermined' — no system can be read. THIS is where you are useful. 'assigned' — the user or you already named it. system the dominant name, when there is one part_dominante the share of named parts carrying it equipements_voisins the NAMES of the machines this network is connected to. An undetermined network starting from 'AHU-Supply-L2' names itself — but only you can see it. systemes_existants every system name already in the model WHAT TO DO NEXT. Propose a name for each undetermined network, using the neighbouring equipment, the existing system names, and anything the user told you about the project's naming scheme. Ask the user for their list of planned systems if you do not have it. Then call name_ifc_networks. WHAT NOT TO DO. Do not rename a network the report calls 'homogeneous' unless its name plainly contradicts the equipment it is connected to — and then say why. Do not invent a network: you cannot see the geometry, and the tool already did that work. CALL THIS AGAIN WHENEVER THE STATE MAY HAVE MOVED. The token stays valid for 48 hours and is a key, not a snapshot: every call recomputes and returns the model AS IT IS NOW. The user works in the browser between your messages — renaming networks, assigning parts by hand, accepting or refusing corrections. So the moment they say they have done something, or you are about to state a figure, call this tool again. NEVER ANSWER FROM MEMORY about networks, counts or states. What you read earlier is already out of date the moment the user touches the 3D view, and a stale figure stated confidently is worse than no figure at all.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "token": {
      "description": "The token from the link the user pasted. It looks like the last part of thenewengineer.com/ia/XXXX. The user gets it on the model page, button 'share with my AI'. Valid 48 hours, one model.",
      "title": "Token",
      "type": "string"
    }
  },
  "required": [
    "token"
  ],
  "title": "read_ifc_networksArguments"
}
🟡name_ifc_networks(token, names, reasoning)

Apply the names you propose, and get back the updated report. THE NAMES ARE YOURS, THE NETWORKS ARE NOT. You are naming what the tool measured; you are not changing what it measured. Nothing you send here alters a network, a part, or a correction. WHAT COMES BACK. The updated report, a 3D link where the user sees your names in colour, and a link to the corrective Dynamo script that writes the systems back into Revit. ALWAYS GIVE THE USER THE 3D LINK, and say plainly which names are yours. Networks are deterministic; names are a proposal. A user who cannot tell the two apart cannot check your work. AFTER THE USER HAS BEEN IN THE 3D VIEW, call read_ifc_networks again with the same token before saying anything about the model. They may have renamed what you proposed, assigned parts by hand, or refused a correction — and only a fresh read shows it.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "token": {
      "description": "The same token used with read_ifc_networks.",
      "title": "Token",
      "type": "string"
    },
    "names": {
      "additionalProperties": true,
      "description": "One name per network, keyed by its 'rang' as a string, for instance: {'3': 'SUPPLY L2', '7': 'EXTRACT KITCHEN'}. Only include the ones you are naming; the others are left untouched.",
      "title": "Names",
      "type": "object"
    },
    "reasoning": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "One short line per name, saying what it is based on — the neighbouring unit, the project's naming scheme, an existing system. Shown to the user, who decides.",
      "title": "Reasoning"
    }
  },
  "required": [
    "token",
    "names"
  ],
  "title": "name_ifc_networksArguments"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada6 herramientas
verificadoversión no registrada3 herramientas