Modul für die Ansteuerung des MCP23017 I2C Portextender

Begonnen von klausw, 03 Mai 2014, 01:02:40

Vorheriges Thema - Nächstes Thema

IPPhoner2b

#75
Alles klar, habe grade mal einen kleinen Versuch gemacht, hat mich aber nicht so wirklich weitergebracht, aber wenigstens habe ich grade ein Erfolgserlebnis gehabt, und dass nur, weil ich mich immer gewundert habe, warum das mit dem Interrupt nicht klappt, und was ist, ich hatte nen falschen Port genommen in meiner Config, habe 12 statt 14 drin stehen gehabt, jedenfalls klappt das jetzt schon mal.

Nur für mich zum richtigen Verständnis,

den Eingang habe ich jetzt,
dann brauche ich einen Dummy, der dem System sagt, Schalter geschaltet,
dann mit dem Dummy (der auch in der Zeitsteuerung drin ist) setze ich den Ausgang ?
Da ich ja 2 Ausgänge pro Rollo brauche habe ich so meine Probleme damit.

Dein Code, der für die Rolladensteuerung mit Schalterüberwachung ist, wie muss der angepasst werden wenn ich folgende Dinge darin abgefragt haben möchte?

- Sonnenauf und Untergangszeit
- jeweils mit Schalterabfrage
- den einen Ausgang erst deaktivieren, und nach ca. 0,5sek den anderen aktivieren (falls das Rollo gerade am fahren ist)
- und der gesetzte Ausgang soll nach ca. 30 sek wieder deaktiviert werden.

Sorry, aber das ist echt einfach viel zu hoch für mich, ich weiß nicht, ob du mir da weiterhelfen kannst, aber nach dem, was ich bisher von dir / euch gelesen habe, ist scheinbar nichts unmöglich *g*


Dein Beispiel
define act_on_rolladentimer notify rolladentimer {\
  if ("$EVENT" eq "down") {\
    my $svar = ReadingsVal("Rollladenschalter","state",0);;\
    if ($svar ne "up") {fhem "set Rolladen down";;}\
  }\
}


Was ich aus nem Beispiel gefunden habe, aber da gehts nur ums fahren, da sind eben keine Abfragen drin.
######### Rollade rauf
define Rollade_K_auf_WE at *08:04 {if ($we) {fhem("set Rollade_K on")}}
define Rollade_K_auf_Woche at *07:00 {if (!$we){fhem("set Rollade_K on")}}

######### Rollade runter
define Rollade_K_ab at *{sunset("HORIZON=-6",300,"17:00","22:00")} set Rollade_K off


Was ich wohl gefunden habe, könnte man so etwas in einer Art dafür einsetzten? Nur anstatt tilted closed open eben die die Variablen Schalter zu und  Uhrzeit zu benutzen?
define nRollo notify WohnDoor.(tilted|closed|open) {
  if($EVENT eq "tilted") {
    if (ReadingsVal("TerrasseRoll", "state", "on") eq "off") {
  fhem ("set TerrasseRoll 15%");
    }
  }
  if($EVENT eq "closed") {
    if (Value("TerrasseRoll") eq "15") {
  fhem ("set TerrasseRoll off");
    }
  }
  if($EVENT eq "open") {
    if (ReadingsVal("TerrasseRoll", "state", "on") eq "off" || Value("TerrasseRoll") eq "15") {
  fhem ("set TerrasseRoll on");
}
  }
}





:EDITh:

Habe grade irgendwie ein kleines Problem beim Neustart, und zwar bleiben meine Ausgänge real gesetzt, obwohl ich bei OnStartup alle auf Off stelle, lt. WebIF sind auch alle aus, nur die LEDs brennen halt noch, gab es da noch einen Trick für?
###MCP23017-0x20###
define mcp_20 I2C_MCP23017 0x20
attr mcp_20 IODev chip
attr mcp_20 Interrupt B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_20 OnStartup A0=off,A1=off,A2=off,A3=off,A4=off,A5=off,A6=off,A7=off
attr mcp_20 OutputPorts A0,A1,A2,A3,A4,A5,A6,A7
attr mcp_20 InterruptOut connected_active-low
attr mcp_20 group MCP23017
attr mcp_20 Pullup B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_20 invert_input B0,B1,B2,B3,B4,B5,B6,B7

klausw

Stelle die Fragen doch bitte im Anfängerforum, oder schau bei Codeschnipsel ob es schon etwas ähnliches gibt.
Hier sollten nur Fragen rein, die den MCP2301 betreffen...

Du könntest in den at definitionen eine if abfrage zur Schalterposition machen und nur, wenn er nicht oben ist den rolladen fahren.
Für die einzelnen Schalter und Rollandenaktoren kannst du readingsproxy oder dummy nutzen.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

Sorry, alles klar, wollte den Thread nicht vollspammen :),

hast du denn für das editierte Problem mit dem OnStartup eine Lösung  ::)

klausw

Zitat von: IPPhoner2b am 09 November 2014, 15:08:31
hast du denn für das editierte Problem mit dem OnStartup eine Lösung  ::)

was passiert denn, wenn Du sie auf on stellst?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

Das ist wirklich interessant, wenn ich es auf on stelle klappt es wie gewünscht, aber bei off nicht, da wird im WebIF alles richtig angezeigt, also "AUS" nur die LEDs bleiben an, sobald ich aber einen der Ausgänge anklicke, auch ruhig auf AUS, dann gehen alle AUS

klausw

#80
und jetzt?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

Hmm,
irgendwie komisch, jetzt bleiben die LEDs an, dafür wird es jetzt im WebIf richtig angezeigt, also wenn ich 3 anlasse, bleiben die 3 auch an, und wird auch richtig im WebIf angezeigt.

Oder ist hier irgendwo ein Fehler drin?
Das OnStartup habe ich extra 2x drin, dann kann ich es einmal vor der definition als Ausgang, und danach setzen
###MCP23017-0x20###
define mcp_20 I2C_MCP23017 0x20
attr mcp_20 IODev chip
attr mcp_20 Interrupt B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_20 InterruptOut connected_active-low
#attr mcp_20 OnStartup A0=off,A1=off,A2=off,A3=off,A4=off,A5=off,A6=off,A7=off
attr mcp_20 OutputPorts A0,A1,A2,A3,A4,A5,A6,A7
attr mcp_20 Pullup B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_20 group MCP23017
attr mcp_20 invert_input B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_20 OnStartup A0=off,A1=off,A2=off,A3=off,A4=off,A5=off,A6=off,A7=off

klausw

Nee, das sieht gut aus.
Aber ich habe nicht verstanden was willst du mir damit sagen?

Zitat von: IPPhoner2b am 09 November 2014, 16:31:39
Hmm,
irgendwie komisch, jetzt bleiben die LEDs an, dafür wird es jetzt im WebIf richtig angezeigt, also wenn ich 3 anlasse, bleiben die 3 auch an, und wird auch richtig im WebIf angezeigt.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

Was ich versucht habe auszudrücken ist, das obwohl ich bei OnStartup alle Ausgänge ausschalte, bleiben nach einem Neustart jetzt alle Ausgänge gesetzt, wie sie beim ausschalten vorhanden waren.

In deiner originalen Version, also die in FHEM eingebaut ist, wird im WebIf angezeigt, dass alles aus ist, obwohl der Befehl zum Ausschalten scheinbar nicht an den Chip geschickt wurde, und so die LEDs anbleiben.

Wenn ich dann im WebIf also wo alle Ausgänge aus sind, auf irgendeinen zum Aus oder Einschalten klicke, gehen alle aus, bzw der eine bleibt an.

Weiß nicht, wie ich es sonst erklären soll  ::)

klausw

jetzt habe auch ich es verstanden :)

was passiert, wenn du sie auf on, oder last stellst?

was ich rausfinden möchte ist, ob es invers ist

funktoniert es ohne invers input?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

Bin grade nicht zuhause, aber werde es morgen mal testen.

Allerdings, wenn es invers wäre, dann müssten ja alle an- oder ausgehen, denke ich.
Denke eher, der Befehl an sich wird zwar intern ausgeführt, allerdings nicht als Befehl zum Chip geschickt wird, denn im WebIf wird ja alles auf AUS gesetzt, nur an der Steuerung kommt nichts an.

Bei der von dir heute geposteten Version würde ich sagen, dass der Befehl LAST genommen wurde, weil sie alle so bleiben, wie sie waren... Und es auch genauso im WebIf angezeigt wurde.


IPPhoner2b

So, hallo Klaus,

also habe grade den Versuch mit "on" gemacht.
Habe 4 auf off und 4 auf on für "onstartup" gesetzt, und diese dann umgekehrt, also um zu sehen, ob die angeschalteten ausgehen, und andersherum. Nach dem neustart brannten dann 8 LEDs, also der "on"-Befehl wird übernommen, nur das off nicht.

Das gleiche gilt scheinbar auch für den Last Befehl, also die LED wird eben einfach nicht angesteuert.

Habe grade erst gedacht, dass das alles mein Fehler war, weil ich immer nur per "shutdown restart" getestet habe, und mir beim Schalter umlegen auffiel, dass die LEDs ja alle ausgehen, aber es ändert sich nichts, habe jetzt alle 8 auf "Off" stehen, aber es verhält sich genauso wie bei "Last", also die 5 die an waren, gehen auch wieder an.

klausw

#87
Bevor du die Logs nochmal aufnimmst, teste bitte diese Version:

RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

klausw

hier eine Testversion mit Input Aktualisierung beim Start.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

Hallo Klaus,

habe die Version eingespielt, also die Inputs werden scheinbar richtig gesetzt, muss allerdings dazusagen, dass ich vorher damit bis auf dieses eine Mal noch keine Probleme damit hatte, habe jedenfalls nach dem ausschalten die Eingänge gewechselt, und das wurde richtig erkannt.