Stehe im Moment vor einem Problem, das ein eigener LBS wohl nicht schnell genug ist für einen paralellen Betrieb.
Hintergrund: Ich schicke von meiner Haussteuerung Statusmeldungen per UDP an Edomi..
Empfangen tut der LBS UDP Receiver.. dieses macht er lt. Trace auch ordentlich und empfängt auch alle Pakete..
hinter dem UDP Receiver hängt ein LBS der mir den empfangen String zerlegt, vergleicht und einen Wert an einen KO übergibt.
von diesem LBS hängen viele am UDP Receiver.
lbs.png
Das klappt an sich ganz gut, sprich die Logik funktioniert.
Problem habe ich wenn zu viele Empfangen Daten gleichzeitig verglichen werden müssen.. dann werden mir immer wieder Werte verschluckt. (Bsp. alle Rollos fahren Zentral runter und melden ihren Status gleichzeitig).
Im UDP Receiver kommen wie gesagt alle Statusmeldungen an... am KO fehlen einige
Der LBS sieht wie folgt aus:
Wäre die Sache im EXEC Teil besser aufgehoben?
Bin noch frisch in der php Ecke.. vielleicht kann jemand behilflich sein
Im Log sieht man auch das bei hoher Frequenz der eingehenden Pakete die Logik nicht hinterherkommt
Hintergrund: Ich schicke von meiner Haussteuerung Statusmeldungen per UDP an Edomi..
Empfangen tut der LBS UDP Receiver.. dieses macht er lt. Trace auch ordentlich und empfängt auch alle Pakete..
hinter dem UDP Receiver hängt ein LBS der mir den empfangen String zerlegt, vergleicht und einen Wert an einen KO übergibt.
von diesem LBS hängen viele am UDP Receiver.
lbs.png
Das klappt an sich ganz gut, sprich die Logik funktioniert.
Problem habe ich wenn zu viele Empfangen Daten gleichzeitig verglichen werden müssen.. dann werden mir immer wieder Werte verschluckt. (Bsp. alle Rollos fahren Zentral runter und melden ihren Status gleichzeitig).
Im UDP Receiver kommen wie gesagt alle Statusmeldungen an... am KO fehlen einige
Der LBS sieht wie folgt aus:
Code:
###[DEF]### [name = Wert aus String] [e#1 = Eingangstrigger ] [e#2 = Vergleichsstring ] [e#3 = Seperator ] [a#1 = Übermittelter Wert ] ###[/DEF]### ###[HELP]### Vorlage: Standard-LBS ###[/HELP]### ###[LBS]### <? function LB_LBSID($id) { if ($E=getLogicEingangDataAll($id)) { if ($E[1]['refresh']==1) { $meinstring = $E[1]['value']; $findstring = $E[2]['value']; $sep = $E[3]['value']; if (strpos($meinstring, $findstring) !== FALSE) { $sepapos = strpos($meinstring, $sep); while ($sepapos !== FALSE) { $sepapos = strpos($meinstring, $sep) + 1; $meinstring = substr($meinstring, $sepapos); $sepapos = strpos($meinstring, $sep); } $lenfind = strlen($findstring); $lenmein = strlen($meinstring); $len = $lenfind - $lenmein; $wert = substr($meinstring, $len); setLogicLinkAusgang($id,1,$wert); writeToCustomLog('Wert aus String',0,$meinstring); } } } } ?> ###[/LBS]### ###[EXEC]### <? ?> ###[/EXEC]###
Wäre die Sache im EXEC Teil besser aufgehoben?
Bin noch frisch in der php Ecke.. vielleicht kann jemand behilflich sein
Im Log sieht man auch das bei hoher Frequenz der eingehenden Pakete die Logik nicht hinterherkommt
Code:
[TABLE="class: log, border: 0, cellpadding: 0, cellspacing: 0, width: 0, height: 12"] [TR] [TD]2016-09-18 23:53:37[/TD] [TD]103056[/TD] [TD]799[/TD] [TD]0[/TD] [TD]Rollo_Status_Wohnzimmer_1 15[/TD] [/TR] [TR] [TD]2016-09-18 23:53:37[/TD] [TD]281507[/TD] [TD]799[/TD] [TD]0[/TD] [TD]Rollo_Status_Wohnzimmer_2 51[/TD] [/TR] [TR] [TD]2016-09-18 23:53:37[/TD] [TD]297275[/TD] [TD]799[/TD] [TD]0[/TD] [TD]Rollo_Status_Wohnzimmer_1 16[/TD] [/TR] [TR] [TD]2016-09-18 23:53:37[/TD] [TD]315330[/TD] [TD]799[/TD] [TD]0[/TD] [TD]Rollo_Status_Wohnzimmer_2 52[/TD] [/TR] [TR] [TD]2016-09-18 23:53:37[/TD] [TD]511512[/TD] [TD]799[/TD] [TD]0[/TD] [TD]Rollo_Status_Wohnzimmer_2 53[/TD] [/TR] [TR] [TD]2016-09-18 23:53:37[/TD] [TD]618382[/TD] [TD]799[/TD] [TD]0[/TD] [TD]Rollo_Status_Wohnzimmer_1 18[/TD] [/TR] [/TABLE]
Kommentar