NEWS
[Adapter] - iobroker.i2c
-
@UncleSam Hallo, vorab bereits schon einmal vielen Dank für den Adapter.
Anbei meine Frageliste.
Kann ich die Eingänge und Ausgänge dauerhaft umbeschriften? Eben nach dem Neustart war alles weg.
Zweitens ist es möglich die Ausgänge auf eine Tastfunktion dauerhaft umzustellen? Ich schalte nämlich Stromstoßrelais welche nur ein kurzen Impuls brauchen.
Drittens die als Inputs definierten Datenpunkte stehen nicht stabiel also True, True, false, True etc. bei den aktualisierungen obwohl der Eingang ununterbrochen auf HIGH ist. (Eingang ohne PullUp Widerstand)
Danke im Voraus.Technische Daten
ioBroker Slave Pi 3 B mit MCP23017
Adresse 0x20 als Inputs A0-A7 und B0-B7 die Signale kommen von Finderrelais welche parallel zu den Verbrauchern angeschlossen sind
Adresse 0x21 als Outputs A0-A7 und B0-B7 daran eine Relaiskarte angeschlossen die widerum Stromstoßrelais parallel zu den eigentlichen mechanischen Tastern "schaltet" -
@Holger_B76 sagte in [Adapter] - iobroker.i2c:
Kann ich die Eingänge und Ausgänge dauerhaft umbeschriften? Eben nach dem Neustart war alles weg.
Nein, Datenpunkte umbenennen geht bei diesem Adapter nicht. Du kannst aber die Alias-Funktion verwenden, wenn du bessere Namen für die Datenpunkte verwenden willst.
Zweitens ist es möglich die Ausgänge auf eine Tastfunktion dauerhaft umzustellen? Ich schalte nämlich Stromstoßrelais welche nur ein kurzen Impuls brauchen.
Für die jeweiligen Geräte stelle ich nur dieselbe Funktionalität zur Verfügung, wie sie das Gerät per I2C bietet. Für die einfachen I/O-Expander (PCF8574 und MCP230xx) kannst du nur einen Wert setzen (ein/aus). Wenn du unbedingt einen Chip willst, der kurze Trigger kann, dann schau dir die SX150x an: dort kannst du das Timing vieler Pins genau einstellen. Allerdings würde ich persönlich diese Tastfunktion einfach mit JavaScript oder Blockly selber schreiben.
Drittens die als Inputs definierten Datenpunkte stehen nicht stabiel also True, True, false, True etc. bei den aktualisierungen obwohl der Eingang ununterbrochen auf HIGH ist. (Eingang ohne PullUp Widerstand)
Bist du sicher, dass du den Pin sauber auf VCC gezogen hast und er nicht "floating" ist. Ohne Pull-Up-Widerstand (sprich: push-pull) muss der Zustand des Pins immer sauber zur Referenzspannung (VCC) gesetzt sein: also entweder mit VCC oder GND verbunden. Speist du den MCP23017 mir 3.3V oder 5V? Was geschieht wenn das Finder Relais offen ist? Und was, wenn es geschlossen ist?
-
@UncleSam die false Werte stehen stabil. Die Eingänge sind mit 5 Volt. In der "alten" py umgebung gab es das Problem nicht.
-
@Holger_B76 Kannst du mal eine kleine Skizze oder so machen, wie du die Eingänge des MCP23017 genau mit den Relais verbunden hast? Und kannst du mal ein Debug-Log runterladen, wenn sich die Werte ändern?
-
@UncleSam
so hätte gern der Hersteller den Aufbau
und so habe ich es dann aufgebaut
Die Relaiskarte hat eine seperate 12 Volt Versorgung, die 32 Port Karte sitzt huckepack auf dem PI
Bislang hatte ich eine Datei die 16 Eingänge ausgelesen hat und in eine text datei geschrieben hat. diese wurde dann ausgelesen durch php und visualisiert. Die PHP widerum konnte 16 weitere werte in die txt schreiben die dann durch den laufenden py script abgearbeitet wurden..
Status (alle aus) Eingang(soll geschaltet werden)
0000000000000000 0000000000000000die Stelle war immer identisch also Lampe 1,2,3.... bis 16 danche Schalten Lampe 1,2,3... bis 16
das lief alles und die PHP färbte die Button auch dauerhaft grün wenn die lampe an war. Nun pulsiert auch die php (wenn ich den script starte)
ich habe mir nun bereits im iobroker Hilfspunkte mittels script angelegt welche durch ein Timeout das pulsieren "glätten" aber dennoch ist ja der traffic und stress im datenbus noch da.
-
@Holger_B76 An den Eingängen des MCP musst du in diesem Fall die Pull-Ups aktivieren. Grund: wenn das Finder-Relais offen ist, ist der Eingang "floating" (kein definierter Zustand). Mit dem Pull-Up setzt du den Einang auf 1, wenn das Relais offen ist; und wenn das Relais geschlossen ist, zieht die direkte Verbindung auf GND den Eingang auf 0.
-
@UncleSam ja das habe ich auch schon gefunden jedoch läuft ja auf dem PI nun gar kein script wenn ich deinen Adapter benutzte. Wie kann ich da die Pi eigenen aktivieren?
https://www.abelectronics.co.uk/kb/article/1071/expander-pi---reading-io-inputs
-
@Holger_B76 Du verwendest doch gar keine Pins vom Raspi, oder? Zumindest in deinem Schema steht davon nichts. Du musst die Pull-ups am MCP aktivieren, und das machst du, indem du den Input (in der Adapter Konfiguration) auf "Input with pull-up" stellst.
Oder verstehe ich jetzt etwas komplett falsch?
Du hast ja selber geschrieben:
@Holger_B76 sagte in [Adapter] - iobroker.i2c:Eingang ohne PullUp Widerstand
Und das ist falsch: der Pull-up muss eingeschaltet sein.
-
@UncleSam Nein alles richtig nur die Gipos des MCPs werden verwendet. 0x20 als Eingang (16 Stück) und 0x21 als Ausgang zur Relaiskarte (16 Stück) jedoch läuft halt keine Programm.py mehr in der das gesetzt werden könnte. Da ich ja alles nun aus Deinem Adapter heraus mache.
Und VERDAMMT ich hatte das in Deinem Adapter so verstanden das er einen externen Pull dann erwartet. *anKopfPatsch
-
So und nun ist Ruhe in den Datenpunkten.
Die Aliasdatenpunkte die ich angelegt hatte sind ja nicht ganz um Sonst sie haben ja das Baschriftungsthema verbessert.Danke vielmals.
-
Hallo,
ich stehe leider gerade etwas auf dem Schlauch, wie ich den Adapter für meinen Zweck mit Werten füttere. Ich habe von Horter ein 4-Kanal-Analog-Output, dem ich versuche die entsprechenden Werte in die Register zu schreiben. Diese Werte sind die dezimal zwischen 0 und 1000 und müssen in Hex gewandelt (mache ich mit node red) und in Upper und Lower Byte in die Register des Kanals geschrieben werden.
Der funktionierende Konsolenbefehl ist: i2cset - y 1 0x58 0x00 0x00 0x00 i
Dies bedeutet i2c Bus 1, Adresse 0x58, Kanal 0x00 und 2 Byte für den Werte. Meine Frage ist. Wie kann ich diesen Wert im Adapter schreiben.?
Ich habe ein Generic-Gerät 0x58 gefunden und die 4 Kanäle 0x00 bis 0x03 angelegt. Ich weiß nur nicht wie ich den Wert Z.B. 0x00 0x00 in den Kanal schreibe, dass er im Register landet. Habe es schon mit Leerzeichen oder Kommagetrennt probiert, aber es kommt nicht an. Hat jemand eine Idee?Mfg Silvio
-
@silschm Mit dem Generic Gerätetyp müsstest du deine 4 Kanäle als Register 0x00 bis 0x03 mit dem passenden Datentyp uint16_be oder uint16_le anlegen. Deinen zu schreibenden Wert schreibst du dann einfach als normale Dezimalzahl (0 bis 1000) in den entsprechenden State und der Adapter kümmert sich um den Rest.
-
-
Hallo
ich habe den Adapter zusammen mit dem Horter 4-Kanal Analogausgabemodul zum laufen bekommen. Es funktioniert auch soweit super, aber alle paar Tage habe ich einen komischen Fehler, der die Analogausgänge mit einer Spannung von 3,x V stehen lässt und im Log von iobroker folgenden Fehler wirft.
i2c.1 2021-02-23 00:15:12.004 error (18540) Generic 0x58: 0x01: Couldn't send value: Error: , Remote I/O error i2c.1 2021-02-23 00:15:11.999 debug (18540) Generic 0x58: 0x01: Sending 2 bytes: 0000 i2c.1 2021-02-23 00:15:11.997 debug (18540) stateChange i2c.1.0x58.0x01 {"val":0,"ack":false,"ts":1614035711988,"q":0,"from":"system.adapter.node-red.1","user":"system.user.admin","lc":1614015340201} i2c.1 2021-02-23 00:15:11.958 error (18540) Generic 0x58: 0x00: Couldn't send value: Error: , Remote I/O error i2c.1 2021-02-23 00:15:11.952 debug (18540) Generic 0x58: 0x00: Sending 2 bytes: e803 i2c.1 2021-02-23 00:15:11.949 debug (18540) stateChange i2c.1.0x58.0x00 {"val":1000,"ack":false,"ts":1614035711940,"q":0,"from":"system.adapter.node-red.1","user":"system.user.admin","lc":1614015180177}
Einzige Abhilfe ist kurz die Spannung vom Horter-Modul zu trennen. Dann geht es wieder. Adapter oder selbst iobroker neu starten bringt nicht. Seht ihr auch den Fehler beim Modul oder habt ihr eine andere Idee?
MfG Silvio
-
@silschm Bitte keine Screenshots von KonsolenTEXT sondern Text auch als solchen in </> CodeTags posten. Kann man besser und überall lesen.
-
@thomas-braun Ok, sorry, Habe es geändert.
-
@silschm Dem Fehler nach reagiert der I2C Slave (also dein Modul) nicht mehr auf die Befehle vom I2C Master (ioBroker). Deiner Beschreibung nach vermute ich, dass der Controller auf dem Modul (weshalb auch immer) abstürzt und nichts mehr macht.
-
@crycode sagte in [Adapter] - iobroker.i2c:
@silschm Dem Fehler nach reagiert der I2C Slave (also dein Modul) nicht mehr auf die Befehle vom I2C Master (ioBroker). Deiner Beschreibung nach vermute ich, dass der Controller auf dem Modul (weshalb auch immer) abstürzt und nichts mehr macht.
Ich kann @crycode nur zustimmen: ich hatte ähnliche Probleme mit Spannungsschwankungen wegen Relais, die an derselben Spannungsversorgung lagen. Die Lösung war einen Kondensator an der Spannungsversorgung anzulöten.
Zudem habe ich bei einigen Modulen eine Überprüfung eingeschaltet, damit ich erkenne, wenn das Modul neu gestartet wurde. Falls du bei Horter etwas findest, wie du einen Neustart erkennen kannst, kannst du vielleicht dann gleich wieder die Werte setzen.
-
@unclesam
Hey
ich habe den BME280 schon über deinen Adapter benutzt. Hat super funktioniert.
Jetzt habe ich mir den BME 680 BME 680 Amazon besorgt und leider gemerkt das dieser noch nicht in deinem Adapter integriert ist.Gibt es eine Möglichkeit das du diesen in naher Zukunft hinzufügen könntest?
Vielen dank
Mit freundlichen Grüßen
Ecurb -
@ecurb Klar, erfasse doch bitte ein Issue in GitHub, dann werde ich mich drum kümmern.