Koppel je Smart TV aan Domoticz

Gepubliceerd door Robot One op

Samsung Smart TV met Domoticz besturing

Samsung televisie als actief onderdeel van je smarthome

Als je een moderne Smart TV hebt, wil je natuurlijk ook dat die een onderdeel wordt van je smarthome. Dan kun je via Domoticz controleren of de TV aan staat (en hoe lang). Je kunt hem uitzetten als je huisgenoten dat weer eens zijn vergeten. Of af en toe aanzetten tijdens je vakantie, zodat het lijkt of er iemand thuis is.

Het is mogelijk. Maar iedere Smart TV werkt anders. En zelfs de manier waarop Smart TV’s van hetzelfde merk worden aangestuurd, kan per type verschillen. Daarom zijn deze instructies alleen bedoeld voor Samsung Smart TV’s van na 2017. Voor oudere Samsung TV’s is er een Domoticz-plugin, genaamd samsungctl. Deze werkt niet met de nieuwere modellen. Daarvoor is wel een andere oplossing, die ik in dit artikel zal beschrijven. Ik heb dit getest met een Series 8 Crystal UHD Smart TV uit de TU8500 serie (2020). Deze TV heeft als extra voordeel dat je er ook live beelden van je Ring deurbel op kunt bekijken.

Geschikte Smart TV

De TU8500 televisies van Samsung passen prima in je smarthome. Ze zijn te bedienen vanuit Domoticz en laten het live beeld van je Ring deurbel in een pop-up zien. Maar het zijn ook gewoon topklasse TV’s met een levendig en scherp 4K Ultra HD scherm met Dynamic Crystal Color techniek. Ook ‘gewoon’ TV kijken of gamen is dus een prettige ervaring. Verkrijgbaar in formaten van groot tot supergroot.

Bekijk TU8500 Bekijk TU8502 Bekijk TU8510

Node-RED en MQTT

De oplossing die ik heb gebruikt om mijn nieuwe Samsung Smart TV te koppelen aan Domoticz, maakt gebruik van twee technieken die ik nog niet eerder op Robothuis heb beschreven: Node-RED en MQTT.

MQTT is een hardware-onafhankelijk protocol om gegevens uit te wisselen tussen IoT apparaten. Via MQTT worden voortdurend berichtjes heen en weer gestuurd langs diverse kanalen, topics genoemd.

Topic betekent letterlijk onderwerp, maar in MQTT wordt het gebruikt om berichten te groeperen. Zo zit er tegenwoordig standaard MQTT ondersteuning in Domoticz, waarbij er berichten worden uitgewisseld via twee topics: domoticz/in en domoticz/out.

Op het kanaal domoticz/out komt een eindeloze reeks berichtjes langs met de status van alle apparaten die in Domoticz actief zijn. Op het kanaal domoticz/in kun je zelf een berichtje sturen met sensordata of instructies aan Domoticz om iets uit te voeren. Meer hierover kun je lezen op de pagina MQTT Essentials, maar door gewoon te starten met MQTT, zoals hier beschreven, krijg je het al snel onder de knie.

MQTT Installeren

Om MQTT te kunnen gebuiken, moeten we eerst het pakket mosquitto installeren vanaf de command line:

sudo apt-get install mosquitto mosquitto-clients
sudo reboot

Ga daarna in Domoticz naar Instellingen > Hardware, vul onderin het scherm de gegevens in, zoals op de schermafbeelding hieronder.

MQTT installeren in Domoticz

De naam mag je zelf kiezen. Als type kies je MQTT Client Gateway with LAN interface. Als Remote address geef je het adres van Domoticz in. Als poort kies je 1883 (standaard voor MQTT) en bij gebruikersnaam en wachtwoord kun je je Domoticz gebruikersnaam en wachtwoord invullen. De rest van de velden hoeven niet te worden veranderd. Klik op Toevoegen en je bent klaar.

Node-RED

Node-RED is een programma dat helpt om gegevens (data en commando’s) uit te wisselen tusen diverse hardware-onderdelen in je IoT netwerk. Dit programma kun je zien als een uitgebreidere versie van Blockly, dat is ingebouwd in Domoticz: je bouwt een soort stroomdiagram (‘Flow’) in een scherm en trekt er lijntjes tussen om verbindingen te maken. Je hebt bijvoorbeeld blokjes (‘Nodes’) voor de invoer van gegevens, blokjes voor de uitvoer, blokjes om gegevens tussentijds te bewerken en om conditioneel gegevens door te sturen.

De echte kracht van Node-RED is echter dat je het kunt uitbreiden met diverse modules voor extra hardware en mogelijkheden. Node-RED werkt vrij intuïtief en je zult dan ook al snel doorhebben hoe het werkt, zeker als je begint aan de hand van twee voorbeelden, zoals in dit artikel.

Node-RED installeren

Node-RED installeer je vanaf de commandline (CLI) van je Raspberry Pi, dus via Putty. Geef de volgende commando’s en klik op Y en enter als daarom wordt gevraagd:

sudo apt update
sudo apt upgrade
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

Met het laatste commando worden Node (de Javascript server) en het programma Node-RED zelf geïnstalleerd. Je krijgt een waarschuwing dat dit wel 20 tot 30 minuten kan duren, maar dat is een factor 10 te pessimistisch. Mijn RPi 4B deed er ongeveer 2 minuten over.

Nu gaan we er allereerst voor zorgen dat Node-RED voortaan automatisch start bij reboot:

sudo systemctl enable nodered.service
sudo systemctl start nodered.service

Node-RED opnieuw installeren

Mocht er iets mis zijn gegaan (bijvoorbeeld als je onbekende onderdelen in Node-RED installeert die later niet meer te verwijderen zijn), dan kun je het beste alles weer verwijderen en opnieuw installeren. Mocht dat nodig zijn, geef dan de volgende commando’s:

node-red-stop
sudo npm -g remove node-red
sudo npm -g remove node-red-admin
rm -R ~/.node-red

Ga vervolgens terug naar het installeren van Node-RED, zoals hierboven beschreven.

Nog een opmerking over veiligheid: Node-RED is bij deze installatie onderdeel van je lokale netwerk. Wil je het ook via internet, dus buiten je netwerk, kunnen benaderen, dan is het nodig om de installatie te beveiligen. Lees er alles over op de Node-RED website.

Laat Node-RED communiceren met je TV

De volgende stap is ervoor te zorgen dat Node-RED kan communiceren met je TV. Dat kan door het installeren van een passende plugin.

STAP 1:
Open je Node-RED in je browser. Dat is te vinden op: http://192.168.1.234:1880. Ook hier weer geldt: vervang http://192.168.1.234 door het eigen IP adres van Domoticz, maar dan met poort 1880.

STAP 2:
Ga in Node-RED naar het hamburgermenu rechtsboven en kies Manage Palette.

STAP 3:
Klik op het tabblad Install. Typ in het search modules zoekvenster ‘samsung’.

Beschikbare Samsung modules

Er zijn er diverse plugins voor Samsung TV’s beschikbaar, maar ze werken niet allemaal met alle typen Smart TV’s. Samsung wil de manier van communiceren namelijk nogal eens veranderen. Voor de nieuwere TV’s uit de serie 8 van Samsung (2020) werkt in ieder geval de plugin node-red-contrib-samsung-tv-control. Zoek hem op in de lijst en klik op install. Je krijgt een pop-up met een waarschuwing en een link naar een pagina met meer informatie over deze plugin. Klik opnieuw op Install om te installeren.

STAP 4:
Het eerste wat je nu moet doen, is het instellen van het IP adres, de MAC (id) en een uniek Token van je TV in Node-RED.

Het IP en de MAC zijn vrij eenvoudig te achterhalen via je internetmodem of router: daar staat ergens in de lijst van Verbonden apparaten Samsung, met IP-adres en MAC. Als je toch in je modem bezig bent, kun je daar meteen in DHCP het IP-adres voor de betreffende MAC reserveren, zodat dit in de toekomst niet onverwacht automagisch verandert. Noteer deze gegevens.

STAP 5:
Nu gaan we het token (uniek identificatienummer) van de TV ophalen. Ga nu naar Node-RED en maak je eerste Flow aan.

STAP 6:
Sleep de node Inject (de allereerste keuze in de node-lijst aan de linkerkant) in het lege middendeel van het scherm. Dubbelklik op deze node en verander de eigenschappen. Bij msg.payload kies je het kleine driehoekje links naast het = teken. Dan vouwt er een menu met variabelentypen uit. Kies boolean. Klik op Done.

STAP 7:
Plaats rechts van het eerste blokje de node Samsung TV Get Token. Dit groene blokje is te vinden in de linker lijst bijna onderaan onder het kopje devices. Dubbelklik ook hierop.

STAP 8:
In het scherm dat opent staat het Device standaard op Add new samsung-tv. Klik op het potloodje ernaast en geef je TV een naam. Kies in het volgende veld je model: nieuwer dan 2017, uit 2017 of ouder. Vul nu de velden erna het IP en de MAC adres in die je in stap 4 hebt genoteerd. Laat het veld Token leeg. Klik op Update.

STAP 9:
Nu moeten we een node toevoegen die de uitkomst van het Get Token blok laat zien. Dat is de node Debug: tweede in de lijst links. Plaats het rechts in de Flow.

STAP 10:
Maak verbindingen door lijnen te trekken met de linker muistoets, zoals op onderstaande afbeelding.

Flow 1: Get Token

STAP 11:
Klik op Deploy (de grote rode knop rechtsboven). Dit betekent zoveel als ‘Neem de gewijzigde Flow in gebruik’. Kies direct daaronder het tabblad met het kleine icoontje van een insect (debug).

STAP 12:
Zorg dat de TV aan staat en verbinding heeft met internet. Klik nu op het linker grijze vlakje naast de eerste node (Inject). In het rechter debug scherm verschijnt een code bestaande uit 8 cijfers. Dit is het token van de TV. Kopieer dit.

STAP 13:
Klik op Samsung TV Get Token en weer op het potloodje om bij de eigenschappen te komen. Vul hier nu het token in. Dit wordt nu in de configuratie van Node-RED opgeslagen en is ook beschikbaar voor toekomstige Flows.

Voorbeeld TV Properties

De Flow die je zojuist hebt gemaakt, is nu niet meer nodig. Je kunt hem eventueel wissen, of hem eventueel bewaren als json object door hem op te slaan via het menu van Node-RED > Export.

Staat de TV aan?

Hiermee gaan we iets nuttigs maken: een flow die in Domoticz aangeeft of de TV aan of uit staat. Dit is overigens niet helemaal correct, want de sensor zal alleen aangeven of de TV online is. Staat hij aan, dan is hij online. Zet je hem met de afstandsbediening uit, dan blijft hij nog enkele tientallen seconden online, pas daarna wordt de verbinding verbroken en zal dit te zien zijn op de sensor. Op die 20 tot 30 seconden komt het echter niet aan, aangezien we de status maar eens in de 30 seconden controleren.

De volledige Flow ziet er als volgt uit:

Check of de TV online is/aan staat

STAP 1:
Allereerst hebben we een virtuele sensor nodig. Maak die aan in Domoticz met Instellingen > Hardware > Maak virtuele sensoren. Kies als type schakelaar en noem hem bijvoorbeeld TV online of TV is aan. Noteer het Idx nummer van de sensor. In dit geval 597.

Virtuele sensor in Domoticz

STAP 2:
Begin in Node-RED met een nieuwe Flow. Dubbelklik op de naam Flow 1 om deze een zinvolle naam te geven.

STAP 3:
Begin weer met een Inject node en stel deze in als zelfstartende timer. Op de schermafbeelding hieronder staan de instellingen hiervoor . Zo stuurt deze node iedere 30 seconden een ‘hoog’ (true) signaal op de uitgang. Dit signaal gaan we gebruiken om de statuscheck te triggeren.

Trigger de Flow elke 30 seconden

STAP 4:
Plaats de node met de naam Samsung TV is Alive achter de zojuist aangemaakte node en trek er een lijn tussen.

STAP 5:
Dubbelklik op Samsung TV is Alive om de eigenschappen aan te passen. Klik op het potloodje en kies de TV die je in het vorige deel (Token instellen) hebt gemaakt. Model, IP, MAC en Token zijn dus al ingevuld. Klik op Update.

STAP 6:
De node Samsung TV is Alive heeft twee uitgangen: als de TV online is, is uitgang 1 hoog. Is de TV offline, dan is uitgang 2 hoog. Om dit door te kunnen geven in de syntax van Domoticz, verbinden we aan iedere uitgang een Function node.

STAP 7:
Dubbelklik op de bovenste node (online) en vul hier het volgende in:

msg.payload = {"command":"udevice","idx":597,"nvalue":1,"svalue":"On"};
return msg

STAP 8:
Dubbelklik op de onderste node (offline) en vul hier het volgende in:

msg.payload = {"command":"udevice","idx":597,"nvalue":0,"svalue":"Off"};
return msg;

STAP 9:
Plaats achter deze twee functies een node van het type mqtt out en verbind beide functies met de ingang daarvan.

STAP 10:
Dubbelklik op mqtt out. Een scherm met de eigenschappen van deze node verschijnt. Hier moeten we allereerst kiezen met welke server contact moet worden gemaakt.

STAP 11:
In het veld Server staat standaard add mqtt broker. Klik op het potloodje ernaast en er opent een scherm waarin je de Domoticz gegevens moet invullen. Geef als naam gewoon ‘Domoticz’ in.

STAP 12:
Geef (onder het tabblad Connection) bij Server het adres van Domoticz in.

Vul de gegevens van de mqtt broker node in

STAP 13:
Vul (onder het tabblad Security) de velden Username en Password in met de gebruikersnaam en het wachtwoord dat je in Domoticz bij het instellen van de MQTT hardware hebt opgegeven.

Vul de inloggegevens in die je ook in Domoticz hebt ingevuld bij het installeren van MQTT

STAP 14:
Klik op Update. Je gaat terug naar het scherm Edit mqtt out node.

STAP 15:
Vul bij Topic in: domoticz/in

STAP 16:
Pas eventueel nog de naam aan en klik op Done. Hieronder staat het resultaat:

STAP 17:
Klik op de knop Deploy. Vanaf nu controleert deze Flow iedere 30 seconden of de TV online is of niet.

Tot slot is hier is de JSON code van de bovenstaande Node-RED Flow. Die kun je importeren in Node-RED via het Menu > Import. Denk eraan dat je wel eerst de module node-red-contrib-samsung-tv-control moet installeren. Ook is het nodig om na installatie van deze Flow via import de juiste IP’s, MAC adressen, Tokens en inloggegevens handmatig in te stellen. De regelnummers waar die gegevens staan zijn overigens 114, 136, 137 en 138.

[
    {
        "id": "1ef8de36.f1bc72",
        "type": "tab",
        "label": "Check TV alive",
        "disabled": false,
        "info": ""
    },
    {
        "id": "f8644458.8171c8",
        "type": "inject",
        "z": "1ef8de36.f1bc72",
        "name": "Check iedere 30s",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "30",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "x": 170,
        "y": 240,
        "wires": [
            [
                "9cf9a7eb.6d2518"
            ]
        ]
    },
    {
        "id": "92a8058f.d479f8",
        "type": "mqtt out",
        "z": "1ef8de36.f1bc72",
        "name": "TV online",
        "topic": "domoticz/in",
        "qos": "",
        "retain": "",
        "broker": "8747e656.336818",
        "x": 880,
        "y": 240,
        "wires": []
    },
    {
        "id": "9cf9a7eb.6d2518",
        "type": "samsung-tv-isaliveping",
        "z": "1ef8de36.f1bc72",
        "device": "a09ecf38.1ce4e",
        "name": "",
        "x": 420,
        "y": 240,
        "wires": [
            [
                "b89f18af.761f88"
            ],
            [
                "178bde17.b324f2"
            ]
        ]
    },
    {
        "id": "b89f18af.761f88",
        "type": "function",
        "z": "1ef8de36.f1bc72",
        "name": "Domoticz: TV is aan",
        "func": "msg.payload = {\"command\":\"udevice\",\"idx\":597,\"nvalue\":1,\"svalue\":\"On\"};\nreturn msg",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 680,
        "y": 240,
        "wires": [
            [
                "92a8058f.d479f8"
            ]
        ]
    },
    {
        "id": "178bde17.b324f2",
        "type": "function",
        "z": "1ef8de36.f1bc72",
        "name": "Domoticz: TV is uit",
        "func": "msg.payload = {\"command\":\"udevice\",\"idx\":597,\"nvalue\":0,\"svalue\":\"Off\"};\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 670,
        "y": 280,
        "wires": [
            [
                "92a8058f.d479f8"
            ]
        ]
    },
    {
        "id": "f80a66c3.511498",
        "type": "link out",
        "z": "1ef8de36.f1bc72",
        "name": "",
        "links": [],
        "x": 465,
        "y": 460,
        "wires": []
    },
    {
        "id": "8747e656.336818",
        "type": "mqtt-broker",
        "name": "Domoticz",
        "broker": "192.168.1.234",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": false,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    },
    {
        "id": "a09ecf38.1ce4e",
        "type": "samsung-tv",
        "name": "TV",
        "model": "8002",
        "ip": "192.168.1.123",
        "mac": "1A:B2:3C:D4:5E:F6",
        "token": "12345678"
    }
]

TV aan of uit zetten

Nu draaien we de zaken om: in plaats van alleen de status van de TV naar Domoticz te sturen, sturen we vanuit Domoticz het commando om de TV aan of uit te zetten.

Zo simpel als het klinkt, is het echter niet. Er is om te beginnen in de nieuwere TV’s geen commando ‘AAN’ en commando ‘UIT’ maar een commando dat daartussen schakelt (KEY_POWER).

Dat hoeft geen probleem te zijn, maar er zit nog een adderje onder het gras: als de TV eenmaal uit staat, wordt na enkele seconden de verbinding met internet verbroken. Om weer contact te krijgen, moeten we gebruik maken van de functie ‘Wake on LAN’ die in Samsung TV’s is ingebouwd. Om dat aan de praat te krijgen, moet je echter eerst de toegang voor niet-standaard afstandsbesturing in de TV-instellingen aanpassen en een virtuele aan/uit schakelaar in Domoticz aanmaken.

De volledige Flow ziet er als volgt uit:

Flow om de TV aan/uit te zetten

STAP 1:
Ga op je TV naar het Instellingenmenu (het tandwieltje links beneden in je Home scherm). Kies daar voor Netwerkinstellingen > Expertinstellingen.

Schermafbeelding netwerkinstellingen Samsung Smart TV

STAP 2:
Kies onder Expertinstellingen voor IP van afstandsbediening. Deze optie schakelt de toegang tot je TV via het (lokale) netwerk in.

Schermafbeelding expertinstellingen Samsung Smart TV

STAP 3:
Schakel IP van afstandsbediening in. Je krijgt een waarschuwing. Uiteraard is je WiFi thuisnetwerk al beschermd met een wachtwoord, dus klik op OK.

Schermafbeelding IP-instellingen Samsung Smart TV

STAP 4:
Ga in Domoticz naar Instellingen > Hardware > Maak virtuele sensoren en maak een sensor van het type schakelaar, net als in de vorige gemaakte Flow. Noteer het Idx getal van de gemaakte sensor. In mijn geval 607.

STAP 5:
Maak in Node-RED een nieuwe Flow aan en geef deze een passende naam.

STAP 6:
We beginnen nu met het ophalen van de commando’s van Domoticz. Plaats hiertoe als eerste een node van het type mqtt in.

STAP 7:
Dubbelklik op deze node, controleer of de Server op Domoticz staat (die we in de vorige Flow hebben aangemaakt onder stap 11 en verder.

STAP 8:
Geef in het veld Topic in: domoticz/out. We halen immers de uitvoer van Domoticz op. Klik op Done.

Pas de mqtt in node aan

STAP 9:
Verbind de eerste node met een node van het type json. Deze vertaalt het ontvangen bericht naar standaard JSON (Javascript-formaat) zodat we het verder gemakkelijker kunnen verwerken.

STAP 10:
Plaats een node van het type switch daarachter.

STAP 11:
Dubbelklik op de zojuist geplaatste switch en verander het veld Property in msg.payload.idx. Vul daaronder bij de eerste regel het Idx van de switch in. In dit geval 607. De switch laat nu alleen gegevens door als de Idx 607 is. Klik op Done.

Deze switch laat alleen berichten voor Idx 607 door

STAP 12:
Plaats daarachter een tweede switch, dubbelklik hierop en verander het veld Property in msg.payload.nvalue.

STAP 13:
Vul in de switch bij het eerste veld 1 in. Klik op het kleine +add knopje in het Edit switch node scherm en vul bij de tweede regel 0 in.

STAP 14:
Verander de regel onder het +add knopje in stopping at first match. Klik op Done.

Deze switch geeft nu een signaal op de eerste uitgang als vanuit Domoticz de nvalue waarde 1 (‘On’) binnenkomt en op de tweede uitgang als Domoticz een 0 (‘Off’) stuurt.

STAP 15:
Om de TV aan te kunnen zetten met Wake on Lan, moeten we hiervoor eerst een extensie installeren in Node-RED. Klik in het menu rechtsboven op Manage Palette.

STAP 16:
Ga naar tabblad Install en typ in het zoekveld wake on lan.

STAP 17:
Klik op de install knop achter de node node-red-node-wol. Klik in de pop-up die verschijnt nogmaals op Install. Aan de linkerkant van je scherm verschijnt wake on lan nu als mosterdkleurig blokje onder het kopje network.

STAP 18:
Sleep de nieuwe node wake on lan in je scherm achter de eerste uitgang van de tweede switch en verbind hem daarmee.

STAP 19:
Dubbelklik op de node wake on lan. Het scherm met eigenschappen verschijnt. Vul hier het MAC adres van je TV in (die je hebt genoteerd in stap 4 van de eerste flow).

STAP 20:
Vul bij Target Address niet het adres van je TV in, maar het eerste deel van de IP eindigend op 255. Is het adres van je TV bijvoorbeeld 192.168.1.123, dan vul je hier in: 192.168.1.255. Klik op Done.

Wake on LAN instellingen

STAP 21:
Plaats de node Samsung TV Send achter de tweede uitgang van de tweede switch en verbind hem hiermee.

STAP 22:
Dubbelklik op deze node en check of het Device goed is ingesteld (klik op het potloodje en daarna op Update als alles klopt).

STAP 23:
Klik op Key en er verschijnt een lijst van Samsung toetscommando’s (niet al deze commando’s werken voor alle TV’s). Kies hier voor KEY_POWER en klik op Done.

Instellingen van de Samsung TV Send node

STAP 24:
Klik op Deploy. Vanaf nu kun je vanuit Domoticz de TV aan of uitzetten.

Hieronder staat ook weer de JSON code van de bovenstaande Node-RED Flow. Ook hier geldt: de nodige modules moet je eerst installeren (dus node-red-contrib-samsung-tv-control en voor deze Flow ook node-red-node-wol). Vul na de installatie weer de juiste IP’s, MAC adressen, Tokens en inloggegevens handmatig in. De desbetreffende regels zijn: 85, 129, 151, 152, 153.

[
    {
        "id": "a5db6b31.21cc78",
        "type": "tab",
        "label": "TV aanzetten",
        "disabled": false,
        "info": ""
    },
    {
        "id": "f735d1e5.451d",
        "type": "mqtt in",
        "z": "a5db6b31.21cc78",
        "name": "TV AAN/UIT",
        "topic": "domoticz/out",
        "qos": "0",
        "datatype": "auto",
        "broker": "8747e656.336818",
        "x": 210,
        "y": 280,
        "wires": [
            [
                "580fc416.3ade7c"
            ]
        ]
    },
    {
        "id": "580fc416.3ade7c",
        "type": "json",
        "z": "a5db6b31.21cc78",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": true,
        "x": 370,
        "y": 280,
        "wires": [
            [
                "4cb56009.30fef"
            ]
        ]
    },
    {
        "id": "4cb56009.30fef",
        "type": "switch",
        "z": "a5db6b31.21cc78",
        "name": "",
        "property": "payload.idx",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "607",
                "vt": "str"
            }
        ],
        "checkall": "false",
        "repair": false,
        "outputs": 1,
        "x": 490,
        "y": 280,
        "wires": [
            [
                "cc521a3f.473bc8"
            ]
        ]
    },
    {
        "id": "af8ac09b.b5f46",
        "type": "samsung-tv-send",
        "z": "a5db6b31.21cc78",
        "device": "a09ecf38.1ce4e",
        "name": "",
        "key": "KEY_POWER",
        "x": 800,
        "y": 300,
        "wires": [
            []
        ]
    },
    {
        "id": "de8972b8.1d7fa",
        "type": "wake on lan",
        "z": "a5db6b31.21cc78",
        "mac": "5C:C1:D7:12:A3:1D",
        "host": "192.168.1.255",
        "udpport": 9,
        "name": "",
        "x": 810,
        "y": 260,
        "wires": []
    },
    {
        "id": "cc521a3f.473bc8",
        "type": "switch",
        "z": "a5db6b31.21cc78",
        "name": "",
        "property": "payload.nvalue",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "1",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "0",
                "vt": "str"
            }
        ],
        "checkall": "false",
        "repair": false,
        "outputs": 2,
        "x": 610,
        "y": 280,
        "wires": [
            [
                "de8972b8.1d7fa"
            ],
            [
                "af8ac09b.b5f46"
            ]
        ]
    },
    {
        "id": "8747e656.336818",
        "type": "mqtt-broker",
        "name": "Domoticz",
        "broker": "192.168.1.234",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": false,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    },
    {
        "id": "a09ecf38.1ce4e",
        "type": "samsung-tv",
        "name": "TV",
        "model": "8002",
        "ip": "192.168.1.123",
        "mac": "1A:B2:3C:D4:5E:F6",
        "token": "12345678"
    }
]

Volume en kanaal

In de bovengaande stappenplannen zijn alle basisprincipes besproken, waarmee je diverse nieuwe functies voor je TV kunt implementeren in Domoticz. Ik laat er hier nog twee zien, die ik niet stap voor stap ga bespreken omdat de Flow diagrammen al duidelijk maken hoe het werkt: Volume harder/zachter en Kanaal omhoog/omlaag.

Beide Flows maken beide gebruik van een virtuele schakelaar in Domoticz, nu niet van het Aan/Uit type, maar van het type Keuzeschakelaar (Selectorswitch).

Virtuele schakelaar van het type Selectorswitch

Bij de volumeregelaar heb ik gekozen voor ‘Mute’ onder de eerste knop (KEY_MUTE), Volume omhoog (KEY_VOLUP) onder de tweede en Volume omlaag (KEY_VOLDOWN) onder de derde knop. Deze toetsen worden doorgegeven via nodes van het type Samsung TV Send.

Node-RED Flow voor TV Volume

De kanaalkeuze-schakelaar zit iets anders in elkaar. Hier heb ik gekozen voor ‘Terug naar kanaal 1’ onder de eerste knop, kanaal omhoog (KEY_CHUP) onder de tweede en kanaal omlaag (KEY_CHDOWN) onder de derde knop.

Node-RED Flow voor TV kanaal

De omhoog en omlaag knoppen maken ook gebruik van de node Samsung TV Send, maar de ‘Kanaal 1’ knop gebruikt een combinatie van de node Samsung TV Send Channel (waar je alleen het kanaalnummer hoeft in te vullen) en de node Samsung TV Send, waarmee ik vervolgens KEY_ENTER naar de TV stuur. Als ik alleen kanaal 1 stuur, wil mijn TV daarvan namelijk een bevestiging zien en gaat staan wachten tot ik op de afstandsbediening op Oké klik. KEY_ENTER maakt dat overbodig.

Instellingen van de tweede switch, gelijk voor beide Flows (Volume/Kanaal).

Voor de volledigheid zijn hier nog de json-bestanden van de twee laatst besproken Flows. Denk eraan de IP, MAC, Tokens etc. aan te passen aan jouw situatie:

TV kanaal schakelen (regel 166, 188, 189, 190 aanpassen):

[
    {
        "id": "8e4c231.300a1e",
        "type": "tab",
        "label": "TV Kanaal",
        "disabled": false,
        "info": ""
    },
    {
        "id": "bc5b5d15.14152",
        "type": "mqtt in",
        "z": "8e4c231.300a1e",
        "name": "TV KANAAL",
        "topic": "domoticz/out",
        "qos": "0",
        "datatype": "auto",
        "broker": "8747e656.336818",
        "x": 160,
        "y": 340,
        "wires": [
            [
                "94cbcd81.336d2"
            ]
        ]
    },
    {
        "id": "94cbcd81.336d2",
        "type": "json",
        "z": "8e4c231.300a1e",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 330,
        "y": 340,
        "wires": [
            [
                "a87a8c8c.48d55"
            ]
        ]
    },
    {
        "id": "a87a8c8c.48d55",
        "type": "switch",
        "z": "8e4c231.300a1e",
        "name": "",
        "property": "payload.idx",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "599",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 450,
        "y": 340,
        "wires": [
            [
                "40b1e199.9bfdb"
            ]
        ]
    },
    {
        "id": "40b1e199.9bfdb",
        "type": "switch",
        "z": "8e4c231.300a1e",
        "name": "",
        "property": "payload.svalue1",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "0",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "10",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "20",
                "vt": "str"
            }
        ],
        "checkall": "false",
        "repair": true,
        "outputs": 3,
        "x": 590,
        "y": 340,
        "wires": [
            [
                "b09bdeb3.266ab"
            ],
            [
                "ecfcbff5.d596c"
            ],
            [
                "9cf1d54f.2f4038"
            ]
        ]
    },
    {
        "id": "ecfcbff5.d596c",
        "type": "samsung-tv-send",
        "z": "8e4c231.300a1e",
        "device": "a09ecf38.1ce4e",
        "name": "CH UP",
        "key": "KEY_CHUP",
        "x": 770,
        "y": 340,
        "wires": [
            []
        ]
    },
    {
        "id": "9cf1d54f.2f4038",
        "type": "samsung-tv-send",
        "z": "8e4c231.300a1e",
        "device": "a09ecf38.1ce4e",
        "name": "CH DOWN",
        "key": "KEY_CHDOWN",
        "x": 790,
        "y": 380,
        "wires": [
            []
        ]
    },
    {
        "id": "b09bdeb3.266ab",
        "type": "samsung-tv-sendchannel",
        "z": "8e4c231.300a1e",
        "device": "a09ecf38.1ce4e",
        "name": "CH1",
        "keys": "1",
        "x": 770,
        "y": 300,
        "wires": [
            [
                "3e8f6b51.114064"
            ]
        ]
    },
    {
        "id": "3e8f6b51.114064",
        "type": "samsung-tv-send",
        "z": "8e4c231.300a1e",
        "device": "a09ecf38.1ce4e",
        "name": "",
        "key": "KEY_ENTER",
        "x": 940,
        "y": 300,
        "wires": [
            []
        ]
    },
    {
        "id": "8747e656.336818",
        "type": "mqtt-broker",
        "name": "Domoticz",
        "broker": "192.168.1.234",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": false,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    },
    {
        "id": "a09ecf38.1ce4e",
        "type": "samsung-tv",
        "name": "TV",
        "model": "8002",
        "ip": "192.168.1.123",
        "mac": "1A:B2:3C:D4:5E:F6",
        "token": "12345678"
    }
]

TV volume instellen (regel 151, 173, 174, 175 aanpassen):

[
    {
        "id": "ec220c83.1098d",
        "type": "tab",
        "label": "TV Volume",
        "disabled": false,
        "info": ""
    },
    {
        "id": "4d861a23.5381a4",
        "type": "mqtt in",
        "z": "ec220c83.1098d",
        "name": "TV VOLUME",
        "topic": "domoticz/out",
        "qos": "0",
        "datatype": "auto",
        "broker": "8747e656.336818",
        "x": 180,
        "y": 300,
        "wires": [
            [
                "e3bcead9.637d68"
            ]
        ]
    },
    {
        "id": "e3bcead9.637d68",
        "type": "json",
        "z": "ec220c83.1098d",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 340,
        "y": 300,
        "wires": [
            [
                "806f6d7b.e579f"
            ]
        ]
    },
    {
        "id": "806f6d7b.e579f",
        "type": "switch",
        "z": "ec220c83.1098d",
        "name": "",
        "property": "payload.idx",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "608",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 460,
        "y": 300,
        "wires": [
            [
                "292055be.1e1e7a"
            ]
        ]
    },
    {
        "id": "292055be.1e1e7a",
        "type": "switch",
        "z": "ec220c83.1098d",
        "name": "",
        "property": "payload.svalue1",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "0",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "10",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "20",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 3,
        "x": 590,
        "y": 300,
        "wires": [
            [
                "f48e6bf2.cf9cc8"
            ],
            [
                "6fc9c370.430fdc"
            ],
            [
                "f616db5e.d19cd8"
            ]
        ]
    },
    {
        "id": "f48e6bf2.cf9cc8",
        "type": "samsung-tv-send",
        "z": "ec220c83.1098d",
        "device": "a09ecf38.1ce4e",
        "name": "MUTE",
        "key": "KEY_MUTE",
        "x": 770,
        "y": 260,
        "wires": [
            []
        ]
    },
    {
        "id": "6fc9c370.430fdc",
        "type": "samsung-tv-send",
        "z": "ec220c83.1098d",
        "device": "a09ecf38.1ce4e",
        "name": "VOL+",
        "key": "KEY_VOLUP",
        "x": 770,
        "y": 300,
        "wires": [
            []
        ]
    },
    {
        "id": "f616db5e.d19cd8",
        "type": "samsung-tv-send",
        "z": "ec220c83.1098d",
        "device": "a09ecf38.1ce4e",
        "name": "VOL-",
        "key": "KEY_VOLDOWN",
        "x": 770,
        "y": 340,
        "wires": [
            []
        ]
    },
    {
        "id": "8747e656.336818",
        "type": "mqtt-broker",
        "name": "Domoticz",
        "broker": "192.168.1.234",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": false,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    },
    {
        "id": "a09ecf38.1ce4e",
        "type": "samsung-tv",
        "name": "TV",
        "model": "8002",
        "ip": "192.168.1.123",
        "mac": "1A:B2:3C:D4:5E:F6",
        "token": "12345678"
    }
]

Sla je zelf aan het experimenteren? Ik zie je resultaten graag in de reacties hieronder terug!

Zie ook:


18 reacties

Lars · 9 november 2020 op 11:04

Leuk, maar ik krijg al geen output van de Token, ik heb een 8001 model, (want mijn tv staat in devolper modes, en als ik via de brower http://xxx.xx.xxx.xx:8001/api/v2/ geef krijg ik output.. en bij de 8002 blijft hij leeg. Echter blijft mijn debug scherm leeg. Hoe nu verder?

Jeroen · 10 november 2020 op 00:08

Bedankt! Super heldere uitleg en alles werkt meteen zoals je beschrijft.

Meindert · 14 januari 2021 op 20:46

Hi, ik heb alles gedaan zoals je het beschrijft, maar bij mij lukt het niet in Domoticz, ik krijg wel de token van mijn TV, maar Domoticz check niet of het Online is, en dus de aan en uit knop voor de tv werkt ook niet.
Graag help, ik ben benieuwd waar ik de fout in ga.

Mark · 6 maart 2021 op 22:46

Goede en heldere uitleg, werkt perfect!

Bas · 7 april 2021 op 17:21

Het werkt voor mij als ik de dubbelepunten ‘:’ uit het mac-adres haal.

Christian · 17 juni 2021 op 15:59

Toffe instructie, werkt erg handig!
Alleen het uitschakelen werkt op mijn tv niet goed, ik heb een Samsung The Frame. Wanneer ik deze uitschakel, schakelt hij standaard naar art mode. Om de tv echt uit te schakelen moet ik 3 seconden de power knop ingedrukt houden op de afstandsbediening. Enig idee hoe ik dit kan configureren?

Tony · 27 augustus 2021 op 17:00

Helaas krijg ik in de debug mode van mijn browser onderstaande error :
WebSocket connection to ‘ws://ipadressamsungtv:1880/comms’ failed:

Tony · 28 augustus 2021 op 14:31

Gelukt, werkt hier nu ook 🙂 je kan alleen niet via andere subnets met een websocket naar de TV werken. heb je ook een voorbeeld van een flow voor de get apps?

Gerben · 30 januari 2022 op 16:57

Ik heb bij de TV is Alive node na de 2 function nodes nog een Block node tussen zitten met de keuze “block unless value changes” om te voorkomen dat er elke 30 seconden een ON of OFF melding wordt uitgevoerd. De TV staat namelijk veel langer Aan of Uit, dus zijn al die notificaties om de 30 seconden niet nodig. Alleen maar als de TV veranderd van status

Gerben · 30 januari 2022 op 17:23

En hoe lossen jullie in Domoticz op dat de on/off schakelaar in sync loopt met de on/off knop van de AB van de TV, omdat het on/off commando KEY_POWER voor zowel aan als uit wordt gebruikt?
Want moeders wil het systeem ook met de AB kunnen aan/uit zetten 😉

    Robot One · 10 februari 2022 op 15:07

    Je kunt natuurlijk een aparte flow voor AAN en voor UIT maken en daarbij de status van de TV aan/uit opvragen voordat het KEY_POWER commando wordt verstuurd.

Jasper · 19 oktober 2022 op 14:27

Fijne uitleg over een interessant onderwerp. Ik loop alleen nog ergens tegen aan waarbij ik benieuwd ben of meer mensen hier last van hebben of eventueel een oplossing voor hebben.

Ik kan de token uitlezen en de knoppen besturen. Nu zou ik graag een app willen opstarten op de tv. Dit krijg ik alleen echt op geen manier voor elkaar. Ook krijg ik het niet voor elkaar om bijv. de get apps node werkend te krijgen.

Ik hoor graag of iemand dit werkend heeft.

Geert · 1 januari 2023 op 17:22

Ik krijg de MQTT server niet aan de praat. Hij geeft steeds deze melding:
2023-01-01 17:21:14.532 Error: MQTT: Failed to start, return code: 14/Connection refused (Check IP/Port)
Ideeën?

    Robot One · 6 maart 2023 op 13:59

    Dan is ofwel het IP adres ofwel de Port niet goed in gesteld. Of je inloggegevens kloppen niet.

Geef een reactie

Avatar plaatshouder

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *