Kapseln von Aktionen im Notify (Bsp. Türklingel) für Performance

Begonnen von s3bi, 13 Juni 2018, 09:04:44

Vorheriges Thema - Nächstes Thema

s3bi

Hallo,

ich habe meine Klingel in Fhem eingebunden und habe nun ein Problem mit der Geschwindigkeit. Die Klingel wird gedrückt, es klingelt jedoch erst 5-8 Sekunden später (da ist der Paketdienst meist schon wieder weg ;-) ).

Aber eins nach dem anderen... Hier mal die Verwendete Hardware:

1 x 12V Travo (Zweckentfremdeter LED Travo) um Spannung von 230 auf 12 V zu bringen
1 x Klingeltaster an der Eingangstüre
1 x HomeMatic Funk-Tasterschnittstelle 4-fach (davon ist ein Taster für die Klingel verwendet)
2 x HomeMatic Funk-Gong (HM-OU-CFM-Pl)
1 x Netatmo Presence Außenkamera

Folgender Ablauf:

Klingel wird betätigt -> 4-Kanal-Taster (Channel1) wird ausgelöst
Darauf reagiert ein notify:


## Notify fuer Klingel
define NOT.KlingelRing notify .*BUTTON1.trigger:.* { Klingel();; SendMessage();; SendPhoto() }
attr NOT.KlingelRing room Klingel


Das notify ruft nacheinander drei funktionen aus der 99_myUtils.pm auf

1. Funktion Klingel();


# Benachrichtigung bei Türklingel
sub Klingel()
{

## Klingel Auslösen !!!
#- LED an
  fhem(' set EG.KlingelGongLed on-for-timer 5 ;
         set OG.KlingelGongLed on-for-timer 5 ');
#- MP3 Abspielen
  if(ReadingsVal("KlingelMute", "state", "loud") ne "mute"){
     fhem(' set EG.KlingelGongMp3 on-for-timer 5 ;
            set OG.KlingelGongMp3 on-for-timer 5 ');
  }
}


Ich habe noch einen Dummy, mit dem ich den Ton der Klingel ausschalten kann (z.b. wenn die Kids schlafen etc.)

2. Funktion sendMessage();

sub SendMessage()
{
#- Message senden
  fhem( ' set HKW44_bot message Es hat geklingelt. ' );
}


Es wird eine Nachricht per Telegram versendet

3. SendPhoto();

sub SendPhoto()
{
#- Screenshot von Netatmo Presence per Telegram versenden
  if(ReadingsVal("netatmo_C70_ee_50_26_b9_a2", "active", "timeout") ne "timeout"){
    system('wget http://192.168.10.30/ab0b7b38dd32324556f6a1e7c0899091/live/snapshot_720.jpg -O /opt/fhem/pictures/klingel.jpg ');
    fhem (' set HKW44_bot sendPhoto /opt/fhem/pictures/klingel.jpg ');
  }
}


Hier liegt auf mein Performace problem, da die W-Lan Abdeckung im Bereich der Kamera etwas schwankt oder die Kamera aus diversen Gründen gerade nicht erreichbar ist. Ich habe schon den "check" eingebaut, ob die Kamera erreichbar , also im Status "active" oder "timeout" ist.

Im Log ist nun folgendes:

--2018-06-13 08:31:59--  http://192.168.10.30/ab0b7b38dd32324556f6a1e7c0899091/live/snapshot_720.jpg
Connecting to 192.168.10.30:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 316344 (309K) [image/jpeg]
Saving to: '/opt/fhem/pictures/klingel.jpg'

     0K .......... .......... .......... .......... .......... 16% 33.3K 8s
    50K .......... .......... .......... .......... .......... 32% 40.7K 6s
   100K .......... .......... .......... .......... .......... 48% 46.7K 4s
   150K .......... .......... .......... .......... .......... 64% 40.4K 3s
   200K .......... .......... .......... .......... .......... 80% 30.4K 2s
   250K .......... .......... .......... .......... .......... 97% 27.6K 0s
   300K ........                                              100% 26.9K=8.8s

2018-06-13 08:32:08 (35.0 KB/s) - '/opt/fhem/pictures/klingel.jpg' saved [316344/316344]

2018.06.13 08:32:09 3: CUL_HM set EG.KlingelGongLed on-for-timer 5
2018.06.13 08:32:09 3: CUL_HM set OG.KlingelGongLed on-for-timer 5
2018.06.13 08:32:09 3: CUL_HM set EG.KlingelGongMp3 on-for-timer 5
2018.06.13 08:32:09 3: CUL_HM set OG.KlingelGongMp3 on-for-timer 5


Man sieht ja recht schön das der Flaschenhals das abholen des Photos ist. Mit den einzelnen Funktionen wollte ich eigentlich erreichen, dass eine Funktion nach der anderen abgearbeitet wird. Aber scheinbar ist das nicht der Fall. Es wird immer erst gewartet bis alles erfolgreich war und dann erst ausgelöst, sprich - das Klingeln des Gongs erfolgt erst, wenn auch die letzte Funktion durchlaufen wurde.

Hat jemand eine Idee wie ich das verhindern kann bzw. parallelisieren?
Brauche ich drei notifys?

Danke für Eure Ideen.

Meine Frage ist nun,

Otto123

Moin,

als erste Massnahme und vor allem als Nachhaltigste würde ich diese peeren

1 x HomeMatic Funk-Tasterschnittstelle 4-fach (davon ist ein Taster für die Klingel verwendet)
2 x HomeMatic Funk-Gong (HM-OU-CFM-Pl)

Damit geht zumindest die Klingel schnell und unabhängig.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rabehd

Zitates klingelt jedoch erst 5-8 Sekunden später
ZitatHier liegt auf mein Performace problem, da die W-Lan Abdeckung im Bereich der Kamera etwas schwankt oder die Kamera aus diversen Gründen gerade nicht erreichbar ist.

Für mich ein Widerspruch oder 2 Probleme.
Ich würde, wie Otto, ebenfalls direkt peeren.

Den Usecase werde ich in ein paar Wochen umsetzen, dann habe ich echte Erfahungen.
Auch funktionierende Lösungen kann man hinterfragen.

s3bi

Ok, den Hinweis mit dem Peeren habe ich umgesetzt, danke dafür.,

Trotzdem werden meine Funktionen nicht sequentiell abgearbeitet. Wie kann ich das ändern?

Zitat von: rabehd am 13 Juni 2018, 09:20:20
Für mich ein Widerspruch oder 2 Probleme.
Ich würde, wie Otto, ebenfalls direkt peeren.

Das ist kein Widerspruch, sondern der Grund für die Verzögerung (siehe Auszug aus dem Logfile im ersten Post).
Die Kommunikation mit der Kamera dauert aufgrund der W-Lan Abdeckung lange, das ist absolut ok und auch nicht weiter schlimm.

Ich möchte ja das es im Haus "klingelt" also per TON und LED ein Signal gibt. Die Anschließende Benachrichtigung per Telegram ist zweitrangig. Das anschließende senden eines Fotos per Telegram ist erst an dritter stelle - wenn das erst eine Minute später vollzogen ist, ist das auch ok.

Muss ich mein Notify anders aufbauen? Muss ich drei Notifys anlegen? Macht das Kapseln in Funktionen Sinn?

rabehd

ZitatOk, den Hinweis mit dem Peeren habe ich umgesetzt, danke dafür.,

Es klingelt immer noch nach 5-8 Sekunden?
Auch funktionierende Lösungen kann man hinterfragen.

mumpitzstuff

Die beste Lösung wurde bereits gepostet.
Alternativ kannst du im Notify auch nur Klingel() aufrufen und am Ende von Klingel() die nächste Funktion usw.
Vielleicht bringt das ja was.

s3bi

Es geht wesentlich schneller - bei meinen 10 Tests mal Klingeln gerade eben waren 8 erfolgreich. Zwei mal hat es etwas gedauert.
Ich kann das auch erst einmal weiter beobachten.

Vielen Dank schon mal mit dem Hinweis des Peerings!!!

Otto123

nur zur Sicherheit, dass wir über das Gleiche reden: Was hast Du genau gemacht?

Ich bin der Meinung, dass die Befehle im notify in der Reihenfolge aufgerufen werden wie sie drin stehen. Du sagst aber eigentlich es läuft genau umgekehrt - das wundert mich.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

s3bi

folgendes habe ich gemacht:

set BUTTON1 peerChan 0 EG.KlingelGongLed single set
set BUTTON1 peerChan 0 OG.KlingelGongLed single set
set BUTTON1 peerChan 0 EG.KlingelGongMp3 single set
set BUTTON1 peerChan 0 OG.KlingelGongMp3 single set


BUTTON1 ist der Channel 1 des 4-Kanal-Tasters

Otto123

Und damit kannst Du ja den Part Klingel aus deinem notify rausnehmen und dein Hauptanliegen ist erstmal gelöst?
Es klingelt sofort (sofort ist eventuell relativ bei vier Peers?) und das senden der Bilder ist nachrangig.

Dein Problem mit den Bildern ist noch: Für den Zeitraum der Ausführung Deiner Sub ist FHEM blockiert.

Das würde ich einfach in ein Script auslagern und den Aufruf im Hintergrund in FHEM ausführen.
Beispiel von Rudi

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rabehd

Otto war schneller.

Die Register in ...KlingelGong... mußt Du auch prüfen/setzen.
Auch funktionierende Lösungen kann man hinterfragen.

s3bi

okay, ich fange an zu verstehen. Das peer bewirkt das beim betätigen des Sensors (BUTTON1) sofort der Aktor (KLINGELGONG...) betätigt wird.

Das Bedeutet aber auch, das mein Dummy (Klingel an/aus) wirkungslos ist?

Momentan schalte ich den Dummy per AT morgens um 6 Uhr ein und Abends um 19.30 Uhr aus. Mittags manuell per Schalter an der Haustüre. Immer dann, wenn der Dummy auf KlingelMute steht, wird keine MP3 abgespielt - dann kommt die Benarchrichtigung der Klingel nur per LED, Telegram Nachricht und Telegram Bild.


Otto123

#12
Der Peer ist im Prinzip ein Funk-Draht.  ;) (ohne FHEM)

Wenn Du das beeinflussen willst hilft Dir inhibit beim Aktor. Ich habe allerdings den Gong nicht und weiß nicht ob der das hat.

set <NameDesAktor> inhibit on verhindert die Bedienung per Peer, aber nicht die Bedienung per Zentrale (FHEM)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

s3bi

Gute Idee! Er hat Inhibit.

Würde also bedeuten ich schalte per Dummy -> notify -> Inhibit on um die Mp3 Ausgabe zu deaktivieren.

Otto123

#14
genau.

Wobei es viele Möglichkeiten gibt. Auch welche die am Anfang nicht so nahe liegen und eleganter sind.
readingsProxy z.B. :)

Beispiel FB Wlan aus ein schalten
defmod rp_FB_GWLAN1 readingsProxy FB7490:box_guestWlan
attr rp_FB_GWLAN1 devStateIcon on:it_wifi@green:off off:it_wifi@red:on
attr rp_FB_GWLAN1 event-on-change-reading .*
attr rp_FB_GWLAN1 room Haus
attr rp_FB_GWLAN1 setFn {($CMD eq "on")?"guestWlan on":"guestWlan off"}
attr rp_FB_GWLAN1 setList on off


Ginge sicher analog umzubauen für den Aktor für inhibit on off

Achtung das Reading inhibit wird nicht aktualisiert -> https://forum.fhem.de/index.php?topic=80618.0

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz