sleep in 99_myUtils.pm einbauen oder alternative ohne fhem zu blockieren

Begonnen von Ma_Bo, 16 Februar 2017, 15:16:11

Vorheriges Thema - Nächstes Thema

Ma_Bo

Wie schon hier beschrieben: https://forum.fhem.de/index.php/topic,60244.msg585709.html#msg585709 und ein erneuter Versuch mich mit der sub zu beschäftigen : https://forum.fhem.de/index.php/topic,60244.msg586227.html#msg586227

habe ich ein Problem mit meiner sub, ich möchte diese um ca. 1 Sekunde verzögern, damit alles ohne Probleme funktioniert.
Leider blockiert ein fhem durch ein "sleep" an dieser Stelle, für die angegebene Zeit und mein perfmon meckert dann.

Hat jemand eine Idee, wie ich eine Verzögerung hinbekomme ?

Gggfs. möchte ich auch ein Reading einlesen, was sich ca 1-2 Sekunden nach dem Aufruf der sub ändert und dies dann auch abfangen.

Hier nochmal die sub:

##### Start Alexa guten morgen
sub alexa_guten_morgen()
{
sleep 0.8;

my $Skillname = ReadingsVal("Alexa","fhemIntent",0);

  #Alexa
if ($Skillname =~ "amzn1.ask.skill.111")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Alexa";}

#Fernseher
elsif ($Skillname =~ "amzn1.ask.skill.222")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Fernseher";}

#Badezimmer
elsif ($Skillname =~ "amzn1.ask.skill.333")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Badezimmer";}

#Wohnzimmer
elsif ($Skillname =~ "amzn1.ask.skill.444")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Wohnzimmer";}

#Küche
elsif ($Skillname =~ "amzn1.ask.skill.555")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Küche";}

#Schlafzimmer
elsif ($Skillname =~ "amzn1.ask.skill.666")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Schlafzimmer";}

#Balkon
elsif ($Skillname =~ "amzn1.ask.skill.777")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Balkon";}

#Fehlerfall
elsif ($Skillname =~ "loeschen")
    {fhem "setreading Alexa fhemIntent loeschen";return "Fehlerfall";}
}
#####Ende Alexa guten morgen


Grüße Marcel
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

marvin78

Den verzögerten Aufruf (ggf. auch rekursiv) würde ich über ein at realisieren. Das blockiert nicht.

Alternativ kannst du dich im Developerbereich in InternalTimer einlesen.

DeeSPe

Oder einfach im Perl:
fhem "set xyz on; sleep 1; set zyx sbla";

Gruß
Dan

P.S. Das sleep im fhem "" Aufruf ist non-blocking.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Ma_Bo

Das Problem ist, die sub wird von Alexa automatisch aufgerufen...


Gesendet von iPhone mit Tapatalk
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

DeeSPe

Zitat von: Ma_Bo am 16 Februar 2017, 15:20:50
Das Problem ist, die sub wird von Alexa automatisch aufgerufen...


Gesendet von iPhone mit Tapatalk

Das macht doch keinen Unterschied wer die sub aufruft.
Es muss am Ende möglichst alles in einem fhem Aufruf stehen damit das wirklich hintereinander ausgeführt wird.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

marvin78

Das mit dem sleep ist zwar richtig, trifft aber die Anforderungen hier nicht ganz.

Ma_Bo

Mhhhh hast du da ein Beispiel...?

Versteh den Ablauf nicht ganz...


Gesendet von iPhone mit Tapatalk
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

marvin78

Einfaches Beispiel:

die aufgerufene sub:

sub alexa_guten_morgen() {
  fhem("define at.alexa_guten_morgen at +00:00:01 {alexa_guten_morgen_sub()}");
}


und alexa_guten_morgen_sub


sub alexa_guten_morgen_sub()
{

my $Skillname = ReadingsVal("Alexa","fhemIntent",0);

  #Alexa
if ($Skillname =~ "amzn1.ask.skill.111")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Alexa";}

#Fernseher
elsif ($Skillname =~ "amzn1.ask.skill.222")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Fernseher";}

#Badezimmer
elsif ($Skillname =~ "amzn1.ask.skill.333")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Badezimmer";}

#Wohnzimmer
elsif ($Skillname =~ "amzn1.ask.skill.444")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Wohnzimmer";}

#Küche
elsif ($Skillname =~ "amzn1.ask.skill.555")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Küche";}

#Schlafzimmer
elsif ($Skillname =~ "amzn1.ask.skill.666")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Schlafzimmer";}

#Balkon
elsif ($Skillname =~ "amzn1.ask.skill.777")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Balkon";}

#Fehlerfall
elsif ($Skillname =~ "loeschen")
    {fhem "setreading Alexa fhemIntent loeschen";return "Fehlerfall";}
}
#####Ende Alexa guten morgen


Das alles geht, wie immer, auch anders.

CoolTux

Man könnte alternativ auch mit InternalTimer arbeiten. Ist auch nicht blockierend.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Ma_Bo

Danke erst einmal an alle, ich werde jetzt mal lesen gehen...


Gesendet von iPhone mit Tapatalk
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Ma_Bo

Zitat von: marvin78 am 16 Februar 2017, 15:33:52
Einfaches Beispiel:

die aufgerufene sub:

sub alexa_guten_morgen() {
  fhem("define at.alexa_guten_morgen at +00:00:01 {alexa_guten_morgen_sub()}");
}


und alexa_guten_morgen_sub


sub alexa_guten_morgen_sub()
{

my $Skillname = ReadingsVal("Alexa","fhemIntent",0);

  #Alexa
if ($Skillname =~ "amzn1.ask.skill.111")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Alexa";}

#Fernseher
elsif ($Skillname =~ "amzn1.ask.skill.222")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Fernseher";}

#Badezimmer
elsif ($Skillname =~ "amzn1.ask.skill.333")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Badezimmer";}

#Wohnzimmer
elsif ($Skillname =~ "amzn1.ask.skill.444")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Wohnzimmer";}

#Küche
elsif ($Skillname =~ "amzn1.ask.skill.555")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Küche";}

#Schlafzimmer
elsif ($Skillname =~ "amzn1.ask.skill.666")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Schlafzimmer";}

#Balkon
elsif ($Skillname =~ "amzn1.ask.skill.777")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Balkon";}

#Fehlerfall
elsif ($Skillname =~ "loeschen")
    {fhem "setreading Alexa fhemIntent loeschen";return "Fehlerfall";}
}
#####Ende Alexa guten morgen


Das alles geht, wie immer, auch anders.

Ok, das funktioniert, ABER ich muss jetzt das "return" von sub alexa_guten_morgen_sub() für diese sub alexa_guten_morgen() haben, sonst gibt Alexa nichts aus.
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

marvin78

Was macht?

sub alexa_guten_morgen() {
  fhem("define at.alexa_guten_morgen at +00:00:01 {return alexa_guten_morgen_sub()}");
}


@CoolTux: Habe ich oben schon erwähnt.

Ma_Bo

Ausgabe ist nur im Log : 2017.02.16 16:16:06.274 3: at.alexa_guten_morgen: Ausgabe für Fernseher
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

marvin78


Ma_Bo

Automatisch durch Alexa, über das Alexa Modul und das was die sub als Return zurückgibt wird als Sprache ausgegeben...


Gesendet von iPhone mit Tapatalk
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.