System.Wait ? Telegram - Bilder verschicken

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

Moderatoren: jmaus, Co-Administratoren

Antworten
fischmir
Beiträge: 972
Registriert: 03.02.2014, 18:04
Wohnort: Münsterland
Hat sich bedankt: 27 Mal
Danksagung erhalten: 8 Mal

System.Wait ? Telegram - Bilder verschicken

Beitrag von fischmir » 18.04.2018, 15:01

Hallo zusammen,

ich nutze Telegram zu verschicken von Bildern. Mein Porgramm "Push" hat zwei Scripte. Das 1. Script "holt" die Bilder von der Cam, das 2. Script verschickt das Bild. Das 2. Script läuft mit einer Verzögerung von 3 Sekunden, damit das Bild auch erstmal vollständig auf die CCU2 kopiert werden kann.

Ich denke, dies verursacht bei mir Probleme, wenn das Programm Push in kürzeren Intervallen als 3. Sekunden aufgerufen wird. Kann es sein, dass das Program "sich selber überholt"?

Am schönsten wäre ein System.Wait, dann müsste ich nicht zwei Scripte in einem Programm haben.

Hat da jemand eine Idee?

Danke und Gruß,
Christian

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

Re: System.Wait ? Telegram - Bilder verschicken

Beitrag von jmaus » 18.04.2018, 16:09

Bedenke bitte das die Logikengine in einer CCU2 single-threaded ist. Das bedeutet, das wenn du andere Dinge machst (z.B. in einem system.Exec() wget aufzurufen um viel daten runterzuladen bzw. zu verarbeiten) dann während dieser Ausführungszeit keinerlei andere Dinge verarbeitet werden können – auch nicht die Abarbeitung von einkommenden Schaltevents, anderer Programme, etc. Insofern ist ein System.Wait() sicherlich kontraproduktiv wenn man da sagt das er mehrere Sekunden einfach so rumwarten sollte. Du musst deine Logik eben etwas verändern bzw. das ganze nicht über ReGa machen lassen sondern dir z.B. einen Shell-Skript basteln den ReGa dann nur als Hintergrundprozess aufruft statt darauf zu warten das das wget fertig wird...
RaspberryMatic 3.75.6.20240316 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Re: System.Wait ? Telegram - Bilder verschicken

Beitrag von Black » 18.04.2018, 19:50

unter CUXd kkanns du mit exec ein shell commando im Hintergrund ausführen und bei abgearbeiteter Ausführung ein weiteres Programm triggern. wass dann mit der Ausgabe weiterarbeitet. die Rega wird damit nicht blockiert
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Benutzeravatar
blackhole
Beiträge: 3718
Registriert: 21.07.2015, 14:03
System: CCU
Hat sich bedankt: 184 Mal
Danksagung erhalten: 586 Mal

Re: System.Wait ? Telegram - Bilder verschicken

Beitrag von blackhole » 18.04.2018, 19:55

> Hier < ist auch eine von vielen anderen denkbaren Varianten beschrieben.

fischmir
Beiträge: 972
Registriert: 03.02.2014, 18:04
Wohnort: Münsterland
Hat sich bedankt: 27 Mal
Danksagung erhalten: 8 Mal

Re: System.Wait ? Telegram - Bilder verschicken

Beitrag von fischmir » 20.04.2018, 15:52

jmaus hat geschrieben:Bedenke bitte das die Logikengine in einer CCU2 single-threaded ist. Das bedeutet, das wenn du andere Dinge machst (z.B. in einem system.Exec() wget aufzurufen um viel daten runterzuladen bzw. zu verarbeiten) dann während dieser Ausführungszeit keinerlei andere Dinge verarbeitet werden können – auch nicht die Abarbeitung von einkommenden Schaltevents, anderer Programme, etc. Insofern ist ein System.Wait() sicherlich kontraproduktiv wenn man da sagt das er mehrere Sekunden einfach so rumwarten sollte. Du musst deine Logik eben etwas verändern bzw. das ganze nicht über ReGa machen lassen sondern dir z.B. einen Shell-Skript basteln den ReGa dann nur als Hintergrundprozess aufruft statt darauf zu warten das das wget fertig wird...
Aber das ist doch genau das was ich will!! Allerdings hat das nie richtig hingehauen. Demnach ist das was alchy hier vorschlägt, eigentlich unnötig, oder?

viewtopic.php?f=26&t=30507&start=10#p341846

Warum brauche ich dann zwischen den beiden Scripten eine Verzögerung von 2 Sek? (So habe ich es nämlich auch gemacht).

Danke und Gruß,
Christian

Xel66
Beiträge: 14085
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 580 Mal
Danksagung erhalten: 1492 Mal

Re: System.Wait ? Telegram - Bilder verschicken

Beitrag von Xel66 » 20.04.2018, 16:48

fischmir hat geschrieben:Aber das ist doch genau das was ich will!!
Nein, das willst Du eigentlich nicht! Du hast anscheinend nicht verstanden, dass Deine ganze CCU während der Wartezeit steht und keine weiteren Scripte und Programme abgearbeitet werden. Das komplette System liegt quasi solange auf dem Bauch. Sinnvoll ist das nicht.

Es gibt bessere Wege, das Gewünschte zu erreichen. Innerhalb der zwei Sekunden Verzögerung zwischen zwei Scripten würde Deine CCU normal weiterarbeiten, wenn Du der obigen Empfehlung folgst. Und auch wenn die CCU kein Hochleistungsrechner ist, kann sie in zwei Sekunden viel tun.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

fischmir
Beiträge: 972
Registriert: 03.02.2014, 18:04
Wohnort: Münsterland
Hat sich bedankt: 27 Mal
Danksagung erhalten: 8 Mal

Re: System.Wait ? Telegram - Bilder verschicken

Beitrag von fischmir » 20.04.2018, 20:52

Doch, das will ich. Auf die 2 Sekunden kann ich verzichten.

Die grundsätzliche Frage aber ist doch eine andere: Hat Jens wirklich Recht mit dem was er sagt? Meine Erfahrungen (und die anderer) User ist, zwischen beiden Skripten eine Verzögerung einzubauen, weil es sonst NICHT funktioniert.

Das widerspricht der Aussage von Jens. Oder habe ich etwas falsch verstanden?

Xel66
Beiträge: 14085
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 580 Mal
Danksagung erhalten: 1492 Mal

Re: System.Wait ? Telegram - Bilder verschicken

Beitrag von Xel66 » 20.04.2018, 21:21

fischmir hat geschrieben:...zwischen beiden Skripten eine Verzögerung einzubauen, weil es sonst NICHT funktioniert.
Das ist richtig so. Die Abarbeitung der/s Script(s) geht so schnell, dass das Bild für die weitere Verarbeitung noch nicht zwischengespeichert ist. Der Erfolg des "Abholens des Bildes" wird nämlich während des Scriptlaufes nicht überprüft und somit das Script stur abegearbeitet. Darum hat Jens Dir auch geraten "das ganze nicht über ReGa machen lassen sondern dir z.B. einen Shell-Skript basteln den ReGa dann nur als Hintergrundprozess aufruft statt darauf zu warten das das wget fertig wird...". Das sind zwei Paar Schuhe, denn ein externes Shell-Script kann unabhängig von der ReGa laufen und blockiert somit keine weitere Abarbeitung (Außer natürlich den "Performance-Verlust" während der Abarbeitung durch die gemeinsame Nutzung der Hardwareressourcen. Diese "Zusatzbelastung" der CCU wirst Du aber eher nicht feststellen).

Und auf die zwei Sekunden kannst Du eher nicht verzichten, da dann nämlich binnen kürzester Frist von Dir Anfrage zu Kommunikationsstörungen u.ä. kommen, weil irgendwelche Sensoren/Aktoren ausgerechnet zum Zeitpunkt der Blockierung der gesammten CCU durch Dein Kostrukt ihren Status an die CCU melden wollten, dieses aber nicht konnten, weil sie mit Warten "beschäftigt" war. Bei Funksignalen im Millisekundenbereich sind zwei Sekunden schon erheblich. Das dürfte auch der Grund sein, warum die Scriptsprache der CCU genau solch ein "Wait" nicht enthält. Außerdem ist es für den eigentlichen Zweck der CCU auch verzichtbar, weil sie dafür ja Bordmittel enthält und das Scripting inzwischen für viele andere Dinge "misbraucht" wird, was so sicherlich ursprünglich nicht vorgesehen war. Schon gar nicht für externe Kommunikation mit anderen Systemen.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Familienvater
Beiträge: 7151
Registriert: 31.12.2006, 15:18
System: Alternative CCU (auf Basis OCCU)
Wohnort: Rhein-Main
Danksagung erhalten: 34 Mal

Re: System.Wait ? Telegram - Bilder verschicken

Beitrag von Familienvater » 20.04.2018, 22:43

Hi,

die Kommunikationsstörungen kommen dann eher in Form von nicht sich nicht mehr aktualisierenden Zuständen etc als Folge der längeren Blockade der Rega, weil die evtl. nicht mehr in der Lage war, die eingehenden Events schnell genug den Schnittstellenprozessen gegenüber zu Quittieren, und die dann einfach denken, die Rega ist tot, da brauchen wir keine weiteren Events mehr hinzuschicken.
Die Funk-Kommunikation selbst läuft in separaten Prozessen, die werden von einer Blockade der Rega nicht wirklich in Mitleidenschaft gezogen, reagieren aber sehr schnell pampig, wenn mehr als 10 gemeldete (Multi)Calls oder so nicht quittiert wurden. Angeblich läuft aber auch der Empfang und die Quittierung der Events in der Rega in einem separaten Thread, und die unbearbeiteten Events sammeln sich in einer Eventqueue, aber das können wir höchstens vermuten/versuchen durch eigene Tests zu widerlegen (oder zu bestätigen), wenn man aber einfach die Rega nicht missbraucht, funktioniert das auch alles ziemlich gut, und das "Abholen" und "versenden" irgendwelcher Dateien ist ein Paradebeispiel für einen im Hintergrund ausgelagerten Tasks (leider geht das halt nicht mehr mit HM-Script, sondern man muss dann in die Shell-Programmierung einsteigen, aber wer schön sein will, muss bekanntlich leiden).

Der Familienvater

Antworten

Zurück zu „RaspberryMatic“