Hauptmenü

neues Modul DOIF

Begonnen von Damian, 21 Mai 2014, 15:53:18

Vorheriges Thema - Nächstes Thema

Brockmann

Zitat von: Spartacus am 15 Dezember 2014, 10:19:42
ich brauche doch irgendeinen Merker für den Taster, da er doch alle anderen Sensoren sticht!
Ich würde es so versuchen:
define diEingangsLicht DOIF(([EG.ss.TK.Haustuer:buttons] eq "pressed" or [EG.ss.LS.Eingang:buttons] eq "pressed") and [Aktor] eq "off"))
(set Aktor on)
DOELSEIF ([PTM210.Gira.01:buttons] eq "pressed" and [Aktor] eq "off")
(set Aktor on)
DOELSEIF ([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and [Aktor] eq "on" and [diEingangsLicht] eq "sensor_on")
(set Aktor off)
DOELSEIF ([PTM210.Gira.01:buttons] eq "pressed" and [Aktor] eq "on")
(set Aktor off)
#
attr diEingangsLicht wait 0:0:10:0
attr diEingangsLicht cmd_state sensor_on|manual_on|sensor_off|manual_off

Die Bedingung für den Ablauftimer wird nur wahr, wenn das Licht zuvor durch die Sensoren automatisch eingeschaltet wurde, nicht bei manueller Betätigung.

moonsorrox

Du kannst dieses natürlich auch mit einem Dummy verwenden indem du abfragst ob dieses Ein oder Aus ist und das in das DOIF einsetzen

So inetwa

define TestSteuerung dummy
attr TestSteuerung devStateIcon Aus:general_aus@lightgreen Ein:general_an_fuer_zeit@Crimson
attr TestSteuerung eventMap Aus Ein
attr TestSteuerung icon time_clock
attr TestSteuerung room Automation
attr TestSteuerung setList state:Aus,Ein
attr TestSteuerung sortby 01
attr TestSteuerung webCmd state
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Spartacus

Hallo zusammen,
vielen Dank für die Unterstützung:

@ Brockmann:
das funktioniert soweit ganz gut, allerdings hat diese Zeile noch einen Haken:
(([EG.ss.TK.Haustuer:buttons] eq "pressed" or [EG.ss.LS.Eingang:buttons] eq "pressed") and [Aktor] eq "off")

Wenn jetzt die Haustür offen steht, ("pressed") dann kann ich den Aktor zwar mit dem Taster ausschalten, aber er wird dann direkt wieder eingeschaltet, da  "Haustuer:pressed" und  "Aktor:off" wahr sind...hier müsste man auf "Haustuer:released" and " LS:released "warten, bevor das o.a. DOIF wieder zugelassen werden darf.

Zumindest habe ich eine neue Erkenntnis gewonnen! Ich kann den State des ganzen DOIFs ja auch berücksichtigen (and [diEingangsLicht] eq "sensor_on"). Muss noch mal in mich gehen! Vielleicht kann ich das irgendwie verwenden...

Außerdem muss noch zwischen Langdruck und Kurzdruck des Tasters unterschieden werden. Mit "buttons:pressed" alleine klappt es nicht. Hier muss irgendwie noch das sequence:trigger mit rein. Dafür hatte ich u.a. auch den dummy. Aber wenn das nicht geht, ist auch egal! Dann bleibe ich bei der einfachen Funktion des Tasters.
Die Notabschaltung muss rein, da schon mal die ganze Nacht Licht brannte, weil Schnee die LS  blockierte (Knete haben die Kids auch schon reingestopft  ;D) und nix mehr funktionierte....aber alles der Reihe nach...

Für mich ist das alles sehr schwierig das auf die Kette zu kriegen. Das Ganze lief 10 Jahre lang über eine  CControl. Da war das irgendwie einfacher (..mag aber auch daran liegen, dass ich immer noch Schwerigkeiten mit der fhem Syntax und besonders mit Perl habe)

@moonsorrox
mit dem Dummy habe ich schon probiert, aber das Problem damit war, dass der Dummy-Zustand (off,on, auto) vom Taster und vom DOIF gesetzt werden. Die haben sich gegenseitig behindert. Den Code habe ich weiter oben schon gepostet...

Nochmals Danke für die tatkräftige Unterstützung
Sparatcus.

Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Brockmann

Zitat von: Spartacus am 15 Dezember 2014, 19:28:46
(([EG.ss.TK.Haustuer:buttons] eq "pressed" or [EG.ss.LS.Eingang:buttons] eq "pressed") and [Aktor] eq "off")

Wenn jetzt die Haustür offen steht, ("pressed") dann kann ich den Aktor zwar mit dem Taster ausschalten, aber er wird dann direkt wieder eingeschaltet, da  "Haustuer:pressed" und  "Aktor:off" wahr sind...hier müsste man auf "Haustuer:released" and " LS:released "warten, bevor das o.a. DOIF wieder zugelassen werden darf.
Denk mal drüber nach, ob der Aktor überhaupt ein Trigger sein sollte. Ich meine, dass das in dem Szenario nicht nötig ist. Also würde ich statt [Aktor] eq off besser Value("Aktor") eq "off" usw. verwenden. Das sollte das Problem beheben, oder?

satprofi

Hallo Damian.
Könntest du mir einen Denkansatz geben? Ich suche eine möglichkeit, mit dem Powermeter von HM das Ende eines Waschzyklus auszugeben. Trigger soll aber ein Überschreiten eines bestimmten Wertes sein, und auslösen einer Meldung dann ein Wert der unterschritten wird.
Würde das ohne do always klappen?
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Damian

Zitat von: satprofi am 17 Dezember 2014, 17:12:07
Hallo Damian.
Könntest du mir einen Denkansatz geben? Ich suche eine möglichkeit, mit dem Powermeter von HM das Ende eines Waschzyklus auszugeben. Trigger soll aber ein Überschreiten eines bestimmten Wertes sein, und auslösen einer Meldung dann ein Wert der unterschritten wird.
Würde das ohne do always klappen?

Was ist mit dem Beispiel aus der commandref von DOIF zu "Waschmaschine fertig"?

Gruß

Damian

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

Brockmann

Wir hatten hier im Thread ja ein paar Mal das Thema Pushover-Modul, weil sich das nicht ganz Fhem-konform verhält und nach erfolgreichem Versand ein "OK" anstelle von 0 zurückliefert.
Ich meine, dass der DOIF-Code sogar extra angepasst wurde, um damit umzugehen?

Ich hatte das vor einiger Zeit schon im Pushover-Thread angemerkt und laut Johannes_B (Modulentwickler) ist das nun korrigiert.


Damian

Zitat von: Brockmann am 18 Dezember 2014, 14:41:33
Wir hatten hier im Thread ja ein paar Mal das Thema Pushover-Modul, weil sich das nicht ganz Fhem-konform verhält und nach erfolgreichem Versand ein "OK" anstelle von 0 zurückliefert.
Ich meine, dass der DOIF-Code sogar extra angepasst wurde, um damit umzugehen?

Ich hatte das vor einiger Zeit schon im Pushover-Thread angemerkt und laut Johannes_B (Modulentwickler) ist das nun korrigiert.

Das ist gut.

Es wurde im Reading error, als Fehlermeldung protokolliert, hatte aber sonst keine Bewandtnis.

Gruß

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

LuckyDay

@ Damian
Hallo weißt du schon wann
ZitatPushmeldung beim Ausbleiben eines Events:
kommt so wie auf Seite 1 beschrieben

bzw attr di_push do always|resetwait

lieb frag?

Damian

Zitat von: fhem-hm-knecht am 18 Dezember 2014, 18:21:03
@ Damian
Hallo weißt du schon wann kommt so wie auf Seite 1 beschrieben

bzw attr di_push do always|resetwait

lieb frag?

Vielleicht komme ich in den Weihnachtsferien dazu.

Gruß

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

CarstenF

#925
Hallo zusammen,
Ich hätte da mal eine Frage.
Ich habe einen Fernbedienungs-Hub von Harmony. Der ist auch als Modul in Fhem eingebunden. Der Status wird auch korrekt ausgelesen. Jetzt ist es so, das sich bei Statusänderung, also z.Bsp. Tastendruck auf Fernbedienung, hier Funktion Radio aus,
erst das Radio ausgeschaltet werden soll und dann die Intertechno Steckdose, an welchem das Radio hängt ausschalten soll. Eigentlich sollte das DOIF Modul so was doch können, oder? Ich kriege es auf jeden Fall nicht hin. Ich habe schon total viele Versuche unternommen. Vielleicht könnte mir jemand das Brett vorm Kopf entfernen :-)
Vielen Dank schon mal fürs Lesen.
Ach ja, die zweite Anweisung im Code ist erstmal nicht so wichtig. Es wurde mir schon ausreichen wenn eine Anweisung ausgeführt würde. Ich hatte das bisher alles über notify gelöst, aber es gibt soviele Aktionen bei der Fernbedienung, das das alles so unübersichtlich und verschachtelt ist. Deshalb wurde mir die DOIF Lösung schon sehr gut gefallen.

([harmony:currentActivity] "PowerOff") (set Radio off) DOELSE (set Fernsehen off)
Raspberry Pi4
CUL 868, CUL 433, LaCrosse Gateway, Zigbeetomqtt2, HUE, Homematic
Max-Cube umgeflasht
MAX!, FhemtoFhem, Homebridge, FhemConnector, IR_Gateway und sonst auch noch allerlei Spielzeug....

scooty

Hallo,

a) einfache Antwort:
Im DOIF Bedingungsteil fehlt der Vergleichsoperator "eq":
([harmony:currentActivity] eq "PowerOff") (set Radio off) DOELSE (set Fernsehen off)

b) komplizierte Antwort (hat jetzt aber nur noch teilweise mit DOIF zu tun):
Um auch wirklich den von Dir gewünschten Effekt zu erreichen würde ich es eher so probieren:
([harmony:activity] eq "PowerOff" and ReadingsVal("harmony","previousActivity","undefined") eq "<Name deiner Aktivität zum Radiohören>") (set Radio off)
- damit die "Radio"-Steckdose auch nur ausgeschaltet wird, wenn die vorherige Aktivität <Name deiner Aktivität zum Radiohören> war
- Verwendung des Readings "activity" statt "currentActivity",  "currentActivity" wird regelmäßig aktualisiert und würde somit das DOIF unnötig auslösen
-über den DOELSE-Teil machen wir uns dann später Gedanken. ;)

und noch ein
attr <Name deines DOIFs> wait 3
definieren (damit das Radio noch 3 Sekunden die Gelegenheit hat, sich auszuschalten, bevor das "set Radio off" der "Radio"-Steckdose es stromlos macht.

Viele Grüße,
Andreas
Fhem auf Gigabyte Brix
CUL V3 HM / CUL V3 MAX / MaxCube aFW Homematic&MAX / ZWave.me ZME_UZB1 / SDuino 433 / Velux KLF200
Homematic / MAX / Logitech Hub / ZWave / Wifi LED / div. 433 Temperatursensoren / pywws WH1080 / IO Homecontrol

CarstenF

Hey,

Vielen Dank fürs schnelle Helfen. Werde ich gleich sofort mal zu Hause ausprobieren und berichten.

Gruß Carsten
Raspberry Pi4
CUL 868, CUL 433, LaCrosse Gateway, Zigbeetomqtt2, HUE, Homematic
Max-Cube umgeflasht
MAX!, FhemtoFhem, Homebridge, FhemConnector, IR_Gateway und sonst auch noch allerlei Spielzeug....

CarstenF

Hallo Andreas,
Leider will das Modul immer noch nicht richtig. Ich haben den Code so verwendet (Version b) und es meldet auch nach gespeicherter config und reread  o. shutdown restart, "initialized", jedoch schaltet es meine Steckdose nicht aus. Im Logfile steht auch nichts von einer Aktivität o. Fehler drin.
Noch eine Idee?

Gruß Carsten
Raspberry Pi4
CUL 868, CUL 433, LaCrosse Gateway, Zigbeetomqtt2, HUE, Homematic
Max-Cube umgeflasht
MAX!, FhemtoFhem, Homebridge, FhemConnector, IR_Gateway und sonst auch noch allerlei Spielzeug....

Invers

Ich habe nun keine Idee mehr, wo ich suchen kann. Daher mal die folgende Frage:
Ich habe das DOIF aus der Commandref nachgebaut mit allem "Zubehör". Funktioniert auch, allerdings mit einem kleinen Makel, den ich nicht weg bekomme.
(([06:00-09:00] or [17:00-20:00]) and ([BM_Kueche] eq "motion")) (IF ([BM_Kueche:brightness:d] <40) (set switch_d_lang on, set switch_d_lang off))
mit do always.

Problem: immer um 6 und um 17 Uhr geht das Licht nun für 109 Minuten an, ohne durch den BM ausgelöst zu werden.
Bei meinem 2. DOIF passiert das auch, der dir restlichen Tageszeiten abdeckt und mit 1 Minute läuft. Der geht zu jeder Beginnzeit dann allerdings für eine Minute an.

Ich hoffe, mich verständlich auszudrücken.

Hat jemand eine Idee, wie ich den  DOIFs das abgewöhnen kann? Die Androhung von Schlägen hat nichts gebracht. LOL
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2