Timerausfall - benötige Hilfe

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Benutzeravatar
TomT
Beiträge: 565
Registriert: 19.11.2014, 15:13
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 4 Mal
Danksagung erhalten: 4 Mal

Re: Timerausfall - benötige Hilfe

Beitrag von TomT » 05.12.2016, 14:21

Image5.png
über 50 Timerausfälle, trotz Neustartsieht mein Systemprotokoll so aus :
Image4.png
Image4.png (22.41 KiB) 1397 mal betrachtet



Na das ist ja mal vielversprechend :shock:

Grüße
Tom
Zuletzt geändert von TomT am 05.12.2016, 14:58, insgesamt 1-mal geändert.

Bulli
Beiträge: 494
Registriert: 29.04.2014, 18:38
Hat sich bedankt: 2 Mal
Danksagung erhalten: 9 Mal

Re: Timerausfall - benötige Hilfe

Beitrag von Bulli » 05.12.2016, 14:36

Hallo Tom
reboot bringt nichts das liegt an bestimmten Einträgen in der Datei.
proto_fehler.jpg
Das Systemprotokoll wird bis kurz vor solchen Zeilen eingelesen/angezeigt dann hört es auf. Wenn solche Zeilen an Anfang sind bekommst du überhaupt kein Systemprotokoll angezeigt.
Das ist für mich aber ein unwichtiges Schönheitsproblem hat ja nichts direkt mit den Timer zu tun. Hier müßte BadenPower nur das Kontrollscript verschönern. Das wichtige macht ja das Script den Timer wieder starten wenn er steht.

Meine Tests mit einen 2 Timer da ich ja keine Geräte mehr an der TestCCU habe zum triggern sind aber auch blöd. Der 2 Timer bleibt teilweise ja auch stehen obwohl er auf eine 1 Minute gestellt ist.
Dadurch ergeben sich hänger von größer 1 Minute auch wieder blöd und kein workaround.

Gruß
Bulli

Benutzeravatar
TomT
Beiträge: 565
Registriert: 19.11.2014, 15:13
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 4 Mal
Danksagung erhalten: 4 Mal

Re: Timerausfall - benötige Hilfe

Beitrag von TomT » 05.12.2016, 15:09

Danke Bulli,

auch wieder was gelernt :D
>Ich logge jetzt mal nur noch die Ausfälle und Werte , keine Zeichenketten mehr....

Bulli
Beiträge: 494
Registriert: 29.04.2014, 18:38
Hat sich bedankt: 2 Mal
Danksagung erhalten: 9 Mal

Re: Timerausfall - benötige Hilfe

Beitrag von Bulli » 05.12.2016, 18:44

Hallo
Thema Workaround oder Alternative
Ich bin ja schon immer der Meinung ein "cronjob" funkioniert zu 100%. Das wollte ich zur Sicherheit auch auf der Test-CCU verifizieren.
Ergebniss 100%
Gestern ein Shellscript erstellt und um 16:00 einen cronjob aktiviert.

Code: Alles auswählen

################ cat /usr/local/x
#!/bin/tclsh
load tclrega.so
rega_script  {
    string lSysvarCounterName = "CCU-TimerControl-Counter";
        string lSysvarInfoName = "CCU-TimerControl-Info";

            !---------------Ende Einstellungen

                object lSysvars = dom.GetObject(ID_SYSTEM_VARIABLES);
                    object lSrc = dom.GetObject("$src$");
                        object lThis = dom.GetObject("$this$");
                            object lSysvarCounter = lSysvars.Get(lSysvarCounterName);
                                object lSysvarInfo = lSysvars.Get(lSysvarInfoName);
                                    integer lCounter = 0;
                                        string lInfo = "TimerControl: " #  currenttime.ToString();

                                            if(lThis)
                                                {
                                                      lInfo = lInfo # " " # lThis.Name();
                                                          }

                                                              if(lSysvarCounter)
                                                                  {
                                                                        lCounter = lSysvarCounter.Value();
                                                                              if(lCounter > 1000000000)
                                                                                    {
                                                                                            lCounter = 0;
                                                                                                  }
                                                                                                        lSysvarCounter.State(lCounter + 1);
                                                                                                            }

                                                                                                                if(lSysvarInfo)
                                                                                                                    {
                                                                                                                          if(lSrc)
                                                                                                                                {
                                                                                                                                        if(lSrc.Type() == OT_CALENDARDP)
                                                                                                                                                {
                                                                                                                                                          lInfo = lInfo # " ID: " # lSrc.ID();
                                                                                                                                                                    lInfo = lInfo # " TS: " # (lSrc.Timestamp()).ToString();
                                                                                                                                                                              lInfo = lInfo # " LTS: " # (lSrc.LastTimestamp()).ToString();
                                                                                                                                                                                        lInfo = lInfo # " N: " # (lSrc.Next()).ToString();
                                                                                                                                                                                                }
                                                                                                                                                                                                        else
                                                                                                                                                                                                                {
                                                                                                                                                                                                                          lInfo = lInfo # " ausgelöst durch " # lSrc.ID();
                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                              else
                                                                                                                                                                                                                                                    {
                                                                                                                                                                                                                                                            lInfo = lInfo # " manuell gestartet";
                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                        lSysvarInfo.State(lInfo);
                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                      
                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                            }
Ist auch nicht wirklich schwer die ersten 3 Zeilen schreiben dann das Testsrcipt nehmen und noch eine } am Ende fertig.

cronjob
* * * * * /usr/local/x;sleep 1;/usr/local/x;sleep 1;/usr/local/x;sleep 1;/usr/local/x;sleep 1;/usr/local/x;sleep 1;/usr/local/x;sleep 1
script_cron_test.jpg
Zählerstand 18:00 9360
9360 / 6 / 60 = 26
passt 26 Stunden ohne Fehler.

Teil des Systemsprotokoll
cron_systemproto.csv
(238.82 KiB) 36-mal heruntergeladen
Gruß
Bulli

BadenPower

Re: Timerausfall - benötige Hilfe

Beitrag von BadenPower » 05.12.2016, 19:36

Bulli hat geschrieben:Hier müßte BadenPower nur das Kontrollscript verschönern.
Habe ich direkt im Skript auf Seite 17 gerade gemacht.

.

Benutzeravatar
TomT
Beiträge: 565
Registriert: 19.11.2014, 15:13
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 4 Mal
Danksagung erhalten: 4 Mal

Re: Timerausfall - benötige Hilfe

Beitrag von TomT » 06.12.2016, 09:57

Nächster Versuch :
Image2.png
Nun steht sogar der Resettimer ....

Anbei das Syslog - Leider vergessen auf Alles Loggen zu stellen, daher nur Fehler

Grüße
Tom
Dateianhänge
homematic-ccu2-2016-12-06.log
(80.22 KiB) 39-mal heruntergeladen

Benutzeravatar
uwe111
Beiträge: 4821
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 246 Mal
Kontaktdaten:

Re: Timerausfall - benötige Hilfe

Beitrag von uwe111 » 06.12.2016, 14:49

Hallo Bulli,
Bulli hat geschrieben:Ich bin ja schon immer der Meinung ein "cronjob" funkioniert zu 100%. Das wollte ich zur Sicherheit auch auf der Test-CCU verifizieren.
Ergebniss 100%
Und falls das CUxD-AddOn installiert ist, kann beim CUxD System.Timer() die folgende CMD_EXEC-Zeile eingetragen werden.

Code: Alles auswählen

/usr/local/x
Das funktioniert dann auch völlig unabhängig von der CCU-Logikschicht und man spart sich die Änderung der crontab, weil diese Änderung nach dem nächsten FW-Update wahrscheinlich wieder weg ist. :)

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

Bulli
Beiträge: 494
Registriert: 29.04.2014, 18:38
Hat sich bedankt: 2 Mal
Danksagung erhalten: 9 Mal

Re: Timerausfall - benötige Hilfe

Beitrag von Bulli » 06.12.2016, 19:21

Hallo
@Tom das neue Script geht nicht warum auch immer. Sind zum alten eigentlich nicht viele Änderungen.

Code: Alles auswählen

root@Bulli-L:/tmp# diff xyz xyz1
3,4c3,4
< rega_script  {
<     boolean lReactivate = true;
---
> rega_script  {
> boolean lReactivate = true;
78,83c78,84
<                     lProtocolText = "Timerausfall -";
<                     lProtocolText = lProtocolText # " Programm: '" # lProgram.Name() # "'";
<                     lProtocolText = lProtocolText # " PrgID: '" # lProgram.ID() # "'";
<                     lProtocolText = lProtocolText # " TimerID: '" # lTimer.ID() # "'";
<                     lProtocolText = lProtocolText # " TS: '" # lTimer.Timestamp() # "'";
<                     lProtocolText = lProtocolText # " N: '" # lTimer.Next() # "'";
---
>                     lProtocolText = "Timerausfall ";
>                     lProtocolText = lProtocolText # " Programm: " # lProgram.Name();
>                     lProtocolText = lProtocolText # " PrgID: " # (lProgram.ID()).ToString();
>                     lProtocolText = lProtocolText # " TimerID: " # (lTimer.ID()).ToString();
>                     lProtocolText = lProtocolText # " TS: " # (lTimer.Timestamp()).ToString();
>                     lProtocolText = lProtocolText # " N: " # (lTimer.Next()).ToString();
>                     lProtocolText = lProtocolText # " Ende"
130c131
<       }
---
> }
Das ist ja nur für einen Workaround. Da gibt es viele Möglichkeiten das sollten wir erst mal auf Eis legen.

@Uwe danke für den Hinweis. Hier geht es aber um meine Test CCU, da ist Null Fremdsoftware drauf um endlich mal festzustellen was der CCU Timer macht oder eben nicht macht. Auf meiner Prod CCU ist natürlich CuxD drauf, das spart mir Geld und ist eine einfache Möglichkeit meine nicht HM Sensoren anzuschließen.
Cronjobs bleiben erhalten. Das ist zum Glück kein Problem die werden im schreibbaren Bereich abgelegt.

Code: Alles auswählen

# pwd
/var/spool/cron
# ll
total 0
    227      0 drwxrwxr-x    2 root     root            60 Dec  6 07:37 .
    220      0 drwxrwxr-x    3 root     root            60 Dec  2 09:26 ..
    228      0 lrwxrwxrwx    1 root     root            19 Dec  2 09:26 crontabs -> /usr/local/crontabs
# cd /usr/local/crontabs
# ll
total 4
     65      0 drwxrwxr-x    2 root     root           224 Dec  6 07:37 .
      1      0 drwxr-xr-x    4 default  default        488 Dec  5 18:58 ..
    400      4 -rw-------    1 root     root           264 Dec  6 07:37 root
# cat root
12 4 * * * /bin/setHWClock.sh
14 4 * * * /bin/SetInterfaceClock 127.0.0.1:2001
#* * * * * /usr/local/x;sleep 1;/usr/local/x;sleep 1;/usr/local/x;sleep 1;/usr/local/x;sleep 1;/usr/local/x;sleep 1;/usr/local/x;sleep 1
#* * * * * /usr/local/xx;sleep 30;/usr/local/xx

Zurück zu cronjobs und CCU Timer, wann sollte man CCU Timer nicht einsetzen auch wenn Sie zuverlässig funktionieren würden?
Was viele vielleicht nicht bedenken aber im schlechtesten Fall zum total Ausfall/Blockieren vieler Timer führen kann. Sind Aktion wie Wetter Tanken Netatmo usw. von Internet Seiten abzurufen und in der CCU zu verarbeiten.
1 Beispiel z.B Spritpreise abfragen sagen wir alle 10 Minuten dauert normal 3-10 Sekunden. Jetzt ist die Seite Ausgelastet/Nicht erreichbar, läuft halt jetzt bis zu Timeout sag wir 5 Minuten. Jetzt haben wir noch einen Timer der alle Stunde und 1 Minute läuft und der Frau sagt das Sie die Beste ist. Im schlecht Fall und das kommt immer wieder mal vor läuft der 1 Timer noch und der 2 wird nicht ausgeführt und schon ist der WAF Faktor im Keller. Wir kommen noch Hause und hören das Homematic doch scheisse ist und haben nur ??? im Kopf :-)
2 Beispiel der Internetanschluss ist gestört. Kommt auch vor siehe letzte Woche Telekom. Bei Kabel Deutschland jetzt Vodafon kann es auch mehre Tage Ausfallen alles schon erlebt. In diesen Fall laufen dann wahrscheinlich X Timer nicht mehr. In diesen Fall sind wir natürlich auf Dienstreise oder im Urlaub. Jetzt können wir auch über VPN nicht mehr helfen .................

Warum schreibe in dann nicht schon öfters das man doch cronjobs verwendet sollte?
Viele User (> 60-80%) im Forum haben Windows und kennen sich mit Unix/Linux (noch) nicht aus. Also er Kontraproduktiv.
Mit CuxD Timern hat man für Windowsuser eine machbare Alternative.

Gruß
Bulli

BadenPower

Re: Timerausfall - benötige Hilfe

Beitrag von BadenPower » 06.12.2016, 19:42

Bulli hat geschrieben:Mit CuxD Timern hat man für Windowsuser eine machbare Alternative.
Wenn ein Skript in der Abarbeitung durch eine lahme Internetverbindung hängt und 5 Minuten braucht, dann hilft Dir auch ein CUxD-Timer nicht, denn das Event wird auch nicht zu dem Zeitpunkt der Auslösung verarbeitet, sondern auch erst wenn es dann endlich mal an die Reihe kommt.

Das Beste ist einfach auf den ganzen Schnick-Schnak zu verzichten.

.

Benutzeravatar
uwe111
Beiträge: 4821
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 246 Mal
Kontaktdaten:

Re: Timerausfall - benötige Hilfe

Beitrag von uwe111 » 06.12.2016, 19:48

BadenPower hat geschrieben:Wenn ein Skript in der Abarbeitung durch eine lahme Internetverbindung hängt und 5 Minuten braucht, dann hilft Dir auch ein CUxD-Timer nicht, denn das Event wird auch nicht zu dem Zeitpunkt der Auslösung verarbeitet, sondern auch erst wenn es dann endlich mal an die Reihe kommt.
In diesem Fall schon, denn das Event wird überhaupt nicht benötigt.

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“