OBSAH

Úvod

ThinKnx nemá v logickém modulu převod z jednoho datového typu na jiný. Proto je potřeba jej vytvořit jako skript v C# v jejich logickém modulu.


Tento článek se zabývá konverzí 2bajtové hodnoty s plovoucí desetinou čárkou (2 byte float) na 1bajtovou bezznaménkovou (1 byte unsigned integer) hodnotu. Tedy něco v rozsahu 0-255. Může jít například o konverzi datového typu DTP 9.007, tedy relativní vlhkost v procentech do datového typu DTP 5.001, tedy obecné procento (používané např. pro úroveň stmívače, žaluzií nebo rychlost ventilátoru).


Logické schémata se dají Exportovat i Importovat. Logické schéma pro převod z DTP 9.xxx na DTP 5.xxx naleznete v příloze tohoto článku.


Zdrojový kód v příloze jako conversions.cs nebo zde:

using System;
using System.Collections.Generic;
using System.Text;

/// <summary>
/// Tato třída je připravena pro použití ve skriptovacím uzlu Thinknx.
/// Metoda MainMethod přebírá jeden parametr, provádí konverzi a vrací výsledek.
/// </summary>
public class Class1
{
    /// <summary>
    /// Hlavní metoda volaná skriptovacím modulem Thinknx.
    /// Převede vstupní hodnotu (očekává se float 0-100) na 1bajtovou hodnotu (0-255).
    /// </summary>
    /// <param name="parameter1">Vstupní parametr ze sběrnice, očekává se hodnota typu float.</param>
    /// <returns>Zkonvertovaná hodnota typu byte (0-255) jako objekt.</returns>
    public static object MainMethod(object parameter1)
    {
        float hodnotaProcentaFloat;

        // Bezpečný pokus o konverzi vstupního objektu na float.
        // Convert.ToSingle je robustní a zvládne různé číselné typy.
        try
        {
            hodnotaProcentaFloat = Convert.ToSingle(parameter1);
        }
        catch (Exception)
        {
            // Pokud se konverze nezdaří (např. vstup není číslo),
            // vrátíme bezpečnou výchozí hodnotu 0.
            return (byte)0;
        }

        // --- Zde je vložená logika z funkce PrevedNaProcento255 ---

        // Ošetření krajních hodnot pro zajištění správného rozsahu
        if (hodnotaProcentaFloat < 0.0f) hodnotaProcentaFloat = 0.0f;
        if (hodnotaProcentaFloat > 100.0f) hodnotaProcentaFloat = 100.0f;

        // 1. Normalizujeme vstupní hodnotu (0-100) na rozsah 0.0 až 1.0
        double normalizovanaHodnota = (double)hodnotaProcentaFloat / 100.0;
        
        // 2. Přenásobíme 255, abychom dostali cílový rozsah 0.0 až 255.0
        double procentaNaSkale255 = normalizovanaHodnota * 255.0;
        
        // 3. Zaokrouhlíme na nejbližší celé číslo a přetypujeme na byte.
        byte vysledek = (byte)System.Math.Round(procentaNaSkale255);

        // Vrátíme výsledek. Bude automaticky "zabalen" (boxed) do typu object.
        return vysledek;
    }
}


Při kopírování kódu se ujistěte, že kopírujete pouze kód na ne nic jiného.


Přidejte Logický Modul

Pokud již máte přidaný logický modul, můžete tento krok přeskočit.

  1. Vpravo nahoře klikněte na záložku Systém.

  2. Klikněte pravým tlačítkem myši na System a poté klikněte na Add Object.

  3. Najděte v Objektech Logic Module a dvojklikem jej přidejte do projektu.

Otevřete logický modul a vytvořte nové schéma

  1. Vpravo vyberte Logic Module.

  2. Klikněte na parametr Schemes a poté na tlačítko s třemi tečkami.

  3. Ve vyskakovacím okně klikněte na tlačítko Add.

  4. Vyberte vaše nové schéma a v parametru Label jej přejmenujte. 

  5. Poté označte parameter Scheme a přes tlačítko se třemi tečkami jej otevřete. 



Importujte připravené schéma

  1. Stáhněte soubor Thinknx_LogicModule.mxl z konce tohoto článku.

  2. V Logickém editoru klikněte na tlačítko Import a vyberte stažený XML soubor z kroku 1.

  3. Objeví se následující schéma
    POZNÁMKA: Schéma je přeipraveno, že může rovnou fungovat. Blok Scripting převádí hodnotu poslanou v KNX Input, v základu nastaveno na skupinovou adresu 29/7/8 a výstup posílá do KNX Output, v základu nastaveno na skupinovou adresu 29/7/9. 

Nastavte Vstup a Výstup

  1. Nastavení Vstupu:

    • Klikněte KNX Input.

    • Vpravo se objeví nastavení. Nastavte vámi žádanou skupinovou adresu.

  2. Nastavení Výstupu:

    • Klikněte KNX Output.
    • Vpravo se objeví nastavení. Nastavte vámi žádanou skupinovou adresu.

Zkopírování zdrojového kódu.

  1. Přejděte do záložky Node Type Library, vyberte Scripting a přetáhněte jej do prostoru.
  2. Označte Scripting blok a přejděte do IDE editoru.
  3. Smažte již stávající zdrojový kód.
  4. Vložte kód z tohoto článku.
  5. Klikněte na tlačítko Build.

    POZNÁMKA: Stisk tlačítka Build vyústí ve vyskakovací okno, které i odhalí, zda jsou v kódu chyby.
  6. IDE můžete nyní zavřít

Nastavte Vstup a Výstup

  1. Do Schématu vložte z Node Type Library bloky KNX Input a KNX Output.
  2. Propojte KNX Input s uzlem Patameter 1 a KNX Output s uzlem Output.
  3. Nastavení Vstupu:

    • Klikněte KNX Input.

    • Vpravo se objeví nastavení. Nastavte vámi žádanou skupinovou adresu.

  4. Nastavení Výstupu:

    • Klikněte KNX Output.
    • Vpravo se objeví nastavení. Nastavte vámi žádanou skupinovou adresu.

Uložení a Nahrání projektu na server

  1. Jakmile jsou ve schématu všechny úpravy hotovy, tak tlačítkem Save uložte nastavení schématu.

  2. Tlačítkem Close zavřete Schéma.

  3. Tlačítkem OK zavřete logický modul.

  4. Jakmile budete mít váš projekt hotový a připravený na nahrání, tak pomocí tlačítka Deploy (Lokální nebo Cloudový) nahrajte projekt do serveru.


Profit

Pokud je vše funkční a nahrané, tak v ETS je možné vidět zda vše funguje.

POZNÁMKA: Je nutné mít zapnutou diagnostiku a být připojen na stejný KNX systém jako Thinknx, aby ve skupinových adresách bylo možné vidět, to co vidíte na obrázku výše.