Connection lost bei Aktivierung von longpoll

Begonnen von Raini, 23 Januar 2013, 11:52:19

Vorheriges Thema - Nächstes Thema

Raini

Hab jetzt alles fertig mit FLOORPLAN's etc.
Wenn ich jetzt unter WEB longpoll auf 1 setze, kommt immer "Connection lost, reconnecting in 5 sec ..."
Wenn ich das google, oder hier suche, kommt immer der Hinweis auf irgend einen Patch.
Wie spielt man einen Patch wenn nötig ein ?
:-)
Rainer

rudolfkoenig

Zu FLOORPLAN kann ich nichts sagen.

Falls das FHEMWEB sein sollte, dann heisst dass, dass der Browser keine zweite Verbindung zu fhem aufmachen kann.

Raini

Ich hab aber nur eine Verbindung.
Oder zählt der Floorplan auch als Verbindung ?
Ich ruf das FHEMWEB auf und wenn ich links auf einen Raum klick, kommt oben immer "Connection lost"
Wenn ich jetzt z.B. auf eine Funkschalter des FS20 klicke passiert folgendes:
Beim anklicken der Lampe kommt "Connection lost" und Lampe schaltet ... aber Symbol bleibt gleich.
Wenn ich auf "an" oder "aus" klicke schaltet der Aktor und das Symbol der Lampe passt sich entsprechend an.

Bitzer

Hallo,

hab das gleiche Problem, bei aktivem longpoll kommt bei jedem Klick die Meldung "Connection lost, reconnecting in 5 sec ..." (SSH und basicAuth für WEB ist aktiviert)
Außerdem wird der Status weder in der Raumansicht noch im Floorplan automatisch aktualisiert, das erfolgt erst nach einem manuellen Refresh.

Ich habe die Statusanzeige meiner Enocean Komponenten per Notify und setstate gelöst, was auch prinzipiell geht (auch bei Doppelschaltern), aber eben nur nach einem Refresh.

Hier ein Beispiel:
define HSw_WZ_Tuer_1 EnOcean 002554FA
attr HSw_WZ_Tuer_1 subType switch

define notify_HSw_WZ_Tuer_1 notify HSw_WZ_Tuer_1 {my $rvar=Value("HSw_WZ_Tuer_1");; \
if ($rvar =~ m/A0/) {fhem "setstate Licht_Esszimmer on"} \
elsif ($rvar =~ m/AI/) {fhem "setstate Licht_Esszimmer off"};; \
if ($rvar =~ m/B0/) {fhem "setstate Licht_Wohnzimmer_Dim on"} \
elsif ($rvar =~ m/BI/) {fhem "setstate Licht_Wohnzimmer_Dim off"}}

Hat jemand eine Idee woran das liegen kann? Ich vermute ja ein prinzipielles Problem mit longpoll, oder stimmt mit meinem Notify etwas nicht?

Viele Grüße,
Oli


Reinerlein

Hi Oli,

die Anweisung "setstate" wird eigentlich nur vom Ladeprozess verwendet, um einen State zu setzen, und dabei kein Event auszulösen (um den Zustand vor dem Beenden von Fhem wiederherzustellen).

Longpoll aktualisiert aber nur bei einem Event den entsprechenden Wert auf der Oberfläche.

Du müsstest also mitreadingsSingleUpdate($hash, $readingName, $readingValue, $doTrigger) arbeiten. Wenn der letzte Parameter 1 ist, wird ein Event generiert (!), bei dem dann auch longpoll auf der Oberfläche reagiert...

Edit:
Oder natürlich einfach mit dem normalen Fhem-Mechanismus. z.B.:set <devicename> on

Grüße Reinerlein

Bitzer

Hi Reinerlein,

danke für die schnelle Antwort. Ich hatte mir sowas schon gedacht. Ich habe setstate anstatt set verwendet, weil ich bei Drücken des Wandschalters eigentlich nur den Anzeigestatus in FHEM ändern wollte ohne einen Befehl zu senden. Da der Wandschalter bereits auf dem Aktor angelernt ist würde der Befehl bei Verwendung von "Set" dann sozusagen doppelt gesendet, einmal vom Wandschalter direkt und einmal von FHEM.

Hat "readingsSingleUpdate" mit doTrigger = 1 exakt die gleichen Auswirkungen wie "set", d.h. es wird ein Befehl an den Aktor gesendet?

Wie würde der "readingSingleUpdate" in meinem o.g. Beispiel aussehen (Wie komme ich z.B an $hash)?

Gibt es evtl. einen Befehl der nur einen Refresh des Browsers auslöst, bzw. longpoll triggert?

Danke für Deine Unterstützung. Sorry für die vielen Fragen, bin noch nicht solange dabei, aber begeistert von den Möglichkeiten.

Viele Grüße
Oli

Reinerlein

Hi Oli,

ehrlich gesagt weiss ich gar nicht, ob da auch was gesendet wird, da ich bislang nur "echte" Readings geändert habe. Du müsstest ja das Reading "state" ändern:readingsSingleUpdate($main::defs{Licht_Esszimmer}, 'state', 'on', 1)Beachte, dass bei defs{} keine Anführungszeichen um den Devicenamen gehört. Das ist ein Perl-Hash-Zugriff.

Ich gehe aber mal davon aus, dass das wirklich nur ein Update des Werts und der Anzeige ist, da das Senden des Befehls ja in der "set"-Anweisung des Devicemoduls erfolgen dürfte (und dort dieser Wert ja auch nur geupdatet wird, nachdem das Senden erledigt ist).

Ob es da einen direkteren Befehl gibt longpoll "auszulösen" kann ich dir leider auch nicht sagen.

Grüße Reinerlein

Bitzer

Prima, danke das klappt soweit, Statusänderung wird auch über longpoll direkt angezeigt. Ob was gesendet wird müsste sich ja am Aktor feststellen lassen, teste ich heute Abend wenn ich zuhause bin.

Gruß
Oli