diff --git a/README.md b/README.md index 5f22711..3f8441b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,2 @@ -# RedstoneOutput -Custom Spigot plugin for interacting with Raspberry Pi GPIO outputs. - -This plugin uses a client-server model for interacting with GPIO because the pi is too slow for Spigot. Will try native when I get my RasPi 4 8GB. `gpio-server.py` is to be run on the pi. +# Interaqqt +A plugin for publishing MQTT messages using redstone signals or custom commands. diff --git a/gpio-server.py b/gpio-server.py deleted file mode 100644 index cdd0a52..0000000 --- a/gpio-server.py +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/env python3 - -# Pins controllable by client -# Types: -# 1: switch on or off depending on power -# 2: toggle on or off with single power high event -# 3: addressable (TODO) -# 4: on/off event to client (TODO) -# 5: analog event to client (TODO) - -import socket, threading -import RPi.GPIO as GPIO -import configparser -import os, io - -# Initialize GPIO -# Pinout help: https://pinout.xyz/ -GPIO.setmode(GPIO.BOARD) -GPIO.setwarnings(False) - -configfile = "server.ini" -config = configparser.ConfigParser() - -# Check if there is already a configurtion file -if not os.path.isfile(configfile): - # Create the configuration file as it doesn't exist yet - cfgfile = open(configfile, "w") - - # Add content to the file - config.add_section("server") - config.set("server", "host", "0.0.0.0") - config.set("server", "port", "62002") - config.add_section("output") - config.set("output", "type", "1") - config.set("output", "pin", "8") - config.write(cfgfile) - cfgfile.close() -else: - # Load config from file - config = configparser.ConfigParser() - config.read(configfile) - -# Set up all pins -for section in config.sections(): - if section == "server": - continue - type = int(config.get(section, "type")) - pin = int(config.get(section, "pin")) - if type == 1: - GPIO.setup(pin, GPIO.OUT, initial=GPIO.LOW) - -# Client connection thread -class ClientThread(threading.Thread): - def __init__(self, ip, port, clientsocket): - threading.Thread.__init__(self) - self.ip = ip - self.port = port - self.csocket = clientsocket - print("[+] New thread started for %s:%s" % (ip, str(port))) - - def handler(self, power, key, val): - if not config.has_section(key): - return - - type = int(config.get(key, "type")) - pin = int(config.get(key, "pin")) - - if type == 1: - if power > 0: - GPIO.output(pin, GPIO.HIGH) - else: - GPIO.output(pin, GPIO.LOW) - - def srvcmd(self,line): - split = line[:-2].split(':') - if split[0] and split[1]: - self.handler(int(split[0]), split[1], split[2]) - - def run(self): - self.csocket.send(b'connected\r\n') - - # Receive messages from client - while True: - data = self.csocket.recv(1024) - if not data: - break - data = data.decode('utf-8') - - # Handle command from client - self.srvcmd(data) - - self.csocket.close() - print("Client at %s disconnected..." % (self.ip)) - -def run_sockets(): - HOST = config.get("server", "host") - PORT = int(config.get("server", "port")) - - # Start server socket - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - s.bind((HOST,PORT)) - print("Bound to %s:%s" % (HOST,PORT)) - - while True: - s.listen(4) - print("Listening for incoming connections...") - (clientsock, (ip, port)) = s.accept() - - # New thread for new client - newthread = ClientThread(ip, port, clientsock) - newthread.start() - -run_sockets()