neuer FHEM-Befehl IF

Begonnen von Damian, 25 Dezember 2013, 23:50:06

Vorheriges Thema - Nächstes Thema

Puschel74

Moin,

@tommy
Poste doch mal Alarmon und Alarmoff hier schön untereinander in einen Beitrag so wie du sie jetzt bei dir hast.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Tommy82

#331
Moin, bin leider jetzt auf der Arbeit und komme nur per Handy an fhem, das list von Alarm in sieht so aus
Internals:
   DEF        *19:45:00 IF ([Alarmanlage_Wohnzimmer] eq "On" or [Alarmanlage_Wohnzimmer] eq "Auto")  (  IF ([TuerFensterWohnzimmer] eq "AllesZu")       (set Alarmanlage_Wohnzimmer on)     ELSE       ({FB_mail('Xyz@googlemail.com','FHEM Fenster Offen','Alarm kann nicht aktiviert werden, Fenster oder Tuer noch offen' )}) )
   NAME       alarmOn
   NR         167
   REP        -1
   STATE      Next: 19:45:00
   TRIGGERTIME 1414172700
   TRIGGERTIME_FMT 2014-10-24 19:45:00
   TYPE       at
Attributes:

Das list von AlarmOff so
Internals:
   DEF        *19:55:00 IF ([Alarmanlage_Wohnzimmer] eq "Off" or [Alarmanlage_Wohnzimmer] eq "Auto")       (set Alarmanlage_Wohnzimmer off)     ELSE       (set Alarmanlage_Wohnzimmer on)
   NAME       alarmOff
   NR         172
   REP        -1
   STATE      Next: 19:55:00
   TRIGGERTIME 1414173300
   TRIGGERTIME_FMT 2014-10-24 19:55:00
   TYPE       at
Attributes:


Und die beiden Codes mit denen ich die Befehle gesetzt habe sehen so aus:

ZitatalarmOn
define alarmOn at *19:45:00 IF ([Alarmanlage_Wohnzimmer] eq "On" or [Alarmanlage_Wohnzimmer] eq "Auto")
(  IF ([TuerFensterWohnzimmer] eq "AllesZu")
     (set Alarmanlage_Wohnzimmer on)
   ELSE
     ({FB_mail('Xyz@googlemail.com','FHEM Fenster Offen','Alarm kann nicht aktiviert werden, Fenster oder Tuer noch offen' )})
)


ZitatalarmOff
define alarmOff at *19:55:00 IF ([Alarmanlage_Wohnzimmer] eq "Off" or [Alarmanlage_Wohnzimmer] eq "Auto")
     (set Alarmanlage_Wohnzimmer off)
   ELSE
     (set Alarmanlage_Wohnzimmer on)
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

Puschel74

#332
Hallo,

das hatte ich befürchtet  8)
Ich hab doch vorhin geschrieben das es für FHEM durchaus einen Unterschied macht ob ich etwas on schalte und dann aber auf On prüfe.
Das nennt sich case-sensitiv  ;)

Grüße

edith: Aber ich seh schon deine nächste Frage - was ist jetzt noch falsch  :P
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Tommy82

Hi, ok das case-sensitiv was du oben schon meintest hatte ich falsch verstanden, hatte verstanden das auf off schalten keinen Sinn macht es dann auf off zu prüfen...

Werd das Heut Abend mal anpassen.

Und dann mal überlegen wie die Abfrage mehr Sinn macht bzw. funktioniert, damit ich die Baustelle mal schließen kann
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

Puschel74

Hallo,

Zitathatte verstanden das auf off schalten keinen Sinn macht es dann auf off zu prüfen
Das habe ich auch nicht geschrieben.

Zitat von: Puschel74 am 24 Oktober 2014, 07:23:40
Hallo,
auch macht es für FHEM einen Unterschied ob ich etwas off schalte und dann auf Off prüfe.
Grüße
Ich hatte es extra für dich noch dick markiert in der Hoffnung es springt dir ins Auge  ::)
Aber da habe ich wohl zu viel erhofft  :P
Nächstesmal bekommst du Schriftgröße 36

Grüße

Edith: @Damian - ich hoffe mal das IF auch case-sensitiv ist  ???
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Damian

Zitat von: Puschel74 am 24 Oktober 2014, 09:26:16

Edith: @Damian - ich hoffe mal das IF auch case-sensitiv ist  ???

IF ist nichts anderes als ein Aufruf von perl-if, also kontextsensitiv, d. h.  "off" ist nicht das Gleiche wie "Off"

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Tommy82

So,
hab mal meine Pause genutzt, hoffe das ich jetzt das case-sensitiv komplett berücksichtigt habe:-) , konnte es leider noch nicht testen.

define alarmOn at *19:45:00 IF ([Alarmanlage_Wohnzimmer] eq "on" or [Alarmanlage_Wohnzimmer] eq "Auto")
(  IF ([TuerFensterWohnzimmer] eq "AllesZu")
     (set Alarmanlage_Wohnzimmer on)
   ELSE
     ({FB_mail('Th.Halberstadt@googlemail.com','FHEM Fenster Offen','Alarm kann nicht aktiviert werden, Fenster oder Tuer noch offen' )})
)


define alarmOff at *19:55:00 IF ([Alarmanlage_Wohnzimmer] eq "off" or [Alarmanlage_Wohnzimmer] eq "Auto")
     (set Alarmanlage_Wohnzimmer off)
   ELSE
     (set Alarmanlage_Wohnzimmer on)


Allerdings bin ich mir bei der logik immer noch sehr unsicher............. Die Alarmanlage soll ja im "normal" zustand immer auf Auto stehn und zu den definierten Zeiten on bzw. off gehen. Wenn ich dann den Button on bzw. off betätige soll dieser Status solange gesetzt bleiben bis ich ihn wieder auf Auto stelle.

Brauch ich im alarmOff das hier berhaupt?
Zitat(set Alarmanlage_Wohnzimmer off)
   ELSE
     (set Alarmanlage_Wohnzimmer on)[/code]

Wie gesagt konnte es noch nicht testen, werd es heute abend nachholen.
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

Puschel74

Hallo,

ZitatDie Alarmanlage soll ja im "normal" zustand immer auf Auto stehn
Und in welchem Codeteil wird sie auf Auto geschalten  ???

Ich seh überall nur ein set Alarmanlage_Wohnzimmer on und set  Alarmanlage_Wohnzimmer off
aber nirgends ein set Alarmanlage_Wohnzimmer Auto

Denkst du nicht du solltest dir heute abend besser nochmal in Ruhe das Einsteiger.pdf durchlesen?
Und das war jetzt weder böse noch sarkastisch gemeint sondern nur ein gut gemeinter Tipp.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Tommy82

#338
Hallo Puschel,
hab mir deinen Vorschlag zu herzen genommen, und mir grade nochmal das Einsteiger Handbuch vorgenommen und dortz vorallem den Bereich
ZitatEinfache Programmierung: if-Bedingung
, das Problem jetzt bin ich richtig verwirrt  :(
Bzw. ich hab iregendwo einen Logik fehler denn ich nicht finde, denke ja was ich erreichen will ist klar.

Neuer Ansatz:

Hab alarmOn und alarmOff mal so geändert:
define alarmOn at *19:45:00 IF ([Alarmanlage_Wohnzimmer] eq "on")
(  IF ([TuerFensterWohnzimmer] eq "AllesZu")
     (set Alarmanlage_Wohnzimmer on)
   ELSE
     ({FB_mail('xyz@googlemail.com','FHEM Fenster Offen','Alarm kann nicht aktiviert werden, Fenster oder Tuer noch offen' )})
)


define alarmOff at *19:55:00 IF ([Alarmanlage_Wohnzimmer] eq "off" )
     (set Alarmanlage_Wohnzimmer off)



Das wäre dann die normale Aktion.
Das Manuelle On /Off würde ich hier rüber regeln
define alarmManuell { IF (Value("Alarmanlage_Wohnzimmer") eq "on" ) { fhem ( "set TuerFensterWohnzimmer eq "AllesZu") } ELSE (Value("Alarmanlage_Wohnzimmer") eq "off" { fhem ("set Alarmanlage_Wohnzimmer off") } }

Werd das jetzt mal testen, aber kommt mir noch irgendwie seltsam vor........

EDIT
Hab jetzt ein wenig rumprobiert, und wie ich erwartet hatte es funktioniert nicht :-(
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

rudolfkoenig

Bitte dran denken: if ist nicht gleich IF, das PDF beschreibt if, und hier geht es um IF.
Das ist glaube ich so ein Fall, wovor ich in Beitrag #7 gewarnt habe.
Unter dem Strich sind aber scheinbar mehr Anweder gluecklich mit IF als ungluecklich.

Puschel74

#340
Hallo,

das ist korrekt Rudi aber der Anwender sollte schon ein klein wenig Vorstellung davon haben was er erreichen möchte.
Wenn ich mir den Code so ansehe - ist es egal ob if oder IF  8)

define alarmOn at *19:45:00 IF ([Alarmanlage_Wohnzimmer] eq "on")
(  IF ([TuerFensterWohnzimmer] eq "AllesZu")
     (set Alarmanlage_Wohnzimmer on)


Um 19:45 wird geprüft on die Alarmanlage on ist, dann muss noch TuerFenster gleich AllesZu sein damit - die Alarmanlage on geschaltet wird.
Wozu? Sie ist ja bereits on sonst wären wir nicht hier.

Nun der ELSE-Teil:
Um 19:45 wird geprüft ob die Alarmanlage on ist, wenn dann TuerFenster ungleich AllesZu ist wird die Mail gesendet.
Ok, das kann Sinn machen.

define alarmOff at *19:55:00 IF ([Alarmanlage_Wohnzimmer] eq "off" )
     (set Alarmanlage_Wohnzimmer off)

Hier wird es olympisch  8)
Um 19:55 wird geprüft ob die Alarmanlage off ist um sie dann off zu schalten  ???

Tommy - egal ob if oder IF.
Du brauchst dir doch nur durchlesen was du da programmierst.
Der Code wird nicht angemeckert - syntaktisch ist er ja richtig.
Aber ergibt er auch Sinn für dich?

Grüße

Edith: Vorschlag zur Güte - ich geh mit meienr Frau in Ruhe auf die Terrasse eine rauchen.
Du schickst mir per PN WAS du genau haben möchtest - keinen Code sondern in deinen eigenen Worten (aber kein Roman).
Ich schau was ich dir daraus zaubern kann.
Das würde Damians Beitrag hier erstmal um einige Seiten entlasten  ;)
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Tommy82

#341
Hi Puschel, nein er ergibt keinen Sinn da hast du leider recht... :( Wie gesagt, hab da grad einen absoluten Logik (denk) fehler, obwohl die Aufgabenstellung eigentlich recht abstrakt ist....., steh mir echt auf dem schlauch.. Naja ich spiel noch was  ;)

So alarmOn mal so geändert, mal sehen was um 18:00 passiert :-)
define alarmOn at *18:05:00
  IF ([TuerFensterWohnzimmer] eq "AllesZu")
     (set Alarmanlage_Wohnzimmer on)
   ELSE
     ({FB_mail('xyz@googlemail.com','FHEM Fenster Offen','Alarm kann nicht aktiviert werden, Fenster oder Tuer noch offen' )})


So hier alarmOff
define alarmOff at *18:25:00 {fhem ("set Alarmanlage_Wohnzimmer off")}
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

Damian

Zitat von: rudolfkoenig am 24 Oktober 2014, 17:36:10
Bitte dran denken: if ist nicht gleich IF, das PDF beschreibt if, und hier geht es um IF.
Das ist glaube ich so ein Fall, wovor ich in Beitrag #7 gewarnt habe.
Unter dem Strich sind aber scheinbar mehr Anweder gluecklich mit IF als ungluecklich.

Ich glaube, hier geht es vorallem um das grundsätzliche Verständnis der logischen Konstruktionen für Nicht-Programmierer:

Beispiel von @Tommy82:

IF ([Alarmanlage_Wohnzimmer] eq "on")
(  IF ([TuerFensterWohnzimmer] eq "AllesZu")
     (set Alarmanlage_Wohnzimmer on)
...

Warum soll ich Alarmanlage_Wohnzimmer auf "on" schalten, wenn sie schon vorher "on" war. So etwas wird auch mit if nicht gut funktionieren.

Wenn Anwender, insb. Einsteiger, IF nutzen, dann sollte man zumindest in der Einsteiger-Doku auf die Commandref zu IF hinweisen.
Dort habe ich diverse Beispiele zu IF beschrieben.

Viele Fälle kann man aber inzwischen genauso gut mit DOIF erledigen und dazu gibt es ebenso unzählige Beispiele in der Commandref.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Tommy82

#343
Zitat von: Tommy82 am 24 Oktober 2014, 17:51:50
Hi Puschel, nein er ergibt keinen Sinn da hast du leider recht... :( Wie gesagt, hab da grad einen absoluten Logik (denk) fehler, obwohl die Aufgabenstellung eigentlich recht abstrakt ist....., steh mir echt auf dem schlauch.. Naja ich spiel noch was  ;)

So alarmOn mal so geändert, mal sehen was um 18:00 passiert :-)
define alarmOn at *18:05:00
  IF ([TuerFensterWohnzimmer] eq "AllesZu")
     (set Alarmanlage_Wohnzimmer on)
   ELSE
     ({FB_mail('xyz@googlemail.com','FHEM Fenster Offen','Alarm kann nicht aktiviert werden, Fenster oder Tuer noch offen' )})


So hier alarmOff
define alarmOff at *18:25:00 {fhem ("set Alarmanlage_Wohnzimmer off")}

So funktioniert jetzt das On und Off, ist das denn so auch richtig?

Jetzt fehlt nur noch der Schalter ums Manuell zu schalten
Idee dafür wäre
define alarmManuel notify IF ("Alarmanlage_Wohnzimmer") eq "on" ) {fhem ("set Alarmanlage_Wohnzimmer off") } ELSE ("Alarmanlage_Wohnzimmer") eq "off" ) {fhem ("set Alarmanlage_Wohnzimmer on") aber das gefällt mir auch noch nicht so richtig....., sieht noch komisch aus.....
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

Puschel74

Hallo,

Mensch tommy
ZitatDas würde Damians Beitrag hier erstmal um einige Seiten entlasten

Ich grübel da per PN und du müllst den Beitrag dennoch munter voll - gehts noch  ???
*grumpf*
Lesen, denken, verstehen

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.