/** * @author Alex Volkmann * @date 18.02.2019 * @function Das programm steuert ein relle an und macht es an oder aus */ import java.io.IOException; import java.util.Arrays; import java.util.concurrent.TimeUnit; // todo: add Dokumentation public class gpio_java { public static String rel_map [][] = { {"rel1","14"}, {"rel2","15"}, {"rel3","18"}, {"rel4","23"}, {"rel5","24"}, {"rel6","25"}, {"rel7","8"}, {"rel8","7"} }; public static String [] action = {"on", "off", "status"}; /** Die main-Methode ruft die Funktionen in der gegebenen Reihnfolge auf, * und gibt die @param args weiter. * @param args Commandline argument der main funktion */ public static void main (String [] args) { // Zum checken der Anzahl der Argumente checkargs(args); // todo: initialisiere alle acht ports (outputs) init_gpio(); // setze gpio (gemaes der parameter) gpio_getport(args[0]); gpio_cmdhandler(args[0], args[1]); return; } /** Die checkargs-Methode prüft ob zwei korrekte Argumente eingetragen wurden. * @param argumens - Commandline argument */ public static void checkargs(String[] argumens) { int laenge = argumens.length; String [] h = {"-h"}; int idx; boolean parameter1 = false; boolean parameter2 = false; //Prüft ob zwei args angegeben wurden. if (laenge == 2) { //Prüft ob ein richtiges erstes args angegeben wurde. for (idx = 0; idx<8 ; idx++) { if (argumens[0].equals(rel_map[idx][0])) { parameter1 = true; break; } } //Prüft ob ein richtiges zweites args angegeben wurde. for (idx = 0; idx<3 ; idx++) { if (argumens[1].equals(action[idx])) { parameter2 = true; break; } } } // Wenn es nicht zwei Args sind dann wird getestet ob ein h drin ist. // Wenn ja führt die Funktion show_usage aus. else if (Arrays.equals (argumens, h) == true) { show_usage(); System.exit(0); } //Wenn Kein h drin steht und es kein der beiden args enthält kommt eine Fehlermeldung else { System.out.println("Error. If you need help, type the command -h"); System.exit(0); } } /** Die init_gpio-Methode ist eine schleife die alle rel als output definiert.*/ public static void init_gpio() { int idx; String port; String cmd; for(idx = 0; idx<8 ; idx++) { port = rel_map[idx][1]; cmd = "/usr/bin/gpio -g mode " + port + " out"; launchcmd(cmd); } return; } /** Die gpio_getport-Methode vergleicht im rel_map welcher port gesucht ist * @param port - erster eingabe Wert der CMD Zeile * @return idx - gibt den idx Wert aus rel_map zurück * @return -1 - Fehler ausgabe * */ public static int gpio_getport(String port) { int idx; for(idx = 0; idx<8 ; idx++) { if(port.equals(rel_map[idx][0])) { return idx; } } return -1; } /** Die gpio_cmdhandler-Methode schaltet die Relais an oder aus. * @param port Relais(1-8) * @param cmd Aktion (on/off/status) * */ public static void gpio_cmdhandler(String port, String cmd) { int idx_port; idx_port = gpio_getport(port); if (cmd.equals(action [0])) { //Schalte on cmd = "/usr/bin/gpio -g write " + rel_map[idx_port][1] + " 1"; launchcmd(cmd); } else if (cmd.equals(action [1])) { //Schalte off cmd = "/usr/bin/gpio -g write " + rel_map[idx_port][1] + " 0"; launchcmd(cmd); } /*if (cmd.equals(action [2])) { //Stats geben cmd = "/usr/bin/gpio -g write " + port + status(); launchcmd(cmd); }*/ return; } /** Die show_usage-Methode gibt eine Hilfestellung bei falscher Eingabe*/ public static void show_usage() { System.out.println("You have to enter exactly 2 arguments."); System.out.println("Example: java gpio_java Argument1 Argument2"); System.out.println("Argument1: rel1, rel2, rel3, ..., rel8"); System.out.println("Argument2: on,off or status"); } /** Die launchcmd-Methode führt den Prozess aus. * @param cmd - erster Eingabe Wert der CMD Zeile */ public static void launchcmd(String cmd) { // Wenn Simulation True ist kann sie auf dem PC ausfuehren // wenn die Simulation false is auf dem Raspberry PI boolean simulation = false; if(simulation==true){ System.out.println(cmd); } else { try{ Runtime.getRuntime().exec(cmd); } catch(IOException e) { System.out.println("process error IOException"); } } } }