Modul zur Nutzung der Raspberry Pi GPIO

Hallo Leute,

auch ich möchte ein neues Modul vorstellen. Es ist in den letzten Wochen auch Dank der fleißige Unterstützung hier aus dem Forum entstanden.

Zu finden ist es hier:
GitHub - Joey-1970/SymconModules

Das Modul ermöglicht die Nutzung der GPIO auf dem Raspberry Pi auf dem Euer IPS läuft, aber eben auch jeden anderen der per LAN oder WLAN angebunden ist.

Voraussetzungen:

  • IPS 4.1
  • aktuelles Jessie-/Stretch-Image
  • aktuelle PIGPIO-Installation (in der aktuellen Jessie-/Stretch-Version ist noch eine ältere PIGPIO-Version enthalten, aktuell ist V65 oder größer)
  • Freigabe der benötigten Bussysteme (I²C) in der raspi-config

Was kann das Modul bis jetzt:
Direkt an den GPIO:

  • digitaler Output
  • digitaler Input mit Notification (kein Polling notwendig) ->Elektronik - Entprellung ohne Flipflop, auch der PIR funktioniert
  • analoger Output (PWM Dimmer), optional mit Fadefunktion -> Anschlußplan
  • RGB Output, optional mit Fadefunktion -> Anschlußplan
  • RGBW Output, optional mit Fadefunktion
  • HC SR04 (Ultraschall-Entfernungsmessung) -> Anschlußplan
  • Servo-Steuerung (Anschlußbeispiel)
  • L298N zur Motorsteuerung
  • 1-Wire über GPIO 4 und den 1-Wire-Server des Raspberry Pi (nur DS18x20)

Über den I²C-Bus:

  • 1-Wire über DS2482 (I²C zu 1-Wire) mit Unterstützung des DS18B20, DS18S20, DS2413, DS2438
  • AS3935 (I²C-Blitz/Gewitter-Sensor)
  • GeCos Modul 4 fach RGBW (I²C-PCA9685)
  • GeCos-Modul 16 fach PWM (I²C-PCA9685)
  • BH1750 (I²C Lichtstärkemessung) -> Anschlußplan
  • BMP180 (I²C Luftdruck und Temperatur)
  • BME280 (I²C Luftdruck, Luftfeuchtigkeit, Temperatur) -> Anschlußplan
  • BME680 (I²C Luftdruck, Luftfeuchtigkeit, Temperatur (Luftgüte noch in Arbeit!)
  • PCF8574 (I²C 8-fach digital I/O-Expander, optional mit Interrupt) -> Anschlußplan
  • PCF8591 (I²C 4-fach analog Input, 1-fach analog Output)
  • PCF8583 (I²C Zähler, optional mit Interrupt)
  • iAQ-Qore zur Messung von Luftqualität (CO2-Anteil usw.)
  • MCP3424 (I²C 4-fach AD-Wandler mit bis zu 18 Bit-Auflösung und Eingangs-Verstärker)
  • MCP23017 (I²C 16-fach digital I/O-Expander, optional mit Interrupt)
  • ermöglicht die Nutzung beider I²C-Busse am Raspberry Pi (Bus 0 in P5 und Bus 1 bei den GPIO)
  • ermöglicht den Betrieb von I²C-Multiplexern (TCA9548a und PCA9542) (dazu bitte keine Voreinstellungen in der Config.txt!)
  • S.USV - USV für den Raspberry Pi

Sonstiges:

  • SDS011 PM2.5 Air Partikel Sensor (nicht über USB anschließen, sondern 5V, Gnd und zwei beliebige GPIO wählen!)
  • Unterstützung des Nextion Displays inkl. Fernupdate
  • Überwachung des Raspberry Pi (Temperatur, Auslastung etc.)
  • Nutzung der Bluetoothfunktionalität der Raspberry Pi 3 zur Anwesenheitserkennung

weitere sind in Arbeit:

  • APDS 9960 (I²C Gestik, Helligkeit, Farbe, Abstand)
  • SSD1306 (I²C OLED-Display)

Allgemeine Hinweise / FAQ:

  • Der Zustand der GPIO des Raspberry Pi beim Bootup ist nicht definiert. Das bedeutet, dass direkt an GPIO angeschlossen Devices bis zum vollständigen Start des Raspberry Pi und IPS ebenso undefiniert Dinge machen! Wenn das dabei um die Schrankbeleuchtung geht, mag das egal sein, bei Garagentoren o.ä. empfehle ich jedoch dringend hier die oben unterstützten I²C-Devices zu nutzen, hier ist dann beim Bootup der Zustand definiert.

  • Wie es in IPS üblich ist, führt die Veränderung der Status-Variablen in der IPS-Konsole nicht zu einer Aktion. Um die Funktionalität zu testen bieten sich mindestens die Möglichkeiten die Statusvariablen im Webfront zu bedienen oder über das Kontextmenü in der Konsole „Befehle testen“ auszuführen.

  • Bei keinem der Ausgangs-Module (Output, Dimmer, RGB, RGBW usw.) wird der Zustand des Devices regelmäßig überprüft, weil unterstellt wird, das diese nur IPS-konform von einer Stelle gesteuert wird. Eingänge (Input, A/D, Wandler, I/O-Port-Expander usw.) haben in der Regel aber selbstverständlich diese Funktionalität, durch zeitlich gesteuert Abfrage oder durch Interrupt getriggert den aktuellen Zustand zu ermitteln.

  • Es gibt die eine oder andere „Inkompatibilität“ zwischen IPS und PIGPIO, begründet in den jeweiligen Restriktionen. Soweit diese bekannt sind, sind Maßnahmen getroffen worden dieses bestmöglich zu kompensieren.

  • Wird der DS2481 und/oder MUX eingesetzt, muss dieser direkt am I²C-Bus 1 angeschlossen werden (GPIO 2/3 bzw. Pin 3/5)

  • Wird eine MUX verwendet so sind alle anderen Devices (außer dem DS2481) hinter diesem anzuschließen

  • Bitte vor Fehlerpostings prüfen, ob ihr die aktuelle PIGPIO-Versioninstalliert habt (muss manuell durchgeführt werden!) und ob das Modul selbst auf dem aktuellen Stand ist. In der Regel geben die Debug-Meldungen vom Splitter als auch der jeweiligen Instanz einen Hinweis darauf, wo der Fehler liegen könnte, also auch dieses ggf. mit posten.

Ich weise ausdrücklich darauf hin, dass es sich um ein noch unvollendete Modul handelt, das Fehler haben könnte!

Ich hafte weder für defekte Soft- und/oder Hardware noch für „verbrannte“ Zeit!

Wer Lust hat mal zu testen, sei aber herzlich eingeladen. Fehlermeldungen, Erweiterungswünsche dann gerne hier.

Vielen Dank noch mal an die tatkräftigen Unterstützer!

Joachim

…noch mal ein kleines Update:

Hinzugekommen sind:

  • ein Modul zur Kommunikation mit einem Nextion Display, inklusiv der Möglichkeit ein Update aus IPS heraus zu tätigen
  • ein Modul zur Anwesenheitserkennung über Bluetooth, orientiert sich an dem Ansatz von tranxanos
  • ein Modul zur Überwachung des Raspberry Pi (Temperaturen usw.)

Es hat sich darüber hinaus noch ein Menge in Bezug auf Stabilität und Performanz getan, bin aber noch weiter dabei Funktionalitäten zu erweitern…

Joachim

mich würde interessieren:

  • Unterstützung des TCA9548A (ich möchte 4 BME280 abfragen …) - da habe ich keine idee, wie man das implementieren könnte

  • iAQ-Engine (mit variabler Adresse) - da könnte ich evtl. auch etwas beisteuern

Hier mal der Link zum Datasheet vom AMS Sensor:

http://ams.com/ger/content/download/686523/1787697/file/iAQ-core_Datasheet_EN_v1.pdf

Man muss iegtl. „nur“ ein 0xB5 an den Sensor schicken. Dann kann man max. 9 Bytes abfragen, die die Daten (CO2+VOC) enthalten.

Hi Tom,

wenn Zeit kommt und ich mir die neuen AMS mal kaufe, gehe ich da auch dran. Habe bis jetzt nur die „alte“ am IX.
BME280 kannst du auf 2 verschiedene Adressen legen (umlöten), bei 4 Stück habe ich auch noch keine Idee.
Deine Wünsche sind gut und richtig.
Blöd ist halt das die Sensoren Hersteller nicht mehr Adressen zulassen, dann wäre es einfacher.
Die alte „IAQ-Core“ bleibt am IX, da rennt die seit Jahren gut.
Für mein Arbeitszimmer und Bad brauch ich auch noch was.
Wenn ich zeit und Luft finde, werde ich mir mal was besorgen und an den Pi hängen wollen, an den Stellen will ich auch weg von meinem IX am LCN. :D, da ich per IPS die Werte besser verarbeiten kann, wie auch vom 1wire Bus per GPIO.

Hallo Tom,

weitere Sensoren zu implementieren ist selbstverständlich möglich. In der Regel studiert man mal das Datenblatt und kommt dann früher oder später auf ein lauffähiges Skript.

Zu dem iAQ-Sensor könnte ich Dir folgendes anbieten: Sende mir so einen Sensor, damit ich das Ergebnis verifizieren kann, das Ding ist mir einfach zu teuer zum „rumspielen“.
Zu dem TCA9548A müsste ich mir mal genauer anschauen, ob und wie das implementierbar ist.

Joachim

den Multiplexer habe ich zumindest am Laufen, mit diesem (gefundenen) Script schalte ich um:

import smbus

class multiplex:

    def __init__(self, bus):
        self.bus = smbus.SMBus(bus)

    def channel(self, address=0x70,channel=0):  # values 0-3 indictae the channel, anything else (eg -1) turns off all channels

        if   (channel==0): action = 0x04
        elif (channel==1): action = 0x05
        elif (channel==2): action = 0x06
        elif (channel==3): action = 0x07
        else : action = 0x00

        self.bus.write_byte_data(address,0x04,action)  #0x04 is the register for switching channels

if __name__ == '__main__':

    bus=1       # 0 for rev1 boards etc.
    address=0x70

    plexer = multiplex(bus)
    plexer.channel(address,3)

    print "Now run i2cdetect"

also wird einfach ein Byte 4,5,6,7 je nach gewünschtem Kanal an die 0x70 gesendet.

danach landet dann der eingeschaltete BME280 in der zugehörigen Instanz. Jetzt kann ich natürlich den Multiplexer per php Script über eine Kanal-var schalten (wie müsste ich denn dazu die GPIO_IO ansprechen ?) und je nach Kanal-var die Daten umkopieren - aber elegant ist das ja auch nicht.

Voll cool genau was ich suche, wo kann ich hier die anleitung finden wie man die module installiert? Hab das leider noch nie gemacht. Danke

…Du brauchst die 4.1 Testing und dann in den Kerninstanzen bei Module die Link zu meiner Github-Adresse (siehe erstes Posting) einfügen.
Aber Achtung: Tim hatte ja noch den Wunsch den iAQ core hinzuzufügen, da sind wir noch in der (hoffentlich finalen) Umsetzung, führt aber auch dazu, dass ich aktuell im „Kern“ noch Ergänzungen und Änderungen durchführen muss, was ab und zu auch mal zu Fehlern führen kann…:wink:

Ich werde mich bemühen, diese Fehler dann so schnell wie möglich zu beheben…

Joachim

Hallo,

nachdem ich erfolgreich in IPS eine HM CCU2, 1-Wire Sensoren über USB Gateway und 2 Webcam integriert habe, möchte ich eine Relaisplatine am Raspi(3) über GPIO anschliessen.

Die Anleitungen die ich gefunden habe, haben nicht funktioniert oder ich habe sie falsch umgesetzt.

Kann mir jemand eine verständliche Anleitung für die Installation sowohl auf dem Raspberry (falls erforderlich) als auch die Konfiguration in IPS zukommen lassen??

Anleitung für die Integration des php Codes wäre auch nicht schlecht.(…hab erst vor 3 Wochen mit IPS angefangen…)

Gruß der Rintelner…

Hallo Rintelner,

dieser Thread beschäftigt sich mit einem Modul zum Betrieb verschiedener Sensoren und aktoren am Raspberry Pi. Die Modulfunktionalität ist im ersten Posting beschrieben.

Ganz aktuell dazu gekommen:

  • das Modul unterstützt jetzt I²C-Devices am I²C Bus 1 und auch an Bus 0 (versteckt sich in P5)
  • der iAQ-Core der Messungen zur Luftqualität macht (Dank an Tom).

Insbesondere für die erste neue Funktionalität mussten diverse Dinge im „Kern“ angepasst werden, bitte daher mit Fehlern rechnen…

Joachim

Hallo,

habe noch Verständnisprobleme beim anwenden des Modules bei der Funktion „digitaler Output“.

Zwischenablage01.jpg

PHP-Code „Ein“


I2GOUT_Set_Status(57858 /*[Zk-Heiz\Zk-GPIO\IPS2GPIO_Output_GPIO24]*/, false);
 

Bei Skriptausführung wird der GPIO24 am Raspi auch ordnungsgemäß geschaltet. Die Status-Variable „Status“ ändert Ihren Wert jedoch nicht.

Ebenfalls wir bei Änderung der Status-Variable „Status“ direkt in der Console über „Variable verändern“ der GPIO24 hardwaremäßig nicht geschaltet.

Im Webfront kann die Status-Variable „Status“ dann geschaltet werden und verändert dann auch hardwaremäßg den GPIO24. Bei Aufruf der Scripte „Ein“, oder „Aus“ erfolgt dann wiederum keine Nachführung der Status-Variable.

Was mache ich hier grundlegend noch falsch ?

Gruß
zkra

Hallo zkra,

bin gerade unterwegs, schaue mir das heute Abend mal an…

Joachim

Hallo zkra,

zunächst einmal gehe ich davon aus, dass hier ein Fehler in meinem Modul vorliegt.

Der Status wird erst über die (erfolgreiche) Rückmeldung vom Raspi gesetzt, nicht durch Dein Setzen.
Von daher gehe ich im Moment davon aus, dass die Rückmeldung irgendwie nicht ankommt. Ich muss gestehen: Dieses ist die einizige Instanz die ich nie selbst genutzt habe, von daher unterstelle ich den Fehler erst einmal bei mir.:wink:

Ich teste das hier mal und melde mich wenn ich den Fehler gefunden habe!

Joachim

…so, zkra,

ich habe tatsächlich einen Fehler gefunden. Mache mal bitte ein Update meines Modules und probiere es noch mal - Feedback erwünscht!:slight_smile:

Joachim

Hm ich bekomme es nicht zum laufen, Client Socket verbunden, aber die Splitter Instanz IPS2GPIO_IO ist eingerichtet aber sie bleibt auf nicht aktiv ???

Wo ist der Fehler ?

…SSH-Daten korrekt (User/Passwort)?
…GPIO-Server auf dem Raspberry Pi aktiviert?

Fehlermeldungen?

Joachim

Hallo Joachim,

konnte es erst jetzt ausprobieren, Modul upgedatet, und sieh da … Test der Funktion „digitaler Output“ funktiniert jetzt auch mit der „Rückmeldung“.

Ebenfalls funktioniert jetzt auch die Toggle-Funktion „I2GOUT_Toggle_Status()“.

Was noch nicht funktioniert ist die direkte Variablenänderung der Status-Variable „Status“ über Variable verändern (Ctrl-E) direkt in der Konsole.

Besten Dank auch für die schnelle Reaktion.

Gruß
Rainer

Hallo Rainer,

bei mir funktioniert das…

Klicke auf den jeweils anderen Wert und der Status verändert sich…oder ändert sich zwar die Statusvariable aber der Ausgang am Raspi nicht??

Joachim

Wieder jemand der am Tacho dreht, damit das Auto schneller wird :smiley:

Bitte Grundlagen zu ‚Status Variablen‘ lesen:
Variablen — IP-Symcon :: Automatisierungssoftware

Michael

Danke Michael!

Das heißt für mich:

  • Das sich die Instanz nicht ändert, wenn in der Konsole der Wert des Status manuell geändert wird, ist eigentlich korrekt
  • Ich muss jedoch in der Konsole die Änderbarkeit unterbinden in dem ich Modul den entsprechenden Disable
$this->DisableAction("Status");

So, das habe ich geändert. Eine Veränderung des Status wird (nur noch) durch die entsprechenden Set_Status/Toggle_Status Funktion angestossen…

Wieder etwas gelernt!

Joachim