ESP32 10Fach LowLevelRealis / sehr lahm

Begonnen von patman1607, 15 Januar 2019, 21:55:30

Vorheriges Thema - Nächstes Thema

patman1607

Hallo zusammen,

Meine Konfig:
FHEM läuft auf einem Raspi
ESP32 mit ESPEasy - Firmware: Build   20100 - Mega32
10 Fach LowLevelRelais

den ESP hab ich so eingebunden:
define ESPEasy_ESP32_deckenlampe_Relay01 ESPEasy 192.168.0.248 80 espBridge ESP32_deckenlampe_Relay1
attr ESPEasy_ESP32_deckenlampe_Relay01 IODev espBridge
attr ESPEasy_ESP32_deckenlampe_Relay01 Interval 300
attr ESPEasy_ESP32_deckenlampe_Relay01 devStateIcon on:ios-on-green:off off:ios-off:on
attr ESPEasy_ESP32_deckenlampe_Relay01 eventMap /gpio 13 off:on/gpio 13 on:off/
attr ESPEasy_ESP32_deckenlampe_Relay01 group ESPEasy Device
attr ESPEasy_ESP32_deckenlampe_Relay01 presenceCheck 1
attr ESPEasy_ESP32_deckenlampe_Relay01 readingSwitchText 1
attr ESPEasy_ESP32_deckenlampe_Relay01 room ESPEasy
attr ESPEasy_ESP32_deckenlampe_Relay01 setState 3
attr ESPEasy_ESP32_deckenlampe_Relay01 stateFormat Switch

define ESPEasy_ESP32_deckenlampe_Relay02 ESPEasy 192.168.0.248 80 espBridge ESP32_deckenlampe_Relay2
attr ESPEasy_ESP32_deckenlampe_Relay02 IODev espBridge
attr ESPEasy_ESP32_deckenlampe_Relay02 Interval 300
attr ESPEasy_ESP32_deckenlampe_Relay02 devStateIcon on:ios-on-green:off off:ios-off:on
attr ESPEasy_ESP32_deckenlampe_Relay02 eventMap /gpio 12 off:on/gpio 12 on:off/
attr ESPEasy_ESP32_deckenlampe_Relay02 group ESPEasy Device
attr ESPEasy_ESP32_deckenlampe_Relay02 presenceCheck 1
attr ESPEasy_ESP32_deckenlampe_Relay02 readingSwitchText 1
attr ESPEasy_ESP32_deckenlampe_Relay02 room ESPEasy
attr ESPEasy_ESP32_deckenlampe_Relay02 setState 3
attr ESPEasy_ESP32_deckenlampe_Relay02 stateFormat Switch
...usw...


Jetzt Sehe ich im Raum 10 wunderbare Relais untereinander.
Ich muss sagen das ich ein ganz schöner DOIF Anfänger bin und noch viel Hilfe brauche. Jedoch habe ich ein DOIF gebastelt welches auch Funktioniert. Jedoch ist die Abarbeitung so was von Langsam von Bedingung erfüllt bis Relais nun wirklich schalten...
Das erste Relais schaltet Relativ Fix und dann vergehen mind 3 - 4 Sek. bis das nächste Relai schaltet.

DOIF inkl Schalterdummy:
define Deckenlampe_alle dummy
attr Deckenlampe_alle room ESPEasy
attr Deckenlampe_alle webCmd on:off

define do_Deckenlampe_alle DOIF ([Deckenlampe_alle:"on"]) ((set ESPEasy_ESP32_deckenlampe_Relay01 on) , (set ESPEasy_ESP32_deckenlampe_Relay02 on) , (set ESPEasy_ESP32_deckenlampe_Relay03 on) , (set ESPEasy_ESP32_deckenlampe_Relay04 on) , (set ESPEasy_ESP32_deckenlampe_Relay05 on) , (set ESPEasy_ESP32_deckenlampe_Relay06 on) , (set ESPEasy_ESP32_deckenlampe_Relay07 on) , (set ESPEasy_ESP32_deckenlampe_Relay08 on) , (set ESPEasy_ESP32_deckenlampe_Relay09 on) , (set ESPEasy_ESP32_deckenlampe_Relay10 on)) DOELSE ((set ESPEasy_ESP32_deckenlampe_Relay01 off) , (set ESPEasy_ESP32_deckenlampe_Relay02 off) , (set ESPEasy_ESP32_deckenlampe_Relay03 off) , (set ESPEasy_ESP32_deckenlampe_Relay04 off) , (set ESPEasy_ESP32_deckenlampe_Relay05 off) , (set ESPEasy_ESP32_deckenlampe_Relay06 off) , (set ESPEasy_ESP32_deckenlampe_Relay07 off) , (set ESPEasy_ESP32_deckenlampe_Relay08 off) , (set ESPEasy_ESP32_deckenlampe_Relay09 off) , (set ESPEasy_ESP32_deckenlampe_Relay10 off))
attr do_Deckenlampe_alle room ESPEasy


Das gleiche Verhalten habe ich auch wenn ich einen Anschalter nach dem anderen im Webinterface betätige...
Klick Relai01 an -> an
Klick Relai02 an ->...........-> an
Klick Relai02 an ->...........-> an
Bei der Problematik ist es völlig egal ob an oder aus geschaltet wird.
liegt es am Trägen Raspi oder Aufgeblähtem FHEM welches über die Jahre gewachsen ist?

Ich hoffe Ihr habt ein paar Tips

Fritte 7950
FHEM on RasPi 3

Otto123

Hi,

schaltet den der Befehl set ESPEasy_ESP32_deckenlampe_Relay0. on oder set ESPEasy_ESP32_deckenlampe_Relay0. offin der FHEM Kommandozeile schneller?

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

patman1607

Also der erste Befehl der abgesetzt wird ist immer Schnell umgesetzt
Gebe ich ein set
ESPEasy_ESP32_deckenlampe_Relay01 off
ein Klickt es sofort nach der Entertaste.
Gebe ich ein

set ESPEasy_ESP32_deckenlampe_Relay01 off ; set ESPEasy_ESP32_deckenlampe_Relay02 off ; set ESPEasy_ESP32_deckenlampe_Relay03 off ; set ESPEasy_ESP32_deckenlampe_Relay04 off ; set ESPEasy_ESP32_deckenlampe_Relay05 off

ist das erste super schnell mit Entertaste da und bis das nächste schaltet vergehen gute 4 Sekunden.
Fritte 7950
FHEM on RasPi 3

Otto123

Gut das war nicht mein Tipp/Frage aber ist sicher das Gleiche.
Keine weitere Idee sorry...

Mein Befehl oben macht übrigens genau das, was deine zweite Befehlskette auch macht.
Probier es einfach, trau Dich! der Ausdruck mit dem Punkt am Ende ist ein regExp und nichts zum ersetzen oder so  ;D

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

patman1607

#4
Ah, wieder was gelernt. cool!!!
Aber leider ist das Ergebnis das selbe.  :'(

Muss wohl am FHEM bzw Raspi liegen...
wenn ich ganz viele Browser auf mache und den befehl eingebe :
http://192.168.0.248/control?cmd=GPIO,23,1 -> Enter und im nächsten Fenser:
http://192.168.0.248/control?cmd=GPIO,22,1 -> Enter gehts viel schneller.
Wie gibt man denn die Befehle im FHEM ein evtl gleich im DOIF von oben?
Fritte 7950
FHEM on RasPi 3

Otto123

naja scheint so als ob es eine Verzögerung beim Handling mehrere Befehle gibt. Warten auf Antwort, Bestätigung oder was auch immer. Es gibt ein paar Parameter in der Doku, hab leider keine Ahnung.
Kannst Du nicht mehrere Ports mit einem Mal setzen? Und dann ein Gruppen on / off definieren?

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

patman1607

Das wäre noch eine Idee mit den Rules zu Arbeiten welche ESPEASY mitbringt. Aber da muss ich mich auch erst mal einarbeiten.
In FHEM werden, egal wie, die Befehle immer nacheinander abgearbeitet? Wie war denn das mir Gruppen in FHEM?

Mein Vorhaben ist:
10 Spots welche in der Küchendecke sind einzeln zu Steuern je nach Stimmung und Tätigkeit.
Mal will ich 4 anschalten weil ich Backe  ;)
Mal will ich 10 anschalten weil ich ...
Mal nur links
Mal nur rechts

wenn ich in FHEM Gruppe eins mit Relais 1 2 3
Gruppe zwei mit 4 5 6 erstelle darauf ein Notify welches erst Gr1 und dann Gr2 schaltet...
Wird doch bestimmt auch alles nacheinander abgearbeitet.


Fritte 7950
FHEM on RasPi 3

dev0

#7
ZitatIn FHEM werden, egal wie, die Befehle immer nacheinander abgearbeitet?
Kurz: FHEM arbeitet single threaded, das heißt aber nicht, dass auf eine Antwort vom Device gewartet werden muss bevor ein neuer Request an ein Device gestellt werden kann, im Gegenteil sogar.

Das ESPEasy Modul schickt per default 3 "gleichzeitige" Requests an jeden einzelnen ESP. Der Rest wird gequeued und geschickt sobald ein Request beendet wurde. Siehe cref Attribut maxHttpSessions. Der Höchstwert wird durch die ESP Hardware bestimmt (ESP8266 vs. ESP32...).

Dein Problem wird aber nicht das ESPEasy Modul oder FHEM im Allgemeinen sein, sondern andere blockierende Routinen in Deiner Konfig oder die ESP32 Firmware hat noch Schwierigkeiten. Wenn Du mit global verbose 5 loggst, könntest Du vielleicht mehr erkennen.
Edit: Die Logausgabe des ESPEasy Moduls ist im Wiki dokumentiert. ;)

patman1607

Erst mal ein dickes DANKE für das Troubleshooting. Es hat mich sehr weiter gebracht.

Immo habe ich es so gelöst das ich mit den internen Rules von ESPEasy arbeite und von FHEM jediglich der Trigger kommt.

so sieht das ESPDevice aus:
define ESPEasy_ESP32_deckenlampe_Relay10 ESPEasy 192.168.0.248 80 espBridge ESP32_deckenlampe_Relay10
attr ESPEasy_ESP32_deckenlampe_Relay10 IODev espBridge
attr ESPEasy_ESP32_deckenlampe_Relay10 Interval 300
attr ESPEasy_ESP32_deckenlampe_Relay10 devStateIcon on:ios-on-green:off off:ios-off:on
attr ESPEasy_ESP32_deckenlampe_Relay10 eventMap /gpio 23 off:on/gpio 23 on:off/
attr ESPEasy_ESP32_deckenlampe_Relay10 group ESPEasy Device
attr ESPEasy_ESP32_deckenlampe_Relay10 presenceCheck 0
attr ESPEasy_ESP32_deckenlampe_Relay10 readingSwitchText 1
attr ESPEasy_ESP32_deckenlampe_Relay10 room ESPEasy
attr ESPEasy_ESP32_deckenlampe_Relay10 setState 3
attr ESPEasy_ESP32_deckenlampe_Relay10 stateFormat Switch


so der Dummy der dann das Notify Triggert

define Deckenlampe_alle dummy
attr Deckenlampe_alle room ESPEasy
attr Deckenlampe_alle webCmd on:off

### Notify 10 an und aus
define ntfy_Decke_alle_on notify Deckenlampe_alle:on { GetHttpFile("192.168.0.248:80","/control?cmd=event,10an") }
attr ntfy_Decke_alle_on room ESPEasy

define ntfy_Decke_alle_off notify Deckenlampe_alle:off  { GetHttpFile("192.168.0.248:80","/control?cmd=event,10aus") }
attr ntfy_Decke_alle_off room ESPEasy


und die Rule vom ESP / Bereits mit mehreren Funktionen

On 10aus do
gpio,13,1
gpio,12,1
gpio,14,1
gpio,27,1
gpio,26,1
gpio,25,1
gpio,33,1
gpio,32,1
gpio,22,1
gpio,23,1
endon

On 10an do
gpio,13,0
gpio,12,0
gpio,14,0
gpio,27,0
gpio,26,0
gpio,25,0
gpio,33,0
gpio,32,0
gpio,22,0
gpio,23,0
endon

On 4an do
if
gpio,13,1
gpio,14,1
gpio,26,1
gpio,25,1
gpio,32,1
gpio,23,1
else
gpio,12,0
gpio,27,0
gpio,33,0
gpio,22,0
endon

On 6an do
if
gpio,12,1
gpio,27,1
gpio,33,1
gpio,22,1
else
gpio,13,0
gpio,14,0
gpio,26,0
gpio,25,0
gpio,32,0
gpio,23,0
endon


Ciao bis bald  ;)
Fritte 7950
FHEM on RasPi 3

dev0

Zitat von: patman1607 am 17 Januar 2019, 22:05:41
{ GetHttpFile("192.168.0.248:80","/control?cmd=event,10an") }
Das ist ein gutes Beispiel wie man es nicht machen sollte. Wenn der ESP erreichbar ist, dann blockierst Du Deine gesamte FHEM Installation für mindestens 1,5 Sekunden. Wenn der ESP nicht erreichbar sogar für 3 Sekunden.

Wenn Du das ESPEasy oder MQTT Modul nicht verwenden willst (beide blockieren nicht), dann nimm zumindest HttpUtils_NonblockingGet statt GetHttpFile. Siehe Wiki zu httpUtils.

patman1607

Zitat von: dev0 am 18 Januar 2019, 07:08:38
Das ist ein gutes Beispiel wie man es nicht machen sollte. Wenn der ESP erreichbar ist, dann blockierst Du Deine gesamte FHEM Installation für mindestens 1,5 Sekunden. Wenn der ESP nicht erreichbar sogar für 3 Sekunden.

Wenn Du das ESPEasy oder MQTT Modul nicht verwenden willst (beide blockieren nicht), dann nimm zumindest HttpUtils_NonblockingGet statt GetHttpFile. Siehe Wiki zu httpUtils.

Habe eben mal wieder etwas Zeit mit der Geschichte verbracht da mir ehem wirklich paar mal "abgeschmiert" bzw nicht mehr reagiert hatte als ich meine Lampen geschaltet habe.
Im Moment habe ich es mit
{ HttpUtils_NonblockingGet( { url=>"http://192.168.0.248/control?cmd=event,4an", callback=>sub() { } }) }
umgebastelt in der Hoffnung es läuft Stabiler  8)
Fritte 7950
FHEM on RasPi 3