[Gelöst]Problem mit at und Aufruf von Code in 99_myUtils

Begonnen von Torsten_MG, 02 Mai 2018, 16:26:42

Vorheriges Thema - Nächstes Thema

Torsten_MG

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


Otto123

Hallo Torsten,

steht denn zur Ausführungszeit irgendwas im Log?

Wie sieht denn Schichtfarbe() aus?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Frank_Huber

nur mal so ins Blaue vermutet, mag er den doppelten Namen evtl nicht?

Otto123

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.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Torsten_MG

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.

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

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
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

Torsten_MG

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>");

Otto123

#8
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.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Torsten_MG

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:

Torsten_MG

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?

Otto123

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  ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Torsten_MG

#12
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

CoolTux

Mach eine weitere Logausgabe innerhalb der Schleife
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

Torsten_MG

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