Koppel je Smart TV aan Domoticz
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
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.
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’.
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.
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.
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:
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.
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.
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.
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.
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:
STAP 1:
Ga op je TV naar het Instellingenmenu (het tandwieltje links beneden in je Home scherm). Kies daar voor Netwerkinstellingen > Expertinstellingen
.
STAP 2:
Kies onder Expertinstellingen
voor IP van afstandsbediening
. Deze optie schakelt de toegang tot je TV via het (lokale) netwerk in.
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
.
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
.
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
.
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
.
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
.
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).
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
.
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.
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.
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?
Robot One · 11 november 2020 op 10:53
Je kunt eens proberen of je met een ander pakket wel een token krijgt, zie: https://flows.nodered.org/node/node-red-contrib-samsung-tv-mk
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.
Robot One · 18 januari 2021 op 19:47
Welk type TV heb je?
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
Robot One · 10 februari 2022 op 15:08
Goed idee!
Stefan · 23 februari 2023 op 00:43
Hoe moet ik dit toevoegen in de flow?
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.