FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: tomspatz am 02 September 2018, 18:18:05

Titel: [gelöst] doif mit $SELF
Beitrag von: tomspatz am 02 September 2018, 18:18:05
defmod SunAutomaticSteuerung DOIF ([$SELF:"schalter: on"]) (\
set RolloWZ sunAutomatic on)\
DOELSEIF ([RolloWZ:sunMode] eq "on" and [?RolloWZ:sunAutomatic] eq "on") (\
set RolloGruppe2 sunMode on)\
DOELSEIF ([RolloWZ:sunMode] eq "off" and [?RolloWZ:sunAutomatic] eq "on") (\
set RolloGruppe2 up)\
DOELSEIF ([$SELF:"schalter: off"]) (\
set RolloWZ sunAutomatic off)(\
set RolloKueche up)(\
set RolloWZ up)(\
set RolloBalkontuerWZ up)
attr SunAutomaticSteuerung alias Sonnen Automatik
attr SunAutomaticSteuerung cmdState on|on|on|on|off,off,off,off
attr SunAutomaticSteuerung devStateIcon off:ios-off:on on:ios-on-green:off
attr SunAutomaticSteuerung group Fenster und Türen
attr SunAutomaticSteuerung icon weather_sun
attr SunAutomaticSteuerung initialize cmd_1
attr SunAutomaticSteuerung readingList schalter
attr SunAutomaticSteuerung room Steuerung-Rollos,Wohnzimmer
attr SunAutomaticSteuerung setList schalter:on,off
attr SunAutomaticSteuerung wait 0:40:60:0,5,10,10

setstate SunAutomaticSteuerung on
setstate SunAutomaticSteuerung 2018-09-02 17:51:16 Device RolloWZ
setstate SunAutomaticSteuerung 2018-09-02 17:46:02 cmd 3
setstate SunAutomaticSteuerung 2018-09-02 17:46:02 cmd_event RolloWZ
setstate SunAutomaticSteuerung 2018-09-02 17:46:02 cmd_nr 3
setstate SunAutomaticSteuerung 2018-09-02 17:51:16 e_RolloWZ_sunMode off
setstate SunAutomaticSteuerung 2018-09-02 17:43:49 e_SunAutomaticSteuerung_events cmd_nr: 5,cmd: 5,cmd_event: set_off_cmd_5,off
setstate SunAutomaticSteuerung 2018-09-02 17:39:57 mode enabled
setstate SunAutomaticSteuerung 2018-09-02 17:46:02 state on
setstate SunAutomaticSteuerung 2018-09-02 17:46:02 wait_timer no timer



Das obere Konstrukt hat eigentlich schon länger so funktioniert, scheinbar habe ich bei irgendeien Update nicht aufgepasst.
Jetzt ist es wie tot.

Die einzelnen set Zweige funktionieren natürlich.

Insbesondere reagiert es überhaupt nicht auf den "schalter"

LG

Tom

Titel: Antw:doif mit $SELF
Beitrag von: Ellert am 02 September 2018, 19:10:28
Was genau machst Du und was genau erwartest Du und was genau passiert nicht?
Titel: Antw:doif mit $SELF
Beitrag von: tomspatz am 03 September 2018, 11:39:34
moin Ellert

SORRY ich dachte mir das es verständlich ist.
Also alle set Zweige einzeln ausgeführt sind OK

Was gar nicht funktioniert ist der $SELF Zweig:
([$SELF:"schalter: on"])
sowie :
([$SELF:"schalter: off"])


da reagiert nichts bzw. nichts was ich in irgendeiner Weise ersehen kann.
Das ganze ist bestimmt schon zwei Jahre alt und hat seinen Dienst getan. Scheinbar nach einem fhem Update "letztens" nicht mehr funktionsfähig.

$Id: 98_DOIF.pm 17155 2018-08-17 11:45:19Z Damian $


LG

Tom
Titel: Antw:doif mit $SELF
Beitrag von: Ellert am 03 September 2018, 16:10:59
Ich bin jetzt immer noch nicht schlauer.
Was hat früher funktioniert, reagiert und wie hast Du das früher beobachtet?
Titel: Antw:doif mit $SELF
Beitrag von: tomspatz am 03 September 2018, 18:04:21
Das DOIF erzeugt ja einen anklickbaren Schalter als devStateIcon, dieser wird "eigentlich" mit
([$SELF:"schalter: on"]) bzw.
([$SELF:"schalter: off"]) getriggert.
die dazugehörenden set werden allerdings nicht ausgeführt.

Ich muss nachher mal ein alten raspi anschließen. Bin mir sicher das da noch eine ältere Version drauf ist die funktioniert.

LG
Tom
Titel: Antw:doif mit $SELF
Beitrag von: Ellert am 03 September 2018, 18:51:48
Also Du wählst schalter und on oder off aus und klickst auf set, das funktioniert nicht. Habe ich Dich richtig verstanden?

Das devStateIcon wirkt nur auf state nicht auf schalter, das war schon immer so, es sei denn, Du verwendest eventMap.
Titel: Antw:doif mit $SELF
Beitrag von: tomspatz am 04 September 2018, 09:54:16
so habe mein "altes" System mobilisiert
System Info
ConfigType: configFile
SVN rev: 17177
OS: linux
Perl: 5.20.2


Das aktuelle ist:
System Info
ConfigType: configFile
SVN rev: 17219
OS: linux
Perl: 5.20.2


aber die selbe DOIF Version auf beiden Systemen:
# $Id: 98_DOIF.pm 17155 2018-08-17 11:45:19Z Damian $

Auf dem alten habe ich einst das ganze erfolgreich eingerichtet, wobei:
RolloKueche
RolloWZ

jeweils NUR ein dummy sind. Dieses habe ich dann auf mein produktiv System übertragen.

So sieht der code auf dem Testsystem aus, und dieser funktioniert. Sprich beim klick auf den Schalter wird das jeweilige set ausgeführt. Die beiden Zustände dazwischen sind hier eigentlich irrelevant.
Das der nicht ganz sauber ist, ist mir auch bewusst. In cmdState sind ja nur drei Zustände, im DEF sind allerdings vier.
defmod SunAutomaticSteuerung DOIF (["$SELF:Schalter: on"]) (\
set RolloWZ sunAutomatic on)\
DOELSEIF ([RolloWZ:sunMode] eq "on" and [?RolloWZ:sunAutomatic] eq "on") (\
set RolloKueche position 57)\
DOELSEIF ([RolloWZ:sunMode] eq "off" and [?RolloWZ:sunAutomatic] eq "on") (\
set RolloKueche up)\
DOELSEIF (["$SELF:Schalter: off"]) (\
set RolloWZ sunAutomatic off)(\
set RolloKueche up)(\
set RolloWZ up)
attr SunAutomaticSteuerung alias Sonnen Automatik
attr SunAutomaticSteuerung cmdState on|on|on|off,off,off
attr SunAutomaticSteuerung devStateIcon off:ios-off:on on:ios-on-green:off
attr SunAutomaticSteuerung group Fenster und Türen
attr SunAutomaticSteuerung icon weather_sun
attr SunAutomaticSteuerung initialize on
attr SunAutomaticSteuerung readingList schalter
attr SunAutomaticSteuerung room Steuerung-Rollos
attr SunAutomaticSteuerung setList schalter:on,off
attr SunAutomaticSteuerung wait 0:40:30:0,5,10

setstate SunAutomaticSteuerung off
setstate SunAutomaticSteuerung 2018-09-03 11:24:20 Device RolloWZ
setstate SunAutomaticSteuerung 2018-09-03 11:24:35 cmd 4.3
setstate SunAutomaticSteuerung 2018-09-03 11:24:35 cmd_event set_off_cmd_4
setstate SunAutomaticSteuerung 2018-09-03 11:24:35 cmd_nr 4
setstate SunAutomaticSteuerung 2018-09-03 11:24:35 cmd_seqnr 3
setstate SunAutomaticSteuerung 2017-09-29 19:05:50 e_RolloWZ_sunMode on
setstate SunAutomaticSteuerung 2018-09-03 11:24:35 state off
setstate SunAutomaticSteuerung 2018-09-03 11:24:35 wait_timer no timer


Natürlich habe ich beide DOIF's verglichen, habe "Schalter" auch kleingeschrieben, die Anführungszeichen anders gesetzt. Leider ohne Erfolg.
Da die DOIF Version die selbe ist, ist Damian wohl aus dem Spiel. Würde trotzdem sehr gerne diesen Fehler finden.

LG

Tom
Titel: Antw:doif mit $SELF
Beitrag von: Per am 04 September 2018, 10:53:50
Zitat von: tomspatz am 04 September 2018, 09:54:16habe "Schalter" auch kleingeschrieben
Aber warum wird in einem List mal "schalter" und mal "Schalter" verwendet? Zumindest innerhalb einer Def (inkl. Attr.) sollte es einheitlich sein. Oder du definierst damit was Falsches zufällig falsch, was im Endeffekt das gewünschte Ergebnis ergibt.
Titel: Antw:doif mit $SELF
Beitrag von: tomspatz am 05 September 2018, 18:39:20
ZitatZumindest innerhalb einer Def (inkl. Attr.) sollte es einheitlich sein. Oder du definierst damit was Falsches zufällig falsch, was im Endeffekt das gewünschte Ergebnis ergibt.

Ja das habe ich mir auch so gedacht.
Doch wie schon geschrieben das auf dem Testsystem funktioniert es exakt so.

Auf dem produktiv System habe ich es als erstes angeglichen, doch ohne Erfolg.

LG
Tom

Titel: Antw:doif mit $SELF
Beitrag von: Per am 06 September 2018, 12:43:07
Perl ist case-sensitiv. Wenn es auf dem Testsystem "genau so" funktioniert, mach es auf dem "Produktivsystem" auch "genau so". Wenn es dann geht, kannst du die falsch geschriebenen Einträge ersatzlos löschen, denn diese sind unwirksam.
Titel: Antw:doif mit $SELF
Beitrag von: tomspatz am 09 September 2018, 16:03:32
ich muss nochmals hier bei.
Habe das doif entsprechend nach zig Seiten Recherche geändert, es sieht jetzt so aus:
defmod SunAutomaticSteuerung DOIF ([$SELF:schalter,"off"] eq "on") (\
set RolloWZ sunAutomatic on)\
DOELSEIF ([RolloWZ:sunMode] eq "on" and [?RolloWZ:sunAutomatic] eq "on") (\
set RolloGruppe2 sunMode on)\
DOELSEIF ([RolloWZ:sunMode] eq "off" and [?RolloWZ:sunAutomatic] eq "on") (\
set RolloGruppe2 up)\
DOELSEIF ([$SELF:schalter,"off"] eq "off") (\
set RolloWZ sunAutomatic off)(\
set RolloKueche up)(\
set RolloWZ up)(\
set RolloBalkontuerWZ up)
attr SunAutomaticSteuerung alias Sonnen Automatik
attr SunAutomaticSteuerung cmdState on|on|on|on|off,off,off,off
attr SunAutomaticSteuerung devStateIcon off:ios-off:on on:ios-on-green:off
attr SunAutomaticSteuerung group Fenster und Türen
attr SunAutomaticSteuerung icon weather_sun
attr SunAutomaticSteuerung initialize cmd_1
attr SunAutomaticSteuerung readingList schalter
attr SunAutomaticSteuerung room Steuerung-Rollos,Wohnzimmer
attr SunAutomaticSteuerung setList schalter:on,off
attr SunAutomaticSteuerung wait 0:40:60:0,5,10,10


Leider löst es immer noch nicht mit dem "schalter" aus, dagegen direkt mit:
set SunAutomaticSteuerung cmd_1

bzw:
set SunAutomaticSteuerung cmd_4

wird einwandfrei ausgeführt.

Tom
Titel: Antw:doif mit $SELF
Beitrag von: Ellert am 09 September 2018, 16:57:58
setreading SunAutomaticSteuerung schalter on müsste funktionieren
setreading SunAutomaticSteuerung schalter off auch.
Titel: Antw:doif mit $SELF
Beitrag von: tomspatz am 09 September 2018, 18:01:29
@Ellert
neeee

das doif führt schon die richtigen Befehle aus es triggert nur irgendwie nicht auf $SELF
Titel: Antw:doif mit $SELF
Beitrag von: Ellert am 09 September 2018, 18:19:19
Zitat von: tomspatz am 09 September 2018, 18:01:29
neeee

Heisst das, setreading funktioniert nicht?
Titel: Antw:doif mit $SELF
Beitrag von: binford6000 am 09 September 2018, 19:15:15
Hallo Tom,
meine DOIFs mit eingebautem Schalter reagieren auf das Event:
DOIF (["$SELF:schalter: on"]) (...)
DOELSEIF (["$SELF:schalter: off"]) (...)

Funktioniert seit immer  ;)
VG Sebastian
Titel: Antw:doif mit $SELF
Beitrag von: tomspatz am 10 September 2018, 18:54:24
@Ellert
ZitatHeisst das, setreading funktioniert nicht?
neeeee soll heißen das ich mit den Befehlen schon echte devices "schalte" und nicht nur ein reading im $SELF setze.

@bifort6000
auch deine Variante habe ich ausprobiert, leider ohne Erfolg.
Ich werde noch echt wild, das hat echt gut funktioniert. Leider im Moment kaum Zeit um da nachzuforschen.

LG

Tom
Titel: Antw:doif mit $SELF
Beitrag von: Ellert am 13 September 2018, 19:07:51
Mit setreading sollte nicht nur das Reading schalter gesetzt werden, sondern auch $SELF triggern und die Befehle ausgeführt werden.
Titel: Antw:doif mit $SELF
Beitrag von: tomspatz am 23 September 2018, 16:18:27
selbst gefunden  :P

der Fehler lag im attr:
attr SunAutomaticSteuerung cmdState on|on|on|on|off,off,off,off

richtig ist in meinem Falle:
attr SunAutomaticSteuerung cmdState on|on|on|off,off,off,off

Wer weiß was mich dazu geritten hat  >:(

LG
Tom