Openhab HM binding mit reconnects alle 60s

Hallo,

folgendes habe ich schon in der openhab google group gepostet, aber da hier auch einige openhab User vorhanden sind, frage ich hier auch um Rat.

Ich nutze openhab 1.6.1 und Homegear 0.5.20 auf einem Debian Linux System. Das physical interface ist ein HM-CFG-LAN und alles sieht gut aus. Von der openhab Web UI kann ich zB. meine Rolladen-Aktoren steuern.

Nach Neustart von openhab bekomme ich nach ca. 360s folgendes im Log:
No event since 360 seconds, refreshing Homematic server connections

Dann wird der HM communicator (Teil vom HM Binding) gestoppt und wieder neu gestartet, inkl. Einlesen aller Datenpunkte usw.

Das gleiche geschieht dann weiterhin alle 60s:

2015-01-01 20:39:45.413 [INFO ] [.b.h.i.c.HomematicCommunicator] - Shutting down Homematic communicator
2015-01-01 20:39:45.421 [INFO ] [.b.h.i.c.HomematicCommunicator] - Starting Homematic communicator
2015-01-01 20:39:45.427 [INFO ] [.b.h.i.c.HomematicCommunicator] - Homematic ServerId[name=Homegear,version=0.5.20]
2015-01-01 20:39:45.428 [INFO ] [.b.h.i.c.client.HomegearClient] - Starting HomegearClient
2015-01-01 20:39:45.429 [INFO ] [b.h.i.communicator.StateHolder] - Loading Homematic datapoints
2015-01-01 20:39:45.487 [INFO ] [b.h.i.communicator.StateHolder] - Finished loading 39 Homematic datapoints
2015-01-01 20:39:45.488 [INFO ] [b.h.i.communicator.StateHolder] - Loading Homematic Server variables
2015-01-01 20:39:45.493 [INFO ] [b.h.i.communicator.StateHolder] - Finished loading 0 Homematic server variables
2015-01-01 20:39:45.494 [INFO ] [b.h.i.c.s.BinRpcCallbackServer] - Starting BinRpcCallbackServer at port 9123
2015-01-01 20:39:45.499 [INFO ] [.b.h.i.c.HomematicCommunicator] - Scheduling one datapoint reload job in 60 seconds

usw. usw. usw.

Das homematic:alive.interval steht auf 300.

Hat jemand eine Idee, warum er das alle 60s macht?

Danke & Gruss!

Hallo,

hmm, steht irgend was in “/var/log/homegear/homegear.err”? Es könnte sein, dass Homegear sich zum Beispiel nicht mit dem Callback-Server verbinden kann. Stell das homematic:alive.interval auch mal auf zumindest 600. Bei wenigen Geräten kann es durchaus mal passieren, dass für 5 Minuten kein Paket kommt.

Liebe Grüße

Sathya

Hallo Sathya,

im err-log ist nichts drin.

Ich hatte auch homematic:callback.host gesetzt. Da dies optional ist, habe ich es mal rausgenommen und setze auf das auto-discovery…

Mal schauen !

Schick mir mal deine komplette homegear.log und homegear.err gepackt an meine E-Mail-Adresse (sathya (at) laufers (punkt) net). Vielleicht seh ich da irgendwas.

Liebe Grüße

Sathya

Ist unterwegs…

Ich habe aktuell übrigens nur drei Rolladenaktoren angelernt. Und die sind ruhig, wenn man die Rolladen nicht gerade fahren lässt oder was spezielles (unreach, config pending, …) passiert.

Ist das das Problem??

Falls ja, könnte Homegear so etwas wie “is alive” an openhab senden? Ich weiss allerdings nicht, ob so etwas in der Schnittstelle definiert ist…

Gruss,
Radiohead

Habe das Interval jetzt auf 600s gesetzt. Der erste Reconnect findet dann genau nach 660s statt.
Ab dann immer nach genau 60s…

Hmm.

Hallo Radiohead,

das Log sieht soweit gut aus. Ich kann dir nicht sagen, warum OpenHAB nach dem ersten Reconnect das Intervall auf 60 Sekunden reduziert, aber dass der Reconnect stattfindet, ist logisch - die Rolladenaktoren senden keine Statuspakete. Du kannst das Senden von Statuspaketen allerdings forcieren, indem du Polling für die Rolladenaktoren aktivierst.

Trag dazu folgendes für jeden der drei Rolladenaktoren in “/var/lib/homegear/scripts/Test.php” ein:

print_r($Client->send("putParamset", array(*****ID1*****, 0, "MASTER", array("POLLING" => true, "POLLING_INTERVAL" => 600))));
print_r($Client->send("putParamset", array(*****ID2*****, 0, "MASTER", array("POLLING" => true, "POLLING_INTERVAL" => 600))));
print_r($Client->send("putParamset", array(*****ID3*****, 0, "MASTER", array("POLLING" => true, "POLLING_INTERVAL" => 600))));

Jetzt das Script mit “/var/lib/homegear/scripts/Test.php” ausführen und die Geräte werden alle 10 Minuten gepollt. Sicherheitshalber kannst du das Intervall in OpenHAB auf 610 Sekunden setzen.

Das sollte dein Problem eigentlich lösen?

Liebe Grüße

Sathya

Hi,

habe das Polling für alle drei Rolladenaktoren aktiviert und auf 500s gesetzt:
Array
(
[INTERNAL_KEYS_VISIBLE] => 1
[POLLING] => 1
[POLLING_INTERVAL] => 500
[ROAMING] =>
)

In openhab habe ich das Checkintervall auf 600s gelassen.

Dennoch nach 660s:
No event since 660 seconds, refreshing Homematic server connections.

Danach reconnect des HM bindings, und das dann wieder alle 60s…

Ich meine, dass ich das früher mit älteren Homegear Versionen nicht gehabt habe.
Aber erklären kann ich es noch nicht. :frowning:

Die Minimalzeit ist 600 Sekunden, darunter geht nicht. Nur ist das Polling-Intervall in Minuten - sorry :blush:. Also noch einmal das Ganze auf 10. Dann sollte es klappen.

Liebe Grüße

Sathya

Ja, so geht es einwandfrei. Keine reconnects mehr. :slight_smile:

Ich sehe im openhab.log dann auch die Updates zu allen Rolladenaktoren (nach ~10 Minuten), auch wenn die Werte sich nicht verändert haben.
Denn ich habe den debug level für das openhab HM binding hochgesetzt.

1000 Dank!!

Alternativ könnte man sicher auch ein weiteres HomeMatic-Device hinzunehmen, welches öfter Statusinformationen übergibt (z.B. ein Thermostat oder Zwischenstecker). In diesem Fall wäre das Polling der Rolladen-Aktoren nicht mehr zwingend notwendig - da kommt es aber natürlich darauf an, wie deine Gerätestruktur später einmal aussehen wird oder ob du momentan ausschließlich die Rolladensteuerung damit planst. Wäre nicht auch das Polling eines Rolladen-Aktors bereits ausreichend, um dem Timeout zu entgehen?

Jupp. Das Polling hat allerdings noch den Vorteil, dass Statusänderungen am Rolladenaktor sicher mitbekommen werden. Dieser sendet nämlich nur ein einziges Broadcastpaket für jede Statusänderung nach manueller Betätigung (das gleiche gilt für alle Aktoren - das hätte besser implementiert werden können). Es kann durchaus passieren dass dieses Paket nicht empfangen wird. Durch das Polling stimmt der Status in OpenHAB bzw. Homegear dann zumindest 10 Minuten später wieder. Die Rolladenaktoren waren sogar der Grund, weshalb ich das Polling eingebaut habe :wink:.

Das Problem mit den Reconnects zwischen openHAB und homegear habe ich durch einen “Heartbeat” gelöst, den homegear an openHAB sendet. Dazu einfach ein timed event scripten (z.B. alle 2 Minuten), dass eine Systemvariable setzt. Diese lässt sich in openHAB über ein Binding auch auslesen und, wenn man will, in einer Sitemap referenzieren und im GUI anzeigen.

Heartbeat starten (einmalig) - StartHeartbeat.php:

[code]#!/usr/bin/env php

<?php include_once("Connect.php"); print_r($Client->send("addEvent", array( "TYPE" => 1, "ID" => "Heartbeat", "RECUREVERY" => 120, "EVENTMETHOD" => "runScript", "EVENTMETHODPARAMS" => array("SendOneHeartbeat.php",true) ))); ?>

[/code]

Das referenzierte Skript zum Senden eines Heartbeats - SendOneHeartbeat.php:

[code]#!/usr/bin/env php

<?php include_once("Connect.php"); print_r($Client->send("setSystemVariable", array("HEARTBEAT", date("Y-m-d H:i:s")))); ?>

[/code]

Heartbeat bei Bedarf wieder anhalten - StopHeartbeat.php:

#!/usr/bin/env php
<?php
include_once("Connect.php");

print_r($Client->send("removeEvent", array("Heartbeat")));

?>

Super Idee! :slight_smile:

Wirklich eine gute Idee.

Bleibt der recurring event auch erhalten wenn Homegear neu gestartet wird? d.h. ist er persistent?

Ja, ist er