Sendeüberwachung bei FHT

Hallo,

obwohl ich bis jetzt noch keine Probleme hatte, möchte ich eine Überwachungsfunktion realisieren, um sicherzustellen, dass die Daten auch bei den FHTs angekommen sind.

Hat schon jemand sowas realisiert oder eine konzeptionelle Idee?

Nun, natürlich habe ich mir auch schon Gedanken gemacht, aber ich muss das Rad ja nicht neu erfinden… :rolleyes:

Gruß
Fabian

Keiner sowas gemacht…???

Also ich hab’ da jetzt schon mal nen Anfang.

Ich habe direkt einen Quality-Parameter eingeführt. Wenn jetzt ein State Request rausgeht, wird ein Flag gesetzt und die Quality auf 7 gesetzt. Außerdem wird die Request Time gespeichert. Jetzt wird immer wenn eine pos reinkommt die Quality runtergezählt, bis der vom FHT angenommene State zurück kommt. Bei Quality 0 erfolgt ein Eintrag ins Log.
Die Methode kenne ich von Systemen zur Luftraumüberwachung und ist dort bewährt.

Grund meiner Vorgehensweise:
Damit kann man potentielle „Problemfälle“ untersuchen und die Signalqualität der Funkübertragung besser beurteilen.
Bsp.: Ich habe einen FHT zwei Etagen höher, bei dem es manchmal Verzögerungen gibt. Bei ihm schwankt die Quality zwischen 2 und 5. Alle anderen liegen konstant bei 7 mit wenigen Ausreißern bei 6.

Warum 7 als max Q.? Die Pos Meldungen kommen alle 116 Sekunden (ich glaube darüber gab es sogar mal einen Thread). Damit erreicht man eine Timeout Zeit von rund 7 x 2 also 14 Minuten.

Geplant:
Um Totalausfälle aufzuspüren, werde ich noch einen Timer setzen, der die maximalen Anstände der pos-Meldungen überwacht. Dazu werden auch diese bereits mitgeloggt.

Ich brauche nur die Quality Var pro FHT und eine Stringvar die alle anderen Daten wie Zeiten, Flags usw. den Instanzen zuordnet (als mehrdim. Array).

Gruß
Fabian

PS: die Möglichkeit Arrays durch Serialisierung zu speichern öffnet viele Möglichkeiten, ohne dem geht es schon fast nicht mehr… :smiley:

Aber das gibt es ja bereits !? Das Prinzip IPS Request und IPS Target gibt dir schon die 99% Garantie, dass der Befehl am Regler ankam. 100% zu erreichen ist bei einer Funkverbindung quasi nicht möglich.
Dennoch, wenn deine FHZ den Befehl nicht rausschickt, wird die Target Variable nicht geupdated, somit hast du die Gewissheit, dass dein Befehl in der FHZ festhängt. Somit brauchst du nur die Last-Update Zeit von IPS Request und Target zu vergleichen, und schon kannst du dementsprechend reagieren.
Seit dieser Erweiterung von Paresy im FHT-Modul laufen meine FHT’s supergut.

Leider wird dein Projekt so scheitern, da der FHT dir keine Bestätigung vom neuen Sollwert schicken wird, falls du dem mal einen neuen Wert übermittelst.
Es ist ja bekannt, dass der FHT einen Sollwert nur sendet, falls du am Stellrad drehst.
Es gibt eine Alternative, die ich vor der Request/Target Geschichte mehr oder weniger erfolgreich eingesetzt habe: Du misst die Temperatur im Raum, vergleichst sie mit deinem letzten übermitteltem Sollwert. Wenn hier die Differenz nach x Zeit noch immer zu gross ist, sende den Target nochmals !

mfG Franz

Nur ein anstoss :

Sollte Franz sein idee auch zuverlässig laufen bei externe einflusse : (sonnenschein, tur steht offen, …) Da kanns einer vorkommen das der neue temperatur nicht erreicht wird (tur offen), oder das die temperatur ausserhalb der FHT steigt (sonne).
Und dan ?
Eine quali-faktor uber zeit beihalten (graph) ist ne gute sache, weil mann da ja potentiele probleme im funk-salat aufspuren könnte - und gemass seine scripte anpassen kann.

Wie immer : meine 2cents

Hallo Franz,

Leider wird dein Projekt so scheitern, da der FHT dir keine Bestätigung vom neuen Sollwert schicken wird, falls du dem mal einen neuen Wert übermittelst.

Wie meinst du das? Ich habe mir die Kommunikation mal eine ganze Weile angesehen. Immer wenn die FHZ den request an den FHT losgeworden ist, gibt es ein Update beim state. Un das passiert immer genau mit der pos-Meldung.

Dazu wäre es gut zu wissen, ob der geänderte state wirklich vom FHT kommt (was ich voraus setze, denn sonst wäre ein Löschen aus dem Buffer reine Selbstgefälligkeit), oder automatisch von IPS gesetzt wird.

paresy???

Mein Script läuft seit 3 Tagen und scheint zu funktionieren.

Gruß
Fabian

Ja, wenn der Befehl durch ist, wird der State aktualisiert. Nur erhält er diesen State nicht vom FHT, sondern IPS checkt nur, ob die FHZ ‚OK‘ wiedergibt, d.h. solange ein Befehl ‚pending‘ ist oder schon durch ist. Ob er tatsächlich beim FHT angekommen ist, naja, dass ist eben die ‚nur‘ 99% Garantie !
Der FHT sendet aber keine Bestätigung vom Sollwert zurück an IPS, was wir anfangs auch vermutet haben, deshalb scheiterte ja eben die erste Version des neuen FHT Moduls.
Das einzige, was ein FHT zyklisch sendet, ist seine Ventilposition und den Fensterstatus. Würde der aktuelle Target Wert auch mit übermittelt werden, hätten wir verschiedene Probleme weniger !
Ich glaube aber, dass wurde bewusst weggelassen, um den Funkverkehr nicht zuviel zu belasten !

mfG Franz

Das stimmt nicht. Der Sollwert wird auch gesendet, wenn der FHT im Automatikmodus die Solltemperatur ändert ODER wenn ich per IPS eine neue Solltemperatur einstelle.

Durch Vergleich von Request und Target zusammen mit den Update-Zeiten kann man praktisch 100% sicher stellen, ob ein Kommando angekommen ist.

Seit wann? Ich konnte noch nie beobachten, dass nur einer meiner FHT’s einen Sollwert geschickt hat wenn ich einen neuen Wert per IPS gesendet habe. Villeicht gibt es dann eine neue Version von FHT’s von der ich noch nichts weiss?

mfG Franz

Mindestens seit ich damit rummache, also ca. Oktober 2006. Wenn die Sollwerte sich nicht ändern würden, würde ich das in meinen WIIPS-Plots sofort sehen, weil ich da die entsprechenden Target-Variablen mitschreibe. Ich habe 8 FHT80b im Einsatz, davon sind 3 Version 2. Macht aber keinen Unterschied. Mit FHT8b ging’s auch aber die hatten andere Probleme und wurden ausgemustert.

Dann haben wir jetzt ein Problem.

Von meinen 11 FHT’s sendet kein einziger auch nun einen Sollwert, ausser, ich verstelle die Temperatur am Rad !
Die erste Variante vom FHT funktionnierte nähmlich so. Es wurde von IPS ein neues Sollwert verlangt, IPS Request wurde gesetzt. Wenn der Wert am FHT ankam, wartete Paresy drauf, dass der neue Werte vom FHT gesendet wird um die Target Variable zu updaten, doch die kam nie !
Daraufhin wurde das FHT Modul umgeschrieben !

So, wenn jetzt FHT’s Sollwerte senden, ist das mir wirklich neu. Ich muss dazu aber auch sagen, ich habe meine FHT’s schon mehr als 1 Jahr im Einsatz. Die ersten habe ich sogar vor fast 3 Jahren gekauft.

mfG Franz

Ich kann dazu als relativer Frischling auf dem Gebiet wenig sagen. Die FHT8b sind auch ca. 3 Jahre alt, meine ältesten 80b haben 2 Jahre auf dem Buckel.

Wenn du mal in WIIPS unter QuickSwitch schaust, da werden auch die Target- und nicht die Request-Werte als Sollwert angezeigt. Es dauert eine Weile, bis sich der Sollwert in WIIPS nach dem Setzen ändert.

Noch was: Ich hab Skripte, die u.a. jede Änderung der Target-Variablen mit Uhrzeit protokollieren und da sehe ich Änderungen, auch wenn niemand am Rad gedreht hat.

Ich hab auch eine Limiter-Funktion: Wenn ein Benuzer einen sehr hohen Wert eingibt, z.B. 30 Grad, dann triggert die Target-Variable einen Skript, der die Solltemperatur dann auf einen vernünftigen Wert zurücksetzt. Beide Änderungen, die durch den Benutzer und die durch das Skript, werden eindeutig protokolliert. Kleiner Auszug von gestern abend:


2007-01-07 17:18:06 ; Kueche.Temperature.Set        ; Float   ;  26.00
2007-01-07 17:18:59 ; WC.Temperature                ; Float   ;  19.40
2007-01-07 17:19:19 ; Wintergarten.Humidity         ; Float   ;  62.80
2007-01-07 17:20:03 ; Kueche.Temperature.Set        ; Float   ;  22.00

Ich kann daran auch erkennen, welches Familienmitglied noch lernfähig ist und welches nicht :smiley: .

Wo hast du diese Logfile her? Ist das die aus dem WIIPS oder die aus IPS selber? Ich glaube hier gibt es Missverständisse irgendwo !
Wenn du dir die LogFile/Debug File aus IPS ankuckst, wirst du feststellen, dass kein einziger Regler dir auch nur einen Sollwert schickt. Denn sonst wäre das neu in den FHT’s. Von WIIPS kann ich dir nichts berichten, da ich das nicht installiert habe !
Wenn ich wieder zuhause bin, schicke ich dir mal gerne eine aktualle Logfile aus dem Debugger von IPS zu.

mfG Franz

Die Logfiles mach ich mir selbst. Unter Events sind alle die Variablen eingetragen, die ich protokollieren möchte. Hat den Vorteil, dass man die Liste leicht ändern kann ohne den Skript anzufassen.


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Log_Variables_OnChange.ips.php
Trigger  : 
Interval : 
*/
$debug = FALSE;
$scriptname = $IPS_SELF;
$filedate = date("_Y-m");
$path = IPS_GetKernelDir()."data\\";
$filename = "{$path}{$scriptname}{$filedate}.csv";
$filemode = "a+";

if ($debug) IPS_LogMessage($scriptname, $IPS_SENDER);
if ($IPS_SENDER == "Variable") {
   $file = fopen($filename,$filemode);
   $name = $IPS_VARIABLE;
   $lastupdate = date("Y-m-d H:i:s",IPS_GetUpdateTime($name));
   $type = IPS_GetVariableType($name);
   fprintf($file,"%-20s; %-30s; %-8s; ",$lastupdate,$name,$type);
   switch(IPS_GetVariableType($name)) {
      case "Float":
         $float = GetValueFloat($name);
         if ($debug) IPS_LogMessage($scriptname,$lastupdate." ".$name." ".$type." ".(string)$float);
         fprintf($file,"%6.2f",$float);
         break;
      case "Integer":
         $integer = GetValueInteger($name);
         if ($debug) IPS_LogMessage($scriptname,$lastupdate." ".$name." ".$type." ".(string)$integer);
         fprintf($file,"%6d",$integer);
         break;
      case "Boolean":
         $value = GetValueBoolean($name);
         $bool = "FALSE";
         if ($value) $bool = "TRUE" ;
         if ($debug) IPS_LogMessage($scriptname,$lastupdate." ".$name." ".$type." ".(string)$bool);
         fprintf($file,"%6s",(string) $bool);
         break;
      case "String":
         $string = GetValueString($name);
         if ($debug) IPS_LogMessage($scriptname,$lastupdate." ".$name." ".$type." ".(string)$string);
         fprintf($file,"%6s",(string) $string);
         break;
   }
   fprintf($file,"
");
   fclose($file);
}
?>

Nee, bitte sende mir einen Auszug aus der reellen LogFile des IPS Debugger. Da kann man das am besten sehen ob die FHT’s Sollwerte schicken.
Das möchte ich jetzt wirklich genauer wissen !

mfG Franz

Bitte sehr:


07.01.2007 17:18:05.796 | DEBUG   | VariableManager      | Variable: Kueche.Temperature.Set (Float), Value: 26
07.01.2007 17:18:05.796 | DEBUG   | ExecuteThread ID: 1552 | Executing Script: Log_FHTs.ips.php ~ Sender: Variable: Kueche.Temperature.Set, Trigger: OnUpdate
07.01.2007 17:18:05.806 | DEBUG   | ExecuteThread ID: 204 | Executing Script: Log_Variables_OnChange.ips.php ~ Sender: Variable: Kueche.Temperature.Set, Trigger: OnChange
07.01.2007 17:18:05.806 | DEBUG   | ExecuteThread ID: 316 | Executing Script: FHT_Limit.ips.php ~ Sender: Variable: Kueche.Temperature.Set, Trigger: OnLimitExceed
07.01.2007 17:18:05.816 | DEBUG   | ExecuteThread ID: 204 | Execution Result: 
07.01.2007 17:18:05.816 | DEBUG   | ExecuteThread ID: 204 | Executed, Ret: 1, Successful:True
07.01.2007 17:18:05.826 | DEBUG   | ExecuteThread ID: 1552 | Execution Result: 
07.01.2007 17:18:05.826 | DEBUG   | ExecuteThread ID: 1552 | Executed, Ret: 1, Successful:True
07.01.2007 17:18:07.848 | DEBUG   | VariableManager      | Variable: Kueche.Temperature.Request (Float), Value: 22
07.01.2007 17:18:07.848 | DEBUG   | ExecuteThread ID: 316 | Execution Result: 
07.01.2007 17:18:07.848 | DEBUG   | ExecuteThread ID: 316 | Executed, Ret: 1, Successful:True

[..]

07.01.2007 17:20:00.644 | CUSTOM  | RRD_GraphBuilder     |  10 Graphs(s) builded.
07.01.2007 17:20:00.654 | DEBUG   | ExecuteThread ID: 3496 | Execution Result: 
07.01.2007 17:20:00.654 | DEBUG   | ExecuteThread ID: 3496 | Executed, Ret: 1, Successful:True
07.01.2007 17:20:00.844 | CUSTOM  | RRD_DataPoller       |  55 Database(s) updated.
07.01.2007 17:20:00.854 | DEBUG   | ExecuteThread ID: 1252 | Execution Result: 
07.01.2007 17:20:00.854 | DEBUG   | ExecuteThread ID: 1252 | Executed, Ret: 1, Successful:True
07.01.2007 17:20:03.07 | DEBUG   | VariableManager      | Variable: Kueche.Temperature.Set (Float), Value: 22

In der Tat, ich kann sehen, dass hier Sollwerte geändert wurden. Nur, kommen diese Werte in einem regelmässigen Abstand? Oder hat da nur jemand am Rad gedreht?

Ich kuck mir das heute auch an sobald ich zuhause bin, und werde mich dann noch mal melden. Meine FHTs’ senden auf jeden Fall keine Sollwerte.
Ich hätte gerne mal die Meinung eines anderen FHT Guru gehört ?

GGGss aka Fredje ? Wo bist du ?

mfG Franz

Nein, die kommen nicht in regelmäßigen Abständen, sondern nur, wenn sich was ändert, also

  • wenn jemand am Rad dreht
  • das Programm auf dem FHT den Sollwert ändert
  • per IPS der Sollwert geändert wird (FHT_SetTemperature, $id, $value)).

Der Wert der Target-Variable ändert sich unmittelbar nachdem der entsprechende FHT_SetTemperature-Befehl die FHT Queue verlassen hat, d.h. wenn der Status auf „OK“ wechselt. Dieser Zeitpunkt liegt dicht am Senden des Postionswerts.

So sind jedenfalls meine Beobachtungen.

Hallo 69283,

Du hast Recht.

Der FHT sendet tatsächlich eine Bestätigung der Target-Werte.

@alle, die es interessiert:
In der FHT-Configuration gelten folgende Zusammenhänge:
Die unter „Status Variables (target state IPS Request)“ aufgeführten Variablen repräsentieren den gewünschten Zustand.
Diese Variablen (Temperature und Mode) werden niemals vom Script gesetzt (ReadOnly), sondern ausschließlich durch die FHT_SetXXX(…)-Befehle.

Die unter „Status Variables (target state IPS Response)“ aufgeführten Variablen repräsentieren den im FHT aktuellen, aktiven Zustand.
Auch diese Variablen (Temperature und Mode) sind ReadOnly-Variablen. Sie werden nur nach Rückmeldung durch den FHT gesetzt.

Im Idealfall werden die Response-Variablen aktualisiert, wenn

  • nach einem Request der neue Zustand vom FHT übernommen worden ist, oder
  • am FHT selbst manuell eine Änderung vorgenommen wurde.

Leider erfolgt die Rückmeldung oft mit großen Verzögerungen.
In der Grafik ist zu sehen, dass die Rückmeldung (violett) gegenüber der Anforderung (hellblau) um ca. eine halbe Stunde verspätet eingetroffen ist.

Gruß
HJH

FHT_SZ.png

Ich hab gerade ein kleines Skript modifiziert, das alle Variablen eines FHT protokolliert. Sobald das Protokoll vorliegt, poste ich es hier.

Ok, ich kann wie gesagt, erst heute nachmittag genaueres sagen. Ich konnte jedenfalls noch nie beobachten, dass der FHT nach einem Sollwert-Wechsel den Wert rückgesendet hatte, zumindest, wie HJH sagt, in einem vernünftigen Zeitrahmen.
Ich schau mir mal Logfiles an heute nachmittag

mfG Franz