Yes - I looked on the App Store, but was surprised that none of them had integrated with Siri Shortcuts (that I could find anyway).
Here’s my Pythonista code:
wol.py - Goes in your site-packages
folder
# -*- encoding: utf-8 -*-
"""
Small module for use with the wake on lan protocol.
"""
from __future__ import absolute_import
from __future__ import unicode_literals
import socket
import struct
BROADCAST_IP = '255.255.255.255'
DEFAULT_PORT = 9
def create_magic_packet(macaddress):
"""
Create a magic packet which can be used for wake on lan using the
mac address given as a parameter.
Keyword arguments:
:arg macaddress: the mac address that should be parsed into a magic
packet.
"""
if len(macaddress) == 12:
pass
elif len(macaddress) == 17:
sep = macaddress[2]
macaddress = macaddress.replace(sep, '')
else:
raise ValueError('Incorrect MAC address format')
# Pad the synchronization stream
data = b'FFFFFFFFFFFF' + (macaddress * 16).encode()
send_data = b''
# Split up the hex values in pack
for i in range(0, len(data), 2):
send_data += struct.pack(b'B', int(data[i: i + 2], 16))
return send_data
def send_magic_packet(*macs, **kwargs):
"""
Wakes the computer with the given mac address if wake on lan is
enabled on that host.
Keyword arguments:
:arguments macs: One or more macaddresses of machines to wake.
:key ip_address: the ip address of the host to send the magic packet
to (default "255.255.255.255")
:key port: the port of the host to send the magic packet to
(default 9)
"""
packets = []
ip = kwargs.pop('ip_address', BROADCAST_IP)
port = kwargs.pop('port', DEFAULT_PORT)
for k in kwargs:
raise TypeError('send_magic_packet() got an unexpected keyword '
'argument {!r}'.format(k))
for mac in macs:
packet = create_magic_packet(mac)
packets.append(packet)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.connect((ip, port))
for packet in packets:
sock.send(packet)
sock.close()
I think I got it from GitHub originally wakeonlan.py, and the code seems to have changed slightly since I last used it. Might be best to work from the latest code.
Then I created the following which calls the above code:
wake.py
# coding: utf-8
import dialogs
import sys
import wol
# Debug
for arg in sys.argv:
print(arg)
# sys.argv[1]: Mac Address
mac = sys.argv[1]
# sys.argv[2]: IP Address
ip = sys.argv[2]
# sys.argv[3]: Port
try:
port = int(sys.argv[3])
except IndexError:
port = 9
wol.send_magic_packet(mac, ip_address=ip, port=port)
dialogs.hud_alert('Magic Packet sent')
sys.argv[1]
- mac address, sys.argv[2]
- ip address and sys.argv[3]
- port are parameters which are passed to Pythonista from the Shortcuts app.
This is an example of a Shortcut to call the Pythonista wake.py
script, which in turn uses wol.py
to send the wake on LAN request.
I haven’t tested this method recently as I haven’t used it in a while, so if something isn’t working, let me know.