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
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.
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.
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.
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
du musst in der setFn deinen port schalten. nicht das readingsProxy device.
Sobald ich von der Syntax
{($CMD eq "on")?"Port2 off":"Port2 on"}
Abweiche bekomme ich eine Fehlermeldung.
Ich benötige aber ein Tastenimpuls
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");}}
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.
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
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.
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.
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");;\
}\
}\
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
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 ?
So es gibt ein kleines Update.
Ich habe die Steuerung an den neuen Raspberry angepasst und ein ein Standartgehäuse eingebaut.
Das Display ist jetzt kleiner wird aber direkt über FHEM gesteuert.
Ich bastel gerade an einem Layout , um mir ein paar Platienen fertigen zu lassen. Wer Interesse hat einfach melden.
Hier der Codeschnipsel um das Disolay ein zu binden.
Denkt bitte darann , das ihr für die Benutzung des Framebuffers noch FHEM vorbeiten müsst.
#Displayausgabe
define Display FRAMEBUFFER /dev/fb1
attr Display layoutBasedir /opt/fhem/FHEM
attr Display layoutList standard.layout
attr Display startLayoutNo 0
attr Display update_interval 1
und hier die standard.layout
### RSS Layout ###
font /usr/share/fonts/truetype/freefont/FreeMono.ttf # TrueType Schriftart
pt 19 # Schriftgroesse
time 0.20 0.11 # Uhrzeit
pt 17 # Schriftgroesse
text 0.01 0.31 {"A=". sprintf("%.2f", ReadingsVal("AussenTemp","temperature","0"))."°C" } #
text 0.01 0.51 {"V=". sprintf("%.2f", ReadingsVal("VLTemp","temperature","0"))."°C" } #
text 0.01 0.71 {"R=". sprintf("%.2f", ReadingsVal("RLTemp","temperature","0"))."°C" } #