Guten Morgen liebes Forum,
ich habe in letzter Zeit immer wieder Probleme mit einem meiner Scripts. Mal läuft es und mal nicht. In lezterem Fall steht im Log der Fehler Unknown Command my. Es hilft dann was notify neu anzulegen aber das ist ja keine dauerhafte Lösung.
Ich weiß leider nicht was ich übersehe ;-/
Hier ist der Code:
update_Sensoren:.* {
my $status1 = AttrVal("wecker1","msgRecipientPush",10);;
my $status2 = AttrVal("wecker2","msgRecipientPush",10);;
my $status3 = AttrVal("wecker3","msgRecipientPush",10);;
my $zeiten = "";;
# Für Wochenende ändern
if ( $status1 eq "inactive" && $status2 eq "inactive" && $status3 eq "inactive" ) {
if (($wday == 0) || ($wday == 6)) {
$zeiten = "8:00";;
} else {
$zeiten = "6:00";;
}
} else {
if($status1 eq "active") {
$zeiten = $zeiten . " " . AttrVal("wecker1","comment",10);;
}
if($status2 eq "active") {
$zeiten = $zeiten . " " . AttrVal("wecker2","comment",10);;
}
if($status3 eq "active") {
$zeiten = $zeiten . " " . AttrVal("wecker2","comment",10);;
}
} #status
system("sudo bash /opt/fhem/www/tablet/Scripts/zeitenSortieren.sh $zeiten &");;
}#alle
Vielen Dank
Marcel
Das passiert wahrscheinlich wenn man die fhem.cfg direkt editiert womöglich noch mit windows Werkzeugen, möglicherweise irgendwelche Steuerzeichen. Da sind zb. Zeilenumbrüche an der falschen Stelle
Sent from my iPad using Tapatalk
Die Zeilenumbrüche sind nicht maskiert. Wie schka17 schon schrieb, die fhem.cfg besser nicht direkt edieren.
Besser ist es, alles das was länger als 1..2 Zeilen ist, in eine 99_myUtils.pm auszulagern. Dann muss auch nichts maskiert werden und Du kannst einen Editor Deiner Wahl verwenden.
Ich hab aber alles direkt in der FHEM Web-Oberfläche editiert und garnichts an der FHEM.cfg geändert. :-\
Du meinst in der Definition des notify oder hast du mit edit files die fhem.cfg bearbeitet? Die doppelten ;; stehen in der cfg aber nicht wenn du das notify bearbeitest. Wie auch immer, die Zeilenumbrüche sind auf jeden fall falsch.
Sent from my iPad using Tapatalk
Nein ich hab das in der Definition des notifys editiert.
Also sollten eigentlich nur "FHEM Zeilenumbrüche" drin sein
D.h. Du hast nach dem = in der 2. Zeile bewusst einen Zeilenumbruch? Richtig wäre z.b. 2. und 3. Zeile in einer, und nur ein semikolon. So zieht sich das durchs ganze notify
Sent from my iPad using Tapatalk
Zitat von: schka17 am 20 Oktober 2016, 13:23:02
D.h. Du hast nach dem = in der 2. Zeile bewusst einen Zeilenumbruch?
Ich weiss nicht, wo Du in der zweiten Zeile einen Zeilenumbruch siehst... ich sehe keinen.
Die erste Zeile nach der öffnenden geschweiften Klammer in einem DEF sollte nicht leer sein.
Also einfach mal so probieren:
update_Sensoren:.* { my $status1 = AttrVal("wecker1","msgRecipientPush",10);;
my $status2 = AttrVal("wecker2","msgRecipientPush",10);;
Dann sollte die Meldung verschwinden und das notify funktionieren.
Zitat von: betateilchen am 20 Oktober 2016, 16:41:31
Ich weiss nicht, wo Du in der zweiten Zeile einen Zeilenumbruch siehst... ich sehe keinen.
Die erste Zeile nach der öffnenden geschweiften Klammer in einem DEF sollte nicht leer sein.
Also einfach mal so probieren:
update_Sensoren:.* { my $status1 = AttrVal("wecker1","msgRecipientPush",10);;
my $status2 = AttrVal("wecker2","msgRecipientPush",10);;
Dann sollte die Meldung verschwinden und das notify funktionieren.
schaut mit tapatalk anders aus, auf dem Ipad habe ich einen Zeilenumbruch, ich habs gerade mit dem Browser probiert, da sehe ich tatsächlich keinen.
Leider derselbe Fehler, ich hab die Zeile jetzt hochgezogen und der Code sieht so aus:
update_Sensoren:.* {my $status1 = AttrVal("wecker1","msgRecipientPush",10);;
my $status2 = AttrVal("wecker2","msgRecipientPush",10);;
my $status3 = AttrVal("wecker3","msgRecipientPush",10);;
my $zeiten = "";;
# Für Wochenende ändern
if ( $status1 eq "inactive" && $status2 eq "inactive" && $status3 eq "inactive" ) {
if (($wday == 0) || ($wday == 6)) {
$zeiten = "8:00";;
} else {
$zeiten = "6:00";;
}
} else {
if($status1 eq "active") {
$zeiten = $zeiten . " " . AttrVal("wecker1","comment",10);;
}
if($status2 eq "active") {
$zeiten = $zeiten . " " . AttrVal("wecker2","comment",10);;
}
if($status3 eq "active") {
$zeiten = $zeiten . " " . AttrVal("wecker2","comment",10);;
}
} #status
system("sudo bash /opt/fhem/www/tablet/Scripts/zeitenSortieren.sh $zeiten &");;
}#alle
Mit trigger bekomme ich aber immer noch den Fehler im Log:
2016.10.20 18:34:35 3: update_Sensoren return value: Unknown command {my, try help.
2016.10.20 18:34:41 3: update_Sensoren return value: Unknown command {my, try help.
Trau mich gar nichts zu schreiben, aber mit tapatalk sehe ich noch immer die Zeilenumbrüche..., aber auch zwei semikolon am ende der Zeile. Ich habe bei meinen notifys auch immer einen zeilenumbruch nach der ersten Klammer(http://uploads.tapatalk-cdn.com/20161020/16edbbe707b8aa4f8093e7bf15299e47.png)
Sent from my iPad using Tapatalk
Zitat von: schka17 am 20 Oktober 2016, 19:06:18
Trau mich gar nichts zu schreiben, aber mit tapatalk sehe ich noch immer die Zeilenumbrüche.
Na und? Wen interessiert, was Dein Tapatalk Dir
anzeigt? Das muss noch lange nicht das sein, was da wirklich steht (und ist es auch nicht!)
Zitat von: schka17 am 20 Oktober 2016, 19:06:18
aber auch zwei semikolon am ende der Zeile.
Es ist eigentlich völlig egal, ob am Ende einer perl-Zeile ein, zwei oder fünf Semikolon stehen.
@marcel2803:
Bei mir funktioniert Dein notify völlig problemlos, auch mit einer "leeren" Zeile nach der ersten Klammer und mit vielen Semikolon.
Internals:
CFGFN
DEF update_Sensoren:.* {
my $status1 = AttrVal("wecker1","msgRecipientPush",10);;
my $status2 = AttrVal("wecker2","msgRecipientPush",10);;
my $status3 = AttrVal("wecker3","msgRecipientPush",10);;
my $zeiten = "";;
Debug "notify ausgeführt";;
}
NAME n_test
NOTIFYDEV update_Sensoren
NR 17
NTFY_ORDER 50-n_test
REGEXP update_Sensoren:.*
STATE 2016-10-20 19:52:08
TYPE notify
Readings:
2016-10-20 19:52:03 state active
Attributes:
Wenn ich ein "trigger update_Sensoren test" eingebe, erhalte ich die gewünschte Debug Ausgabe im Logfile.
Du musst vielleicht doch irgendwas bei der Anlage/Eingabe des notify selbst falsch machen :o
Zitat von: betateilchen am 20 Oktober 2016, 19:56:58
Na und? Wen interessiert, was Dein Tapatalk Dir anzeigt? Das muss noch lange nicht das sein, was da wirklich steht (und ist es auch nicht!)
@Betateilchen, sehr überflüssiges Kommentar, aber das kennt man ja aus vielen Posts.
@marcel2803, ich würde nicht ausschliessen dass Steuerzeichen diese Problem auslösen könnten, genau dieses Fehlerbild hatte ich auch schon, habe meine scripts mit editplus erstellt und wollte das mit copy paste kopieren, und da waren eben mal unsichtbare Steuerzeichen dabei wenn ich vergessen habe umzustellen. Mehr kann ich dazu eh nicht mehr beitragen und bin dann draussen.
Zitat von: schka17 am 20 Oktober 2016, 21:17:06
@Betateilchen, sehr überflüssiges Kommentar, aber das kennt man ja aus vielen Posts.
Das war nicht überflüssig, sondern voller Ernst. Tapatalk macht sehr viele komische Dinge, man sollte sich nie darauf verlassen, int Tapatalk wirklich das zu sehen, was in einem tapatalk-fähigen Forum tatsächlich in der Datenbank steht. Schon gar nicht, wenn es um Texte innerhalb irgendwelcher Formatierungs-Tags steht.
Gibt es irgendein Tool, dass die verschiedenen Steuerzeichen anzeigt? Word wird wohl kaum unterscheiden können. Dann könnte ich die mal mit den anderen scripts vergleichen.
Ein 'cat fhem.cfg' könnte Dir vll etwas anzeigen, bin mir aber nicht sicher ob und wie cat Steuerzeichen datstellt.
Ich würde: den def-Inhalt kopieren und in einen ascii Editor kopieren, das Device löschen, ein Neues anlegen, den kopierten def-Inhalt checken, neu in die Zwischenablage kopieren und ins neue Device kopieren. Dann mal weiter gucken...
Mit cat konnte ich die Steuerzeichen auch nicht erkennen, da müsste schon ein hexeditor her. Ich behaupte auch nicht dass es Steuerzeichen sind, sah nur bei mir damals genauso aus. Bitte nicht lachen, ich habe es einfach ins windows notepad kopiert und wieder zurück, dann sind etwaige Steuerzeichen weg.
Sent from my iPad using Tapatalk
Zitat von: schka17 am 21 Oktober 2016, 15:27:21
Ich behaupte auch nicht dass es Steuerzeichen sind
Ist aber gut Möglich, ich kenne diesen Effekt auch.
So ich habe jetzt den Scripts einmal neu erstellt. Er hatte wohl ein Problem in der Zeile mit dem command system. Denn sobald ich diese Zeile (ohne Steuerzeichen) hineinkopiert habe, trat der Fehler auf. Also die Zeile händisch abgetippt und jetzt gehts.
Vielen Dank an alle :D