Programme werden nicht mehr ausgeführt

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

Moderatoren: jmaus, Co-Administratoren

Benutzeravatar
jmaus
Beiträge: 9848
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 462 Mal
Danksagung erhalten: 1863 Mal
Kontaktdaten:

Re: Programme werden nicht mehr ausgeführt

Beitrag von jmaus » 08.12.2019, 11:42

tcfigge hat geschrieben:
08.12.2019, 11:05
Bringt alles nichts.. Direkt ab Start werden keine Programme mehr ausgeführt.
Instalierte ADDONS: Watchdog, XMLAPI und CUCX. Alle auf dem aktuellen Stand.
Ich denke zwar nicht das es unmittelbar damit zusammenhängt, aber falls di es nicht mitbekommen hast: das hm-watchdog CCU Addon hat in neueren RaspberryMatic Versionen nicht mehr verloren und sollte deinstalliert werden weil diese Versionen einen eigenen internen Watchdog Mechanismus haben der ggf mit dem Addon kollidieren kann.
RaspberryMatic 3.75.6.20240316 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

tcfigge
Beiträge: 60
Registriert: 18.10.2015, 14:18
Hat sich bedankt: 1 Mal

Re: Programme werden nicht mehr ausgeführt

Beitrag von tcfigge » 08.12.2019, 12:00

Hallo Jens!
Natürlich nicht mitbekommen... :roll:
Hab es deinstalliert!
Aber auch da hattest Du Recht, es ändert nichts am Problem...
Danke.
Viele Grüße
tcfigge
--------------------------------------------
223 Kanäle in 70 Geräten und 82 CUxD-Kanäle in 7 CUxD-Geräten:
3x HM-PB-6-WM55, 7x HM-ES-PMSw1-Pl, 3x HM-Sen-MDIR-O-2, 2x HM-Sec-TiS, 7x CUX28, 1x HM-RC-Key4-2, 4x HM-LC-Dim1T-FM, 6x HM-Sec-SC-2, 1x HM-Sec-Key, 3x HM-LC-Sw1-FM, 4x HM-Sec-SCo, 2x HMIP-WTH, 9x HM-LC-Bl1-FM, 2x HM-LC-Sw2-FM, 3x HM-LC-Sw1PBU-FM, 1x HM-LC-Sw4-WM, 1x HM-OU-CFM-Pl, 3x HM-Sec-RHS, 1x HM-Sen-RD-O, 1x HM-PB-4Dis-WM, 1x HM-PBI-4-FM, 1x HMIP-PSM, 11x HM-CC-RT-DN
--------------------------------------------

Wookbert
Beiträge: 224
Registriert: 10.05.2013, 18:40
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Programme werden nicht mehr ausgeführt

Beitrag von Wookbert » 28.02.2020, 15:21

RaspberryMatic 3.49.17.20200131
CUxD 2.3.4


So, ich bin auch betroffen, und weiß ehrlich gesagt nicht, was ich tun soll. Weder wird noch irgendeines meiner Programme systemseitig ausgeführt, noch lässt es sich händisch starten. Maximaler Kack.

Ich habe bislang
  • sämtliche (skriptlastigen) Programme, die ich in den letzten Tagen hinzugefügt habe, im WebUI deaktiviert, unbedienbar, unsichtbar gemacht
  • verdächtige Skript-Zeilen auskommentiert
  • x-fach neu gestartet
Es hilft alles nix: Sämtliche Programme bleiben tot.

Meine nächsten Schritte wären
  • die neu hinzugekommenen Programme von Neuestes bis Ältestes zu entfernen, dazwischen jedes Mal neuzustarten
  • ein .sbk von vor ein paar Tagen einzuspielen, bevor ich die verursachenden Programme hinzugekommen sind.
Ich würde damit aber evtl. warten, falls Jens Maus @jmaus (oder ein Mitarbeiter von eq-3) Interesse an Log-Files hätte und mir eine Anleitung an die Hand gibt, was genau ich tun muss, um die Log-Files zu generieren, wie und wo ich an diese rankomme (SSH? FTP?).

Hier mal meine verdächtigen, ineinander greifenden Programme. Vielleicht sieht Jens Maus (Stehst Du mittlerweile eigentlich auf der eq-3-Gehaltsliste? Die sollten Dir freiwillig 8 Mille/Monat rüberschieben!) ja die Ursache des Problems.


Was macht der Quatsch?
  • Fenster-Öffnungszustand überwachen
  • Abhängig von der Außentemperatur nach 15, 30, 60 Minuten oder nie eine Telegram-Nachricht raushauen und sich die MsgID der Telegram-Nachricht merken
  • Beim Schließen des Fensters die Telegram-Nachricht anhand der MsgID bei allen Chatgruppen-Teilnehmern wieder löschen
Das Ganze habe ich modular angelegt, damit ich beliebig viele Fenster hinzufügen kann, wobei ich die wichtigen Programme aber möglichst global vorhalte, damit ich Änderungen/Korrekturen nicht x Mal für jedes Fenster wiederholen muss.



1. Programm: Fenster EssZi Telegram Melder
Programm 1.png
(Nicht über die 7, 14, 21 Sekunden Verzögerung wundern. Das ist zum Debuggen. Normalerweise 15, 30, 60 Minuten.)

Der dreifache Skript-Teil in den Dann-Punken sieht jeweils so aus:

Code: Alles auswählen

!Fenster-offen-Timer und -Telegram-Notification-Script (temperaturabhängig) von Dr. Woo
!Teil 1/3

! SysVar für Prog "FensterTimerTelegramNotifier" ablegen
dom.GetObject('FensterName').State("Esszimmer-Fenster"); ! Name des Fensters (1. Zeile der Telegram-Benachrichtigung)
dom.GetObject('FensterStatusBezeichnung').State("Fenster EssZi Status"); ! Bezeichnung der entsprechenden Fenster Status

! Script-Teil 2/3 aufrufen - Telegram-Benachrichtigung abhängig von Außentemperatur und Öffnungsdauer erstellen & versenden
(dom.GetObject(ID_PROGRAMS).Get('FensterTelegramNotifier')).ProgramExecute();

! Script-Teil 3/3 - Telegram MsgID sichern, um Nachricht beim Schließen des Fensters zurückziehen zu können
(dom.GetObject(ID_PROGRAMS).Get('FensterTelegramMsgIDSaver')).ProgramExecute();

2. Programm: FensterTelegramNotifier
Programm 2.png
Dann-Skript-Teil:

Code: Alles auswählen

!v1.3
!Fenster-offen-Timer und -Telegram-Notification-Script (temperaturabhängig) von Dr. Woo
!Inspiriert durch https://homematic-guru.de/homematic-fenster-laenger-als-15min-geoeffnet-erkennen
!Teil 2/2 - Teil 1 befindet sich jeweils in den Programmen "Fenster [...] Telegram Melder"

! SysVariablen-Zwischenspeicher (gefüllt vom einzelnen fenster_status-Programm) auslesen
var fenster_name = dom.GetObject('FensterName').Value(); ! Name des Fensters (1. Zeile der Telegram-Benachrichtigung)
var fenster_statusbez = dom.GetObject('FensterStatusBezeichnung').Value(); ! Bezeichnung der entsprechenden Fenster Status Systemvariable hier

! Zustand der SysVar "Fenster Status" mittels darin enthaltener Werteliste ändern ->
! geschlossen (0)
! offen (1)
! seit 15 Minuten auf (2)
! seit 30 Minuten auf (3)
! seit 1 Stunde auf (4)
string fenster_status = dom.GetObject(fenster_statusbez).Value();
if ((fenster_status >= 1) && (fenster_status <= 3)) {
     fenster_status = fenster_status + 1;
     dom.GetObject(fenster_statusbez).State(fenster_status);
} 

! Telegram-Benachrichtigungs-Schema
! <= 12° .......... nach 15 min (2)
! >12 bis <=17° ... nach 30 min (3)
! >17 bis <=23° ... nach 60 min (4)
! >23° ............ nie (1)
string AktTemp = dom.GetObject('Wetter Aktuelle Temperatur').Value().ToInteger(); ! Da die Sysvar 'Wetter Aktuelle Temperatur' als ZEICHENKETTE gespeichert ist (Typ Zahl speichert mit etlichen Nachkommastellen), muss zum Rechnen zur GANZZAHL konvertiert werden -> .Value().ToInteger()
string doNotify = 1;
if ( AktTemp <= 12) { doNotify = 2; }
if ( (AktTemp > 12) && (AktTemp <= 17) ) { doNotify = 3; }
if ( (AktTemp > 17) && (AktTemp <= 23) ) { doNotify = 4; }

! --------------------
! Hier wird nun das zuvor gezeigte Benachrichtigungs-Schema (aus AktTemp) gegen den Fenster Status (seit 15/30/60 min offen) abgeglichen. 
if ( ( doNotify == fenster_status ) && ( doNotify != 1) )

  {

! fenster_status: Zahl-Wert in Text aus Werteliste umwandeln
var y = dom.GetObject(fenster_statusbez).ValueList();
var z = y.StrValueByIndex(";", fenster_status);

! Telegram-Meldung erstellen (wird automatisch vom Programm "Telegram Bot PushSkript" abgefeuert)
dom.GetObject ("Telegram Pusher").State ("*"#fenster_name#"*" # "\n" # z # ".\n" # dom.GetObject ("Wetterteil Telegram-Fenstermeldung").Value() # "\nBitte schließen!");

 ;} ! Ende der IF-Klammer
3. Programm: FensterTelegramMsgIDSaver
Programm 3.png

Code: Alles auswählen

!v1.0
!Teil 3/3 - Triggernder Teil 1 befindet sich jeweils in den Programmen "Fenster [...] Telegram Melder"

! Komplette Werteliste der zum Fenster gehörenden SysVar "Fenster ... Status" holen
var FensterStatus = dom.GetObject((dom.GetObject('FensterStatusBezeichnung').Value())).ValueList();
! Telegram LastMsgID in der Werteliste auf ID6 (=Position 7, da ID0=Pos 1) ablegen und zurück in SysVar "Fenster ... Status" speichern
dom.GetObject((dom.GetObject('FensterStatusBezeichnung').Value())).ValueList(FensterStatus.Replace(FensterStatus.StrValueByIndex(";", 6), dom.GetObject('Telegram LastMsgID').State()))
Das funktionierte soweit alles gut, kollabiert (= alle Programme tot) ist es meines Erachtens, nachdem ich im 1. Programm unter Sonst > Systemzustand: Fenster EssZi Status > sofort > geschlossen, ein Skript hinzugefügt habe, das das nachstehende 4. Programm zum Löschen der bereits versandten Telegram-Nachricht aufgeruft:

Code: Alles auswählen

(dom.GetObject(ID_PROGRAMS).Get('Telegram Bot RemoveSkript')).ProgramExecute(); 
(Im obigen Screenshot von Programm 1 nicht zu sehen, auf der Fehlersuche schon wieder entfernt).

4. Programm: Telegram Bot RemoveSkript
Programm 4.png

Code: Alles auswählen

!v1.0
!MsgID holen 
string MsgID = dom.GetObject("Telegram DeleteMsgID").Value();

string s_cmd = "wget --no-check-certificate -qO- \"https://api.telegram.org/botxxxxxxx:yyyyyyyyy/deleteMessage?chat_id=zzzzzzzzz&message_id=" # MsgID # "\"";

string stdout;
string stderr;
system.Exec(s_cmd, &stdout, &stderr); 


Zum Prozedere dazu gehört noch ein 5. Programm, daß eine SysVar überwacht und bei Änderung eine Telegram-Nachricht mit deren Inhalt raushaut:

5. Telegram Bot PushSkript

Code: Alles auswählen

!v1.2
! TELEGRAM-FRAMEWORK
! Credits: http://www.christian-luetgens.de/homematic/telegram/telegramframework/T-Framework.htm


object o = dom.GetObject ("Telegram Pusher");
string s = o.Value();

string stdout;
string stderr;

if (s != "") {
  string s_cmd = "wget -qO- \"https://api.telegram.org/botxxxxxx:yyyyyyyyyy/sendMessage?chat_id=zzzzzzzzz&parse_mode=Markdown&text=" # s.ToUTF8().UriEncode() # "\" | jq .result.message_id";
  
  system.Exec(s_cmd, &stdout, &stderr);
  
  ! MsgID in SysVar "Telegram LastMsgID" speichern. Trim() entfernt Zeilenumbruch hinter der MsgID.
dom.GetObject ("Telegram LastMsgID").State(stdout.Trim());

  
  o.State (""); ! SysVar "Telegram Pusher" aus optischen Gründen wieder leeren
}

srunschke
Beiträge: 213
Registriert: 10.01.2018, 12:44
Hat sich bedankt: 3 Mal
Danksagung erhalten: 13 Mal

Re: Programme werden nicht mehr ausgeführt

Beitrag von srunschke » 03.03.2020, 14:05

Als erste Troubleshootingmaßnahme würde ich mal schauen welche Tasks gerade auf dem Raspberry laufen.
Es würde mich nicht wundern, wenn hier ein verirrter wget-Prozess hängt oder ähnliches.

Nach welcher Änderung trat das Problem denn auf?
Hast du dieses Konstrukt schon früher betrieben?
Auch mit Telegram?

srunschke
Beiträge: 213
Registriert: 10.01.2018, 12:44
Hat sich bedankt: 3 Mal
Danksagung erhalten: 13 Mal

Re: Programme werden nicht mehr ausgeführt

Beitrag von srunschke » 03.03.2020, 14:12

Wobei wenn ich gerade darüber nachdenke...

Es könnte sein, dass du dich selber in eine Endlosschleife manövriert hast.

Du triggerst dein Telegram-Konstrukt auf die Veränderung der SysVar Telegram Pusher.
Danach verarbeitest du es und anschließend setzt du sie auf "".
Das triggert natürlich dann wieder das Programm, was auf die Veränderung triggert.
Rinse and repeat.

Ich bin mir nicht sicher, ob du es irgendwo in den Scripten abfängst, aber auf den ersten Blick habe ich es nicht gesehen. Damit rennst du dann natürlich im Kreis, sobald es einmal triggert - und damit auch sofort beim booten...

Was passiert wenn du im letzten Script die letzte Zeile mit .state(""); auskommentierst?

Hütte
Beiträge: 746
Registriert: 08.02.2017, 11:08
Hat sich bedankt: 32 Mal
Danksagung erhalten: 75 Mal

Re: Programme werden nicht mehr ausgeführt

Beitrag von Hütte » 03.03.2020, 17:43

Der TE hatte die Frage bereit in einen neuen eigenen Thread (viewtopic.php?f=65&t=57156) ausgelagert.

Wookbert
Beiträge: 224
Registriert: 10.05.2013, 18:40
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Programme werden nicht mehr ausgeführt

Beitrag von Wookbert » 03.03.2020, 18:06

Wie @Hütte schrieb (Danke!), habe ich mein Problem in der Tat, in dem von ihm verlinkten neuen Thread frisch erstellt, da ich mir nach ein paar Tagen des vergeblichen Wartens nicht sicher war, ob mein Anliegen hier auf Seite 17 noch Beachtung erfährt.
srunschke hat geschrieben:
03.03.2020, 14:12
Du triggerst dein Telegram-Konstrukt auf die Veränderung der SysVar Telegram Pusher.
Danach verarbeitest du es und anschließend setzt du sie auf "".
Das triggert natürlich dann wieder das Programm, was auf die Veränderung triggert.
Rinse and repeat.
Ohne das hier weiter diskutieren zu wollen (um das eigentliche Thema des Threads nicht zu verwässern): Das Leeren der SysVar mit "" ist mehr ein kosmetisches Ding, löst aber definitiv keine Endlos-Schleife aus. Ist erprobt und basiert auf Christian Lütgens’ Telegram-Framework-Homematic-Anleitung.

Antworten

Zurück zu „RaspberryMatic“