Modul zur Nutzung der Raspberry Pi GPIO

Hallo Joachim,

bin da noch am googeln. Mir ist nur aufgefallen das der RPi-Monitor das kann. Ist aber nicht mehr so wichtig. mit try and error habe herausgefunden das die optimale Größe für die Swap beim RPi 3B bei 512 MB liegt. Meine IPS-Probleme mit dem Speicher sind scheinbar erst einmal weg. :wink:

Danke.

Andreas


sudo free | grep Swap| tr -s " "| cut -d " " -f 2,4

So mache ich das. Gibt aber mehrere Varianten um ans Ziel zu kommen.

Hallo zusammen,

das Modul läuft bei mir super, ich habe allerdings ein Problem nach dem Neustart des Pis.

Symcon läuft bei mir auf einem Pi, ein anderer hängt in der Garage und steuert über das Modul das Garagentor, zwei GPIO Ausgänge für Rauf und Runter, zwei GPIO Eingänge um die Endlagen Auf und Zu zu erkennen. Die GPIOs werden direkt auf dem Pi verwendet. Grundsätzlich funktioniert das super. Wenn jedoch der Pi in der Garage bsp. nach einem Stromausfall neu gestartet wird, werden die Zustände der Eingänge nicht in Symcon aktualisiert. Die Ausgänge funktionieren sofort wieder problemlos, auch die Infos wie bsp. Temperatur werden über IPS2GPIO_RPi problemlos sofort aktualisiert. Nur eben die Eingänge nicht. Direkt per ssh auf dem Pi sind die Zustände über pigs r aber korrekt, also bsp. pigs r 27 liefert als Ergebnis korrekt 0, in Symcon wird hier aber nichts aktualisiert, es steht hier immer noch 1 da. Auch ein schalten über die Ausgänge und somit eine Aktualisierung der Eingänge ändert nichts in Symcon, auf dem Pi ist aber auch dann alles korrekt. Es liegt also nicht an einem möglicherweise unbekannten Zustand der Eingänge nach einem Neustart. Erst ein Neustart von symcon hilft hier weiter. An was kann das liegen? Oder kann ich irgendwie eine Aktualisierung der Eingänge anstossen?

Danke und Gruss

Mayday

Hallo Mayday,

tatsächlich sieht es auf die Schnelle so aus, als ob das Input-Modul keine initiale Zustandsabfrage macht, würde so im IPS nur auf einen Statuswechsel reagiert.
Muss mir das mal genau anschauen und das entsprechend ergänzen…

Joachim

Hallo Joachim,

Danke, das du dir das mal anschaust. Aber auch einen Zustandswechsel bekommt Symcon nicht mit. Man hat den Eindruck, als seien die Eingänge „abgehängt“. Ich kann in dem o.g. Beispiel sooft schalten wie ich will, die Eingänge werden direkt auf dem Pi korrekt erkannt und aktualisiert, in Symcon passiert nichts. Erst nach einem Neustart von Symcon klappt das wieder problemlos. Dieser „Fehlerfall“ passiert aber nur, wenn der Pi auf dem die GPIOs verwendet werden, neu gestartet wurde, durch bsp. Stromausfall o.ä. Alle anderen Dinge, also Ausgänge oder die sonstigen Informationen über IPS2GPIO_RPi werden aber korrekt und sofort in Symcon aktualisiert. Man könnte meinen, Symcon bzw. das Modul im dem Fall, erwartet hier gar nichts mehr, erst nach einem Neustart passt es wieder das hier auf die Eingänge geprüft wird. Gibt es eine Möglichkeit, die Inputs aus Symcon gezielt zu aktualisieren? Dann könnte ich das mal testen, ob hier überhaupt was passiert.

Gruss Mayday

Hallo Mayday,

Step-by-Step.

Ich habe nun eine neue Funktion „public function GetInput()“ eingebaut, diese wird initial im ApplyChanges aufgerufen. Ich kann es hier leider nur mit Aufwand testen, deswegen bitte ich Dich darum das bei Gelegenheit mal selbst zu machen.

Das andere hört sich so an, als ob da mit dem „Notify“ für die Statusänderung nicht korrekt läuft, dazu solltest Du am Besten mal im Debug schauen, was dort passiert, wenn Du in der von Dir beschriebenen Situation den Eingang schaltest…

Joachim

Hallo Joachim,

das sieht nach dem ersten Test sehr gut aus… Die Inputs werden nun aktualisiert, das scheint zu passen. Ich werde das noch weiter beobachten/testen, aber ich habe heute kurz den Pi vom Strom genommen und danach wurde zusammen mit den Pi-Infos auch die Inputs wieder abgefragt, laut Zeitstempel in Symcon, das war seither nicht der Fall.

Also Top und Danke :slight_smile:

Gruss Mayday

Hallo Joachim,

vorweg … sehr coole Sammlung an brauchbaren Modulen hast Du da gezaubert !

Ich bin aktuell am ausprobieren ob ich ISP2GPIO_Servo für einen Servo ESC (BLHeli40A) verwenden kann.

Auf der Shell des Raspberry kann ich den ESC ohne Probleme mit folgender Sequenz steuern:

root@weiher-raspi:~# pigs s 12 0
root@weiher-raspi:~# pigs s 12 1500
root@weiher-raspi:~# pigs s 12 1600

Mit dem Befehl I2GServo_SetOutput kann ich ebenfalls die Werte setzen und bekomme auch im Debug den passenden Wert zurück, allerdings wird mit I2GServo_GetOutput der Wert 0 gelesen.
Mache ich was falsch, oder ist das ein Bug ?


Beste Grüße,
Hermann

…muss ich checken…

Bewegt sich den der Servo erwartungsgemäß??

Joachim

Hallo Joachim,

über die PigPio Shellkommandos wird mein BLDC (Brushless DC Motor) über den Steuereingang (gleiches Steuersignal wie ein Servo) am ESC einwandfrei angesteuert.
Tests mit einem klassischen Servotester funktionieren auch. Meiner Meinung nach kann es eigentlich nur noch am SymconModul liegen …
Besten Dank und Grüße,
Hermann

…hilfreich könnte noch die Debug-Ausgabe aus dem Splitter sein. Ist da etwas auffälliges zu beobachten?

Joachim

Hallo Hermann,

ich habe in beiden Modulen (Splitter und Servo) Debug-Ausgaben ergänzt. Lass mal bei beiden die Debug-Instanz mitlaufen, mal sehen ob wir dann den Fehler finden…

Joachim

Hallo Joachim,

habe eben mal wieder Zeit zum Testen.
Der Befehl I2GServo_GetOutput funktioniert soweit.

Habe in der Bash:

root@weiher:~# pigs s 12 1750

eingegeben und anschließend in Symcon ausgelesen -> Passt :wink:

Beim Befehl I2GServo_SetOutput wird im Splitter IPS2GPIO_IO folgendes ausgegeben:
Hinweis: ab gelber Einfärbung habe ich vorab wieder auf der Bash den Wert gesetzt!

und im IPS2GPIO_Servo folgendes:

Kommst Du damit weiter ? Besten Dank und viele Grüße,
Hermann

Hallo Hermann,

vielleicht übersehe ich etwas, aber für mich sieht das erst einmal i.O. aus…

Die „1“ bei „set_servo“ ist quasi ein „true“ der erfolgreichen Ausführung das von PiGPIO zurückgegeben wird, der Wert bei „get_servo“ gibt doch den korrekten Wert wieder?

Stehe jetzt etwas auf dem Schlauch…:confused:

Joachim

Hallo Joachim,

der Wert, welcher rot markiert ist darf nicht 0 sein !

zwischen der rot markierten 0 und dem Wert 1750 wurde der Wert händisch auf der Raspi-shell gesetzt. Wollte damit demonstrieren, dass der Wert korrekt durch „get_servo“ gelesen wird.

Ist es jetzt klar ?

BG,
Hermann

Hallo Hermann,

möglicherweise ist das gar kein Fehler im klassischen Sinne. Für ein Servo habe ich so programmiert, dass der Zielwert gesetzt wird und nach 500 msek auf „0“ (-> ausgeschaltet) wird. Bei meinen Tests mit einem Servo funktionierte das so (was nicht bedeutet dass es korrekt ist!). Ich selbst habe das Modul nicht benutzt.

Ich könnte das:

  • grundsätzlich ändern (also auf die Abschaltung ganz verzichten)
  • die Abschaltung über das Konfigurationsformular einstellbar machen
    oder
  • eines neues Modul für diese Art von Motoren ohne eine Abschaltung machen

Was wäre für Dich am Besten?

Joachim

P.S.: Was machst Du mit dem Motor?

Hallo Joachim,

am coolsten wäre die Abschaltung über das Konfigurationsformular einstellbar machen. Damit würde man auch für alle bestehenden Projekte anderer User nichts „unbrauchbar“ machen.

P.S.: Was machst Du mit dem Motor?

Ich steuere damit einen BLDC Motor, welcher mit Propeller versehen als Forellenteichlüfter im Einsatz ist. Steuerung mit einem Raspi als Insellösung im Wald mit zwei Solarpanele, Victron MPPT 75/15 Wechselrichter.
Auf dem Raspi läuft ein Symcon-Server, welcher über LTE (OpenVpn) mit dem Heimnetz verbunden ist.
In Zukunft will ich das noch mit allerhand Sensoren (Wassertemp., Ph-Wert, Sauerstoffgehalt im Wasser etc.) erweitern.

Wenn Du willst sende ich Dir mal ein Video des Prototypen.
Besten Dank und Gruß,
Hermann

Hallo Hermann,

ich habe das mal dementsprechend verändert - selbst konnte ich es aber noch überhaupt nicht testen.

Fremde Projekte sind immer interessant und vielleicht auch inspirierend, also gerne mehr davon…

Joachim

Hallo Joachim,

Hut Ab ! Da hätte ich stundenlang programmiert.

I2GServo_Shutdown und I2GServo_SetServo funktionieren wunderbar.

Vielen lieben Dank für die Implementierung dieser Änderung.
Beste Grüße,
Hermann

Hallo Joachim,

das Modul für den Laderegler habe ich soweit mal rudimentär fertig.
https://www.symcon.de/forum/threads/44272-Victron-Solarladeregler-BlueSolar-und-SmartSolar

Ich würde mir jetzt gerne ein Modul schreiben, welches Deine IPS2GPIO Module verwendet. Schick wäre alle „Servos“ -> Teichlüfter im Konfigartionsmenü angezeigt zu bekommen. Du hast sowas ähnliches ja in deinem Konfigurator mit den I2C Devices usw. gemacht.

Sollte doch iegentlich über die Modul-ID {0D748199-657B-4B56-80C2-943EE531429F} gehen. Ich würde gerne die Werte für maxlinks, mittel, maxrechts und Abschaltung von meinem Modul aus parametrieren. Geht das ?

Grüße,
Hermann