Hauptmenü

[gelöst] doif mit $SELF

Begonnen von tomspatz, 02 September 2018, 18:18:05

Vorheriges Thema - Nächstes Thema

tomspatz

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


Ellert

Was genau machst Du und was genau erwartest Du und was genau passiert nicht?

tomspatz

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

Ellert

Ich bin jetzt immer noch nicht schlauer.
Was hat früher funktioniert, reagiert und wie hast Du das früher beobachtet?

tomspatz

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

Ellert

#5
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.

tomspatz

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

Per

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.

tomspatz

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


Per

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.

tomspatz

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

Ellert

setreading SunAutomaticSteuerung schalter on müsste funktionieren
setreading SunAutomaticSteuerung schalter off auch.

tomspatz

@Ellert
neeee

das doif führt schon die richtigen Befehle aus es triggert nur irgendwie nicht auf $SELF

Ellert


binford6000

Hallo Tom,
meine DOIFs mit eingebautem Schalter reagieren auf das Event:
DOIF (["$SELF:schalter: on"]) (...)
DOELSEIF (["$SELF:schalter: off"]) (...)

Funktioniert seit immer  ;)
VG Sebastian

tomspatz

#15
@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

Ellert

Mit setreading sollte nicht nur das Reading schalter gesetzt werden, sondern auch $SELF triggern und die Befehle ausgeführt werden.

tomspatz

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