FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Dersch am 31 März 2016, 12:16:53

Titel: DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 31 März 2016, 12:16:53
Hallo,

ich brauche mal eine DOIF Schulung, bin noch recht unbedarft und lebe von Wiki's und anderen Beispielen. Bisher bin ich noch nicht gut genug von 0 eigene scripts zu schreiben.

Ich habe hier ein DOIF welches die Lichtsteuerung für mein Kodi ist.  Das sieht momentan so aus:
([Tageslicht] =~ "dunkel" and [WzHTPC:playStatus] eq "playing" and [WzHTPC:currentMedia] ne "" and ([WzHTPC:type] eq "episode" or [WzHTPC:type] eq "movie"))
(set WzHeimkinoLicht scene SchauModus)
DOELSEIF
([Tageslicht] =~ "dunkel" and [WzHTPC:playStatus] eq "paused" and [WzHTPC:currentMedia] ne "" and ([WzHTPC:type] eq "episode" or [WzHTPC:type] eq "movie"))
(set WzHeimkinoLicht scene PausenModus)
DOELSEIF
([Tageslicht] =~ "dunkel" and [WzHTPC:playStatus] eq "stopped" and [WzHTPC:currentMedia] ne "" and ([WzHTPC:type] eq "episode" or [WzHTPC:type] eq "movie"))
(set WzHeimkinoLicht scene LichtHell)


Es schaltet mir das Licht zuverlässig wenn es Dunkel ist. Funktioniert also bis auf eine Sache prima:
- Wenn ich während Play den Wert eines, mit der LightScene definierten Dimmers ändere springt dieser gleich danach wieder auf den Wert der Scene.
Kann ich das mittels des DOIF beeinflussen oder ist das eine andere Baustelle?

Nun ist mein Ziel, dass ich diesen Dimmer WzSofaLicht während Play individuell ändere (z.B weil meine Frau lesen oder häkeln will während ein Film geschaut wird und mehr Licht braucht). Wenn nun auf Pause geschaltet wird soll dieser geänderte Wert in ein reading last_state geschrieben werden und bei darauf folgendem Play gelesen werden. Also nicht die Scene setzen. Die Scene wird nur gesetzt wenn das Reading nicht vorhanden ist. Es wird also bei Stop gelöscht.

Und so habe ich es nun geändert aber ich weiß jetzt schon das da was falsch ist:
([Tageslicht] =~ "dunkel" and [WzHTPC:playStatus] eq "playing" and [WzHTPC:currentMedia] ne "" and ([WzHTPC:type] eq "episode" or [WzHTPC:type] eq "movie") and [WzSofaLicht:last_state] ne "8") [b]# Hier hatte ich die Idee das Reading last_state zu lesen und wenn nicht equal zu 8 (Wert des Dimmers bei Play) soll last_state gesetzt werden welches aus der Pause davor geschrieben wurde.[/b]
(set WzSofaLicht [WzSofaLicht:last_state])
DOELSEIF
([Tageslicht] =~ "dunkel" and [WzHTPC:playStatus] eq "playing" and [WzHTPC:currentMedia] ne "" and ([WzHTPC:type] eq "episode" or [WzHTPC:type] eq "movie") and [WzSofaLicht:last_state] eq "8") [b]# Hier die Sache umgekehrt und dann soll die Scene gesetzt werden. Aber hier sollte doch eigentlich geprüft werden ob das Reading überhaupt existiert. Wie mache ich das?[/b]
(set WzHeimkinoLicht scene SchauModus)
DOELSEIF
([Tageslicht] =~ "dunkel" and [WzHTPC:playStatus] eq "paused" and [WzHTPC:currentMedia] ne "" and ([WzHTPC:type] eq "episode" or [WzHTPC:type] eq "movie"))
(setreading WzSofaLicht last_state [WzSofaLicht], set WzHeimkinoLicht scene PausenModus) [b]# Hier soll bei Pause das reading last_state geschrieben werden und dann soll die Scene PausenModus gesetzt werden. Ist das so richtig? Dafür muss ich noch lösen wie der individuelle Dimmerwert bei Play auch erhalten bleibt.[/b]
DOELSEIF
([Tageslicht] =~ "dunkel" and [WzHTPC:playStatus] eq "stopped" and [WzHTPC:currentMedia] ne "" and ([WzHTPC:type] eq "episode" or [WzHTPC:type] eq "movie"))
(deletereading WzSofaLicht last_state [WzSofaLicht], set WzHeimkinoLicht scene LichtHell) [b]# Hier wird das Reading last_state gelöscht und die Scene LichtHell gesetzt.[/b]


Die Kommentare sind im Code. Wie kann ich mein Ziel zuverlässig erreichen?

Ich bin für jede Hilfe dankbar :)
Grüße
Dirk
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Per am 31 März 2016, 13:36:55
Für den vollständigen Code habe ich jetzt keine Konzentration, aber:

Zitat von: Dersch am 31 März 2016, 12:16:53Wenn nun auf Pause geschaltet wird soll dieser geänderte Wert in ein reading last_state geschrieben werden und bei darauf folgendem Play gelesen werden. Also nicht die Scene setzen. Die Scene wird nur gesetzt wenn das Reading nicht vorhanden ist. Es wird also bei Stop gelöscht.
Was, wenn du bei Stop nicht löschst, sondern den Szene-Standard-Wert setzt, dann brauchst du bei Play nicht erst prüfen, sondern kannst einfach immer den gespeicherten Wert setzen.
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 31 März 2016, 13:45:49
Wäre ein Weg für Dich das ganze durch abfragen eines Dummys zu lösen? If Dummy == Frau häckelt then änder das Licht nicht.

Ich mache sowas bei meiner Lichtautomatik. Ist der Dummy auf on schaltet das Licht automatisch, ist er auf off schaltet gar nichts.
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 31 März 2016, 22:24:08
Das mit dem Dummy wäre natürlich auch ein Weg aber ist es nicht schöner das ins DOIF einzubauen? Interessiert mich schon ob das so geht.
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 31 März 2016, 22:32:13
Machst Du ja, Du fragst ja im DOIF den Dummy ab. Wenn ich Dich richtig verstanden habe würdest Du bei Deiner Idee halt ein Reading abfragen.
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 31 März 2016, 22:41:19
Ach so meinst du das. Aber wie wird dann der individuelle wert gespeichert? Hast du ein Beispiel für mich?
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 31 März 2016, 22:45:26
Wieso den Wert speichern? Ich hatte Dich so verstanden das Du nicht willst das der Wert geändert wird. Also quasi keine Schaltung erfolgt. Hab Dich da wohl missverstanden.
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 31 März 2016, 22:48:13
Naja also normalerweise soll ja die Lichtsteuerung greifen. Aber wenn während Play der Wert des Dimmers geändert wurde, dann soll nach Pause dieser Wert wieder hergestellt werden und nicht der Wert der Scene. Nach Stopp soll das aber wieder auf Ausgangszustand gestellt sein. Das ist es was ich möchte :)
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 31 März 2016, 23:06:57
Ah ok. Sorry aber so spät kann ich nicht mehr so komplex denken. Aber mal ein kleiner Tip wie ich sowas mache. Mal ab davon das es sicherlich eine DOIF Lösung gibt.

Bei solch komplexen Szenarien und Schaltungen erstelle ich mir eine 99_myUtils welche ich über ein Notify aufrufe. Ins Notify kommen nur die Device rein die getriggert werden sollen und in die Sub werden dann die Abfragen und Bedingungen gemacht.
Finde ich persönlich Übersichtlicher muß ich gestehen.


Kleines Beispiel.

Notify:

Internals:
   DEF        BadezimmerVorheizenDummy:(on|off)|TempFeuchtSensorBadezimmer:temperature:.* {

          if( ($NAME eq "BadezimmerVorheizenDummy" || $NAME eq "TempFeuchtSensorBadezimmer") && Value( "BadezimmerVorheizenDummy" ) eq "on" ) {
              BadezimmerVorheizen($NAME,$EVENT);
          }

          elsif( $NAME eq "BadezimmerVorheizenDummy" && Value( "BadezimmerVorheizenDummy" ) eq "off" ) {
              BadezimmerVorheizenEnde();
          }
}
   NAME       notifyHeatingControl
   NR         371
   NTFY_ORDER 50-notifyHeatingControl
   REGEXP     BadezimmerVorheizenDummy:(on|off)|TempFeuchtSensorBadezimmer:temperature:.*
   STATE      2016-03-31 23:03:57
   TYPE       notify
   Readings:
     2016-03-29 15:01:02   state           active
Attributes:



Und hier die 99_myUtils dazu

##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;



sub myUtils_HeatingControl_Initialize($$) {

  my ($hash) = @_;

}


###########################################
### Badezimmer Vorheizen

sub BadezimmerVorheizenEnde() {

        oldVolume("Nexus7Wohnzimmer","safe");
        oldVolume("Nexus7Isabel","safe");
        oldVolume("DesireHD_Flur","safe");

        my $solltemp = ReadingsVal( "BadezimmerVorheizenDummy", "desired-temp", "21.0" );
        my $isttemp = ReadingsVal( "TempFeuchtSensorBadezimmer", "temperature", "Fegefeuer" );


        if( ReadingsVal( "setTemperaturTemplateDummy", "state", "HeatingOFF" ) eq "HeatingOFF" ) {

                fhem "set HeizungsThermostatBadezimmer_Clima controlManu off";

        } else {

                fhem "set HeizungsThermostatBadezimmer_Clima controlMode auto";

        }


        fhem "set Nexus7Wohnzimmer volume 6; sleep 1; set Nexus7Wohnzimmer ttsMsg Das Badezimmer wurde auf $isttemp Grad vorgeheizt und kann nun mollig warm verwendet werden.";
        fhem "set DesireHD_Flur volume 6; sleep 1; set DesireHD_Flur ttsMsg Das Badezimmer wurde auf $isttemp Grad vorgeheizt und kann nun mollig warm verwendet werden." if( ReadingsVal( "AnniKraussStr", "residentsAsleep", 1 ) == 0 );

        fhem "set Nexus7Isabel volume 6; sleep 1; set Nexus7Isabel ttsMsg Das Badezimmer wurde auf $isttemp Grad vorgeheizt und kann nun mollig warm verwendet werden." if( Value( "rr_Isabel" ) eq "home" || Value( "rr_Isabel" ) eq "awoken" );


        fhem "set HeizungsThermostatBadezimmer_Clima burstXmit";

        oldVolume( "Nexus7Wohnzimmer", "restore"); oldVolume( "DesireHD_Flur", "restore"); oldVolume( "Nexus7Isabel", "restore");
}


sub BadezimmerVorheizen($$) {

        my ($name,$event) = @_;

        oldVolume("Nexus7Wohnzimmer","safe");
        oldVolume("Nexus7Isabel","safe");
        oldVolume("DesireHD_Flur","safe");

        my $solltemp = ReadingsVal( "BadezimmerVorheizenDummy", "desired-temp", "21.0" );
        my $isttemp = ReadingsVal( "TempFeuchtSensorBadezimmer", "temperature", "Fegefeuer" );

        if( $name eq "BadezimmerVorheizenDummy" ) {
                if( ReadingsVal( "setTemperaturTemplateDummy", "state", "HeatingOFF" ) ne "Summer" ) {
                        if( ReadingsVal( "TempFeuchtSensorBadezimmer", "temperature", "19.0" ) < "$solltemp" && Value( "structureFensterTuerBadezimmer" ) eq "geschlossen" && ReadingsVal( "setTemperaturTemplateDummy", "state", "HeatingOFF" ) ne "Summer" ) {
                                fhem "set HeizungsThermostatBadezimmer_Clima controlManu $solltemp; set HeizungsThermostatBadezimmer_Clima burstXmit";

                                fhem "set Nexus7Wohnzimmer volume 6; sleep 1; set Nexus7Wohnzimmer ttsMsg Das Badezimmer wird jetzt auf $solltemp Grad vorgeheizt.";
                                fhem "set DesireHD_Flur volume 6; sleep 1; set DesireHD_Flur ttsMsg Das Badezimmer wird jetzt auf $solltemp Grad vorgeheizt." if( ReadingsVal( "AnniKraussStr", "residentsAsleep", 1 ) == 0 );


                                fhem "set Nexus7Isabel volume 8; sleep 1; set Nexus7Isabel ttsMsg Das Badezimmer wird nun auf $solltemp Grad vorgeheizt." if( Value( "rr_Isabel" ) eq "home" || Value( "rr_Isabel" ) eq "awoken" );
                        }
                        elsif( Value( "structureFensterTuerBadezimmer" ) eq "offen" ) {

                                my @monitored=devspec2array("(.*KontaktBadZ.*):FILTER=STATE!=closed");
                                my $cnt_devs=@monitored;
                                my $i = 0;
                                my $msgtext = "";

                                foreach(@monitored) {
                                        $msgtext .= AttrVal($_,"alias",$_);
                                        if ($i < $cnt_devs - 2) {
                                          $msgtext .= ", ";
                                        }
                                        if ($i == $cnt_devs - 2) {
                                                $msgtext .= " und ";
                                        }

                                        $i++;
                                }

                                fhem "set Nexus7Wohnzimmer volume 6; sleep 1; set Nexus7Wohnzimmer ttsMsg ".$msgtext." ist noch offen. Bitte zu erst schließen und dann das vorheizen erneut probieren." if( $cnt_devs > 0 );
                                fhem "set DesireHD_Flur volume 6; sleep 1; set DesireHD_Flur ttsMsg ".$msgtext." ist noch offen. Bitte zu erst schließen und dann das vorheizen erneut probieren." if( $cnt_devs > 0 && ReadingsVal( "AnniKraussStr", "residentsAsleep", 1 ) == 0 );

                                #fhem "setreading BadezimmerVorheizenDummy canceled  1";
                                fhem "set BadezimmerVorheizenDummy off";

                        } else {

                                fhem "set Nexus7Wohnzimmer volume 6; sleep 1; set Nexus7Wohnzimmer ttsMsg Die Temperatur im Badezimmer beträgt $isttemp Grad und es ist somit warm genug.";
                                fhem "set DesireHD_Flur volume 6; sleep 1; set DesireHD_Flur ttsMsg Die Temperatur im Badezimmer beträgt $isttemp Grad und es ist somit warm genug." if( ReadingsVal( "AnniKraussStr", "residentsAsleep", 1 ) == 0 );

                                #fhem "setreading BadezimmerVorheizenDummy canceled  1";
                                fhem "set BadezimmerVorheizenDummy off";
                        }

                } else {

                        fhem "set Nexus7Wohnzimmer volume 6; sleep 1; set Nexus7Wohnzimmer ttsMsg Es ist Sommer und die Heizung somit ausgeschalten.";
                        fhem "set DesireHD_Flur volume 6; sleep 1; set DesireHD_Flur ttsMsg Es ist Sommer und die Heizung somit ausgeschalten." if( ReadingsVal( "AnniKraussStr", "residentsAsleep", 1 ) == 0 );

                        #fhem "setreading BadezimmerVorheizenDummy canceled  1";
                        fhem "set BadezimmerVorheizenDummy off";
                }
        }

        if( $name eq "TempFeuchtSensorBadezimmer" && ReadingsVal( "TempFeuchtSensorBadezimmer", "temperature", "25.0" ) >= "$solltemp" ) {

                fhem "set BadezimmerVorheizenDummy off";
        }

        oldVolume( "Nexus7Wohnzimmer", "restore"); oldVolume( "DesireHD_Flur", "restore"); oldVolume( "Nexus7Isabel", "restore");
}

1;
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 01 April 2016, 11:00:40
oh das sieht mir sehr kompliziert aus. mit 99myutils hatte ich nun noch nie Berührung.

Da brauche ich nun wohl Zeit zum reinlesen. Danke für dein Beispiel, damit kann ich nun mal etwas lernen wenn ich es denn verstehe :)
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 01 April 2016, 11:24:56
Das sieht eigentlich nur so aus. Im Grunde ist es ähnlich wie Dein DOIF Konstrukt.
Es werden Devices getriggert und danach Abfragen gestartet. Sind bestimmte Bedingungen erfüllt wird geschälten.

Hier wird einfach das Badezimmer auf eine vorher ausgewählte Wunschtemperatur vorgeheizt, damit wir unseren Junior Abends waschen können.
In meinem Beispiel wird ein Dummy auf on und off getriggert und das Reading temperature vom Heizungsthermostaten im Bad.

Wird der Dummy auf on gesetzt wird überprüft ob überhaupt Heizzeit ist, also Sommer oder Winter, ist Winter wird geschaut ob die die eingestellte Wunschtemperatur höher ist wie die momentan gemessene. Dann wird geschaut ob die Struktur für Badezimmer Fenster und Tür den Status geschlossen hat. Ist das alles erfüllt wird die Heizung höher gedreht und eine Durchsage in der Wohnung erfolgt.



Grüße
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 01 April 2016, 13:26:02
Ok damit setze ich mich mal auseinander.

Kannst du mir evtl noch dabei helfen wie ich die Abfrage des bestehenden DOIF so verändere, dass der Lichtwert nicht immer wieder auf die Scene gesetzt wird? Also das Problem ist, dass ich bei Play den Dimmer verändere, dieser dann aber gleich wieder auf den Wert der Scene gesetzt wird. Kann das DOIF so verändert werden, dass die Scenen nur einmal beim eintreten der Definition gesetzt werden und nicht dauernd abgefragt wird?
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 01 April 2016, 14:18:21
Also ausgehend von Deinem Urspruns DOIF setzt Du bei play doch eine gesamte Scene und änderst nicht nur den Wert eines Devices.
Aber wenn ich das richtig verstehe, möchtest Du wenn Play aktiv ist und deine Playscene somit gesetzt ist den Wert eines Devices ändern.
Machst du nun Pause setzt also deine Pausen Scene wird ja der Wert des einen Devices wieder über schrieben, das soll aber nicht geschehen, korrekt? Bzw wenn das geschieht soll sofort der Wert wieder zurück gesetzt werden. Habe ich das verstanden?
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 01 April 2016, 14:57:09
Also ich habe 2 Anliegen. 1x Wunsch und 1x Problem :)

Das Problem:
Wenn der Wert eines Devices (hier Dimmer) geändert wird, welches über eine Scene auf einen bestimmten Wert gesetzt ist. Dann springt der Wert automatisch wieder auf den Wert der Scene. Das Log zeigt, dass eine andauerende Abfrage der Scenenwerte erfolgt. Wie kann ich das unterbinden? Es reicht doch die Werte der Scene einmalig nach dem Trigger (hier Play, Pause, Stop) einzustellen.

So sieht es im Log aus:
2016.03.31 21:57:58 3: WzKaminLED RGBW LD382A dim 0 3
2016.03.31 21:57:58 3: WzKaminLED set HSV 26, 71, 0 with ramp: 3, flags:
2016.03.31 21:57:58 3: CUL_HM set WzKoeter off
2016.03.31 21:57:58 1: PERL WARNING: Argument "set_8" isn't numeric in division (/) at (eval 16091) line 1.
2016.03.31 21:57:58 3: CUL_HM set WzSofaLicht 8
2016.03.31 21:57:59 3: WzKaminLED RGBW LD382A set off 3
2016.03.31 21:57:59 3: WzKaminLED RGBW LD382A dim 0 3
2016.03.31 21:57:59 3: WzKaminLED set HSV 26, 71, 0 with ramp: 3, flags:
2016.03.31 21:57:59 3: CUL_HM set WzKoeter off
2016.03.31 21:57:59 1: PERL WARNING: Argument "set_8" isn't numeric in division (/) at (eval 16095) line 1.
2016.03.31 21:57:59 3: CUL_HM set WzSofaLicht 8
2016.03.31 21:57:59 3: WzKaminLED RGBW LD382A set off 3
2016.03.31 21:57:59 3: WzKaminLED RGBW LD382A dim 0 3
2016.03.31 21:57:59 3: WzKaminLED set HSV 26, 71, 0 with ramp: 3, flags:
2016.03.31 21:57:59 3: CUL_HM set WzKoeter off
2016.03.31 21:57:59 1: PERL WARNING: Argument "set_8" isn't numeric in division (/) at (eval 16099) line 1.
2016.03.31 21:57:59 3: CUL_HM set WzSofaLicht 8
2016.03.31 21:57:59 3: WzKaminLED RGBW LD382A set off 3
2016.03.31 21:57:59 3: WzKaminLED RGBW LD382A dim 0 3
2016.03.31 21:57:59 3: WzKaminLED set HSV 26, 71, 0 with ramp: 3, flags:
2016.03.31 21:57:59 3: CUL_HM set WzKoeter off
2016.03.31 21:57:59 1: PERL WARNING: Argument "set_8" isn't numeric in division (/) at (eval 16103) line 1.
2016.03.31 21:57:59 3: CUL_HM set WzSofaLicht 8
2016.03.31 21:58:45 3: WzKaminLED RGBW LD382A set off 3
2016.03.31 21:58:45 3: WzKaminLED RGBW LD382A dim 0 3
2016.03.31 21:58:45 3: WzKaminLED set HSV 26, 71, 0 with ramp: 3, flags:
2016.03.31 21:58:45 3: CUL_HM set WzKoeter off
2016.03.31 21:58:45 1: PERL WARNING: Argument "set_8" isn't numeric in division (/) at (eval 16123) line 1.
2016.03.31 21:58:45 3: CUL_HM set WzSofaLicht 8
2016.03.31 21:58:45 3: WzKaminLED RGBW LD382A set off 3
2016.03.31 21:58:45 3: WzKaminLED RGBW LD382A dim 0 3
2016.03.31 21:58:45 3: WzKaminLED set HSV 26, 71, 0 with ramp: 3, flags:
2016.03.31 21:58:45 3: CUL_HM set WzKoeter off
2016.03.31 21:58:45 1: PERL WARNING: Argument "set_8" isn't numeric in division (/) at (eval 16127) line 1.
2016.03.31 21:58:45 3: CUL_HM set WzSofaLicht 8
2016.03.31 21:58:45 3: WzKaminLED RGBW LD382A set off 3
2016.03.31 21:58:45 3: WzKaminLED RGBW LD382A dim 0 3
2016.03.31 21:58:45 3: WzKaminLED set HSV 26, 71, 0 with ramp: 3, flags:
2016.03.31 21:58:45 3: CUL_HM set WzKoeter off


Das zeigt es ist mir grade unmöglich individuelle Werte abseits der Scenen Einstellung zu treffen. Das DOIF scheint permanent abgefragt zu werden und ich weiß nicht warum.

Der Wunsch:
Ist das was wir die letzten Beiträge besprochen haben. Ich möchte den Wert des Dimmers auch individuell Einstellen können während Play. Wenn dann auf Pause geschaltet wird kann die Pausen Scene ruhig gesetzt werden. Aber wenn dann wieder auf Play geschaltet wird, wird ja der PlayScenenWert eingestellt. Das soll nicht passieren wenn vorher der Wert bei Play geändert wurde. Dann soll der vorher individuell eingestellte Wert wieder eingestellt werden.
Wenn dann auf Stop geschaltet wird (Film zu Ende oder abgebrochen) soll dann die Ausgangssituation wieder aktiv sein. Also das Spiel fängt von vorne an.

Das soll verhindern, dass wir andauernd (wenn es die Situation halt verlangt) den Dimmer nachregeln müssen wenn Play=Pause=Play eintrifft.



Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 01 April 2016, 15:03:46
Ok das habe ich nun verstanden.
Ich muss da heute Abend mal testen wieso der Wert eines Devices immer wieder überschrieben wird bei einer scene. Kenne das so nicht und eigentlich Trigger Dein DOIF wenn ich das richtig sehe das Device LightScene ja nicht mal. Oder?
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 01 April 2016, 15:43:18
Nee es kann auch von dem LightScene Modul kommen fällt mir grade auf. Wenn es vom DOIF kommt müsste ja die Scene im Log zu sehen sein.

Schon mal vielen Dank für deine Hilfe und Zeit die du für mich aufwendest! :)
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 01 April 2016, 17:11:55
Also ich habe das mal getestet. Bei mir stellt sich da nichts zurück. Ich stelle ne Szene ein und ändere eine Lampe. Die bleibt so die ganze Zeit. Sehr komisch.
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 01 April 2016, 19:20:58
Ich habe nun bei dem Kodi Modul event-on-change eingestellt. Ich habe es noch nicht getestet aber dachte mir durch das Fehlen dieses attr wurde der status konstant aktualisiert was dann das doif auslöst was dann wiederum lightscene auslöst. Ist nur ein Gedanke aber könnte doch sein, oder?
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 01 April 2016, 20:02:49
Es ist ein Anfang. Ich überlege immer noch wie wir das mir Deinem Licht mache können. Was genau für ein System ist die Lampe? Hue oder was?

Ambesten wir machen das so das wir über ein Notify die Änderung des Lichts in ein Dummy schreiben, das aber nur wenn der Kodi play hat. Wir müssen mal schauen was wir da brauchen. Am besten Du schaltest die Lampe mal so wie sie leuchten soll und macht dann ein list.
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 01 April 2016, 22:18:32
Also das envent-on-change reading beim Kodi Modul war es! Nun wird nur einmal der scenen wert aus dem DOIF gesetzt. Schon mal einen Schritt weiter :)
Problem jetzt: Es ändert sich nur einmal. Pause und Stopp sind nun ohne Funktion... Obwohl Pause im Reading des Kodi Moduls steht bleibt das DOIF bei Playing stehen. Erst wenn ich das event-on-change wieder raus nehme ändert sich das reading des DOIF wieder.

Das ist ein Homematic HM-LC-DIM1T-FM Dimmer.
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 01 April 2016, 22:23:34
Wie hast Du denn das event-on-change-reading gesetzt?
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 01 April 2016, 22:24:41
Naja einfach attr event-on-change 1
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 01 April 2016, 22:27:42
Damit wird gar kein Event mehr aus gelöst. Mach mal statt 1

.*


Dann werden bei allen Readings bei Änderung ein Event ausgelöst.  aber nur bei Änderung
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 01 April 2016, 22:34:59
Nee mit .* verhält sich das so als hätte ich das Attribut gar nicht gesetzt.
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 01 April 2016, 22:49:26
Das müssen wir es auf ein oder zwei Readings eingrenzen. Mach mal ein list vom Device und poste hier
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 01 April 2016, 22:54:25
Also das ist das List vom Dimmer

Internals:
   DEF        395111
   HMLAN1_MSGCNT 172
   HMLAN1_RAWMSG E395111,0000,33CC8779,FF,FFBB,A4A4103951112864FE06011000
   HMLAN1_RSSI -69
   HMLAN1_TIME 2016-04-01 22:51:36
   HMUSB_MSGCNT 167
   HMUSB_RAWMSG E395111,0000,7A5DC542,FF,FFBD,A4A4103951112864FE06011000
   HMUSB_RSSI -67
   HMUSB_TIME 2016-04-01 22:51:36
   IODev      HMLAN1
   LASTInputDev HMUSB
   MSGCNT     339
   NAME       WzSofaLicht
   NR         56
   NTFY_ORDER 50-WzSofaLicht
   STATE      8
   TYPE       CUL_HM
   lastMsg    No:A4 - t:10 s:395111 d:2864FE 06011000
   peerList   WzSofaDimmer,3041F001,3041F002,self01,
   protLastRcv 2016-04-01 22:51:36
   protSnd    165 last_at:2016-04-01 22:51:33
   protState  CMDs_done
   rssi_HMLAN1 avg:-66.57 min:-68 max:-65 lst:-66 cnt:69
   rssi_HMUSB avg:-69.95 min:-71 max:-69 lst:-70 cnt:45
   rssi_at_HMLAN1 avg:-69.46 min:-72 max:-68 lst:-69 cnt:172
   rssi_at_HMUSB avg:-67.53 min:-69 max:-66 lst:-67 cnt:167
   Readings:
     2016-04-01 22:51:29   CommandAccepted yes
     2015-11-09 16:02:14   D-firmware      2.6
     2015-11-09 16:02:14   D-serialNr      MEQ0082193
     2016-03-31 23:01:29   PairedTo        0x2864FE
     2016-02-13 20:02:19   R-3041F001-lgActionTypeDim downDim
     2016-02-13 20:02:19   R-3041F001-lgOnLevel 100 %
     2016-02-13 20:02:19   R-3041F001-shActionTypeDim jmpToTarget
     2016-02-13 20:02:19   R-3041F001-shOnLevel 100 %
     2016-02-13 20:02:21   R-3041F002-lgActionTypeDim upDim
     2016-02-13 20:02:21   R-3041F002-lgOnLevel 100 %
     2016-02-13 20:02:21   R-3041F002-shActionTypeDim jmpToTarget
     2016-02-13 20:02:21   R-3041F002-shOnLevel 100 %
     2015-11-15 23:32:26   R-WzSofaDimmer-lgActionTypeDim toggelDim
     2015-11-15 23:32:26   R-WzSofaDimmer-lgOnLevel 100 %
     2015-11-15 23:32:26   R-WzSofaDimmer-shActionTypeDim jmpToTarget
     2015-11-15 23:36:50   R-WzSofaDimmer-shOnLevel 20 %
     2015-11-06 19:16:26   R-pairCentral   0x2864FE
     2015-11-06 19:16:27   R-powerUpAction off
     2016-02-13 20:02:22   R-self01-lgActionTypeDim toggelDim
     2016-02-13 20:02:22   R-self01-lgOnLevel 20 %
     2015-11-15 15:00:42   R-self01-shActionTypeDim jmpToTarget
     2016-02-13 20:02:22   R-self01-shOnLevel 20 %
     2016-03-31 23:01:29   RegL_00.        02:81 0A:28 0B:64 0C:FE 15:05 16:00 00:00
     2016-03-31 23:01:29   RegL_01.        30:06 32:50 33:64 34:4B 35:50 56:00 57:24 00:00
     2016-03-31 23:01:33   RegL_03.3041F001 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:44 0C:54 0D:64 0E:20 0F:00 10:14 11:C8 12:0A 13:05 14:05 15:00 16:C8 17:0A 18:0A 19:04 1A:04 81:00 82:00 83:00 84:32 85:64 86:00 87:0A 88:00 89:FF 8A:A5 8B:44 8C:54 8D:64 8E:20 8F:00 90:14 91:C8 92:0A 93:05 94:05 95:00 96:C8 97:0A 98:0A 99:04 9A:04 00:00
     2016-03-31 23:01:35   RegL_03.3041F002 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:12 0C:22 0D:23 0E:20 0F:00 10:14 11:C8 12:0A 13:05 14:05 15:00 16:C8 17:0A 18:0A 19:04 1A:04 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:24 8B:12 8C:22 8D:23 8E:20 8F:00 90:14 91:C8 92:0A 93:05 94:05 95:00 96:C8 97:0A 98:0A 99:04 9A:04 00:00
     2016-03-31 23:01:32   RegL_03.WzSofaDimmer 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:14 0C:52 0D:63 0E:20 0F:00 10:14 11:28 12:0A 13:05 14:05 15:00 16:C8 17:0A 18:0A 19:04 1A:04 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:26 8B:14 8C:52 8D:63 8E:20 8F:00 90:14 91:C8 92:0A 93:05 94:05 95:00 96:C8 97:0A 98:0A 99:04 9A:04 00:00
     2016-03-31 23:01:36   RegL_03.self01  01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:14 0C:52 0D:63 0E:20 0F:00 10:14 11:28 12:0A 13:05 14:05 15:00 16:64 17:0A 18:0A 19:04 1A:04 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:26 8B:14 8C:52 8D:63 8E:20 8F:00 90:14 91:28 92:0A 93:05 94:05 95:00 96:C8 97:0A 98:0A 99:04 9A:04 00:00
     2016-04-01 22:51:33   deviceMsg       8 (to CCU)
     2016-04-01 22:51:33   dim             stop:8
     2016-04-01 22:51:33   level           8
     2016-04-01 22:28:28   levelMissed     desired:8
     2016-04-01 22:51:33   overheat        off
     2016-04-01 22:51:33   overload        off
     2016-04-01 22:51:33   pct             8
     2016-04-01 13:47:01   peerList        WzSofaDimmer,3041F001,3041F002,self01,
     2016-03-31 23:01:27   powerOn         2016-03-31 23:01:27
     2016-04-01 22:51:33   recentStateType info
     2016-04-01 22:51:33   reduced         off
     2016-02-27 00:31:20   sabotageAttack_ErrIoAttack cnt 1
     2016-04-01 22:51:33   state           8
     2016-04-01 22:51:33   timedOn         off
     2016-04-01 19:58:52   trigLast        WzSofaDimmer:short
     2015-12-29 23:32:31   trig_HM_3041F0_Btn_01 short
     2015-12-29 23:32:31   trig_HM_3041F0_Btn_02 long
     2016-04-01 19:58:52   trig_WzSofaDimmer short
   Helper:
     HM_CMDNR   164
     cSnd       112864FE3951110201100320FFFF,112864FE3951110201100320FFFF
     dlvlCmd    ++A0112864FE3951110201100320FFFF
     mId        0059
     rxType     1
     Dir:
       cur        stop
       rct        down
     Expert:
       def        1
       det        0
       raw        1
       tpl        0
     Io:
       newChn     +395111,00,00,00
       nextSend   1459543896.89211
       rxt        0
       vccu       CCU
       p:
         395111
         00
         00
         00
     Mrssi:
       mNo        A4
       Io:
         HMLAN1     -67
         HMUSB      -67
     Prt:
       bErr       0
       sProc      0
       Rspwait:
     Q:
       qReqConf
       qReqStat
     Role:
       chn        1
       dev        1
       prs        1
     Rpt:
       IO         HMLAN1
       flg        A
       ts         1459543896.79592
       ack:
         HASH(0x25cd3e0)
         A480022864FE39511100
     Rssi:
       Hmlan1:
         avg        -66.5797101449275
         cnt        69
         lst        -66
         max        -65
         min        -68
       Hmusb:
         avg        -69.9555555555555
         cnt        45
         lst        -70
         max        -69
         min        -71
       At_hmlan1:
         avg        -69.4651162790698
         cnt        172
         lst        -69
         max        -68
         min        -72
       At_hmusb:
         avg        -67.5389221556886
         cnt        167
         lst        -67
         max        -66
         min        -69
     Shadowreg:
Attributes:
   IODev      HMLAN1
   IOgrp      CCU
   autoReadReg 4_reqStatus
   devStateIcon { my $mystate = Value($name);my $roundVal = 0;if ($mystate eq "off") { $roundVal = 0 }elsif ($mystate eq "on") { $roundVal = 100 }else { $roundVal = int(($mystate / 10.0) + 0.5) * 10}if ($roundVal == 0) { $roundVal = "00" }my $col255 = int($roundVal * 2.55 + 0.5);my $hexCol = uc sprintf("%02x%02x00",$col255,$col255);return ".*:light_light_dim_$roundVal\@$hexCol";}
   expert     2_full
   firmware   2.6
   group      Licht
   icon       light_control
   lightSceneParamsToSave 1
   model      HM-LC-DIM1T-FM
   peerIDs    00000000,2864FE01,3041F001,3041F002,39511101,
   room       Wohnzimmer
   serialNr   MEQ0082193
   subType    dimmer
   userattr   lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0
   webCmd     pct:on:off


Von Kodi:
nternals:
   CHANGED
   DEF        192.168.10.31 tcp kodi 1881kodi
   DeviceName 192.168.10.31:9090
   FD         12
   Host       192.168.10.31
   LAST_RECV  1459543948.86173
   NAME       WzHTPC
   NR         129
   NextID     529
   PARTIAL
   Port       9090
   Protocol   tcp
   STATE      opened
   TYPE       XBMC
   Pendingevents:
     219
     270
     279
     284
     297
     310
     373
     396
     428
   Pendingplayercmds:
     119:
       method     Player.GetProperties
       Params:
         properties:
           time
           totaltime
           repeat
           shuffled
           speed
           partymode
   Readings:
     2016-04-01 22:52:28   3dfile          off
     2016-04-01 22:52:28   currentAlbum
     2016-04-01 22:52:28   currentArtist
     2016-04-01 22:52:28   currentMedia    smb://THEFAB/Serien/Weeds (2005)/season vii/Weeds - Kleine Deals unter Nachbarn - 7x13 - Do Her Don't Do Her.avi
     2016-04-01 22:36:59   currentOriginaltitle
     2016-04-01 22:36:59   currentShowtitle Weeds - Kleine Deals unter Nachbarn
     2016-04-01 22:52:28   currentTitle    Im Fokus
     2016-04-01 22:52:28   currentTrack
     2016-04-01 22:36:59   episode         13
     2016-04-01 22:36:59   episodeid       4203
     2016-04-01 22:52:28   fullscreen      on
     2016-04-01 22:52:28   id              4203
     2016-04-01 22:52:28   label           Im Fokus
     2016-04-01 22:36:59   movieid
     2016-04-01 22:52:28   mute            off
     2016-04-01 22:52:28   name            Kodi
     2016-04-01 22:52:28   partymode       off
     2016-04-01 22:52:28   playStatus      playing
     2016-04-01 22:36:59   playlist
     2016-04-01 22:52:28   repeat          off
     2016-04-01 22:52:28   sd_audio0channels 6
     2016-04-01 22:52:28   sd_audio0codec  ac3
     2016-04-01 22:52:28   sd_audio0language
     2016-04-01 22:52:28   sd_audio1channels 6
     2016-04-01 22:52:28   sd_audio1codec  ac3
     2016-04-01 22:52:28   sd_audio1language
     2016-04-01 22:52:28   sd_video0aspect 1.77799999713898
     2016-04-01 22:52:28   sd_video0codec  divx 4
     2016-04-01 22:52:28   sd_video0duration 1638
     2016-04-01 22:52:28   sd_video0height 402
     2016-04-01 22:52:28   sd_video0stereomode
     2016-04-01 22:52:28   sd_video0width  716
     2016-04-01 22:36:59   season          7
     2016-04-01 22:52:28   shuffle         off
     2016-04-01 22:52:28   skin            Aeon Nox(skin.aeon.nox.5)
     2016-04-01 22:36:59   songid
     2016-04-01 22:52:28   speed           1
     2016-04-01 21:58:14   state           opened
     2016-04-01 22:52:28   stereoscopicmode off
     2016-04-01 21:58:14   system          wake
     2016-04-01 22:52:28   thumbnail       image://smb%3a%2f%2fTHEFAB%2fSerien%2fWeeds%20(2005)%2fseason%20vii%2fWeeds%20-%20Kleine%20Deals%20unter%20Nachbarn%20-%207x13%20-%20Do%20Her%20Don%27t%20Do%20Her-thumb.jpg/
     2016-04-01 22:52:28   time            00:15:28.837
     2016-04-01 22:52:28   totaltime       00:27:18.000
     2016-04-01 22:52:28   tvshowid        91
     2016-04-01 22:52:28   type            episode
     2016-04-01 22:52:28   version         15.2-20151019-02e7013 stable
     2016-04-01 22:36:26   videolibrary    update
     2016-04-01 22:52:28   volume          100
     2016-04-01 22:52:28   year            0
Attributes:
   devStateIcon opened:rc_GREEN:on disconnected:rc_RED:off Initialized:message_socket_disabled
   event-on-change-reading .*
   group      Multimedia
   icon       it_remote
   room       Wohnzimmer
   updateInterval 60
   webCmd     shutdown


Vom DOIF
Internals:
   CHANGED
   DEF        ([Tageslicht] =~ "dunkel" and [WzHTPC:playStatus] eq "playing" and [WzHTPC:currentMedia] ne "" and ([WzHTPC:type] eq "episode" or [WzHTPC:type] eq "movie"))
(set WzHeimkinoLicht scene SchauModus)
DOELSEIF
([Tageslicht] =~ "dunkel" and [WzHTPC:playStatus] eq "paused" and [WzHTPC:currentMedia] ne "" and ([WzHTPC:type] eq "episode" or [WzHTPC:type] eq "movie"))
(set WzHeimkinoLicht scene PausenModus)
DOELSEIF
([Tageslicht] =~ "dunkel" and [WzHTPC:playStatus] eq "stopped" and [WzHTPC:currentMedia] ne "" and ([WzHTPC:type] eq "episode" or [WzHTPC:type] eq "movie"))
(set WzHeimkinoLicht scene LichtHell)
   NAME       WzKodiLichtsteuerung
   NR         93
   NTFY_ORDER 50-WzKodiLichtsteuerung
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-04-01 22:53:28   Device          WzHTPC
     2016-04-01 22:53:28   cmd_event       WzHTPC
     2016-04-01 22:53:28   cmd_nr          1
     2016-04-01 20:10:48   e_Tageslicht_STATE dunkel
     2016-04-01 22:53:28   e_WzHTPC_currentMedia smb://THEFAB/Serien/Weeds (2005)/season vii/Weeds - Kleine Deals unter Nachbarn - 7x13 - Do Her Don't Do Her.avi
     2016-04-01 22:53:28   e_WzHTPC_playStatus playing
     2016-04-01 22:53:28   e_WzHTPC_type   episode
     2016-04-01 22:53:28   state           cmd_1
   Condition:
     0          InternalDoIf($hash,'Tageslicht','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) =~ "dunkel" and ReadingValDoIf($hash,'WzHTPC','playStatus','','',AttrVal($hash->{NAME},'notexist',undef)) eq "playing" and ReadingValDoIf($hash,'WzHTPC','currentMedia','','',AttrVal($hash->{NAME},'notexist',undef)) ne "" and (ReadingValDoIf($hash,'WzHTPC','type','','',AttrVal($hash->{NAME},'notexist',undef)) eq "episode" or ReadingValDoIf($hash,'WzHTPC','type','','',AttrVal($hash->{NAME},'notexist',undef)) eq "movie")
     1          InternalDoIf($hash,'Tageslicht','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) =~ "dunkel" and ReadingValDoIf($hash,'WzHTPC','playStatus','','',AttrVal($hash->{NAME},'notexist',undef)) eq "paused" and ReadingValDoIf($hash,'WzHTPC','currentMedia','','',AttrVal($hash->{NAME},'notexist',undef)) ne "" and (ReadingValDoIf($hash,'WzHTPC','type','','',AttrVal($hash->{NAME},'notexist',undef)) eq "episode" or ReadingValDoIf($hash,'WzHTPC','type','','',AttrVal($hash->{NAME},'notexist',undef)) eq "movie")
     2          InternalDoIf($hash,'Tageslicht','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) =~ "dunkel" and ReadingValDoIf($hash,'WzHTPC','playStatus','','',AttrVal($hash->{NAME},'notexist',undef)) eq "stopped" and ReadingValDoIf($hash,'WzHTPC','currentMedia','','',AttrVal($hash->{NAME},'notexist',undef)) ne "" and (ReadingValDoIf($hash,'WzHTPC','type','','',AttrVal($hash->{NAME},'notexist',undef)) eq "episode" or ReadingValDoIf($hash,'WzHTPC','type','','',AttrVal($hash->{NAME},'notexist',undef)) eq "movie")
   Devices:
     0           Tageslicht WzHTPC
     1           Tageslicht WzHTPC
     2           Tageslicht WzHTPC
     all         Tageslicht WzHTPC
   Do:
     0:
       0          set WzHeimkinoLicht scene SchauModus
     1:
       0          set WzHeimkinoLicht scene PausenModus
     2:
       0          set WzHeimkinoLicht scene LichtHell
     3:
   Helper:
     event      time: 00:16:28.855
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   WzHTPC
     timerevent time: 00:16:28.855
     triggerDev WzHTPC
     timerevents:
       time: 00:16:28.855
     triggerEvents:
       time: 00:16:28.855
   Internals:
     0           Tageslicht:STATE
     1           Tageslicht:STATE
     2           Tageslicht:STATE
     all         Tageslicht:STATE
   Itimer:
   Readings:
     0           WzHTPC:playStatus WzHTPC:currentMedia WzHTPC:type
     1           WzHTPC:playStatus WzHTPC:currentMedia WzHTPC:type
     2           WzHTPC:playStatus WzHTPC:currentMedia WzHTPC:type
     all         WzHTPC:playStatus WzHTPC:currentMedia WzHTPC:type
   Regexp:
     0:
     1:
     2:
     All:
   State:
   Trigger:
Attributes:
   do         always
   event-on-change-reading .*
   room       Wohnzimmer


Von LightScene
Internals:
   DEF        WzKaminLED WzKoeter WzSofaLicht WzRolladenGarten WzRolladenLinks WzRolladenTerrasse WzRolladenTuer FlurRolladen
   HAS_DataDumper 1
   HAS_JSON   1
   NAME       WzHeimkinoLicht
   NR         145
   NTFY_ORDER 50-WzHeimkinoLicht
   STATE      SchauModus
   TYPE       LightScene
   Content:
     FlurRolladen 1
     WzKaminLED 1
     WzKoeter   1
     WzRolladenGarten 1
     WzRolladenLinks 1
     WzRolladenTerrasse 1
     WzRolladenTuer 1
     WzSofaLicht 1
   Readings:
     2016-04-01 22:53:28   state           SchauModus
   Scenes:
     3dmodus:
       FlurRolladen down
       WzKaminLED off
       WzKoeter   off
       WzRolladenGarten down
       WzRolladenLinks down
       WzRolladenTerrasse down
       WzRolladenTuer down
       WzSofaLicht off
     Lichthell:
       WzKaminLED on
       WzKoeter   on
       WzSofaLicht 19
     Pausenmodus:
       WzKaminLED dim 30
       WzKoeter   off
       Wzsofalicht:
         icon       light_light_dim_20@333300
         state      15
     Schaumodus:
       WzKaminLED off
       WzKoeter   off
       Wzsofalicht:
         icon       light_light_dim_10@1A1A00
         state      8
   devices:
     FlurRolladen
     WzKaminLED
     WzKoeter
     WzRolladenGarten
     WzRolladenLinks
     WzRolladenTerrasse
     WzRolladenTuer
     WzSofaLicht
Attributes:
   group      Licht
   icon       status_comfort
   room       Wohnzimmer
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 01 April 2016, 23:03:11
Probiere mal

event-on-change-reading playStatus
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 01 April 2016, 23:38:10
sieht gut aus bis jetzt.  8)
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 01 April 2016, 23:42:58
Dann schauen wir morgen wie wir mit Deiner Lampe weiter machen.

Schalte sie mal wie sie leuchten soll und dann gib mir mal ein list davon.
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 02 April 2016, 00:17:37
Super :) Ich kann nur ein Beispiel liefern, da der Wert halt individuell sein soll. Ich kann es aber sicher auch eingrenzen. Also sagen wir Play hat einen Wert von 8 und dieser wird dann auf 15-20 geändert. Pause hat einen Wert von 15. Licht hell 19
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 02 April 2016, 07:38:32
Ok was hältst Du davon. Wir machen einen Dummy. Ist dieser Dummy gesetzt soll nach dem die LightScene auf SchauModus steht der Dimmer wieder auf einen vorher festgelegten Wert gehen.
Es muss aber immer vorher festgelegt werden ob oder ob nicht hochgedimmt werden soll. Es muss also immer der Dummy aktiviert werden. Wäre das ok für Dich?
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Sirel am 02 April 2016, 11:55:05
Hallo Dersch,

Du nutzt das Attribut "Do-Always". D.h. jedes Mal wenn sich ein Reding beim Device [WzHTPC] aktualisiert (muss nicht geändert werden, nur aktualisiert), wird Dein Modul getriggert.
Darum spingt auch dein Dimmerwert, nachdem Du ihn manuell während der Filmwiedergabe verstellt hast, kurze darauf wieder auf den "Szenenwert" zurück.
Daher solltest Du das Do-Always mal löschen.

Alternativ könntest Du sonst im Device [WzHTPC] durch einEvent-on-change-reading das "Triggern" begrenzen.

Nimm doch im ersten Schritt mal das Do-Always raus.

Viele Grüße,

Max
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 02 April 2016, 12:29:43
Max hat Recht. Das habe ich total übersehen. Vielen Dank Max.
Es ist wirklich nötig das Du das raus nimmst. Und dann kannst auch das event-on-change-reading wieder auf .* setzen.
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 03 April 2016, 12:22:58
Oh Super Tipp!! Danke! :)

Habe nun im DOIF das do always raus und beim WzHTPC das event-on-change wieder von playstatus auf .*

@cooltux: das mit dem Dummy können wir gerne machen. Ich erde schon sehen ob es das ist was ich möchte und lerne so oder so dabei :) Du meinst dann das Dummy muss manuell gesetzt werden wenn Werte abseits der Scenen aktiv sein sollen?
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 03 April 2016, 12:30:55
Ja genau. Es soll eigentlich nur immer als Abfragepunkt her halten.
Ist der Dummy aus on gesetzt soll Lampe X immer Wert y bekommen.

Eigentlich simpel. Ein Notify triggert WzHTPC:playStatus.play oder so.

Im Notify steht dann

if dummy on set lampe 18

Weisst wie ich das meine?
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 03 April 2016, 12:39:29
Grob ja :) ich verstehe nur noch nicht den zusammenhang zum doif ;) das wird dann bei gesetztem dummy disabled? Wäre blöd da das doif ja mit der scene andere devices ansteuert und es bei dem individuellen wert nur um ein device geht was aber halt auch in der scene definiert ist.
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 03 April 2016, 12:52:35
Nein Dein DOIF macht genau das was es machen soll. Und es wird auch wenn der Status play kommt erstmal die Lampe geschalten um dann gleich danach wieder zurück zu schalten.
Was mir aber gerade noch eingefallen ist und das ist viel besser. Mach eine zweite play Scene, der einzige Unterschied die Lampe welche heller gedimmt sein soll gibt Du den neuen Dimmwert.
Dann machen wir es nur mit deinem doif. Ist dummy on DOELSEIF  mit heller scene ist dummy off DOELSEIF mit dunkler scene. Du hast dann quasi zwei DOELSEIF  für play.
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 03 April 2016, 13:03:17
hmm das klingt auch gut. Kannst du mir kurz aufzeichnen wie du dir den Dummy vorstellst? Damit wir auf einer Ebene sind :)
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 03 April 2016, 13:21:22
Ich habe da keine Vorstellung. Ist ja Dein Dummy. Kannst ihn gelb oder grün machen  ;D  ;D

Einfach einen Dummy mit passendem Namen

und als attribut gibt Du ihm ein setList    on:noArg off:noArg
Fertig. Mehr brauchen wir nicht. Alles was wir brauchen ist ein on oder off im state des dummys

Und bei Deinem DOIF play wertest Du einfach den dummy mit aus


([Tageslicht] =~ "dunkel" and [WzHTPC:playStatus] eq "playing" and [DummyName] eq "off" and [WzHTPC:currentMedia] ne "" and ([WzHTPC:type] eq "episode" or [WzHTPC:type] eq "movie"))
(set WzHeimkinoLicht scene SchauModus)
DOELSEIF
([Tageslicht] =~ "dunkel" and [WzHTPC:playStatus] eq "playing" and [DummyName] eq "on" and [WzHTPC:currentMedia] ne "" and ([WzHTPC:type] eq "episode" or [WzHTPC:type] eq "movie"))
(set WzHeimkinoLicht scene SchauModusBISSCHENHÖHERLAMPESTRICKEN)
DOELESIF
([Tageslicht] =~ "dunkel" and [WzHTPC:playStatus] eq "paused" and [WzHTPC:currentMedia] ne "" and ([WzHTPC:type] eq "episode" or [WzHTPC:type] eq "movie"))
(set WzHeimkinoLicht scene PausenModus)
DOELSEIF
([Tageslicht] =~ "dunkel" and [WzHTPC:playStatus] eq "stopped" and [WzHTPC:currentMedia] ne "" and ([WzHTPC:type] eq "episode" or [WzHTPC:type] eq "movie"))
(set WzHeimkinoLicht scene LichtHell)
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 03 April 2016, 21:59:37
Ach jetzt habe ich es verstanden, vielen Dank!  :) ich brauche wohl noch ein wenig mehr Praxiserfahrung hier ;)
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 04 April 2016, 05:23:36
Berichte dann mal wenn Du soweit bist  :)


Grüße
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 10 April 2016, 21:15:55
Sorry für die späte Antwort. Es funktioniert wie gewollt! :) vielen Dank für deine Hilfe.

Ich habe noch etwas gestöbert und diese Beiträge gefunden:

https://forum.fhem.de/index.php?topic=32387.0
https://forum.fhem.de/index.php?topic=32775.0

Der macht ja eigentlich fast genau das was ich ursprünglich wollte (vorherigen wert speichern)
Ich verstehe nur nicht mit welchem Modul? Sein script mit den my ... Das verstehe ich nicht so ganz.

Hast du da eine Erklärung für Dummies? :)
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: CoolTux am 10 April 2016, 22:48:05
Freut mich das es funktioniert.

Das ist kein Modul. Der dort erwähnte Code wird direkt ins Notify eingetragen. Finde ich absolut nicht gut, so viel Code gehört in eine 99_myUtils Datei.
das my und dann die Variable dahinter bedeutet das eine nicht globale Variable deklariert wird. Ist Perl Programmierung.
Titel: Antw:DOIF reading setzen, löschen und prüfen
Beitrag von: Dersch am 10 April 2016, 22:52:22
Ah ok jetzt verstehe ich es etwas mehr. Von Pearl programmierung lasse ich aber lieber die Finger. Würde es zwar gerne aber bisher habe ich keinen Plan davon.