Modul zur Nutzung der Raspberry Pi GPIO

…woher denn?[emoji15]

ups, ok, hatte ich vermutet, dann merkt sich Eugen wohl auch die „historischen“ Werte.

Hallo Joachim,

ich habe auf Github gesehen, dass du im PIGPIO-Modul den DS3231 bereits am integrieren bist. Ich habe es dann gleich mal ausprobiert. Der RTC Zeitstempel scheint schon richtig abgebildet zu werden. Nehme an, die Funktionen I2GDS3231_Get/SetRTC, GetTemerature sind bei dir noch in Bearbeitung.

Die V65 von PIGPIO habe ich auf einem anderen PI3 mit Stretch ausprobiert. Aktuell kann ich jetzt keine I2C-Devices über IPS mehr ansprechen, obwohl i2cdetect alle meldet. Werde da mal wieder zurück auf die V64 gehen, um zu prüfen, ob etwas anderes danebengegangen ist.

Gruss
Bernd

DS3231.jpg

…vielleicht ist mein DS3231 nachher in der Post…
SetRTC sollte die IPS-Systemzeit in den Baustein schreiben, GetRTC sollte sie auslesen und als Statusvariable anzeigen - wenn das funktioniert wäre das ja schon mal gut, der schwierige Part kommt ja jetzt:
Wann und wie soll gesetzt werden, wann ausgelesen und auf den Pi übertragen werden?

Das mit der V65 hört sich ja nach einer kleinen Katastrophe an!

Joachim

Ich würde zyklisch die Zeit bei einem NTP Server (ptbtime1.ptb.de oder auch deren Pool)) abfragen und den mit der lokalen Systemzeit und der RTC vergleichen. Bei Abweichungen von groesser X Sekunden von der NTP-Zeit sollte die in die lokale Systemzeit und in die RTC geschrieben werden. Damit wären alle Uhren bei aktiver Internetverbindung wieder synchron.

Wenn der NTP Server(oder auch Pool) nicht erreichbar ist, sollte die RTC der Master sein gegen den die Systemzeit gemessen wird. Bei zu großer Abweichung sollte die RTC Zeit in die Systemzeit übernommen werden.

Systeme die nie mit dem Internet verbunden sind, bräuchten natürlich eine Möglichkeit die Zeit per Hand zu setzen. Wie man an meinem Screenshot sehen kann, lebt die DS3231 bei mir im Zeitalter 07.04.1903 :wink:

Dadurch hätte man bei einem längerem Internetausfall in Kombination mit Stromausfall immer noch eine präzise Zeitbasis zur Verfügung und alle geloggten Messwerte wären nicht verloren.

Gruss
Bernd

Kann ich nicht bestätigen, die V65 mit BME280 auf PI A mit Stretch und LAN Anbindung läuft ohne Probleme.

Nur auf dem PIzeroW mit Stretch und WLAN Anbindung und BME680 stribt pigpiod wie bisher nach kurzer Zeit.

Wie gesagt, bei mir ist I2C über PIGPIO tot, kann aber viele Ursachen haben. Werde später am Abend mal alles neu aufsetzen und dann berichten.

Gruss
Bernd

Ich habe jetzt alles nochmal mit neuestem Stretch, PIGPIO v65, IP Symcon 4.4-2054 und aktuellstem PIGPIO-Modul von Joachim von Grund auf neu installiert. Nun läuft alles wieder ohne I2C-Kommunikationsprobleme (siehe Screenshot).

Gruss
Bernd

Hallo Bernd,

gut das das PIGPIO-Update offensichtlich mit der erwarteten Funktionalität läuft, hoffen wir auch, dass das eine oder andere behoben wurde…

Zum DS3231: Jetzt wird die IPS-Zeit korrekt gesetzt und auch wieder ausgelesen, ist ein bißchen „tricky“ weil es im BCD-Format geschrieben und wiueder gelesen werden muss…

Zur Verfahrensweise: Ich hatte eine ähnliche Vorstellung zur Nutzung entwickelt, vielleicht nur mit der Annahme, dass jedes Schiff nur einen Kapitän hat. Prinzip: Das Modul bezieht selbst regelmäßig eine Uhrzeit über einen NTP-Server. Ist dieser nicht verfügbar wird eine Meldung generiert, aber die Zeit vom DS3231 sollte dann als „Master“ regelmäßig die Raspberry Pi-Zeit korrigieren.

Joachim

Hallo Joachim,

hast du die Befehle im Modul schon aktiviert? Bei mir wird der DS3231 zwar ausgelesen und in die Systemvariablen der Instanz geschrieben, wenn ich aber den Lesebefehl absetze:

I2GDS3231_GetRTC(26428 /*[DS3231Test\DS3231Zeit]*/);

bekomme ich folgende Fehlermeldung (die Variable 26428 habe ich als Integer angelegt):

Warning:  Instance #26428 does not exist in /var/lib/symcon/scripts/__generated.inc.php on line 1915

Warning:  Instance #26428 does not exist in /var/lib/symcon/scripts/__generated.inc.php on line 1919

Fatal error:  Uncaught exception 'Exception' with message 'Instance does not implement this function' in /var/lib/symcon/scripts/__generated.inc.php:1924
Stack trace:
#0 /var/lib/symcon/scripts/21862.ips.php(3): I2GDS3231_GetRTC(26428)
#1 {main}
  thrown in /var/lib/symcon/scripts/__generated.inc.php on line 1924

Mir ist noch aufgefallen, dass in der Übersicht der Instanzbefehle alle zwei mal auftauchen (siehe Screenshot).

Kannst du mir da einen Tipp geben.

Gruss
Bernd

InstanzBefehle.jpg

…letzteres ist ein bekannter IPS-Fehler - bei jedem Update werden die Funktionen neu hinzugefügt…

Das andere muss ich mir anschauen …

Hallo Joachim,

stimmt, hatte ja paresy in Lübeck angesprochen, das Thema mit den Verdopplungen.

Zum anderen bin ich jetzt weiter gekommen und habe deine Logik verstanden. Die Variable, die bei den I2GDS3231-Befehlen eingeben werden muss, ist die der Instanz und nicht die einer Integervariablen, die gelesen oder gesetzt werden soll. Es werden dann einfach die Instanzvariablen gesetzt, gelesen. Kann man so machen.

Mir hätte zumindest beim schreiben der Zeit eine Variable und nicht wie jetzt die Systemzeit besser gefallen. Bei einem System, welches nie das Internet sieht und damit NTP nicht nutzen kann, muss dies sowieso geschehen.

Gruss
Bernd

Hallo Bernd,

spricht ja nichts dagegen auch diese „manuelle“ Variante umzusetzen…

Zunächst habe ich jetzt zwei Funktionen geschaffen:
SetRTCFromIPS - kopiert die IPS-Systemzeit in den DS3231 (SetRTC macht im Moment das Gleiche)
SetRTCFromNTP - kopiert die Zeit eines NTP-Servers (aktuell „fix“ pool.ntp.org, kann aber später über das Konfigurationsformular angepasst werden) in den DS3231

GetRTC liest die Zeit aus dem DS3231 aus und wird nach jedem SetRTC… automatisch ausgeführt…
GetTemperature liest die Temperatur aus dem DS3231

Für den NTP-Server könnte ich mir noch eine Statusvariable (erreichbar/nicht erreichbar) vorstellen, sowie einen zeitlichen Trigger.

Zum Schreiben auf dem IPS-System müssen wir noch mal nach Sicherheitsmechnismen schauen. Zeitlich könnte es ja auch zu „Sprüngen“ kommen, wenn der Pi selbst nach NTP synchronisiert als auch über IPS gesteuert…
Normalerweise sollte das dann besser beim Pi ausgeschaltet werden, aber schauen wir mal wie es weitergeht…

Joachim

Hallo Joachim,

sehe ich genau so. Ich lasse gerade Messreihen mit NTP-/RTC-/Systemzeit mitlaufen. Meist unter einer Sekunde, manchmal aber auch über 10 Sekunden. Klar ist, dass Debian kein Real-Time-OS ist, PHP, PIGPIO und IPS machen es nicht einfacher. Ich logge jetzt erst mal alle Quellen mit um in 1-2 Wochen mal was dazu sagen zu können.

Gruss
Bernd

hallo Joachim,

habe jetzt endlich alles da zum testen des MCP23017 :smiley:
Bekomme derzeit folgende Fehlermeldung beim übernehmen der Einstellungen.

<br />
<b>Warning</b>: <br />
<b>Warning</b>: socket_connect(): unable to connect [10061]: Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte.

in <b>C:\IP-Symcon\modules\SymconModules\IPS2GPIO\module.php</b> on line <b>1718</b><br />
<br />
<b>Warning</b>: socket_send(): unable to write to socket [10057]: Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und (beim Senden �ber einen Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde.

in <b>C:\IP-Symcon\modules\SymconModules\IPS2GPIO\module.php</b> on line <b>1740</b><br />
<br />
<b>Warning</b>: socket_send(): unable to write to socket [10057]: Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und (beim Senden �ber einen Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde.

in <b>C:\IP-Symcon\modules\SymconModules\IPS2GPIO\module.php</b> on line <b>1740</b><br />
RESULT:1 in <b>C:\IP-Symcon\modules\SymconModules\IPS2GPIO_MCP23017\module.php</b> on line <b>177</b><br />

Ic2 ist aktive und wird auch bei der Konfiguration Angezeigt.
Habe einen PIR mal zu testzwecken angeschlossen. Bekomme leider aber keine Status ausgeben.

Swen

Update: Fehler ist weg. Prüfe dann nochmal weiter, ob alles geht.

…bin leider bis dato nicht dazu gekommen, die Steckerleiste an die Platine zu löten…[emoji17]

Joachim

Ok hab nichts angeschlossen, und erzeigt welche mit an, und welche mit aus an.

Kommt bei abrufen der Daten alle 5 sec.

Swen

…da meine Glaskugel gerade kaputt ist: was steht denn im Debug des Splitters? Was im Debug der Instanz?

Joachim

…außerdem sehe ich an den verschiedenen Zeiten das diese Zustand nicht statisch ist…
Was ist als Input, was als Output konfiguriert?

Also alles Input, kein Output definiert.

Output MCP_23017 Modul:

TXT: 17.02.2018 21:32:36.00 | GetOutput | Ausfuehrung
TXT: 17.02.2018 21:32:36.00 | GetOutput | Ergebnis: a:4:{i:1;i:0;i:2;i:128;i:3;i:0;i:4;i:0;}
TXT: 17.02.2018 21:32:41.00 | GetOutput | Ausfuehrung
TXT: 17.02.2018 21:32:41.00 | GetOutput | Ergebnis: a:4:{i:1;i:0;i:2;i:192;i:3;i:0;i:4;i:0;}

Output Splitter (Nach den Speichern, da sonst nichts angezeigt wird!):

TXT: 17.02.2018 21:34:22.00 | Set Used I2C | Handle fuer Device-Adresse 33 an Bus I2C-Bus 1: 4
TXT: 17.02.2018 21:34:22.00 | Set Used I2C | Test-Lesen auf Device-Adresse 33 Bus 1 erfolgreich!
TXT: 17.02.2018 21:34:22.00 | set_usedpin | Gewaehlter Pin 19 ist bei diesem Modell verfuegbar
TXT: 17.02.2018 21:34:22.00 | Notify | gestartet
TXT: 17.02.2018 21:34:25.00 | Datenanalyse | Laenge: 12 Anzahl: 3
TXT: 17.02.2018 21:34:25.00 | Datenanalyse | KeepAlive - SeqNo: 2

Derzeit hängt nichts dran, da müsste doch alle False sein, oder?
Wechselt halt dauerhaft durch.

Hier noch ein Bild vom den Einstellungen:

Swen