Poolsteuerrung mit einem Raspberry und I2C I/O mit 8*220V in und 8*220v out

Begonnen von Joshibaer, 16 Mai 2015, 23:42:11

Vorheriges Thema - Nächstes Thema

Joshibaer

So nachdem mein erstes Posting hier getrollt wurde stelle ich mal ausführlich mein Projekt vor


Ich habe eine Poolsteuerrung im Hutschienengehäuse für den Raspberry entwickelt, die aber wegen des I2C Bussystem auch an anderen Controllern betreiben werden kann.

Zurzeit besitzt die Platine folgende Funktionen:

8*220V out         über einen PCF8574 und den Elektronischen Lastrelais S202S02
8*220V in            über einen PCF8574 und zwei Optokoppler
8* 5V I/O             über einen PCF8574 wird noch nicht genutzt
8 Tastentastaturen über einen PCF8574 für das manuelle schalten
1 *1Wire Bus 5V für die Temperatursensoren
Intern sind alle Inputbausteine mit dem GPIO  als Interrupt verbunden.


Die 220V Aktoren sollen nur Stromstoß Schalter antasten. Da es auch eine manuelle Steuerung mittels beleuchteten Tasten gibt

Die Steuerrung lief bis jetzt auf WBIOPI und ich wollte es jetzt auf FHEM umstellen.

Das ganze erwies sich als etwas komplizierter als ich dachte, da es nur einzelne Codeschnipsel und kein komplettes Projekt für den PCF8574 gab


Die Temperatursensoren laufen problemlos.



define VLTemp OWDevice 28.C26156050000 30
attr VLTemp IODev OWSERVER
attr VLTemp alias Vorlauf Pool
attr VLTemp group TempSensoren
attr VLTemp model DS18B20
attr VLTemp room Pool
attr VLTemp stateFormat {sprintf "%.1f °C", ReadingsVal($name, "temperature", 0)}
define VLTemp.log FileLog /opt/fhem/log/VLTemp.log VLTemp
attr VLTemp.log logtype temp4:Plot,text:Text



Die 220V Inputsensoren werden über den IRQ refresch und auch auf der Weboberfläche angezeigt


define IRQPCF RPI_GPIO 31
attr IRQPCF direction input
attr IRQPCF interrupt falling
attr IRQPCF room Pool
attr IRQPCF userReadings stromlesen {fhem ("get Strom_IN");;fhem ("get Tastatur")}
#falling  both
#attr IRQPCF active_low no

#GPIO 31 Als IRQ deffinieren
#Als Input deffinieren
#fallende Flanke , weil der PCF8574 nach LOW zieht
#zum Raum Pool hinzufügen



Die Tasten 1-8 erzeugen beim Drücken einen Impuls von 1 Sec so wie ich es mir wünsche.





#Abfragen der Tastatur
define Tastendruck1 notify IRQPCF:off {\
  if ($value{Tastatur1} eq "off") {\
   fhem "set Strom_OUT1 on";;\
   fhem "sleep 1";;\
   fhem "set Strom_OUT1 off";;\
}\
if ($value{Tastatur2} eq "off") {\
  fhem "set Strom_OUT2 on";;\
  fhem "sleep 1";;\
  fhem "set Strom_OUT2 off";;\
}\
  if ($value{Tastatur3} eq "off") {\
   fhem "set Strom_OUT3 on";;\
   fhem "sleep 1";;\
   fhem "set Strom_OUT3 off";;\
}\
  if ($value{Tastatur4} eq "off") {\
   fhem "set Strom_OUT4 on";;\
   fhem "sleep 1";;\
   fhem "set Strom_OUT4 off";;\
}\
  if ($value{Tastatur5} eq "off") {\
   fhem "set Strom_OUT5 on";;\
   fhem "sleep 1";;\
   fhem "set Strom_OUT5 off";;\
}\
  if ($value{Tastatur6} eq "off") {\
   fhem "set Strom_OUT6 on";;\
   fhem "sleep 1";;\
   fhem "set Strom_OUT6 off";;\
}\
  if ($value{Tastatur7} eq "off") {\
   fhem "set Strom_OUT7 on";;\
   fhem "sleep 1";;\
   fhem "set Strom_OUT7 off";;\
}\
  if ($value{Tastatur8} eq "off") {\
   fhem "set Strom_OUT8 on";;\
   fhem "sleep 1";;\
   fhem "set Strom_OUT8 off";;\
}\
}





Probleme machen mir die Schaltflächen auf der Weboberfläche.
Einfach AN /Aus mittels Mouse Klick geht problemlos


define Strom_OUT3 readingsProxy Strom_OUT:Port2
attr Strom_OUT3 group Stromoutput
attr Strom_OUT3 room Pool
attr Strom_OUT3 setFn {($CMD eq "on")?"Port2 off":"Port2 on"}
attr Strom_OUT3 setList on off
attr Strom_OUT3 valueFn {($VALUE eq "on")?"off":"on"}


Aber ein Tastenimpuls mit einer einzelnen Schaltfläche bekomme ich nicht hin

Hier meineVersuch



define Strom_OUT1 readingsProxy Strom_OUT:Port0
attr Strom_OUT1 group Stromoutput
attr Strom_OUT1 room Pool
attr Strom_OUT1 setFn {($CMD eq "on")? {fhem (" set Strom_OUT1
off ;; sleep 1;; set Strom_OUT1 off") }  }}
attr Strom_OUT1 setList on off
attr Strom_OUT1 valueFn {($VALUE eq "on")?"off":"on"}



Ich vermute mal das der Weg über  setFn  wird nicht funktionieren ,da kein Script erlaubt ist, sondern nur On/Off.

Hat einer eine Idee, wie ich den Tastenimpuls über die Weboberfläche realisieren kann und auch nur eine Schaltfläche habe ?


Zum Schluss nochmal meinen kompletten Code zum Anschauen und ein Bild meiner Steuerrung.



# Sensor definieren
# Model des Sensors angeben
# ensprechendes Icon setzen
# Raum zuweisen

# ---Temperatursensoren ---



define OWSERVER OWServer 192.168.178.50:4304
# Sensor definieren

define VLTemp OWDevice 28.C26156050000 30
attr VLTemp IODev OWSERVER
attr VLTemp alias Vorlauf Pool
attr VLTemp group TempSensoren
attr VLTemp model DS18B20
attr VLTemp room Pool
attr VLTemp stateFormat {sprintf "%.1f °C", ReadingsVal($name, "temperature", 0)}
define VLTemp.log FileLog /opt/fhem/log/VLTemp.log VLTemp
attr VLTemp.log logtype temp4:Plot,text:Text

define RLTemp OWDevice 28.0ACD56050000 5
attr RLTemp IODev OWSERVER
attr RLTemp alias Rücklauf Pool
attr RLTemp group TempSensoren
attr RLTemp model DS18B20
attr RLTemp room Pool
attr RLTemp stateFormat {sprintf "%.1f °C", ReadingsVal($name, "temperature", 0)}
define RLTemp.log FileLog /opt/fhem/log/RLTemp.log RLTemp
attr RLTemp.log logtype temp4:Plot,text:Text

define AussenTemp OWDevice 28.CBB7CA040000 60
attr AussenTemp IODev OWSERVER
attr AussenTemp alias Aussen Temperatur
attr AussenTemp group TempSensoren
attr AussenTemp model DS18B20
attr AussenTemp room Pool
attr AussenTemp stateFormat {sprintf "%.1f °C", ReadingsVal($name, "temperature", 0)}

define InnenTemp OWDevice 28.EB21CE040000 60
attr InnenTemp IODev OWSERVER
attr InnenTemp alias Innen Temperatur
attr InnenTemp group TempSensoren
attr InnenTemp model DS18B20
attr InnenTemp room Pool
attr InnenTemp stateFormat {sprintf "%.1f °C", ReadingsVal($name, "temperature", 0)}


#--------------IRQ auf GPIO31--------------------------

define IRQPCF RPI_GPIO 31
attr IRQPCF direction input
attr IRQPCF interrupt falling
attr IRQPCF room Pool
attr IRQPCF userReadings stromlesen {fhem ("get Strom_IN");;fhem ("get Tastatur")}
#falling  both
#attr IRQPCF active_low no

#GPIO 31 Als IRQ deffinieren
#Als Input deffinieren
#fallende Flanke , weil der PCF8574 nach LOW zieht
#zum Raum Pool hinzufügen

#Abfragen der Tastatur
define Tastendruck1 notify IRQPCF:off {\
  if ($value{Tastatur1} eq "off") {\
   fhem "set Strom_OUT1 on";;\
   fhem "sleep 1";;\
   fhem "set Strom_OUT1 off";;\
}\
if ($value{Tastatur2} eq "off") {\
  fhem "set Strom_OUT2 on";;\
  fhem "sleep 1";;\
  fhem "set Strom_OUT2 off";;\
}\
  if ($value{Tastatur3} eq "off") {\
   fhem "set Strom_OUT3 on";;\
   fhem "sleep 1";;\
   fhem "set Strom_OUT3 off";;\
}\
  if ($value{Tastatur4} eq "off") {\
   fhem "set Strom_OUT4 on";;\
   fhem "sleep 1";;\
   fhem "set Strom_OUT4 off";;\
}\
  if ($value{Tastatur5} eq "off") {\
   fhem "set Strom_OUT5 on";;\
   fhem "sleep 1";;\
   fhem "set Strom_OUT5 off";;\
}\
  if ($value{Tastatur6} eq "off") {\
   fhem "set Strom_OUT6 on";;\
   fhem "sleep 1";;\
   fhem "set Strom_OUT6 off";;\
}\
  if ($value{Tastatur7} eq "off") {\
   fhem "set Strom_OUT7 on";;\
   fhem "sleep 1";;\
   fhem "set Strom_OUT7 off";;\
}\
  if ($value{Tastatur8} eq "off") {\
   fhem "set Strom_OUT8 on";;\
   fhem "sleep 1";;\
   fhem "set Strom_OUT8 off";;\
}\
}




# -----------------------PCF8574---------------------------------

#0x20 220V Input
#0x21 IO Port 5V
#0x22 220V Output
#0x27 Tastatur 4*2

define I2C_IO RPII2C 0
#IODev für I2C definieren


define Strom_OUT I2C_PCF8574 0x22
attr Strom_OUT IODev I2C_IO
attr Strom_OUT room Pool
#Definieren Baustein auf 0x22
#Zuweisen zum Raum Pool


#----------------------------------220V out ----------------------------


define Strom_OUT1 readingsProxy Strom_OUT:Port0
attr Strom_OUT1 group Stromoutput
attr Strom_OUT1 room Pool
attr Strom_OUT1 setFn {($CMD eq "on")? {fhem (" set Strom_OUT1
off ;; sleep 1;; set Strom_OUT1 off") }  }}
attr Strom_OUT1 setList on off
attr Strom_OUT1 valueFn {($VALUE eq "on")?"off":"on"}

define Strom_OUT2 readingsProxy Strom_OUT:Port1
attr Strom_OUT2 group Stromoutput
attr Strom_OUT2 room Pool
attr Strom_OUT2 setFn {($CMD eq "on")?"Port1 off":"Port1 on"}
attr Strom_OUT2 setList on off
attr Strom_OUT2 valueFn {($VALUE eq "on")?"off":"on"}

define Strom_OUT3 readingsProxy Strom_OUT:Port2
attr Strom_OUT3 group Stromoutput
attr Strom_OUT3 room Pool
attr Strom_OUT3 setFn {($CMD eq "on")?"Port2 off":"Port2 on"}
attr Strom_OUT3 setList on off
attr Strom_OUT3 valueFn {($VALUE eq "on")?"off":"on"}


define Strom_OUT4 readingsProxy Strom_OUT:Port3
attr Strom_OUT4 group Stromoutput
attr Strom_OUT4 room Pool
attr Strom_OUT4 setFn {($CMD eq "on")?"Port3 off":"Port3 on"}
attr Strom_OUT4 setList on off
attr Strom_OUT4 valueFn {($VALUE eq "on")?"off":"on"}

define Strom_OUT5 readingsProxy Strom_OUT:Port4
attr Strom_OUT5 group Stromoutput
attr Strom_OUT5 room Pool
attr Strom_OUT5 setFn {($CMD eq "on")?"Port4 off":"Port4 on"}
attr Strom_OUT5 setList on off
attr Strom_OUT5 valueFn {($VALUE eq "on")?"off":"on"}

define Strom_OUT6 readingsProxy Strom_OUT:Port5
attr Strom_OUT6 group Stromoutput
attr Strom_OUT6 room Pool
attr Strom_OUT6 setFn {($CMD eq "on")?"Port5 off":"Port5 on"}
attr Strom_OUT6 setList on off
attr Strom_OUT6 valueFn {($VALUE eq "on")?"off":"on"}


define Strom_OUT7 readingsProxy Strom_OUT:Port6
attr Strom_OUT7 group Stromoutput
attr Strom_OUT7 room Pool
attr Strom_OUT7 setFn {($CMD eq "on")?"Port6 off":"Port6 on"}
attr Strom_OUT7 setList on off
attr Strom_OUT7 valueFn {($VALUE eq "on")?"off":"on"}


define Strom_OUT8 readingsProxy Strom_OUT:Port7
attr Strom_OUT8 group Stromoutput
attr Strom_OUT8 room Pool
attr Strom_OUT8 setFn {($CMD eq "on")?"Port7 off":"Port7 on"}
attr Strom_OUT8 setList on off
attr Strom_OUT8 valueFn {($VALUE eq "on")?"off":"on"}

##Fk.Haustuer
#define Fk.Haustuer readingsProxy icMCP23017:PortA0
#attr Fk.Haustuer event-on-change-reading 1
#attr Fk.Haustuer group InputPorts
#attr Fk.Haustuer valueFn {($VALUE eq "on")?"open":"closed"}


##Ausgang1
#define Ausgang1 readingsProxy icMCP23017:PortA1
#attr Ausgang1 devStateIcon aus:off an:on
#attr Ausgang1 eventMap on:aus off:an
#attr Ausgang1 group OutputPorts
#attr Ausgang1 setFn {($CMD eq "on")?"PortA1 off":"PortA1 on"}
#attr Ausgang1 setList off on
#attr Ausgang1 valueFn {($VALUE eq "on")?"off":"on"}

# -----------------220V in ------------------------
define Strom_IN I2C_PCF8574 0x20
attr Strom_IN IODev I2C_IO
attr Strom_IN InputPorts 0 1 2 3 4 5 6 7
attr Strom_IN room Pool

#attr Strom_IN event-on-change-reading state
#attr Strom_IN event-on-update-reading .*
#PcF8574 auf Port 20
#Zuweisen als I2C Device
#Alle Ports auf Input
#Zum Raum Pool hinzufügen
#Jede min abfragen
#Überwachen ob sich der Zustand ändert , dann update des Wertes


define Strom_IN0 readingsProxy Strom_IN:Port0
attr Strom_IN0 group Strominput
attr Strom_IN0 room Pool
attr Strom_IN0 valueFn {($VALUE eq "on")?"off":"on"}


define Strom_IN1 readingsProxy Strom_IN:Port1
attr Strom_IN1 group Strominput
attr Strom_IN1 room Pool
#attr Strom_IN1 valueFn {($VALUE eq "on")?"off":"on"}
attr Strom_IN1 setFn {($VALUE eq "on")?"off":"on"}

define Strom_IN2 readingsProxy Strom_IN:Port2
attr Strom_IN2 group Strominput
attr Strom_IN2 room Pool
attr Strom_IN2 valueFn {($VALUE eq "on")?"off":"on"}

define Strom_IN3 readingsProxy Strom_IN:Port3
attr Strom_IN3 group Strominput
attr Strom_IN3 room Pool
attr Strom_IN3 valueFn {($VALUE eq "on")?"off":"on"}

define Strom_IN4 readingsProxy Strom_IN:Port4
attr Strom_IN4 group Strominput
attr Strom_IN4 room Pool
attr Strom_IN4 valueFn {($VALUE eq "on")?"off":"on"}

define Strom_IN5 readingsProxy Strom_IN:Port5
attr Strom_IN5 group Strominput
attr Strom_IN5 room Pool
attr Strom_IN5 valueFn {($VALUE eq "on")?"off":"on"}

define Strom_IN6 readingsProxy Strom_IN:Port6
attr Strom_IN6 group Strominput
attr Strom_IN6 room Pool
attr Strom_IN6 valueFn {($VALUE eq "on")?"off":"on"}

define Strom_IN7 readingsProxy Strom_IN:Port7
attr Strom_IN7 group Strominput
attr Strom_IN7 room Pool
attr Strom_IN7 valueFn {($VALUE eq "on")?"off":"on"}


# ------------------------------IO Port 5V --------------------
define IO5V I2C_PCF8574 0x21
attr IO5V IODev I2C_IO
attr IO5V room Pool


define IO5V0 readingsProxy IO5V:Port0
#attr IO5V0 room Pool




# -----------------Tastatur 4*2 --------------------
define Tastatur I2C_PCF8574 0x27
attr Tastatur IODev I2C_IO
attr Tastatur room Pool



define Tastatur1 readingsProxy Tastatur:Port2
attr Tastatur1 alias Taste 1-1


define Tastatur2 readingsProxy Tastatur:Port3
attr Tastatur2 alias Taste 1-2
#attr Tastatur2 room Pool

define Tastatur3 readingsProxy Tastatur:Port0
attr Tastatur3 alias Taste 1-3
#attr Tastatur3 room Pool

define Tastatur4 readingsProxy Tastatur:Port1
attr Tastatur4 alias Taste 1-4
#attr Tastatur4 room Pool

define Tastatur5 readingsProxy Tastatur:Port5
attr Tastatur5 alias Taste 2-1
#attr Tastatur5 room Pool

define Tastatur6 readingsProxy Tastatur:Port4
attr Tastatur6 alias Taste 2-2
#attr Tastatur6 room Pool

define Tastatur7 readingsProxy Tastatur:Port7
attr Tastatur7 alias Taste 2-3
#attr Tastatur7 room Pool

define Tastatur8 readingsProxy Tastatur:Port6
attr Tastatur8 alias Taste 2-4
#attr Tastatur8 room Pool



danke im Vorraus

justme1968

wenn du nur einen impuls möchtest brauchst du doch kein on und off
sondern nur ein einziges event. nenn es wie du willst. z.b. pulse. das an und aus schalten (also das tatsächliche puls erzeugen) machst du dann genau so wie oben im notify. der denkfehler ist das on/off bis ins web durch zu schleifen.

du solltest das on kommand, das sleep und das off Kommando in einen einzigen fhem() aufruf stecken. sonst blockiert fhem dur jeweils eine sekunde komplett.

gruss
  andre

ps: was soll 'da kein script erlaubt ist' bedeuten? die setFn ist doch beliebiger perl code.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Joshibaer

Also wenn ich die Schaltfläche Drücke bekomme ich die Fehlermeldeung das nur Port on/of erlaubt ist.

Auch bei :
attr Strom_OUT1 setFn {fhem("set Strom_OUT1 off; sleep 2; set Strom_OUT1 on")}
kommt die Fehlermeldeung das nur Port on/of erlaubt ist.


Ich habe warscheinlich einen Knoten im Kopf , nachdem ich alles ans laufen bekommen habe , fehlt mir warscheinlich nur ein kleine Codeschnipsel damit es bei mir klick macht.

Für mich ist FHEM immernoch Neuland und ich lerne jeden Tag dazu.


Also die Frage , wie muss der Code für nur eine Schaltfläche mit Lampe aussehen und der Code für den Impuls.

justme1968

die setList und webCmd muss auch oassen. statt on und off kommt hier jeweils nur dein puls kommando rein

setList gibt an welche set kommandos erlaubt sind.
webCmd gibt an welche kommandos in der raumübersicht erscheinen. ein klick macht intern das gleiche wie ein set aufruf.
die setFn wird bei jedem set kommando aufgerufen.

die setFn schaut gut aus. aber ich glaube du hast on und off vertauscht.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Joshibaer

OK mit


attr Strom_OUT1 webCmd on


Habe ich nur noch eine Schaltfläche aber


attr Strom_OUT1 setFn  {fhem("set Strom_OUT1 on; sleep 2; set Strom_OUT1 off")}


ist falsch und erzeugt den Fehler :Unknown argument off")}, choose one of

justme1968

du musst in der setFn deinen port schalten. nicht das readingsProxy device.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Joshibaer

Sobald ich von der Syntax

{($CMD eq "on")?"Port2 off":"Port2 on"}


Abweiche bekomme ich eine Fehlermeldung.

Ich benötige aber ein Tastenimpuls

justme1968



du musst es im web fontend im attribut editor eingeben und nicht das konfig file selber von hand editieren. sonst musst du selber um das maskieren der ; und newline kümmern.

oder z.b. mit if:
attr Strom_OUT1 setFn  {if($CMD) eq 'on'){fhem("set Port1 on; sleep 2; set Port1 off");}}
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Joshibaer

Also ich bin einen anderen Weg gegangen um das ON/OFF Problem zu lösen


Ich habe mir ein on-for-timer über einen Dummi gebastelt.

Als Schaltfläche hat er nur on und der Readingproxy wird als Schalter ausgeblendet.

Eigentlich ganz einfach On Drücken und

define on_Strom_OUT1Taster notify Strom_OUT1Taster:on { fhem("set Strom_OUT1 on")}


Springt an.

Das löst


define Strom_OUT1TasterOn_for2sec notify Strom_OUT1Taster:on defmod meinTimer at +00:00:02 set Strom_OUT1Taster off


aus


und nach 2 sec wird


define off_Strom_OUT1Taster notify Strom_OUT1Taster:off { fhem("set Strom_OUT1 off")}


aufgerufen.

Hier der ganze Code



define Strom_OUT1 readingsProxy Strom_OUT:Port0
attr Strom_OUT1 group Stromoutput
attr Strom_OUT1 setFn {($CMD eq "on")?"Port0 off":"Port0 on"}
attr Strom_OUT1 setList on off
attr Strom_OUT1 valueFn {($VALUE eq "on")?"off":"on"}


define Strom_OUT1Taster dummy
attr Strom_OUT1Taster setList on
attr Strom_OUT1Taster room Pool
attr Strom_OUT1Taster alias Pool Pumpe
attr Strom_OUT1Taster webCmd on
define off_Strom_OUT1Taster notify Strom_OUT1Taster:off { fhem("set Strom_OUT1 off")}
define on_Strom_OUT1Taster notify Strom_OUT1Taster:on { fhem("set Strom_OUT1 on")}


define Strom_OUT1TasterOn_for2sec notify Strom_OUT1Taster:on defmod meinTimer at +00:00:02 set Strom_OUT1Taster off





Somit ist mein Projekt ersteinmal Praxistauglich.
Wer Interesse an dem Schaltplan und dem Aufbau hat , einfach fragen.

justme1968

wenn du einen readingsProxy verwendest der on und off kennt bekommst du on-for-timer automatisch und du brauchst keine zusätzlichen dummys oder notifys.

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Joshibaer

Ok kannst du mir ein Codebeispiel nennen. Ich habe es leider nicht so hinbekommen .
Meine Versuche im Readproxy einen  on-for-timer zu intregieren sind immer gescheitert.

Joshibaer

So ein kleines Update.

Die Steuerrung ist jetzt eingebaut und die Oberfläche in FHEM angepasst aber da wird sich noch einiges ändern.

Anbei mal zwei Fotos von der Steuerrung,wobei noch nicht alles angeschlossen ist.


Joshibaer

So es gibt ein kleines Update.

Ich habe ein Bewässerungstimer eingebaut.

Es läuft schonmal und wird die nächsten Tage optimiert , damit es nicht soviel Code verbraucht.

Hier der schon vorhandene Code für den Tastenimpuls:


define Strom_OUT4 readingsProxy Strom_OUT:Port3
attr Strom_OUT4 group Stromoutput
attr Strom_OUT4 setFn {($CMD eq "on")?"Port3 off":"Port3 on"}
attr Strom_OUT4 setList on off
attr Strom_OUT4 valueFn {($VALUE eq "on")?"off":"on"}
#attr Strom_OUT4 room Pool

#Taster
define Strom_OUT4Taster dummy
attr Strom_OUT4Taster alias Bewässerung
attr Strom_OUT4Taster group Stromoutput
attr Strom_OUT4Taster room Garten
attr Strom_OUT4Taster setList on
attr Strom_OUT4Taster webCmd on
define off_Strom_OUT4Taster notify Strom_OUT4Taster:off { fhem("set Strom_OUT4 off")}
define on_Strom_OUT4Taster notify Strom_OUT4Taster:on { fhem("set Strom_OUT4 on")}
define Strom_OUT4TasterOn_for2sec notify Strom_OUT4Taster:on defmod meinTimer at +00:00:02 set Strom_OUT4Taster off




Hier der Timer , der einmal am Anfang und einmal am Ende einen Tastenimpils für das Stromstossrelay
sendet.




define BewaesserungTimer dummy
attr BewaesserungTimer group Stromoutput
attr BewaesserungTimer room Garten,Teich
attr BewaesserungTimer setList state:1min,5min,10min,15min,20min,30min
attr BewaesserungTimer webCmd state
define BewaesserungTimer_notify notify BewaesserungTimer {\
  if($EVENT eq "1min") {\
     fhem ("set Strom_OUT4Taster on");;\
     fhem ("defmod meinBewaesserungTimer at +00:01:00 set Strom_OUT4Taster on");;\
    }\
  elsif($EVENT eq "5min") {\
     fhem ("set Strom_OUT4Taster on");;\
     fhem ("defmod meinBewaesserungTimer at +00:05:00 set Strom_OUT4Taster on");;\
    }\
  elsif($EVENT eq "10min") {\
     fhem ("set Strom_OUT4Taster on");;\
     fhem ("defmod meinBewaesserungTimer at +00:10:00 set Strom_OUT4Taster on");;\
    }\
  elsif($EVENT eq "15min") {\
     fhem ("set Strom_OUT4Taster on");;\
     fhem ("defmod meinBewaesserungTimer at +00:15:00 set Strom_OUT4Taster on");;\
    }\
  elsif($EVENT eq "20min") {\
     fhem ("set Strom_OUT4Taster on");;\
     fhem ("defmod meinBewaesserungTimer at +00:20:00 set Strom_OUT4Taster on");;\
    }\
  elsif($EVENT eq "30min") {\
     fhem ("set Strom_OUT4Taster on");;\
     fhem ("defmod meinBewaesserungTimer at +00:30:00 set Strom_OUT4Taster on");;\
    }\
}\


Prof. Dr. Peter Henning

Irgendwie lustig.

Erst setzt er hier falsche Behauptungen in die Welt (denn niemand hat seinen ersten Post "getrollt"), und dann postet er seitenweise trivialen Code.

pah

Joshibaer

Ich bedaure das ich das lesen musst , so etwas erwarte ich nicht von einem  Developer Hero Member mit  1985 Beiträge .
Ich wurde bis jetzt in keinem Forum so schlecht aufgenommen wie hier , naja ich werde diese Zwei Trolle halt ausblenden.


Jetzt zu dem Projekt , ich finde der Code sieht einfacher aus wie er in Wiklichkeit ist.
Die Schaltung ist eine Eigententwicklung und bis jetzt mit den Code fast unverändert .
Warum die Codezeilen so umfangreich sind , ganz einfach , es gibt keine komplexen Module die mir das abnehmen.
Desweiteren greift der Code direkt auf Hardwarebene die I2C Bausteine ab , was einiges an Vor und Nachteile bringt.

Ich sage immer ein Zeile Code sagt mehr wie Tausend Wörter und es gibt in dieser Kombination leider nicht vergleichbares hier im Forum , es waren immer nur Kleinigkeiten die ich zusammgefasst habe.

Mir ist auch aufgefallen , das hier viele Programmierer auf einen recht hohen Nivau diskutieren , was für ein Anfänger kaum verständlich ist und leider wird kaum Funktionierender Programmcode veröffentlicht.

So jetzt zum eigentlich Grund für den Post.

Ich habe einen Neuen Raspberry im Stromkasten und greife mittels FHEM2FHEM auf die Poolstuerrung zu.



define RLTemp dummy
define remote_dummy FHEM2FHEM 192.168.178.50:7072 LOG:.*.*



das klappt auch ohne Probleme.

Jetzt muss ich die Daten natürlich aufarbeiten.
Für jede Variable die ich benutzen möcht muss ich ein Dummy anlegen so weit so gut.

Zur Aufarbeitung und Ausgabe  der Temperaturen 

nehme ich readingsProxy


define remote_RLTemp readingsProxy RLTemp:temperature
attr remote_RLTemp alias Pool Rücklauf



Klappt auch wunderbar, nur die Anpassung mittels

attr remote_RLTemp stateFormat {sprintf "%.1f °C", ReadingsVal($name, "temperature", 0)}

klappt natürlich nicht , da die Temperatur


DEF                    RLTemp:temperature
DEVICE                     RLTemp
NAME                        remote_RLTemp
NR                            168
NTFY_ORDER             50-remote_RLTemp
READING                   temperature
STATE                        24.8125
TYPE                          readingsProxy
Readings                   state   24.8125    2015-08-03 11:52:16


unter STATE zu finden ist.
Leider habe ich noch nicht herausgefunden wie ich  stateFormat richtig benutzen muss.

Hat einer eine Lösungsansatz parat ?