[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: 30
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: 13787
Registriert: 19.01.2011, 19:15
System: CCU
Wohnort: Landau
Hat sich bedankt: 181 Mal
Danksagung erhalten: 732 Mal

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/download/ ... h_eQ-3.pdf
Script und Linksammlung: viewtopic.php?f=26&t=27907
Troll des Forums ...

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

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

Blacklist................... almost 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: 173
Registriert: 18.09.2015, 10:11
Wohnort: Drolshagen
Hat sich bedankt: 4 Mal
Danksagung erhalten: 5 Mal
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 ( 84xHM, 14xHMIP, 3xLanGW, 34xHue)
Firmware: 3.51.6.20200420
Addons: XML-API, CUx-Daemon, E-Mail
Voice Assist: Amazon Echo/dot/spot/show(1/3/1/3) via ioBroker

pusemuckel
Beiträge: 30
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: 30
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: 173
Registriert: 18.09.2015, 10:11
Wohnort: Drolshagen
Hat sich bedankt: 4 Mal
Danksagung erhalten: 5 Mal
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 ( 84xHM, 14xHMIP, 3xLanGW, 34xHue)
Firmware: 3.51.6.20200420
Addons: XML-API, CUx-Daemon, E-Mail
Voice Assist: Amazon Echo/dot/spot/show(1/3/1/3) via ioBroker

Benutzeravatar
jmaus
Beiträge: 9819
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 459 Mal
Danksagung erhalten: 1856 Mal
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.75.6.20240316 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

mikepiko
Beiträge: 173
Registriert: 18.09.2015, 10:11
Wohnort: Drolshagen
Hat sich bedankt: 4 Mal
Danksagung erhalten: 5 Mal
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 ( 84xHM, 14xHMIP, 3xLanGW, 34xHue)
Firmware: 3.51.6.20200420
Addons: XML-API, CUx-Daemon, E-Mail
Voice Assist: Amazon Echo/dot/spot/show(1/3/1/3) via ioBroker

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

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

Blacklist................... almost 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“