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

Gestart door Robbo, februari 10, 2024, 14:03:27

« vorige - volgende »

0 leden en 1 gast bekijken dit 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

Citaat van: Robbo op februari 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.

Teejoo

Hoi Robbo, Ik ga de op korte termijn mijn pronto aan mijn netwerk hangen met een VLan en firewall rules op de manier zoals je al aangeeft. Hoe moet ik dan een WOL commando maken? Kun je dat ook delen, want van code heb ik niet heel veel verstand.

Robbo

Een WOL commando voor het opstarten van je movie server?

In dat geval zul je een bepaald verzoek genaamd een Magic Packet moeten uitsturen. Ik dacht dat het een aantal herhalingen is van het Mac adres van het apparaat waarvoor het bedoelt is. 

Edit: net even snel wat zitten googlen.  Het kan niet via TCP maar moet via een UDP socket, want mogelijk is in ProntoScript.  Het is inderdaad een package met 16x herhaling van het Mac adres.  Zie
https://www.pdq.com/blog/wake-on-lan-wol-magic-packet-powershell/

Ik gebruik het zelf niet, dus heb er zelf niet 1-2-3 een code voorbeeld van.

Teejoo

Citaat van: Robbo op september 30, 2024, 21:49:33Een WOL commando voor het opstarten van je movie server?

In dat geval zul je een bepaald verzoek genaamd een Magic Packet moeten uitsturen. Ik dacht dat het een aantal herhalingen is van het Mac adres van het apparaat waarvoor het bedoelt is. 

Edit: net even snel wat zitten googlen.  Het kan niet via TCP maar moet via een UDP socket, want mogelijk is in ProntoScript.  Het is inderdaad een package met 16x herhaling van het Mac adres.  Zie
https://www.pdq.com/blog/wake-on-lan-wol-magic-packet-powershell/

Ik gebruik het zelf niet, dus heb er zelf niet 1-2-3 een code voorbeeld van.
Voor de Envy, maar de server is idd ook handig.

Robbo

Als je Home Assistant hebt kun je het makkelijk doen door de Wake on Lan integratie te combineren met een webhook gebaseerde automation. Zoals in de 1e post beschreven.
https://www.home-assistant.io/integrations/wake_on_lan/

Overigens is er binnen Home Assistant ook een MadVr integratie  :)

Verder zie ik dat er op Remote Central een aantal topics zijn over WOL met wat voorbeeld code. Bijv.
https://www.remotecentral.com/cgi-bin/mboard/prontopro/thread.cgi?4041

Teejoo

Ik ga me sowieso ook eens inlezen in Home assistent. Die kan ik op mijn Unraid server draaien als docker dacht ik.

Bedankt voor het meedenken.

Teejoo

Not nog eens Prontoedit geopend, maar ik begrijp eigenlijk al niet hoe ik überhaupt een prontoscript kan aanmaken.   Heb je misschien een voorbeeld configuratie zodat ik het kan zien?

Robbo

Dat is afhankelijk waar je het script wilt plaatsen.

Op een Button zit het in het Actions tab. Helemaal rechts zit een knop 'use pronto script'.
Indien je een bestaande button (met actions) wilt combineren met ProntoScript kun je executeActions(); in de code opnemen.

In een Page kun je ProntoScript in de advanced tab opnemen.