IP-Symcon auf Raspberry mit Nutzung der GPIOs

Hi Stefan,

der Anhang ist im ersten Beitrag ein. In den letzten wurden halt Ergänzungen/Neuerungen beschrieben.

herbertf

Hallo HerbertF,

danke für den Hinweis auf diesen Beitrag von Dir.
Dazu aber auch noch mal ne Frage.
(1) Verstehe ich es falsch oder geht es auch, wenn IPS auf dem RaspPi - den ich auslesen will - nicht läuft?!
(2) curl Passwort und User sind die von IPS oder welches?
(3) Bei mir kommt die Meldung:

GPIO Init
Raspi-Symcon-Dienst gestartet ....

GPIO-Ueberwachung-Thread gestartet

GPIO-Pin hat sich geaendert GPIO_7=0 -> senden
JSON-String= {"jsonrpc": "2.0","method":"SetValue","params":[17881,true],"id":1} gesandt
curl_easy_perform() failed: Couldn't resolve host name

(4) Und wo bzw. wie definiert ich (im C-Script) nun zum Bsp. GPIO12 (physikal. Pin26) als INPUT (um Taster abzufragen)?

Gruß und Danke für die Geduld :stuck_out_tongue:
hardlog

habe oben Antworten eingetragen

Hallo herbertf,

1000 Dank für die Antwort. Bzgl. der Var-IDs bin ich weiter. Die Kommunikation mit den „fernen“ Pi funktioniert. Das mit der unterschiedlichen Bezeichnung der PINS des Pi hab ich verstanden.

Ich hab aber (scheinbar) immer noch ein Verständnisproblem (?). Dein Script setzt die GPIO 0 - 7 in den Modus OUTPUT (inklusive GPIO7 für 1wire). Wenn ich die aber als Inputs abfragen will, was muss ich dann ändern (bzw. muss ich das überhaupt?

Gruß
hardlog

Ok,

habs einfach ausprobiert:
wenn ich in deinem Script den gewünschten Pin auf INPUT setzte, statt OUTPUT, dann geht es mit dem Taster. Bin begeistert!!!
Wie läuft das aber nun z.B. mit nem 1wire-Temp.Sensor? Geht das auf diesem Wege?

Gruß
hardlog

Hi Hardlog,

der Vorteil meines separaten Programms besteht in der Schnelligkeit, da im Millisekundenbereich die Eingänge eingelesen werden können. Dies ist z.B. für Lichttaster wichtig.
Bei den Temperaturen (1-Wire) ist das Verhalten naturgemäß träger, deshalbe frage ich diese direkt aus IPS zyklisch (30sek-2Min) mit folgendem Script ab:

<?
//Adresse des Tempsensors muss im Info Feld stehen z.B.:
//28-000004aaf379
//
//
ini_set('max_execution_time', 10);
$debug=false;
$Par_ID=IPS_GetParent($_IPS['SELF']);
$var_object_type=IPS_GetObject($Par_ID);
$ObjInfo=$var_object_type['ObjectInfo'];
if ($debug) echo $ObjInfo;
$dateiname="tail /sys/bus/w1/devices/".$ObjInfo."/w1_slave";
if ($debug) echo "
 $dateiname";
$meinstring=shell_exec($dateiname);
if ($debug) echo "
$meinstring
";
$pos1 = stripos($meinstring, "t=");
$value= substr($meinstring,$pos1+2);      //um das t= zu entfernen
$Temp=round(($value/1000),1);
if ($debug) echo $Temp;
If ($Temp==0) Goto Ende_Script;
if ($debug) echo "Temp= $value  $Temp";
If (GetValueFloat($Par_ID)!=$Temp)
    SetValueFloat($Par_ID,$Temp);
Ende_Script:
?>

Schönen Männertag :wink:
herbertf

Hallo hardlog,

kannst Du mir verraten wie Du die GPIO`s auf „INPUT“ gestellt hast?

Gruß

Axel

@herbertf: Danke für die Tipps, hab es so realisiert.

@Axel:
Im C-script (ips-ip.c):

int gpio_init(void)
{
	printf ("GPIO Init
") ;
	int n;
	if (wiringPiSetup () == -1)  //Startet Wiring API - wichtig
		return 1;				 //return von wiringPi
	//Initialisierung
	GPIO_PIN[0][0]=54659;
	GPIO_PIN[1][0]=20684;
	GPIO_PIN[2][0]=19561;
	GPIO_PIN[3][0]=28772;
	GPIO_PIN[4][0]=22316;
	GPIO_PIN[5][0]=10295;
	GPIO_PIN[6][0]=59122;
	GPIO_PIN[7][0]=52343;
	for(n=0;n<=3;n++) pinMode(n, OUTPUT);	// Pin0-3 als OUTPUT
	for(n=4;n<=7;n++) pinMode(n, INPUT);		// Pin4-7 als INPUT
	return 1;
}	

Gruß
hardlog

Hallo hardlog,

vielen Dank für Deine schnelle Antwort.

Welche Änderungen ich auch immer in der ips-pi.c durchführe, erhalte ich bei dem Programmstart grundsätzlich folgende Fehlermeldung:

"GPIO Init
Raspi-Symcon-Dienst gestartet …

GPIO-Ueberwachung-Thread gestartet

GPIO-Pin hat sich geaendert GPIO_3=0 -> senden
JSON-String= {„jsonrpc“: „2.0“,„method“:„SetValue“,„params“:[58141,true],„id“:1} gesandt
curl_easy_perform() failed: Couldn’t resolve host name
"
Die Zeile mit der ID 58141 hatte ich bereits gelöscht.
Um das Programm abzubrechen habe ich bislang immer das Putty-Fenster mit dem Kreuz weggeklickt und danach die Verbindung über Putty neu aufgebaut.
Gibt es eine andere Möglichkeit das Programm neu zu starten?

Axel

Hallo hardlog,

habe immer mit dem Befehl „sudo ./ips-pi“ versucht zu starten.
Wahrscheinlich müsste ich aber das Skript ips-pi.c starten. Wenn ich dies mit dem Befehl „sudo ./ips-pi.c“ tue gibt es folgende Fehlermeldungen:

„./ips-pi.c: 1: ./ips-pi.c: /bin: Permission denied
./ips-pi.c: 2: ./ips-pi.c: Syntax error: „(“ unexpected“

Wie kann ich die Datei richtig starten?

Axel

Hi Axel,

wie im ersten Thread ist dies immer noch richtig um das Programm zu starten:


//Start durch:
sudo ./ips-pi                     //vorher nach ips-pi wechseln
//ggf.noch Autostart einrichten: http://www.raspberry-projects.com/pi/pi-operating-systems/raspbian/scripts

Entweder bist Du im falschen Verzeichnis oder hast den Ordner ips-pi nicht angelegt. Unter dem Userverzeichnis (home) vom User pi darfst Du meines Erachtens keine Zugriffsprobleme haben. Zum Test kannst Du den ganzen Ordner (ips-pi) neue Rechte geben:


cd /home/pi
sudo chmod 777 -R ips-pi/ 

Ciao
herbertf

Hallo herbertf,

vielen Dank für Deine Tipps.
Nach einem erneuten Neustart des Raspberry funktioniert es jetzt.
Allerdings steigt die Prozessorauslastung um fast 30 % trotz des Sleep-Eintrages.
Ein Versuch mit dem Pythonskript http://blog.heimetli.ch/python-gpio-udp-client.html ergibt bei einem Abfrageintervall von 100 mSekunden eine zusätzliche Prozessorlast von ca. 9%.

Gruß

Axel

Hi Axel,
warum ich in meinem Anhang im ersten Beitrag nur eine 1 bei Sleep habe, kann ich momentan nicht mehr nachvollziehen.

Aktuell habe ich in dem GPIO-Thread ein:

delay(50);

Schneller kann sowieso keiner einen Taster drücken - in meiner dunklen Erinnerung habe ich das scheinbar mal aangepasst.

Wenn hier doch noch mehr Interesse besteht kann ich auch meine aktuelles Programm posten, ich habe zusätzloch vor geraumer Zeit eine Sendequeue hinzugefügt.
Abstürze habe ich auf 5 PIs überhaupt keine.

Ciao
Herbertf

Hallo,

ich bin neu in der Raspi Welt. IP-SymconV4 läuft auf RaspberryPI3. 1wire DS18S20 kann ich von IPS aus bereits auslesen. Hänge fest bei den I/O mit folgender Meldung:

GPIO Init
Raspi-Symcon-Dienst gestartet ....

GPIO-Ueberwachung-Thread gestartet

GPIO-Pin hat sich geaendert GPIO_7=0 -> senden
JSON-String= {"jsonrpc": "2.0","method":"SetValue","params":[17881,true],"id":1} gesandt
curl_easy_perform() failed: Couldn't resolve host name

und vieleicht hat einer n Tipp zu den GPIO´s Nummerirung, steige da nicht durch, was muss ich in ips-pi eintragen GPIO, wPi , BCM oder Physikal :confused:

Hi Waldi,

die Details zur Pin-Belegung findest Du hier:

Pins | Wiring Pi

Am einfachsten ist es m.E. aus der Shell (z.B. per putty) einen Ausgang zu schalten - analog aus IP-Symcon:
Putty:

shell_exec("gpio write $GPIO_PIN 0");

IPS_Script:

shell_exec("/usr/local/bin/gpio write $GPIO_PIN 1");

1-bedeutet einschalten, 0-ausschalten

Mit

gpio readall

kannst Du alle Ports abfragen.

Bei Dir scheint aber zusätzlich der Hostname nicht zu passen, bitte hierzu meinen Kommentar beachten:

//Anpassen der ips-pi.c im WINSCP
// IP und Port in nächster Zeile
// curl_easy_setopt(curl, CURLOPT_URL, "http://ip:port/api/");
// User und Password in nächster Zeile
// curl_easy_setopt(curl, CURLOPT_USERPWD, "user:password"); 
// Jeweilige Var_IDs z.B.:
// GPIO_PIN[0][0]=39331;    
// ggf. Zahl/Wert der überwachenden PINs einschränken
// for(i=0;i<=7;i++)

Ciao
Herbertf

Hi Herbertf,

Vielen Dank für die Antwort.
Wenn ich es richtig verstanden habe nutzt du wiringPi Bezeichnung in deinem Script? Das werde ich schon hinbekommen das größte Problem ist mit dem einloggen. Was mach ich da falsch?
ip ersetzen mit ‚192.168.178.52‘
Port: ’ 3777 ’
User : ’ pi ’
Passwort : ’ xxxxx ’
Hab ich was übersehen?

Gesendet von meinem SM-N910F mit Tapatalk

Jetzt sehe ich es selber nach dem Schreiben, user vom IPS eintragen und nicht vom Rpi. Richtig?

Gesendet von meinem SM-N910F mit Tapatalk

Ja - riohtig!

Schönes Wochenende!

Hi,

es war ein Fehler im Anhang des ersten Posts, welcher Wladi Nerven gekostet hat :wink: - habe ich aktualisiert.

Ciao
HerbertF

Nun ist alles Gut :wink: Vielen Dank für deine tolle Arbeit.