Hallo, ich bin am Ende meiner Weißheit.
Folgender Befehl eingegeben in die Kommandozeile von FHEM funktioniert.
set FBS_1_1 off
Das Device (IT Steckdose) funktoniert schon seit Tagen perfekt.
Jetzt wollte ich diesen Befehl in die 99_myConfig.pm einbauen aber bekomme die Meldung
IODev didn't respond ....
Das ist das Device in der fhem.cfg
define FBS_1_1 IT F000000FFF F0 0F
attr FBS_1_1 IODev CUL_0
attr FBS_1_1 alias Steckdose Laptop
attr FBS_1_1 event-on-change-reading .*
attr FBS_1_1 genericDeviceType switch
attr FBS_1_1 group FBS_1
attr FBS_1_1 icon black_Steckdose.off
attr FBS_1_1 room Homekit,Wohnzimmer
Ach ja, egal welches Device ich an dieser Stelle zu schalten versuche scheitert, obwohl in der restlichen 99_myUtils.pm funktonieren die gleichen Befehle ohne Probleme.
Auszug 99_myUtils.pm
sub CheckAtHome($$$)
{
# Benötigt: Name der zu testenden Fritzbox ($Device),
# zu suchende MAC ($MAC),
# Rückgabe: 1 = Gerät gefunden
# 0 = Gerät nicht gefunden
my ($Device, $MAC) = @_;
my $Status = 0;
$MAC =~ tr/:/_/;
$MAC = "mac_".uc($MAC);
my $StatusFritz = ReadingsVal($Device, $MAC, "weg");
if ($StatusFritz eq "weg")
{
fhem("set FBS_1_1 off");
$Status = 0;
}
elsif ($StatusFritz eq "inactive")
{
fhem("set FBS_1_1 off");
$Status = 0;
}
else
{
fhem("set FBS_1_1 off");
$Status = 1;
}
return $Status
}
Also warum geht nur in dieser Sub das Kommando mit einem Fehler des IODev zurück und in allen anderen Sub's sowie in FHEM, Floorplan, TabletUI ... macht dieser und andere Kommandos keine Probleme :-\
Danke für die Hilfe Monti
Warum hast du das Set off überhaupt in der If?
Du machst es doch auf jeden Fall, nur der Status änder sich?
Kharim
Die Syntax für den Befehl ist schon mal richtig.
Vermutlich wird die Bedingung nicht wahr. Baue mal eine Testfunktion ein (deine Variablen dort einfügen):
Log 1, "Var1: $var1 ; Var2: $var2 ; Var3: $var3" ;
Damit siehst du immer, wie der Inhalt der Variablen genau ist und kannst den Code anpassen.
Gruß
Frank
Der Status ändert sich auch wie gewünscht, die if Abfrage funktioniert.
Nun wollte ich in einer Dummy variable diesen Wert noch mal aber nicht mit "absent" sonder "WLan" und/oder "Bluetooth" abbilden.
Eigentlich war der set Befehl "set dummy WLAN" oder "BLUETOOTH".
Dachte mein Dummy ist falsch, deshalb habe ich eine Lampe, FBS_1_1, als Testobjekt benutzt.
Also der Status wird zurückgegeben an die Presence Funktion die diese Sub aufruft, aber der Schalter wird nicht betätigt,
weil in der Log steht "IODev didn´t respond .... raw =>..." - den Befehl in der Kommandozeile nimmt er problemlos an.
Denke ich werde das anders lösen müssen, mit meiner Logik komme ich da nicht hinter.
Danke Monti
Woran erkennst du das deine sub überhaupt aufgerufen wird?
Auch übergibst du 3 Werte (resp. die sub erwartet 3 Werte) und du wertest nur 2 aus - ok, sollte kein Problem sein.
Wenn das deine 99_myUtils sein soll fehlen noch Einträge - so ist sie zumindest fehlerhaft und sollte nicht geladen werden.
Logeinträge wie von fiedel vorgeschlagen sollten helfen das Phänomen eingrenzen zu können.
Meine Geräte schalten zumindest auch aus beliebigen sub`s einwandfrei.
Auch wäre es hilfreich(er) wenn du die Meldungen aus dem Log posten würdest und nicht "aus dem Kopf" aufschreibst.
Und vielleicht solltest du uns auch zeigen wie die sub überhaupt aufgerufen wird ;)
Die Sub wird aufgerufen weil der Status sich ja ändert
define iPhoneThomas PRESENCE function {CheckAtHome("FritzBox","xx:xx:xx:xx:xx", "Thomas_PR")} 60 60
attr iPhoneThomas room Presence,
define Thomas_PR dummy
attr Thomas_PR room Presence
CheckAtHome ist die aufrufende Funktion und der Status ändert sich auch. Nun wollte ich in dieser Perl Funktion "CheckAtHome" noch meinen Befehl zum setzen des Dummys einbauen. Die Sub gibt immer noch den korrekten Status zurück und im Log taucht mein Aufruf auch korrekt auf, aber der Dummy wird nicht gesetzt.
Log:
2016.02.21 20:20:50 5: Cmd: >{CheckAtHome("FritzBox","34:C0:59:B8:0E:0D", "Thomas_PR")}<
2016.02.21 20:20:50 5: Cmd: >set Thomas_PR OFFLINE<
Sorry ich habe natürlich nicht das ganze File gepostet, wäre mittlerweile zu lange.
Verstehe bloß nicht warum der Befehl in der Kommandozeile funktioniert. Einmal raw "set Thomas_PR OFFLINE" und auch als PERL "{ fhem("set Thomas_PR OFFLINE") }" aber in der 99_myUtils.pm nicht :o
Ähnliche Befehle kommen in meiner 99_myUtils.pm öfter vor, auch in If Abfragen usw., und waren noch nie ein Problem.
Die 3 Werte wurden verarbeitet, aber zur Fehlersuche habe ich alles ohne Variablen oder drumherum ganz einfach gehalten
Monti
Editiere die myUtils mal mit Notepad++ und Sprache=Perl. Vielleicht ist doch noch was an der Syntax faul und du siehst es damit. Falls nicht: Datei bitte komplett hier mal anhängen!
Ok, danke an alle die mir helfen wollten.
Ich habe das jetzt mit einem zusätzlichen notify und einer neuen Sub gelöst.
Manchmal ist der Umweg doch schneller als die Hauptstrasse ;)
Monti