MCP23017 über I2C ansteuern

Begonnen von SkateDragon, 05 November 2013, 03:19:09

Vorheriges Thema - Nächstes Thema

SkateDragon

Servus,


ich habe mal ne Frage, und zwar ausganssitiuation ist diese:

Ich habe den "MCP23017" Port Expander mit meinem Rpi verbunden, diesen kann ich auch wunderbar über das Terminal mit zb: "i2cset -y 0 0x20 0x12 0xff" alle Pins an Port A ansprechen.

Nun zu meiner eigentlichen Frage, wie kann ich das in mein FHEM integrieren mit

define LED dummy
attr LED setList on off
define on_LED notify LED:on {\
system("i2cset -y 0 0x20 0x12 0xff &")}

define off_LED notify LED:off {\
system("i2cset -y 0 0x20 0x12 0x00 &")}


funktioniert es nicht.

Könnte mir jemand einen Denkanstoß geben?


daduke

Hi,

ich mache ziemlich das Gleiche:
define MovieHD dummy
attr MovieHD devStateIcon on:on:off off:off:on
attr MovieHD fp_Grundriss 22,184,1,Movie-HD
attr MovieHD room 02_Wohnzimmer
define movieHDOn notify MovieHD:on "wget -qO /dev/null 'http://192.168.0.1/ledcgi.pl?d=relay1&c=on&v=0'"
define movieHDOff notify MovieHD:off "wget -qO /dev/null 'http://192.168.0.1/ledcgi.pl?d=relay1&c=off&v=0'"

das Problem bei Dir könnte sein, dass fhem als user fhem oder www-data oder so läuft und i2cset root-Rechte braucht. Ich habe das über obigen web service gelöst, da ich eh noch per http schalten muss.  Auch dort habe ich aber das Problem, dass ich von www-data komme und als root was ausführen muss. Man kann dann sudo oder setuid nehmen, ich habe einen kleinen C-wrapper, der den Wechsel auf root macht:

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>

char command[256];

int main(int argc, char **argv) {
        setuid(0);
        sprintf(command, "./ledctrl.pl %s %s %s", argv[1], argv[2], argv[3]);
        system(command);
        return 1;
}

Makefile:

#!/usr/bin/make -f

all:
        gcc -o ledcgi ledcgi.c
        chmod a+x  ledcgi
        chmod a+s  ledcgi

such Dir was aus :)

viele Grüße,
-Christian
fhem auf pcengines apu, Philips Hue, MAX!, div. HomeMatic, Spark Core, panstamp, div. eigene Hardware

SkateDragon

Guten Morgen,


dank dir erstmal für deine Mühe nun funktioniert es endlich ich habe lediglich den benutzer fhem in die sudoers aufgenommen

und schon kann ich alles bequem schalten mit :

define LED dummy
attr LED setList on off
define on_LED notify LED:on {\
system("sudo i2cset -y 0 0x20 0x13 0xff &")}

define off_LED notify LED:off {\
system("sudo i2cset -y 0 0x20 0x13 0x00 &")}



jetzt hätte ich noch ne Frage ist es möglich das der Ausgang nur ca 1s da ist und sich selbst wieder abschaltet?

Zur Information ich will damit meine Rollo´s im kompletten Haus steuern, denen reicht aber ein Impuls

mfg

SkateDragon

hat sich erledigt ; )


define Schalter dummy
   attr Schalter eventMap on:on off:off
   attr Schalter room Schalter

   define Lamp1On_for10sec notify Schalter.on { \
      fhem ("set Lamp1 on-for-timer 10") ;; \
      fhem ("define SchalterOff at +00:00:10 set Schalter off")}

AlphaKingOne

So ich möchte mal den Thread nutzen um mal eine frage zustellen.

Also ich hab den MCP23017 in Fhem Eingebunden und parr mal an und aus gemacht und auf einmal geht garnichts mehr. Dauernd an. Bist ich dann festgestellt hab das sich aufeinmal die Adresse geändert hat. Wie kann das sein?

###MCP23017###

define GPA0 dummy
attr GPA0 alias SN-Schrank_Licht
attr GPA0 room Innen
attr GPA0 setList on off

define off_GPA0 notify GPA0:off {\
system("sudo i2cset -y 1 0x27 0x14 0x00 &")}

define on_GPA0 notify GPA0:on {\
system("sudo i2cset -y 1 0x20 0x14 0x01 &")}
Raspberry B, B+, B v2 u. v3; DS18B20; MCP23017; CUL; ESP8266

klausw

Zitat von: AlphaKingOne am 05 Oktober 2016, 14:08:54
Also ich hab den MCP23017 in Fhem Eingebunden und parr mal an und aus gemacht und auf einmal geht garnichts mehr. Dauernd an. Bist ich dann festgestellt hab das sich aufeinmal die Adresse geändert hat. Wie kann das sein?
Auch wenn es nicht deine Frage beantwortet:
Es gibt in FHEM das Modul I2C_MCP23017, welches den MCP23017 ansprechen kann. Da kannst du auf die Shell Befehle verzichten.

Meinst du die I2C oder die Register Adresse?
I2C Adresse kann sich ändern, wenn die Adressauswahlpins floaten (über I2C Befehle ist sie meines Wissens nicht einstellbar)
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

AlphaKingOne

ja ich weiß das es das Modul gibt aber hab es leider noch nicht zum laufen bekommen. Hmmm Register  ???  bin neulig  ;D war jetzt eigentlich nur mal so ne interessens frage  ;)
Raspberry B, B+, B v2 u. v3; DS18B20; MCP23017; CUL; ESP8266

klausw

Zitat von: AlphaKingOne am 05 Oktober 2016, 14:27:22
ja ich weiß das es das Modul gibt aber hab es leider noch nicht zum laufen bekommen. Hmmm Register  ???  bin neulig  ;D war jetzt eigentlich nur mal so ne interessens frage  ;)
Wo genau hängt es bei dem Modul?
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