Skip to content

Instantly share code, notes, and snippets.

@chronitis
Created December 11, 2017 19:48
Show Gist options
  • Save chronitis/00b04c229c1a797781b049eb6b4ab57f to your computer and use it in GitHub Desktop.
Save chronitis/00b04c229c1a797781b049eb6b4ab57f to your computer and use it in GitHub Desktop.
#!/usr/bin/python3
import requests
import time
import click
MORSE = {
'A': '.-', 'a': '.-',
'B': '-...', 'b': '-...',
'C': '-.-.', 'c': '-.-.',
'D': '-..', 'd': '-..',
'E': '.', 'e': '.',
'F': '..-.', 'f': '..-.',
'G': '--.', 'g': '--.',
'H': '....', 'h': '....',
'I': '..', 'i': '..',
'J': '.---', 'j': '.---',
'K': '-.-', 'k': '-.-',
'L': '.-..', 'l': '.-..',
'M': '--', 'm': '--',
'N': '-.', 'n': '-.',
'O': '---', 'o': '---',
'P': '.--.', 'p': '.--.',
'Q': '--.-', 'q': '--.-',
'R': '.-.', 'r': '.-.',
'S': '...', 's': '...',
'T': '-', 't': '-',
'U': '..-', 'u': '..-',
'V': '...-', 'v': '...-',
'W': '.--', 'w': '.--',
'X': '-..-', 'x': '-..-',
'Y': '-.--', 'y': '-.--',
'Z': '--..', 'z': '--..',
'0': '-----', ',': '--..--',
'1': '.----', '.': '.-.-.-',
'2': '..---', '?': '..--..',
'3': '...--', ';': '-.-.-.',
'4': '....-', ':': '---...',
'5': '.....', "'": '.----.',
'6': '-....', '-': '-....-',
'7': '--...', '/': '-..-.',
'8': '---..', '(': '-.--.-',
'9': '----.', ')': '-.--.-',
' ': ' ', '_': '..--.-',
}
def morse(message):
yield from map(lambda x: MORSE.get(x, ''), message)
@click.command()
@click.option('--host', default="http://9windermereroad.ddns.net")
@click.option('--chan', default="2")
@click.option('--tick', default=0.2)
@click.option('--dry', is_flag=True)
@click.option('--verbose', is_flag=True)
@click.argument('message')
def main(message, host, tick, dry, chan, verbose):
def stat(s):
if verbose: print("stat: {}".format(s))
if dry:
return
r = requests.get(host,
params=dict(chan=chan,
stat=1 if s else 0))
if verbose: print("{r.url}: {r.status_code}".format(r=r))
return r
def sleep(t):
if verbose: print("sleep: {}*{}".format(t, tick))
time.sleep(t*tick)
def pulse(t):
stat(1)
sleep(t)
stat(0)
stat(0)
for m in morse(message):
for c in m:
if verbose: print(c)
if c == '.':
pulse(1)
elif c == '-':
pulse(3)
elif c == ' ':
sleep(4)
sleep(3)
stat(0)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment