[GELÖST] - Programm läuft manuell aber nicht mit Timer

Einrichtung, Nutzung und Hilfe zu RaspberryMatic (OCCU auf Raspberry Pi)

Moderatoren: jmaus, Co-Administratoren

pusemuckel
Beiträge: 27
Registriert: 11.04.2015, 20:52

[GELÖST] - Programm läuft manuell aber nicht mit Timer

Beitrag von pusemuckel » 19.02.2019, 21:34

Hallo zusammen,

ich habe folgendes Programm unter RaspBerryMatic (Version:3.41.11.20190126) am laufen um die "uptime" auszulesen. Starte ich das Programm manuell funktioniert der Aufruf und ich bekommen die Uptime in die Variable geschrieben. Triggere ich das Programm über einen CUXD Timer läuft zwar das Programm aber es wird die Variable nicht geschrieben.

Code: Alles auswählen

! Uptime (Betriebszeit) der CCU2 oder Raspberry auslesen
string command = "cat /proc/uptime | awk '// { printf \"%d Tage %02d Std %02d Min\", $1/86400, $1/3600%24, $1/60%60 }'";
dom.GetObject ("CUxD.CUX2801001:5.CMD_SETS").State (command);
dom.GetObject ("CUxD.CUX2801001:5.CMD_QUERY_RET").State (1);
dom.GetObject ("Betriebszeit Raspberry").State (dom.GetObject ("CUxD.CUX2801001:5.CMD_RETS").State());
845CFB37-7916-4863-88A0-4EEC00497FA5.jpeg
Kann jemand sagen wo mein Fehler liegt ?

Sorry Bild des Programms noch hinzugefügt
Danke und Gruß
Jörg
Zuletzt geändert von pusemuckel am 23.02.2019, 18:44, insgesamt 2-mal geändert.
_____________________________________________
RaspBerryMatic auf RaspBerry PI3B+
Homematic 25 Geräten
IoBroker

Benutzeravatar
robbi77
Beiträge: 8196
Registriert: 19.01.2011, 19:15
Wohnort: Landau

Re: Programm läuft manuell aber nicht mit Timer

Beitrag von robbi77 » 19.02.2019, 22:13

Wo ist das Programm?
Bei Risiken und Nebenwirkungen fragen Sie den Elektriker Ihres geringsten Mißtrauens!
http://www.eq-3.de/service/downloads.html
Tips und Tricks für Anfänger: viewtopic.php?t=22801
Programmlogik: viewtopic.php?f=31&t=4251
Webui-Handbuch: https://www.eq-3.de/Downloads/eq3/downl ... h_eQ-3.pdf
Script und Linksammlung: viewtopic.php?f=26&t=27907

alchy
Beiträge: 8368
Registriert: 24.02.2011, 01:34

Re: Programm läuft manuell aber nicht mit Timer

Beitrag von alchy » 19.02.2019, 23:12

pusemuckel hat geschrieben:
19.02.2019, 21:34
Triggere ich das Programm über einen CUXD Timer läuft zwar das Programm aber es wird die Variable nicht geschrieben.
Wenn ein Script 1:1 unter Script testen vs. innerhalb eines Programmes vs. manuellen Start eines Programmes nicht dasselbe Ergebnis bringt,
dann liegt es nicht am Script, sondern entweder am Programm oder am Verständnis bezüglich der Logik des Programmes.

Also nehmen wir mal den Trigger TIMER_EVENT, welchen du unglücklicherweise verwendest.

viewtopic.php?f=37&t=6256&p=424568&hili ... nt#p424568
viewtopic.php?f=65&t=40271&p=399064&hil ... nt#p399064

und auch hier der Hinweis, immer schauen was die Programme wirklich so machen. Ein mögliches Tool dabei, >> Auslöser eines Programmes finden und loggen <<

Alchy

.................... Full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

mikepiko
Beiträge: 129
Registriert: 18.09.2015, 10:11
Wohnort: Drolshagen
Kontaktdaten:

Re: Programm läuft manuell aber nicht mit Timer

Beitrag von mikepiko » 20.02.2019, 10:18

Soganz erschließt sich mir der Nutzen aber auch noch nicht ...

Gefällt Dir die "SYS_Uptime" Variable nicht ?

Oder warum benötigst Du eine Zweite davon ?
Systemdaten: Raspberry Pi2 ( 87xHM, 4xHMIP, 1xLanGW, 36xLightify)
Firmware: 3.41.11.20190126
Addons: XML-API, CUx-Daemon, E-Mail
Voice Assist: Amazon Echo/dot/spot/show(1/2/1/1) via ioBroker

pusemuckel
Beiträge: 27
Registriert: 11.04.2015, 20:52

Re: Programm läuft manuell aber nicht mit Timer

Beitrag von pusemuckel » 20.02.2019, 17:54

alchy hat geschrieben:
19.02.2019, 23:12
pusemuckel hat geschrieben:
19.02.2019, 21:34
Triggere ich das Programm über einen CUXD Timer läuft zwar das Programm aber es wird die Variable nicht geschrieben.
Wenn ein Script 1:1 unter Script testen vs. innerhalb eines Programmes vs. manuellen Start eines Programmes nicht dasselbe Ergebnis bringt,
dann liegt es nicht am Script, sondern entweder am Programm oder am Verständnis bezüglich der Logik des Programmes.

Also nehmen wir mal den Trigger TIMER_EVENT, welchen du unglücklicherweise verwendest.

viewtopic.php?f=37&t=6256&p=424568&hili ... nt#p424568
viewtopic.php?f=65&t=40271&p=399064&hil ... nt#p399064

und auch hier der Hinweis, immer schauen was die Programme wirklich so machen. Ein mögliches Tool dabei, >> Auslöser eines Programmes finden und loggen <<

Alchy
Hallo Alchy,

Danke for Deine Antwort aber ich stehe vermutlich auf dem Schlauch oder verstehe die Logik nicht, daher mein Nachfragen.

Der Timer den ich über CUXD Trigger läuft 5 minuten und anschließend wir dieser wieder über ein Programm neu für 5 Minuten gestartet. Bisher hat dies und tut auch weiterhin bei anderen Programmen die ich alle 5 Minuten trigger....nur eben dieses Programm . Die Frage bleibt warum und wo ist mein Denkfehler. Der Trigger für den Timerevent ist nicht im Programm sondern wird ja separat getriggert....
_____________________________________________
RaspBerryMatic auf RaspBerry PI3B+
Homematic 25 Geräten
IoBroker

pusemuckel
Beiträge: 27
Registriert: 11.04.2015, 20:52

Re: Programm läuft manuell aber nicht mit Timer

Beitrag von pusemuckel » 20.02.2019, 18:17

mikepiko hat geschrieben:
20.02.2019, 10:18
Soganz erschließt sich mir der Nutzen aber auch noch nicht ...

Gefällt Dir die "SYS_Uptime" Variable nicht ?

Oder warum benötigst Du eine Zweite davon ?
Hallo mikepiko,
wie meinst Du das, ich habe keine Systemvariable SYS_Uptime, oder oute ich mich jetzt :roll: ?
_____________________________________________
RaspBerryMatic auf RaspBerry PI3B+
Homematic 25 Geräten
IoBroker

mikepiko
Beiträge: 129
Registriert: 18.09.2015, 10:11
Wohnort: Drolshagen
Kontaktdaten:

Re: Programm läuft manuell aber nicht mit Timer

Beitrag von mikepiko » 21.02.2019, 11:44

pusemuckel hat geschrieben:
20.02.2019, 18:17
mikepiko hat geschrieben:
20.02.2019, 10:18
Soganz erschließt sich mir der Nutzen aber auch noch nicht ...

Gefällt Dir die "SYS_Uptime" Variable nicht ?

Oder warum benötigst Du eine Zweite davon ?
Hallo mikepiko,
wie meinst Du das, ich habe keine Systemvariable SYS_Uptime, oder oute ich mich jetzt :roll: ?
Sorry, war mein Fehler. Zieh das Script schon ewig mit das ich dachte Jens hätte es mit in der RM automatisch integriert.
Weiß nicht mal mehr wo ich es her hatte :oops:

Ich löse alle 3 Minuten das Script aus:

Code: Alles auswählen

string temp;
system.Exec("cat /sys/class/thermal/thermal_zone0/temp | sed 's/.\{3\}$/.&/'", &temp);
if(temp != "") {
  dom.GetObject(ID_SYSTEM_VARIABLES).Get("CPU_Temp").State(temp);
}
system.Exec("cat /proc/loadavg | cut -d' ' -f-3 | tr -d '\n'", &temp);
if(temp != "") {
  dom.GetObject(ID_SYSTEM_VARIABLES).Get("CPU_Load").State(temp);
}
system.Exec("free -m | grep Mem: | awk '{ printf(\"%.1f\", $3/$2*100) }'", &temp);
if(temp != "") {
  dom.GetObject(ID_SYSTEM_VARIABLES).Get("RAM_Usage").State(temp);
}
system.Exec("awk '{s=int($1);d=int(s/86400);h=int(s % 86400/3600);m=int(s % 3600 / 60); printf \"%d days, %02d:%02d\", d, h, m}' /proc/uptime", &temp);
if(temp != "") {
  dom.GetObject(ID_SYSTEM_VARIABLES).Get("SYS_Uptime").State(temp);
}
system.Exec("/usr/bin/ntpq -pn | grep '*' | awk '{print $9}'", &temp);
if(temp != "") {
  dom.GetObject(ID_SYSTEM_VARIABLES).Get("SYS_NTPOffset").State(temp);
}
Und daher kam dann auch (unter anderem) die "SYS_Uptime" Variable ;-)

Gruss

Mike
Systemdaten: Raspberry Pi2 ( 87xHM, 4xHMIP, 1xLanGW, 36xLightify)
Firmware: 3.41.11.20190126
Addons: XML-API, CUx-Daemon, E-Mail
Voice Assist: Amazon Echo/dot/spot/show(1/2/1/1) via ioBroker

Benutzeravatar
jmaus
Beiträge: 4545
Registriert: 17.02.2015, 14:45
Wohnort: Dresden
Kontaktdaten:

Re: Programm läuft manuell aber nicht mit Timer

Beitrag von jmaus » 21.02.2019, 12:16

mikepiko hat geschrieben:
21.02.2019, 11:44
Ich löse alle 3 Minuten das Script aus:

Code: Alles auswählen

[...]
Und daher kam dann auch (unter anderem) die "SYS_Uptime" Variable ;-)
Das solltest du übrigens ab der neuesten RaspberryMatic (3.41.11.20190126) mit folgendem ersetzen:

Code: Alles auswählen

string temp;
system.Exec("cat /sys/class/thermal/thermal_zone0/temp | sed 's/.\{3\}$/.&/'", &temp);
if(temp != "") {
  dom.GetObject(ID_SYSTEM_VARIABLES).Get("CPU_Temp").State(temp);
}
system.Exec("cat /proc/loadavg | cut -d' ' -f-3 | tr -d '\n'", &temp);
if(temp != "") {
  dom.GetObject(ID_SYSTEM_VARIABLES).Get("CPU_Load").State(temp);
}
system.Exec("cat /proc/meminfo | egrep 'Mem(Total|Available)' | tr -d '\n' | awk '{ printf(\"%.1f\", 100-$4/$2*100) }'", &temp);
if(temp != "") {
  dom.GetObject(ID_SYSTEM_VARIABLES).Get("RAM_Usage").State(temp);
}
system.Exec("awk '{s=int($1);d=int(s/86400);h=int(s % 86400/3600);m=int(s % 3600 / 60); printf \"%d Tage, %dh %d min\", d, h, m}' /proc/uptime", &temp);
if(temp != "") {
  dom.GetObject(ID_SYSTEM_VARIABLES).Get("SYS_Uptime").State(temp);
}
system.Exec("/usr/bin/chronyc -n tracking | grep 'Last offset' | awk '{ print $4*1000 }'", &temp);
if(temp != "") {
  dom.GetObject(ID_SYSTEM_VARIABLES).Get("SYS_NTPOffset").State(temp);
}
Das sollte nun u.a. dafür sorgen das SYS_NTPOffset wieder korrekt aktualisiert wird weil ab dieser Version nun statt NTPd der chrony daemon für NTP verwendet wird.

EDIT: Ggf. könnte man in der Tat überlegen ob man diese Sysinfo Systemvariablen nicht direkt in RaspberryMatic mittels regelmäßigem cronjob integriert?!? Damit hätte jeder RaspberryMatic Nutzer dann die entsprechenden Werte seiner CCU immer gleich parat ohne selbst diesen Skript nutzen zu müssen....
RaspberryMatic 3.45.7.20190511 @ TinkerS mit ~160 HomeMatic Geräten + ioBroker – GitHubPayPalTwitter

mikepiko
Beiträge: 129
Registriert: 18.09.2015, 10:11
Wohnort: Drolshagen
Kontaktdaten:

Re: Programm läuft manuell aber nicht mit Timer

Beitrag von mikepiko » 21.02.2019, 13:15

Ich wäre dafür jens ;-)

Und danke für das Update ! :)
Systemdaten: Raspberry Pi2 ( 87xHM, 4xHMIP, 1xLanGW, 36xLightify)
Firmware: 3.41.11.20190126
Addons: XML-API, CUx-Daemon, E-Mail
Voice Assist: Amazon Echo/dot/spot/show(1/2/1/1) via ioBroker

alchy
Beiträge: 8368
Registriert: 24.02.2011, 01:34

Re: Programm läuft manuell aber nicht mit Timer

Beitrag von alchy » 21.02.2019, 13:32

pusemuckel hat geschrieben:
20.02.2019, 17:54
Danke for Deine Antwort aber ich stehe vermutlich auf dem Schlauch oder verstehe die Logik nicht, daher mein Nachfragen.
Nochmal:
pusemuckel hat geschrieben:
19.02.2019, 21:34
Starte ich das Programm manuell funktioniert der Aufruf und ich bekommen die Uptime in die Variable geschrieben. Triggere ich das Programm über einen CUXD Timer läuft zwar das Programm aber es wird die Variable nicht geschrieben.
Fakt ist doch, wenn du das Programm manuell startest, wird das DANN ausgeführt, also löst der Trigger TIMER EVENT *IMHO* dein Programm eben nicht aus. Auch wenn du es anders siehst.

Ob das Programm wirklich getriggert wird gilt es herauszubekommen. Was ist daran nicht zu verstehen?
Und da ist es nicht ganz so interessant, das ein anderes Programm mit selben Trigger funktioniert.
Dann lösch das Programm und lege es neu an.

Als zweiten Hinweis habe ich dir von deinem Trigger abgeraten.
Das Triggern auf TIMER_EVENT ist lt. CUxD Doku ca. Seite 90 mittlerweile zwar nur noch so beschrieben: in alten ReGaHssVersionen unzuverlässig!
Früher stand da unzuverlässig.
Da ich nicht weiß, was Uwe als alt bezeichnet, was du einsetzt usw. wollte ich darauf hinweisen, den TIMER_EVENT nicht zu benutzen.

Alchy

.................... Full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

Zurück zu „RaspberryMatic“