Befehl an Raspberry Pi

Hallo,
ich habe gebastelt und kann über die Kommandozeile des RPi Funksteckdosen ansteuern.

Nun möchte ich die aber über IP-Symcon schalten. Kann ich den RPI - Befehl „sudo pilight-send…“ über das Netzwerk von IPS aus auslösen ( vielleicht aus einem Script heraus? ) ?

Gruß
Volker

Hi!

Ehrlich gesagt weiß ich nicht, ob es beim Raspberry und da im Zusammenhang mit IPS etwas besonderes zu beachten gibt, aber grundsätzlich läuft sowas über shell exec…

http://de2.php.net/manual/de/ref.exec.php

Beispiel:

<?
shell_exec("sudo -u XXXX /ordner/datei.sh"); 
?>

Oder hast du IPS gar nicht auf dem Raspberry laufen? Dann müsstest du ja quasi vom IPS (vom Windows) über eine SSH Verbindung einen Befehl absetzen…

Dazu gibt es dann verschiedene Varianten… Aber am einfachsten dürfte die Verwendung von plink.exe sein…
http://www.haagit.com/index.php?module=Blog&submodule=Blog_SSH-Tunnel
http://the.earth.li/~sgtatham/putty/0.58/htmldoc/Chapter7.html

Oder:
http://the.earth.li/~sgtatham/putty/0.58/htmldoc/Chapter7.html

Grüße,
Chris

Hallo Chris,
Vielen Dank für die Antwort. Es ist so, dass ich IPS auf einem WIN Rechner am laufen habe und der RPi hängt im selben Netz. Ich werd mal Deine Links durchstöbern, vielleicht finde ich was.

Gruß Volker

Hi Volker,

dann ist nur der untere Teil meiner Nachricht für dich interessant :slight_smile:

Also der Teil mit der plink.exe und der darauf folgende „Oder“-Teil :slight_smile:

Grüße,
Chris

Hi,

oder mit IPS und so:

herbertf

Hallo,

ich habe jetzt mal folgende Zeile im Script stehen. Die Ausführung erfolgt ohne Fehler, aber auch ohne Ergebnis.

shell_exec(„http://192.168.2.125/home/pi/pilight/sudo pilight-send -p impuls -u 2 -s 28 -t“);

Ist der Weg richtig ? Oder müssen noch weitere Voraussetzungen geschaffen werden um den RPi anzusprechen ?

Ziel am Ende soll sein, mehrere Funksteckdosen über das Web-Front bzw. über Scripte in Abhängigkeit ( Uhrzeit, etc.) zu schalten.

Gruß
Volker

Öhm…wieso rufst du HTTP://192.168… auf???

Willst du nun HTTP oder SSH machen? Username und Passwort brauchste auch nicht? …? verwirrt

Vlt. solltest du mal deinen Aufbau und deine Aktoren usw. genauer beschreiben…du bist irgendwie etwas durcheinander und machst uns damit durcheinander und dann kann keiner mehr irgendwem helfen :smiley:

Grüße,
Chris

Hallo,
sorry, wenn ich das nicht so klar dargestellt habe.
Ich habe eine IPS die auf einem Rechner mit WIN 7 läuft und am Netzwerk hängt.

Dann habe ich einen RPi, der hängt am selben Netzwerk. Diesen RPi spreche ich über SSH an und schalte Funksteckdosen über pilight mit einem Befehl. Das funktioniert auch soweit.

Nun möchte ich aber nicht direkt den RPi ansprechen sondern das zentral über IPS verwalten.

Ich hoffe das bringt etwas Licht ins Dunkel, mir fehlt die Erfahrung derart Kommandos über das Netzwerk zu senden.

Gruß
Volker

Es wurden dir bereits mehrere Möglichkeiten aufgezählt, wie man sich über SSH mit einem System verbinden kann um dann Befehle auszuführen…

Zum Bleistift erneut ein Link zur plink.exe Variante:

-Chris-

Hallo,
vielen Dank für die Tipps. Ich bin weitergekommen, plink funktioniert !!
Ich kann zumindest über CMD den Befehl absetzen, mit Erfolg.

so könnte es dann aussehen:
IPS_Execute(„C:\Programme\Putty\plink.exe“, „192.168.2.125 -l user -pw Password sudo pilight-send -p impuls -u 2 -s 28 -t“,true,false);

Jetzt hakt es im Script. Habe schon einiges versucht, es muss etwas grundlegendes sein, denn nicht mal

 IPS_ExecuteEx("C:/Windows/notepad.exe", "", true, false, 1);

bzw

IPS_Execute("C:/Windows/notepad.exe", "", true, false);

funktionieren.

Folgendes habe ich auch schon versucht:

IPS_ExecuteEx('c:/windows/system32/runas.exe', '/user:user /savecred "c:/windows/notepad"', false, false,1);

Es kommt keine Fehlermeldung im Script-Fenster, es erscheint nur als Popup der Hinweis „Ausführung“
Ich bin über RDP auf dem Rechner drauf, kann das Auswirkungen haben?, aber wie geschrieben, aus der CMD heraus funktionieren die Befehle.

Gruß
Volker

Bin grad über einen Beitrag gestolpert, da musste ich an dich denken…

CPU Temperatur Raspberry per SSH?p=195845#post195845)

Grüße,
Chris

Ich habe es geschafft !!

Es lassen sich jetzt Funksteckdosen ( z.Zt. 3 verschiedene Fabrikate) über IPSView schalten. Dazu habe ich eine Boolean Variable eingerichtet, diese wird aus IPSView „getoggelt“ und startet dann folgendes Script. Dieses sendet via plink einen Befehl an den Raspi.


// Dieses Script wird über einen IPSToggleButton gestartet und bewirkt die Umschaltung der Funkstecksose  "kaku_switch_old -i 30 -u 14" .
// Der Button togglet den Punkt 16962, dieser startet bei Zustandswechsel dieses Script

   $status6 = GetValueboolean (16962/*[Heizung\Zirkulationspume\Status]*/);
					// *********     warum hier die falsche Bezeichnung steht ist noch nicht erforscht ************

	if ($status6 == false)
	{	IPS_ExecuteEx("c:/Programme\Putty\plink.exe", "192.168.2.125 -l pi -pw XXXXXXX sudo pilight-send -p kaku_switch_old -i 30 -u 14 -t", True, False, 2);
   	SetValueBoolean (16962 /*[DekoLampen\FSConradI1]*/,true);
	}
	else
	{	IPS_ExecuteEx("c:/Programme\Putty\plink.exe", "192.168.2.125 -l pi -pw XXXXXXX sudo pilight-send -p kaku_switch_old -i 30 -u 14 -f", True, False, 2);
 		SetValueBoolean (16962 /*[DekoLampen\FSConradI1]*/,false);
 	}

// der Parameter " 2 " in IPS_ExecuteEx ist die BenutzerID, herauszufinden über den Taskmanager

folgende Funksteckdosen sind im Einsatz :
Aldi - Quigg ( mit Lerntaste )
Conrad kodierbar mit 2 Drehschalter
DIW kodierbar mit DIP-Schalter

Auf dem Raspi ist Pilight installiert mit einem 433 MHz Sendemodul.

Danke für die Unterstützung

Gruß
Volker

Moin Volker!

Freut mich zu hören :slight_smile:

Zu deinem

$status6 = GetValueboolean (16962/[Heizung\Zirkulationspume\Status]/);
// ********* warum hier die falsche Bezeichnung steht ist noch nicht erforscht ************

>> Die Beschreibung wird erst angepasst/geändert/erneuert/erzeugt, wenn du das Skript einmal geschlossen und dann wieder neu geöffnet hast. Einfach nur die ID ändern ändert nicht die Beschreibung. Erst Skript zu und wieder neu öffnen löst die Automatik aus, welche die Bezeichnungen neu generiert :slight_smile:

Grüße,
Chris

Hi Chris,

das alleine hilft nicht, habe das schon mehrfach probiert.
Aber,…
die Zeile neu eintippen, bzw. eine Leertaste hinter 16962, speichern und neu aufrufen, dann ist alles gut.

Hatte die Zeile aus einem anderen Script kopiert und dann bei der Anpassung der ID wohl nicht aus das Leerzeichen geachtet.

Gruß
Volker

Alos ich starte auf dem RPi ein kleines Python script welches auf einen bestimmten Port hört und die entsprechend mitgelieferte parameter auswertet. Je nach Parameter = Kommando ruf ich auf dem RPi is script auf. Rückgabe Werte kommen dann einfach über den UDP port zurück und werden von IPS ausgewertet.

Plink geht gut:

ich schalte meine GPIOs mit einem ServerSocket auf dem IPS.
dazu folgendes kleines phython script:

#!/usr/bin/python
import socket
import sys
import RPi.GPIO as GPIO

# Settings
GPIOID = 23
SockID    = 11025

# Setup GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIOID, GPIO.OUT)
GPIO.output(GPIOID, GPIO.LOW)

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Bind the socket to the port
server_address = ('0.0.0.0', SockID)


print >>sys.stderr, 'starting up on %s port %s' % server_address
sock.bind(server_address)
sock.listen(1)

# Listen for incoming connections
data = "NOTHING"
while data != "CLOSE":
    conn, addr = sock.accept();
    print 'Connected with ' + addr[0] + ':' + str(addr[1])
    data = conn.recv(1024)
    data = data.strip()
    if data == "OPEN":
        GPIO.output(GPIOID, GPIO.HIGH)
        print "Open GPIO."
        conn.send("OK")
    elif data == "CLOSE":
        GPIO.output(GPIOID, GPIO.LOW)
        print "CLOSE GPIO"
    conn.close()
sock.close()

Python script ggf. noch ausführbar machen:
sudo chmod g+x,u+x,o+x pfadzudeinemscript.py

Das Script startest du am einfachsten per crontab beim starten:

crontab -e
#ans ende anfügen:

@reboot sudo pfadzumscript.py

Auf IPS Seite kannst du dann die Befehle wie folgt hin senden:

		// Send Socket UDP Command with Socket Info
 $raspiIP = "1.1.1.1"; // IP des raspberry
 $port      = 1025;

$msg = 'OPEN'; // oder CLOSE - das was halt das python script auswertet

		$fp = fsockopen("tcp://".$raspiIP, $port, $errno, $errstr);
		if (!$fp) {
		    echo "ERROR: $errno - $errstr<br />
";
		} else {
		    fwrite($fp, $msg);
		    $resp = trim(fread($fp,1024));
		    fclose($fp);
		    if($resp == "OK"){
                      echo "alles gut - Befehl angekommen";
                    }else{
                      echo "leider kein Befehl angekommen  $resp";
                    };
		}

Funktioniert bei mir tadellos. Derzeit mit einem GPIO. kann man nat. einfach anpassen und alles damit schalten.

Hallo,

wenn man als IPS Server ein Raspi benutzt und mit IPS ein anderen Raspi „GPIO“ Steuern möchte?
Beide Pi’s im selben Netzwerk natürlich.

Habe als IPS Server ein Raspberry Pi und im Zählerschrank ein Banana Pi auf dem Volkszähler läuft.
Auf dem Banana Pi ist eine kleine Erweiterung von Udo (volkszähler).
Bald kommt die große Erwiterung (mehr S0 eingänge) die auch 2 Relais am Bort hat. Und wenn ich die mit IPS Steuern könnte, währe es schon Geil :slight_smile:

Ist das sehr schwierig?

Gruß

wie in meinem Beispiel oben - müsste eigentlich gehen - da du ja auf dem ‚Client‘ RASPI in dem Python Script beliebige Sachen machen kannst - Shell befehl , GPIO etc.