Hallo Leute,
ich habe mir ein at wie folgt erstellt:
define Schichtfarbe at *04:30:00 {Schichtfarbe()}
da aber der Code nicht ausgeführt wird, habe ich anscheinend etwas Falsch gemacht, nur was? Ich komme leider nicht drauf.
Weil, wenn ich {Schichtfarbe()} direkt in die Komandozeile eingebe, funktioniert der Aufruf des Codes.
Gruß
Torsten
Hallo Torsten,
steht denn zur Ausführungszeit irgendwas im Log?
Wie sieht denn Schichtfarbe() aus?
Gruß Otto
nur mal so ins Blaue vermutet, mag er den doppelten Namen evtl nicht?
War auch meine Vermutung (ich würde irgendwie so etwas nie andenken :-X ) aber ist nicht so. Ich habe genau dieses Konstrukt probiert und es funktioniert ohne Probleme.
Kann eigentlich nur an der Sub liegen.
Zitat von: Otto123 am 02 Mai 2018, 16:35:45
Hallo Torsten,
steht denn zur Ausführungszeit irgendwas im Log?
Wie sieht denn Schichtfarbe() aus?
Gruß Otto
Im Log steht nichts drin.
Habe jetzt mal ein neues at angelegt mit einem anderen Namen, mal schauen ob es daran liegt.
Hilfe zur Selbsthilfe:
Das Problem: geht nicht - zerfällt meist in zwei Teile:
1. Es wird nicht getriggert
2. der Ausführungsteil läuft nicht.
- Der Ausführungsteil geht in der Kommandozeile aber nicht in der eigentlichen Aufruf
- Der Ausführungsteil funktioniert auf Grund speziellen Inhaltes nicht im eigentlichen Aufruf (oder auch nicht in der Kommandozeile)
Also bau Dir eine Sub zum testen mit diesem Inhalt oder füge so eine Zeile zum existierenden Code hinzu.
{Log 1, "Ich bin die Funktion"}
Und setze den Zeitpunkt für das at in zwei Minuten - sonst wird der Testzeitraum so lange ;) Wenn das at triggert musst Du einen Eintrag im Log haben.
Gruß Otto
Führe die sub doch einfach mal per hand aus.
{Schichtfarbe()}
Das in der FHEMWEB Kommandozeile oben eingeben und schauen. Und zeig uns doch mal deine Sub
Zitat von: CoolTux am 02 Mai 2018, 17:38:00
Führe die sub doch einfach mal per hand aus.
{Schichtfarbe()}
Das in der FHEMWEB Kommandozeile oben eingeben und schauen. Und zeig uns doch mal deine Sub
In Post1 habe ich ja schon geschrieben, wenn ich
{Schichtfarbe()} in der Komandozeile eingebe, dann klappt es.
Hier die Sub:
sub
Schichtfarbe()
{
my $termin = "";
my $i = 1;
do
{
$termin = ReadingsVal("vKalender_Schicht","t_00" . $i . "_summary","<undef>");
if ($termin ne "<undef>")
{
if (ReadingsVal("vKalender_Schicht","t_00" . $i . "_summary","") eq "Frühschicht")
{fhem("setreading Schichtfarbe_dummy t_00" . $i . "_farbe 0")}
elsif (ReadingsVal("vKalender_Schicht","t_00" . $i . "_summary","") eq "Spätschicht")
{fhem("setreading Schichtfarbe_dummy t_00" . $i . "_farbe 1")}
elsif (ReadingsVal("vKalender_Schicht","t_00" . $i . "_summary","") eq "Nachtschicht")
{fhem("setreading Schichtfarbe_dummy t_00" . $i . "_farbe 2")}
elsif (ReadingsVal("vKalender_Schicht","t_00" . $i . "_summary","") eq "Urlaub")
{fhem("setreading Schichtfarbe_dummy t_00" . $i . "_farbe 3")}
elsif (ReadingsVal("vKalender_Schicht","t_00" . $i . "_summary","") eq "Krank")
{fhem("setreading Schichtfarbe_dummy t_00" . $i . "_farbe 3")}
else {fhem("setreading Schichtfarbe_dummy t_00" . $i . "_farbe 4")}
}
$i++;
}while($termin ne "<undef>");
Ich hatte in Antwort #1 ja auch schon um den Inhalt gebeten.
Eine do while Schleife :'( in einem System was möglichst in Echtzeit auf alles mögliche reagieren soll :-[
:o :o :o
Und der Sub fehlt das Ende? ::) nur Copy&paste Fehler?
Hab aber jetzt keine weiteren Vorschläge - vielleicht weiß Leon mehr.
Zitat von: Otto123 am 02 Mai 2018, 17:53:41
Eine do while Schleife :'( in einem System was möglichst in Echtzeit auf alles mögliche reagieren soll :-[
:o :o :o
Bin blutiger Anfänger, wenn du eine bessere Lösung hast, wäre ich dir sehr dankbar für eine bessere Lösung.
Hier mal die Log Einträge von meinen letzten 2 Tests:
1.Test
at wie folgt erstellt:
define test at +*00:02:00 {Log 1, "Ich bin die Funktion"}
Eintrag im Log:
2018.05.02 17:47:02 1: Ich bin die Funktion
2.Test
at wie folgt abgeändert:
define test at +*00:02:00 {Log 1, Schichtfarbe()}
Eintrag im Log:
2018.05.02 17:54:02 1:
Zitat von: Otto123 am 02 Mai 2018, 17:53:41
Und der Sub fehlt das Ende? ::) nur Copy&paste Fehler?
meinst du die geschweifte Klammer zum schließen? Copy&Paste Fehler. Oder fehlt noch was?
Deine Funktion gibt ja nichts direkt zurück, (oder sie kehrt nie mehr zurück).
Woran machst Du denn in der Kommandozeile fest, dass sie läuft?
Du hast meinen Test aber nicht verstanden:
ZitatAlso bau Dir eine Sub zum testen mit diesem Inhalt oder füge so eine Zeile zum existierenden Code hinzu.
Code: [Auswählen]
{Log 1, "Ich bin die Funktion"}
Weil jetzt hast Du den Code einfach ins at geschrieben und nicht in Deine sub :o
Edit: Es fehlt mindestens die Klammer am Ende ;)
Stimmt, falsch verstanden ::)
Habe in der Sub jetzt die Zeile eingepflegt
sub
Schichtfarbe()
{
{Log 1, "Ich bin die Funktion"}
my $termin = "";
my $i = 1;
do
...
Im Log steht nun folgendes drin:
2018.05.02 18:13:59 1: Ich bin die Funktion
Ich möchte ja, dass jeden Tag die Werte im Dummy Schichtfarbe_dummy aufgrund der Einträge im Calview vKalender_Schicht angepasst werden.
Wenn ich die Sub über die Kommandozeile aufrufe klappt es ja, aber wenn ich die Sub über die at aufrufe, scheint es nicht zu funktionieren.
Aber nach dem Test den ich ja gerade mit Hilfe von Otto gemacht habe, scheint die Sub ja zwar aufgerufen zu werden, aber anscheinend nicht abgearbeitet zu werden.
EDIT:
Woran machst Du denn in der Kommandozeile fest, dass sie läuft?
Ich kann in meinem Tablet UI das sehen, ich ändere damit die Schriftfarbe von jedem Eintrag passend zu jeder Schicht
Mach eine weitere Logausgabe innerhalb der Schleife
Zitat von: CoolTux am 02 Mai 2018, 18:48:06
Mach eine weitere Logausgabe innerhalb der Schleife
sub
Schichtfarbe()
{
my $termin = "";
my $i = 1;
do
{
{Log 1, "Ich bin die Funktion"}
$termin = ReadingsVal("vKalender_Schicht","t_00" . $i . "_summary","<undef>");
if ($termin ne "<undef>")
{
...
Das sieht dann so aus:
2018.05.02 18:53:59 1: Ich bin die Funktion
2018.05.02 18:53:59 1: Ich bin die Funktion
2018.05.02 18:53:59 1: Ich bin die Funktion
2018.05.02 18:53:59 1: Ich bin die Funktion
2018.05.02 18:53:59 1: Ich bin die Funktion
2018.05.02 18:53:59 1: Ich bin die Funktion
2018.05.02 18:53:59 1: Ich bin die Funktion
2018.05.02 18:53:59 1: Ich bin die Funktion
2018.05.02 18:53:59 1: Ich bin die Funktion
2018.05.02 18:53:59 1: Ich bin die Funktion
Das sollte das at die Funktion ja wohl ausführen. Verstehe dann das Problem nicht. noch nicht
Ich weis nicht, ob es relevant ist, aber ich habe bei meinem Aufruf noch ein Semikolon zwischen der schließenden und der geschweiften Klammer.
Dann habe ich wohl an der Falschen Stelle gesucht :(
Dann stellt sich mir die Frage, warum zwar die Sub mit dem at ausgeführt, aber anscheinend der dummy nicht gefüllt wird. Muß ich mir morgen nochmal genauer anschauen. Mir war nur aufgefallen, dass die Schriftfarben, die sich im Tablet UI täglich ändern können, sich nicht geändert haben, auch nach einem reload der Seite nicht. Erst nachdem ich {Schichtfarbe()} in die Komandozeile eingetragen habe und danach ein reload im Browser der Tablet UI Seite gemacht habe, wurden die Farben angepasst.
ungetest... aber versuch mal
sub
Schichtfarbe()
{
my $termin = "";
my $i = 1;
my $farbe = -1;
do
{
$termin = ReadingsVal("vKalender_Schicht","t_00" . $i . "_summary","<undef>");
{Log 1, "Termin: " . $termin };
if ($termin ne "<undef>")
{
if ($termin eq "Frühschicht")
{
$farbe = 0;
}
elsif ($termin eq "Spätschicht")
{
$farbe = 1;
}
elsif ($termin eq "Nachtschicht")
{
$farbe = 2;
}
elsif ($termin eq "Urlaub")
{
$farbe = 3;
}
elsif ($termin eq "Krank")
{
$farbe = 3;
}
else
{
$farbe = 4;
}
{Log 1, "Termin: " . $termin . " Farbe: " . $farbe };
fhem("setreading Schichtfarbe_dummy t_00" . $i . "_farbe " . $farbe);
}
$i++;
}while($termin ne "<undef>");
}
Hat der dummy vielleicht ein falsches event-on-change/Update Attribut?
@ nils_
dein Code funktioniert so wie meiner, ist aber übersichtlicher, danke!
@ Wuehler
ich habe event-on-change-reading & event-on-update-reading mal auf 1 gesetzt. Funktioniert aber trotzdem nicht.
Wenn der at triggert dann passiert im dummy nichts, wenn ich aber {Schichtfarbe()} direkt in die Komandozeile eingebe, dann ändern sich die Einträge im dummy :o
Zitat von: Torsten_MG am 04 Mai 2018, 17:35:01
ich habe event-on-change-reading & event-on-update-reading mal auf 1 gesetzt. Funktioniert aber trotzdem nicht.
*facepalm*
Commandref zu den event-on-* Attributen lesen!!!
Gesendet von meinem S60 mit Tapatalk
Bitte ein list vom at und vom Dummy in der jetzigen Form.
Zitat von: Torsten_MG am 04 Mai 2018, 17:35:01
ich habe event-on-change-reading & event-on-update-reading mal auf 1 gesetzt. Funktioniert aber trotzdem nicht.
Mann oh Mann - wo kommen immer diese Ideen her???
Spielte denn ein Reading 1 eine Rolle?
Zitatevent-on-change-reading
The attribute takes a comma-separated list of readings. You may use regular expressions in that list. If set, only changes of the listed readings create events. In other words, if a reading listed here is updated with the new value identical to the old value, no event is created. If an optional [:threshold] is given after a reading name events are only generated if the change is >= threshold.
Zitat von: Torsten_MG am 04 Mai 2018, 17:35:01
@ nils_
dein Code funktioniert so wie meiner, ist aber übersichtlicher, danke!
was sagt dein log dazu??
Zitat von: Torsten_MG am 04 Mai 2018, 17:35:01
@ Wuehler
ich habe event-on-change-reading & event-on-update-reading mal auf 1 gesetzt. Funktioniert aber trotzdem nicht.
da frage ich mich auch jedes mal - wie meine vorredner - wo das herkommt ?!
Bevor noch mehr Leute darüber herziehen, weil ein Anfänger was Falsch verstanden hat ( ist doch das Anfängerfragen-Forum, oder?) Ich habe mich mit dem event-on bisher nicht wirklich beschäftigt. Im Wiki habe ich die Infos dazu leider nicht gefunden, anscheinend auch dafür zu doof. Als ich die Attribute aktivieren wollte, erschien da automatisch eine 1 und ich bin davon ausgegangen, dass das richtig ist. verzeit einem Anfänger. Wäre dankbar wenn mir jemand einen Link zur Verfügung stellt, wo ich mich schlau machen kann
klar, das passiert jedem mal. Hier ist deshalb auch keiner böse deswegen. (auch wenn es manchmal so klingt) :-)
eine einfache Google Suche nach "fhem event-on-change-reading" --> https://www.google.de/search?q=fhem+event-on-change-reading
führt direkt zum Wiki: https://wiki.fhem.de/wiki/Event-on-change-reading
http://commandref.fhem.de/#readingFnAttributes
Zitat von: Torsten_MG am 07 Mai 2018, 15:19:26
erschien da automatisch eine 1
Du, wir ziehen da nicht drüber her - aber ich wundere mich wirklich wo das herkommt!? Du bist ja nicht der Einzige.
In der Doku steht es eindeutig, siehe link von CoolTux
Also bei mir kommt da automatisch nur ein leeres Feld!? Sicher das da eine 1 erscheint?
Gruß Otto
Ich glaube die 1 kommt wenn man das leere Feld abspeichern tut.
Stimmt - alles klar! Hab ich nie probiert! :-[
Sollte man das fixen? Ich meine das trägt doch nur zur Verwirrung bei! Es schadet zwar wenig aber eine leere List mit default 1 zu belegen :o
Es gibt viele Devices und Readings speziell bei Homematic da brauche ich kein Event. Genau da nehme ich das. Ist also schon bisschen hilfreich. ;D
Zu mindest für mich.
Zitat von: CoolTux am 04 Mai 2018, 19:25:24
Bitte ein list vom at und vom Dummy in der jetzigen Form.
Hatte am WE keine Zeit und diese Woche Spätschicht. Wenn ich daran denke, kommen die Infos morgen
Zitat von: CoolTux am 07 Mai 2018, 15:32:44
http://commandref.fhem.de/#readingFnAttributes
Danke, an der falschen Stelle gesucht
Hier die lits
Dummy:
Internals:
CHANGED
NAME Schichtfarbe_dummy
NR 161
STATE ???
TYPE dummy
READINGS:
2018-05-04 17:28:35 t_001_farbe 0
2018-05-04 17:28:35 t_002_farbe 1
2018-05-04 17:28:35 t_003_farbe 1
2018-05-04 17:28:35 t_004_farbe 1
2018-05-04 17:28:35 t_005_farbe 1
2018-05-04 17:28:35 t_006_farbe 2
2018-05-04 17:28:35 t_007_farbe 2
2018-05-04 17:28:35 t_008_farbe 2
2018-05-04 17:28:35 t_009_farbe 2
2018-05-04 17:28:35 t_010_farbe 2
2018-05-04 17:28:35 t_011_farbe 4
2018-05-04 17:28:35 t_012_farbe 4
2018-05-04 17:28:35 t_013_farbe 4
2018-05-04 17:28:35 t_014_farbe 4
2018-05-04 17:28:35 t_015_farbe 1
2018-05-04 17:28:35 t_016_farbe 1
2018-05-04 17:28:35 t_017_farbe 1
2018-05-04 17:28:35 t_018_farbe 1
2018-05-04 17:28:35 t_019_farbe 2
2018-05-04 17:28:35 t_020_farbe 2
Attributes:
room Kalender
at
Internals:
COMMAND set Abbelen_ohne_Autobahn
DEF +*02:00:00 set Abbelen_ohne_Autobahn
NAME Farbe
NR 160
NTM 07:27:01
PERIODIC yes
RELATIVE yes
REP -1
STATE Next: 07:27:01
TIMESPEC 02:00:00
TRIGGERTIME 1525757221.10226
TRIGGERTIME_FMT 2018-05-08 07:27:01
TYPE at
READINGS:
2018-05-08 05:27:01 state Next: 07:27:01
Attributes:
room Kalender
Zitatset Abbelen_ohne_Autobahn
Fehlt etwas.
Zitat von: CommandRefset <devspec> <type-specific>
ZitatCOMMAND set Abbelen_ohne_Autobahn
DEF +*02:00:00 set Abbelen_ohne_Autobahn
Habe da gerade selber einen Fehler gefunden, seltsam dass das plötzlich drin steht :o eigentlich sollte hier die Sub aufgerufen werden. Korrigier ich jetzt nochmal und laß mich überaschen
Habe den at korrigiert, den dummy gelöscht und neu erstellt. Anschließend ein Shutdown restart gemacht.
dummy:
Internals:
NAME Schichtfarbe_dummy
NR 161
STATE ???
TYPE dummy
Attributes:
room Kalender
at
Internals:
COMMAND set {Schichtfarbe()}
DEF +*02:00:00 set {Schichtfarbe()}
NAME Farbe
NR 160
NTM 09:37:12
PERIODIC yes
RELATIVE yes
REP -1
STATE Next: 09:37:12
TIMESPEC 02:00:00
TRIGGERTIME 1525765032.99466
TRIGGERTIME_FMT 2018-05-08 09:37:12
TYPE at
READINGS:
2018-05-08 07:37:12 state Next: 09:37:12
Attributes:
room Kalender
nachdem ich {Schichtfarbe()} in die Konsole eingetragen habe, sieht die list vom dummy so aus
Internals:
NAME Schichtfarbe_dummy
NR 161
STATE ???
TYPE dummy
READINGS:
2018-05-08 07:40:13 t_001_farbe 1
2018-05-08 07:40:13 t_002_farbe 1
2018-05-08 07:40:13 t_003_farbe 1
2018-05-08 07:40:13 t_004_farbe 2
2018-05-08 07:40:13 t_005_farbe 2
2018-05-08 07:40:13 t_006_farbe 2
2018-05-08 07:40:13 t_007_farbe 2
2018-05-08 07:40:13 t_008_farbe 2
2018-05-08 07:40:13 t_009_farbe 3
2018-05-08 07:40:13 t_010_farbe 3
2018-05-08 07:40:13 t_011_farbe 3
2018-05-08 07:40:13 t_012_farbe 3
2018-05-08 07:40:13 t_013_farbe 1
2018-05-08 07:40:13 t_014_farbe 1
2018-05-08 07:40:13 t_015_farbe 1
2018-05-08 07:40:13 t_016_farbe 1
2018-05-08 07:40:13 t_017_farbe 2
2018-05-08 07:40:13 t_018_farbe 2
2018-05-08 07:40:13 t_019_farbe 2
2018-05-08 07:40:13 t_020_farbe 2
Attributes:
room Kalender
@Torsten_MG:
sorry falls das so rüberkam, aber ich bzw. wir wollten nur wissen wo die 1 bei den event-on-* Dingern immer wieder herkommt. das war keinerlei vorwurf/kritik an dich!!
Das konnten wir ja nun lösen.
Zitat von: CoolTux am 07 Mai 2018, 18:01:29
Es gibt viele Devices und Readings speziell bei Homematic da brauche ich kein Event. Genau da nehme ich das. Ist also schon bisschen hilfreich. ;D
Zu mindest für mich.
über die Vorbelegung mit der 1 könnte man trotzdem noch diskutieren. das kann man schon so wie ein "aktiviert" verstehen. d.h. wenn es jemand deaktivieren will, wird dann irgendwann eine 0 eingetragen und am verhalten ändert sich erstmal nix. ::)
zurück zum eigentlichen thema :)
was funktioniert nun und was nicht??
was sagen die log-meldungen? hast du alle eingebaut??
DEF +*02:00:00 set {Schichtfarbe()}
das set kann da weg.
Zitat von: nils_ am 08 Mai 2018, 08:58:10
DEF +*02:00:00 set {Schichtfarbe()}
das set kann da weg.
Nicht kann, MUSS weg.
Gesendet von meinem S60 mit Tapatalk
Zitat von: nils_ am 08 Mai 2018, 08:58:10
...
zurück zum eigentlichen thema :)
was funktioniert nun und was nicht??
Mit aufruf des at wird laut der Tests von letzter Woche zwar der Sub gestartet, aber der dummy wird nicht gefüttert.
Wenn ich den Sub (ist jetzt der code von dir) über die Konsole aufrufe
{Schichtfarbe()}, dann wird der dummy gefüllt
DEF +*02:00:00 set {Schichtfarbe()}
das set kann da weg.
set ist weg.
was sagen die log-meldungen? hast du alle eingebaut??
keine Meldungen im Log, obwohl sub 1zu1 übernommen :oEDIT:
Schon wieder Anfängerfehler
Habe den at jetzt von +*02:00:00 auf +*00:02:00 (zum testen)geädert, nun klappt es (erstmal).
Nachdem es nun ein paarmal mit dem 2minuten-Takt geklappt hat, wieder auf 2std geändert und auf morgen früh gespannt
Es funktioniert. Danke an alle für die Hilfe!
und was war jetzt der eigentliche Fehler?
Zitat von: Frank_Huber am 09 Mai 2018, 14:17:28
und was war jetzt der eigentliche Fehler?
das
set mußte weg
OK, Dann gab es mehrere Ursachen. Im Ursprungs-post gab es das set noch nicht.
Zitat von: Frank_Huber am 09 Mai 2018, 16:23:22
OK, Dann gab es mehrere Ursachen. Im Ursprungs-post gab es das set noch nicht.
Hm, stimmt. Vielleicht hat es auch was mit der geänderten sub zu tun. Ich bin auf jeden Fall erstmal froh, dass das jetzt klappt