Pronto Pro & IP control (Home Assistant / Shelly etc.)

Started by Robbo, February 10, 2024, 14:03:27

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Robbo

Al vele jaren gebruik ik de Philips Pronto Pro TSU9600 naar volle tevredenheid. Echter met de komst van meer en meer IP gestuurde apparatuur in huis is er een splitsing gekomen tussen aansturing van deze apparaten (bijv. de verlichting) en de apparatuur die door de Pronto bedient worden zoals de projector en media speler.

Nu ben ik enorm gehecht aan mijn Pronto, want de combinatie van touch screen en fysieke knoppen maakt dat ik dit perfect kan inrichten en tevens op de tast enkele belangrijke functies zoals volume kan bedienen.

Ik wist dat IP control mogelijk moest zijn omdat ik in het verleden al eens door het Pronto Developers Guide had gebladerd. Maar nu na de zoveelste keer mijzelf geïrriteerd te hebben aan het niet kunnen bedienen van de verlichting op mijn Pronto ben ik toch maar eens begonnen aan het goed doornemen van de Pronto Developers Guide.

En kort gezegd ja het is gelukt om mijn ip apparaten te bedienen. Voor diegenen die dit ook willen hieronder een korte uitleg.


Eenvoudig IP control
In PEP software van Philips Pronto is het mogelijk om een op JavaScript gebaseerde code genaamd ProntoScript te gebruiken. Dit kun je eenvoudig per 'button' aanmaken.  In plaats van een het 'Actions' tabblad een action zoals een 'function' toe te wijzen. Selecteer je 'Use Pronto Script'. Daar kun je de onderstaande code invoegen:

var socket = new TCPSocket(false);
socket.onConnect = function()
{
socket.write("GET /roller/0?go=to_pos&roller_pos=35 HTTP/1.1\r\n\r\n")
socket.close();
};
socket.onClose = function()
{
};
socket.onIOError = function(e)
{
label = "Error: " + e;
};
socket.connect('192.168.2.52', 80, 3000);

Hier open ik een 'socket' op IP adres 192.168.2.52 op poort 80, waar een Shelly 2.5 module zich bevind om mijn masking scherm te bedienen. En dat adres word verzocht het volgende request uit te voeren :

GET /roller/0?go=to_pos&roller_pos=35

In dit geval wordt de Shelly module verzocht het masking scherm te verplaatsen naar positie 35.


Home Assistant Automations
Voor de wat uitgebreidere aansturingen ben ik naar Home Assistant gegaan. Hier had ik al vele integraties gekoppeld en vanwege de prettige interface heb ik ervoor gekozen om wanneer ik functies van meerdere apparaten wil combineren dit in een Home Assistant 'Automation' te doen.

Om een dergelijke 'automation' te starten heb je een 'trigger' nodig. In dit geval gebruiken we een 'webhook'.

Hieronder een voorbeeld van zo'n automation. Deze is aangemaakt dmv de Visual Editor maar voor de uitleg heb ik dit als YAML bestand weergegeven. Deze kun je indien gewenst eenvoudig copy/pasten (vul je eigen area_id en/of entity_id in):

alias: Webhook - home theater on
description: ""
trigger:
  - platform: webhook
    allowed_methods:
      - POST
      - PUT
    local_only: true
    webhook_id: ht_on
condition: []
action:
  - service: light.turn_off
    data: {}
    target:
      area_id:
        - hometheater
  - service: switch.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: switch.subwoofer
mode: single
 

Wat we hier doen is dat als de webhook id 'ht_on' wordt aangeroepen we de alle verlichting in de home theater (area_id hometheater) uitzetten. En de switch (Shelly Plug S) die op de subwoofer zit 'aan' zetten.
Standaard is de webhook zo ingesteld dat deze enkel in het local network kan worden aangeroepen.

Op de Pronto kunnen we met de volgende ProntoScript code deze webhook aanroepen:

var socket = new TCPSocket(false);

socket.onConnect = function()
{
socket.write("POST /api/webhook/ht_on HTTP/1.0\r\n");
socket.write("Accept: */*\r\n");
socket.write("Host: 192.168.1.115\r\n");
socket.write("Connection: close\r\n");
socket.write("\r\n");
};

socket.onClose = function()
{
};

socket.onIOError = function(e)
{
};

if(socket.connected == false)
{
socket.connect('192.168.1.115', 8123, 3000);
};

In mijn geval heb ik op 192.168.1.115 mijn Home Assistant instantie draaien. En deze luistert op poort 8123 naar instructies.  Het specifieke request om deze webhook te starten is:

POST /api/webhook/ht_on


Testen
Het lastige aan de Pronto is dat het niet mogelijk is om in simulatie het bovenstaande te testen. Hiervoor moet je de configuratie eerst downloaden naar de Pronto.
Wil je de ip aansturing testen zonder Pronto, dan kun je dit doen met het programma 'Postman'.
Hier maak je simpel een POST of ander http request uitvoeren door een de juiste url in te voeren en te versturen. Bijvoorbeeld:
http://192.168.1.115:8123/api/webhook/ht_on
Het voordeel hiervan is dat je ook het respons kunt zien.


Macro gebruik
De bovenstaande ProntoScript code werkt op ENKEL een 'button'. Dit kan een hard button zijn of een graphic button. Dit is uiteraard niet handig als je een IP aansturing wilt combineren met andere Actions zoals bestaande Functions en Page Jumps. Om dit te combineren bestaat er volgende de Developer Guide een PS Macro functie (PEP v3 only). Echter hier ben ik nog niet helemaal uit.

Als alternatieve oplossing heb ik een aparte 'Activity' aangemaakt en de code in een 'Page Script' gehangen (Execute Once when Page is shown).  In de Activity Properties maak je een Jump naar de betreffende pagina waar het 'Page Script' in hangt. Belangrijk is na de Jump een kleine 'Delay' toe te voegen (ik gebruik 1 seconde). Anders is er blijkbaar geen tijd toegewezen om dit uit te voeren (een request duurt meestal een kleine 200ms volgens Postman)

Voorwaarden
- De Pronto Pro moet op hetzelfde netwerk aangesloten zijn als waar je IP apparatuur en/of Home Assistant draait.
- Gebruik vaste IP adressen

Nog uit te zoeken / realiseren
- Respons afvangen -> het afvangen van respons data en dit verder gebruiken
- RS232 control -> bedienen van RS232 apparatuur, zoals in mijn geval de Lumagen (RFX9600 nodig)
- ProntoScript Macros uitzoeken

Teejoo

Ik haak even aan, maar heb wel meteen een probleem omdat ik de pronto op een gescheiden netwerk heb omdat vanwege de beperkingen qua beveiliging. Op een beveiligd netwerk verliest hij de verbinding.

Robbo

Klopt, dat gebeurt bij mij ook met WPA beveiliging.  Ik heb een daarom aparte VLAN aangemaakt voor de Pronto apparatuur met WEP.

Teejoo

Quote from: Robbo on February 11, 2024, 08:44:02Klopt, dat gebeurt bij mij ook met WPA beveiliging.  Ik heb een daarom aparte VLAN aangemaakt voor de Pronto apparatuur met WEP.
Maar welke apparatuur heb je dan ook nog opgenomen in die Vlan? Toch niet alleen de remote en extender, want dan zitten die alleen op een eiland? Maw: hoe maak je dan de connectie naar de apparatuur die je via IP wilt bedienen?

Ps, ik wist niet dat het met WEP wel werkt. Ik heb na een tip van Rob gewoon een los onbeveiligd netwerkje met alleen de pronto en extender erop.

Robbo

WEP of onbeveiligd kan allebei. WEP beveiliging is vrij snel te hacken dus eigenlijk maakt het niet uit.
Verder zijn het bij mij de firewall rules die de inter VLAN verkeer bepalen. In mijn geval heb ik de 'Pronto' VLAN additioneel op MAC adres ingeperkt.