Hi Stefan,
der Anhang ist im ersten Beitrag ein. In den letzten wurden halt Ergänzungen/Neuerungen beschrieben.
herbertf
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
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
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
Hi Waldi,
die Details zur Pin-Belegung findest Du hier:
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 - habe ich aktualisiert.
Ciao
HerbertF
Nun ist alles Gut Vielen Dank für deine tolle Arbeit.