---
title: "TapHome pre Modbus RTU / ASCII / TCP"
description: "Integrujte TapHome do BMS alebo SCADA cez Modbus: príklad s mapou registrov na strane TapHome, zoznamom bodov pre master a ukážkou v Pythone."
url: "https://taphome.com/sk/docs/expose-devices/modbus/"
language: sk
lastmod: 2026-11-09
generator: hugo
ai:
  topics: ["modbus-integration","expose-devices","bms-integration","modbus-tcp","rs485-communication","system-integration"]
  questions: ["Ako integrujem TapHome do systému BMS alebo SCADA?","Ako vystavím zariadenia TapHome cez Modbus?","Ako vyzerá mapa registrov Modbus v TapHome?","Akú adresu registra použije BMS pre vystavenú hodnotu?","Aké typy registrov a dátové typy môže vystavená hodnota použiť?","Čo vracia register platnosti?","Ako Modbus master spustí akciu zariadenia, napríklad príkaz žalúzií?","Na ktoré Slave ID TapHome odpovedá?","Prečo master dostáva výnimku Modbus 0x02 alebo 0x0A?","Čo sa v rozhraniach Modbus slave zmenilo s TapHome 2026.1?"]
---

# TapHome pre Modbus RTU / ASCII / TCP

TapHome ako Modbus slave pre BMS, SCADA či PLC cez Modbus TCP, RTU alebo ASCII: vyberte hodnoty a akcie zariadení, mapu registrov dajte mastrovi a čítajte ju tam.

Posledná aktualizácia: 2026-11-09

TapHome môže pracovať ako Modbus slave (server), takže systém riadenia budovy (BMS), SCADA alebo PLC číta a ovláda zariadenia TapHome cez Modbus TCP alebo cez Modbus RTU či ASCII na RS485. V časti **Vystaviť zariadenia** vyberiete hodnoty a akcie každého zariadenia, TapHome každej pridelí vlastný register a výsledkom je mapa registrov, ktorú odovzdáte tomu, kto nastavuje master. Takto môže zariadenia čítať aj druhý Core ([prepojenie viacerých Core](https://taphome.com/sk/docs/configuration/multiple-cores/)).

## Ako to funguje

1. **Na Core** pridajte rozhranie Modbus a vyberte, čo smie master vidieť a robiť: hodnoty (teplota, úroveň žalúzií, stav spínača …) a akcie (príkazy žalúzií, prepnutie …).
2. **Mapa registrov** vzniká priebežne podľa vášho výberu: každá hodnota dostane rozsah registrov na najbližšej voľnej adrese a hneď za ním register platnosti.
3. **Na mastri** zadá integrátor tie isté registre ako body alebo tagy. Čítanie vráti aktuálnu hodnotu; zápis zmení zariadenie ako manuálna zmena, rovnako ako v aplikácii.

Core ďalej riadi vlastné moduly a smart rules; Modbus len zdieľa hodnoty a akcie, ktoré ste vybrali.

## Príklad: žalúzie a termostat pre BMS

BMS budovy číta teplotu v miestnosti, nastavuje požadovanú teplotu termostatu a môže zastaviť žalúzie. Na Core v časti **Vystaviť zariadenia** vyberte **Pridať nové rozhranie** → **Modbus TCP** a potom pridajte žalúzie a termostat. Toto je úplná konfigurácia na strane TapHome — kliknite na register alebo na **Pridať zariadenie** a uvidíte ďalší krok:



1. **IP adresa Core** — BMS sa k nemu pripája. Dajte Core pevnú adresu, napríklad rezerváciou DHCP v routeri.
2. **Slave ID** — BMS musí posielať rovnaké Unit ID; požiadavka s iným ID dostane výnimku 0x0A.
3. **Hodnota** zaberá dva registre: samotnú hodnotu a za ňou register platnosti. *×100* je násobiteľ: úroveň žalúzií 0,55 sa číta ako 55.
4. **Akcia** má jeden register, do ktorého BMS zapisuje. Stop je coil: zápis ON zastaví žalúzie.
5. **Nastavenia registra** — typ registra, index, dátový typ, násobiteľ, poradie bajtov a register platnosti. Predvolené hodnoty zvyčajne vyhovujú; index zmeňte, keď BMS očakáva pevné rozloženie.
6. **Pridať zariadenie** — zaškrtnite hodnoty a akcie zariadenia; **OK** ich pridá na najbližšie voľné adresy. Zapisovateľné hodnoty dostanú holding register (H) alebo coil (C), hodnoty len na čítanie input register (A) alebo discrete input (D).

## Na strane BMS alebo SCADA

Master potrebuje IP adresu a port Core (alebo nastavenia linky RS485), Slave ID a zoznam bodov. Pre príklad vyššie:

**Zoznam bodov**

| Bod                          | Register TapHome | Zápis od 1 | Funkčný kód          | Hodnota       |
|------------------------------|------------------|------------|----------------------|---------------|
| Úroveň žalúzií               | H 0              | 40001      | 03 čítanie, 06 zápis | 0–100         |
| Platnosť úrovne žalúzií      | H 1              | 40002      | 03                   | 0 = platná    |
| Uhol lamiel                  | H 2              | 40003      | 03 čítanie, 06 zápis | 0–100         |
| Platnosť uhla lamiel         | H 3              | 40004      | 03                   | 0 = platná    |
| Zastavenie žalúzií           | C 4              | 00005      | 05 zápis             | ON = zastaviť |
| Teplota                      | A 5              | 30006      | 04                   | ÷ 10 = °C     |
| Platnosť teploty             | A 6              | 30007      | 04                   | 0 = platná    |
| Požadovaná teplota           | H 7              | 40008      | 03 čítanie, 06 zápis | ÷ 10 = °C     |
| Platnosť požadovanej teploty | H 8              | 40009      | 03                   | 0 = platná    |

Všetky registre sú Int16 (coil je jeden bit). H = holding register, A = input register, C = coil.

> TapHome čísluje registre od 0, tak ako sa posielajú v požiadavke. Mastre, ktoré používajú zápis od 1 (40001 pre holding register 0), majú číslo o jedna vyššie — posun o jednu je najčastejšia príčina čítania nesprávnej hodnoty.



**Python (pymodbus)**

Čítanie a zápis z príkladu cez [pymodbus](https://github.com/pymodbus-dev/pymodbus) 3.16:

\```python from pymodbus.client import ModbusTcpClient client = ModbusTcpClient(&#34;192.168.1.50&#34;, port=502) client.connect() # Teplota: input register 5 (hodnota × 10) a 6 (platnosť, 0 = platná) rr = client.read\_input\_registers(5, count=2, device\_id=1) value, validity = client.convert\_from\_registers(rr.registers, client.DATATYPE.INT16) if validity == 0: print(f&#34;Temperature: {value / 10} °C&#34;) # Požadovaná teplota 22,5 °C: holding register 7, zapisuje sa × 10 client.write\_register(7, 225, device\_id=1) # Zastavenie žalúzií: zápis ON do coilu 4 client.write\_coil(4, True, device\_id=1) client.close() \`\`\`

Knižnice pre iné jazyky: [NModbus4](https://github.com/NModbus4/NModbus4) (C#), [libmodbus](https://libmodbus.org) (C), [digitalpetri/modbus](https://github.com/digitalpetri/modbus) (Java), [goburrow/modbus](https://github.com/goburrow/modbus) (Go). Protokol vysvetľuje [Simply Modbus](http://www.simplymodbus.ca/).

Master by mal čítať register platnosti spolu s hodnotou (oboje jednou požiadavkou) a každý kód iný než 0 brať ako poruchu — stratené zariadenie sa potom v BMS ukáže ako porucha, nie ako zamrznutá hodnota.

## Rozhrania a komunikačné vlastnosti

| Rozhranie | Vlastnosti | Predvolené |
|---|---|---|
| **Modbus TCP** | **TCP port**, **Slave ID** | port 502, najbližšie voľné Slave ID na porte |
| **Modbus RTU**, **Modbus ASCII** | svorka BUS 1, BUS 2 alebo BUS 3, prenosová rýchlosť, dátové bity, parita, stop bity, **Slave ID** | bez svorky, 9600 Bd, 8 dátových bitov (ASCII 7), parita None, 1 stop bit, Slave ID 1 |

- **Viac mastrov cez TCP:** viac rozhraní Modbus TCP môže zdieľať jeden port, ak majú rôzne Slave ID — napríklad jedno pre BMS a jedno pre druhý Core, každé s vlastnými registrami. Naraz najviac 10 spojení.
- **RS485:** rozhranie RTU alebo ASCII sa spustí až po výbere svorky a jedna svorka nesie jedno rozhranie.
- **Slave ID** je 1 až 247. Rozhranie odpovedá len na vlastné: Modbus TCP vráti na iné Unit ID (aj 0 alebo 255) výnimku 0x0A, RTU a ASCII na rámce pre inú adresu neodpovedajú.

Zoznam rozhraní ukazuje konflikty, napríklad rovnaký port a Slave ID dvakrát alebo rozhranie bez svorky.

## Nastavenia registra

| Nastavenie | Hodnoty |
|---|---|
| **Typ registra** | **H** holding register, **A** input register, **C** coil, **D** discrete input. Master môže zapisovať len do H a C. |
| **Index registra** | 0 až 65535, adresa v požiadavke Modbus. |
| **Dátový typ** | Bool, Int16 a UInt16 zaberajú jeden register, Int32, UInt32 a Float dva. C a D nesú len Bool. |
| **Multiplier** | Čítanie: register = hodnota × násobiteľ. Zápis: hodnota = register ÷ násobiteľ. Teploty majú predvolene ×10, úrovne a percentá ×100 (0,55 → 55). |
| **Threshold** | Namiesto násobiteľa pre Bool na číselnej hodnote: true, keď hodnota dosiahne aspoň prah; zápis true do coilu nastaví hodnotu na prah, false na 0. |
| **Endianness** | BigEndian alebo LittleEndian; **Byte swap** navyše prehodí bajty vnútri každého registra pri Int32, UInt32 a Float. |

Detail rozhrania označí registre, ktorých rozsahy sa prekrývajú. Prekrývajúca sa hodnota sa neobsluhuje — dajte každej hodnote vlastný rozsah vrátane jej registra platnosti.

## Register platnosti a náhradná hodnota

**Include validity register** (pri C a D **Include validity bit**) je predvolene zapnutý. Register len na čítanie hneď za hodnotou oznamuje mastrovi, či je hodnota platná; keď nie je, registre hodnoty namiesto nej vrátia **Fallback value** (pri Float NaN s voľbou **Use NaN as fallback**).

| Kód | Význam |
|---|---|
| 0 | platná |
| 1 | hodnota sa nezmestí do dátového typu (napríklad NaN v celočíselnom type) |
| 2 | zariadenie je nedostupné alebo v chybe |
| 3 | nastavenia registra sú neplatné |
| 5 | zatiaľ žiadna hodnota, napríklad hneď po štarte Core |

Pri C a D je bit platnosti 1, keď hodnota nie je platná.

## Akcie

- **Akcia bez parametrov** (Stop, Toggle …) má jeden register na H alebo C. Zápis 1 alebo viac, prípadne coil ON, ju spustí; zápis 0 vráti výnimku 0x03.
- **Akcia s parametrami** (pripočítanie k úrovni žalúzií, nastavenie rozsahu …) má jeden holding register na každý parameter, jeden za druhým. Jeden zápis musí pokryť všetky; zápis len niektorých vráti výnimku 0x03.
- Registre akcií sú len na zápis — ich čítanie vráti výnimku 0x02.

## Čo dostane master

TapHome obsluhuje funkčné kódy 01, 02, 03, 04, 05, 06, 15 a 16. Jedna požiadavka môže čítať viac hodnôt za sebou; inak master dostane výnimku:

| Výnimka | Kedy |
|---|---|
| 0x01 | nepodporovaný funkčný kód |
| 0x02 | adresa nepriradená žiadnej hodnote, rozsah s medzerou, zápis do A alebo D, čítanie registra akcie, zápis do registra platnosti |
| 0x03 | hodnota, ktorú zariadenie nemôže prijať, alebo neplatný zápis akcie; zápis viacerých hodnôt sa vykoná celý, alebo vôbec |
| 0x04 | zariadenie zápis odmietlo |
| 0x0A | Modbus TCP: iné Slave ID (Unit ID), než má rozhranie |

Modbus TCP zatvorí spojenie, ktoré je 15 minút nečinné.

## Aktualizácia na 2026.1

> [!WARNING]
> Pri aktualizácii riadiacej jednotky na 2026.1 sa existujúce rozhrania Modbus slave prevedú automaticky so zachovaním adries registrov a Slave ID. Register Stop sa neprevedie pri žalúziách KNX, pri žalúziách a zariadeniach **Markíza** z Packet parsera a pri virtuálnych zariadeniach **Markíza**; master, ktorý ho používal, dostane na jeho adrese výnimku 0x02 ([release notes 2026.1](https://taphome.com/sk/docs/release-notes/2026-1/#expose-devices)).

Od verzie 2026.1 odpovedá Modbus TCP len na vlastné Slave ID — ak váš master posiela Unit ID 0 alebo 255, nastavte ho na Slave ID rozhrania.

## Ladenie pripojení Modbus RTU

RS485 je zdieľaná zbernica, takže počítač s prevodníkom USB na RS485 (napríklad [FTDI USB-RS485-WE-1800-BT](https://ftdichip.com/products/usb-rs485-we-1800-bt/)) a terminálovým softvérom, ako je [Terminal](http://www.der-hammer.info/terminal/) pre Windows, môže počas integrácie odpočúvať komunikáciu.
