[GELÖST] DOIF Squeezebox/PiCoreplayer/KNX

Begonnen von S-Desire, 06 Oktober 2020, 23:22:35

Vorheriges Thema - Nächstes Thema

S-Desire

Hallo allerseits,
ich suche schon seit einigen tagen nach einem fehler in einer DOIF.
Ich habe mein FHEM vom Pi3 Auf dem Pi4 kopiert, bzw. FHEM neu aufgespielt und mittels Bakeup zurück gespielt.
Ich habe KNX, MDT Glastaster, Pi 3 & HifiBerry Amp2 mit PicorePlayer,
die Steuerung über den Glastaster habe ich hier von Obi übernommen.

Fhem auf dem PI3 Funktionierte das:
Ein- & Ausschalten, Lautstärke ändern.
das umschalten zwischen  Radio und Musik von der NAS abspielen (wo LogitechMediaServe installiert ist) ging nicht.

Nun wo Fhem auf dem PI4 ist geht plötzlich fast alles nur die Lautstärke lässt sich nicht mehr ändern....

ich bekomme im Event-Monitor nun angezeigt:

error: eval condition: Bareword "Up" not allowed while "strict subs" in use at (eval 6644) line 1.

In KNX wird bei Tastendruck bis zum loslassen 100 oder -100 gesendet

ich hab diese bereiche der DOIF ins auge gefasst

sub $SELF_volume
{
my ($type)=@_;
fhem_set('Badezimmer volume' .$type);
set_Exec('$SELF_volume', 1, '$SELF_volume', $type);
}


und den Bereich:

##Volume
{
if([KNX_Badezimmer:Volume_R] eq '100' and [?Badezimmer:power] eq 'on' and [?KNX_Badezimmer:Global] eq 'off')
{
set_Exec('$SELF_volume', 0, '$SELF_volume', 'Up');
}
}

{
if([KNX_Badezimmer:Volume_R] eq '-100' and [?Badezimmer:power] eq 'on' and [?KNX_Badezimmer:Global] eq 'off')
{
set_Exec('$SELF_volume', 0, '$SELF_volume', 'Down');
}
}

{
if([KNX_Badezimmer:Volume_R] eq '0' and [?Badezimmer:power] eq 'on' and [?KNX_Badezimmer:Global] eq 'off')
{
del_Exec('$SELF_volume');
}
}


Hier einmal der Link zu den originalen DOIF von OBI
http://forum.fhem.de/index.php/topic,100824.0.html

Die Forum suche hab ich bereits auch schon durch, vermute auch das irgendwo beim installieren von Fhem was schief gegangen ist.
Habt ihr eine lösung?

Damian

siehe: https://forum.fhem.de/index.php/topic,84969.msg1085526.html#msg1085526

Du musst deine Aufrufe anpassen:

set_Exec('$SELF_volume', 0, "$SELF_volume('Up')");

oder

set_Exec('$SELF_volume', 1, "$SELF_volume ('$type')"));
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

S-Desire

Danke ersteinmal für die Antwort.
Das kam quaise durch ein Update? Bzw. Neuinstallation durch Fhem?
Scheinbar bedeutet das, ich muss das ganze DOIF durchgehen...
weil, wenn ich nur die paar stellen ändere bekomme ich die aussage:

DI_Badezimmer DOIF: Perlblck: no right bracket: {
sub DI_Badezimmer_startvorgang_finish
{
fhem_set('KNX_Badezimmer RM_Startvorgang off');

if(ReadingsVal('Badezimmer','playStatus','') ne 'playing' and AttrVal('Badezimmer','auto_play','') eq 'on')
{
fhem_set('Badezimmer play');
fhem_set('Badezimmer next');
}

set_Exec('DI_Badezimmer_startvorgang_check', 5, 'DI_Badezimmer_startvorgang_check');

my @array = ::text_media(ReadingsVal('Badezimmer','currentArtist',''), ReadingsVal('Badezimmer','currentTitle',''), ReadingsVal('Badezimmer','currentFilename',''));
fhem_set('KNX_Badezimmer RM_Text1 '.$array[0]);
fhem_set('KNX_Badezimmer RM_Text2 '.$array[1]);

if(ReadingsVal('Badezimmer','currentPlaylistName','') eq '-')
{
fhem_set('KNX_Badezimmer RM_Text3 '.::text_replace_special_character(ReadingsVal('Badezimmer','currentAlbum','')));
}
else
{
fhem_set('KNX_Badezimmer RM_Text3 '.::text_replace_special_character(ReadingsVal('Badezimmer','currentPlaylistName','')));
}
}


sub DI_Badezimmer_startvorgang_check
{
if(ReadingsVal('Badezimmer','volume','0') eq '0' or ReadingsVal('Badezimmer','volume','0') eq 'muted')
{
fhem_set('Badezimmer volume '.ReadingsVal('Badezimmer','volume_last','0'));
}
}


sub DI_Badezimmer_volume
{
my ($type)=@_;
fhem_set('Badezimmer volume' .$type);


Damian

Dann ist irgendwo eine Klammer zu viel oder zu wenig, wie z.B. in meinem Vorschlag

set_Exec('$SELF_volume', 1, "$SELF_volume ('$type')"));

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

S-Desire

Super, ich hab es nun nochmal versucht es klappt, hatte wohl auch noch ein " vergessen.
Aber generell müsste ich theoretisch alle

set_Exec Befehle anpassen?

ich hatte das schon zum teil versucht, aber bei manchen weiß ich absolut nicht wo ich ' durch "
ersetzen muss und anpassen muss. Dazu reichen meine Kentnisse dann doch einfach nicht aus.

Ich werde die paar zeilen aber mal in das andere Forum posten, da ich auch durch die Forum suche und google keine lösung gefunden hatte....
erst deine Hilfe brachte die Lösung,
vielen Dank!

Damian

#5
Zitat von: S-Desire am 07 Oktober 2020, 17:42:51
Super, ich hab es nun nochmal versucht es klappt, hatte wohl auch noch ein " vergessen.
Aber generell müsste ich theoretisch alle

set_Exec Befehle anpassen?

ich hatte das schon zum teil versucht, aber bei manchen weiß ich absolut nicht wo ich ' durch "
ersetzen muss und anpassen muss. Dazu reichen meine Kentnisse dann doch einfach nicht aus.

Ich werde die paar zeilen aber mal in das andere Forum posten, da ich auch durch die Forum suche und google keine lösung gefunden hatte....
erst deine Hilfe brachte die Lösung,
vielen Dank!

Wenn du eine lokale Variable verwendest, dann musst du doppelte Anführungszeichen "..." außen setzen, damit diese beim Aufruf ausgewertet wird. Soll eine interne Variable wie z. B. $count zum späteren Zeitpunkt ausgewertet werden, dann müssen außen einfache Anführungszeichen '...' gesetzt werden: siehe Beispiele zu set_Exec: https://fhem.de/commandref_DE.html#DOIF_set_Exec
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

holzwurm83

Zitat von: Damian am 07 Oktober 2020, 11:01:33
siehe: https://forum.fhem.de/index.php/topic,84969.msg1085526.html#msg1085526

Du musst deine Aufrufe anpassen:

set_Exec('$SELF_volume', 0, "$SELF_volume('Up')");

oder

set_Exec('$SELF_volume', 1, "$SELF_volume ('$type')"));

Ich habe hier wohl das gleiche Problem, nur verstehe ich nicht was ich hier in klammern setzten soll?
subs {
  sub logwin {                                       # Definition der Funktion namens "logwin"
    my ($window)=@_;                                 # übernehme Parameter in die Variable $window
    Log 3,"Fenster offen, bitte schließen: $window"; # protokolliere Fenster-Offen-Meldung
fhem_set("teleBot _msg  Fenster $window schließen");
    set_Exec ("$window",900,"logwin",$window);      # setze Timer auf 30 Minuten für eine wiederholte Meldung
  }
}
{ if ([".*_Fenster_.*:open"] and $device  !~ "WZ_Fenster_OST_L" and $device  !~ "WZ_Fenster_OST" and $device  !~ "WZ_Fenster_SUED" and $device  !~ "EZ_Fenster_SUED") {set_Exec ("$DEVICE",1800,'logwin',"$DEVICE")}} # wenn, Fenster geöffnet wird, dann setze Timer auf Funktion zum Loggen namens "logwin"
{ if ([".*_Fenster_.*:closed"]) {del_Exec ("$DEVICE")}}                       # wenn, Fenster geschlossen wird, dann lösche Timer
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

Damian

Zitat von: holzwurm83 am 26 Oktober 2020, 18:22:08
Ich habe hier wohl das gleiche Problem, nur verstehe ich nicht was ich hier in klammern setzten soll?
subs {
  sub logwin {                                       # Definition der Funktion namens "logwin"
    my ($window)=@_;                                 # übernehme Parameter in die Variable $window
    Log 3,"Fenster offen, bitte schließen: $window"; # protokolliere Fenster-Offen-Meldung
fhem_set("teleBot _msg  Fenster $window schließen");
    set_Exec ("$window",900,"logwin",$window);      # setze Timer auf 30 Minuten für eine wiederholte Meldung
  }
}
{ if ([".*_Fenster_.*:open"] and $device  !~ "WZ_Fenster_OST_L" and $device  !~ "WZ_Fenster_OST" and $device  !~ "WZ_Fenster_SUED" and $device  !~ "EZ_Fenster_SUED") {set_Exec ("$DEVICE",1800,'logwin',"$DEVICE")}} # wenn, Fenster geöffnet wird, dann setze Timer auf Funktion zum Loggen namens "logwin"
{ if ([".*_Fenster_.*:closed"]) {del_Exec ("$DEVICE")}}                       # wenn, Fenster geschlossen wird, dann lösche Timer



set_Exec ("$window",900,"logwin('$window')");

und 

set_Exec ("$DEVICE",1800,"logwin('$DEVICE')")
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

holzwurm83

- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN