Zitat von gaert
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
Fragen zur LBS Erstellung
Einklappen
X
-
-
Zitat von gaert Beitrag anzeigen
EDIT:
Wenn Du erreichen willst, dass Dein LBS quasi erstmal irgendwelche Parameter "sammelt" und dann eine Aktion ausführt, muss der LBS einen Trigger-Eingang haben - dieser Eingang löst dann die Aktion aus. Denn ansonsten würde es quasi vom Zufall abhängen, ob schon alle Parameter anliegen oder nicht.
Anders verhält es sich allerdings beim Start von EDOMI: Wenn die Parameter als Initialwerte angegeben sind, liegen diese garantiert schon an bevor irgendein KO/LBS diesen LBS triggern wird.
Kommentar
-
Absolut korrekt
Bitte beachte auch mein EDIT in #30...
EDIT:
Überschnitten...
EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)
Kommentar
-
zu #31 und #32: Beides absolut richtig!EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)
Kommentar
-
Ich muss dann doch noch mal weiter fragen:
gleiches Szenario wie vorher: mehrere Konfigurationseingänge, ein Triggereingang. Ausführung des Befehls im EXEC Teil des LBS. Wie kann ich im EXEC zuverlässig feststellen, welche Eingänge geändert wurde? Habe nämlich einige Eingänge die sich ggf. wiedersprechen, z.B. ein Eingang mit RGB Farbwert und einen anderen mit HSV Farbwert. Es ist natürlich nur der relevant, der geändert wurde. Um auf Nummer sicher zu gehen würde ich jetzt meine bevorzugte Message-Queue nehmen. Oder sollte ich es über eine v#-Variable machen?
EDIT: würde es wohl jetzt mal so machen ...
PHP-Code:// Eingänge 5 bis 14 auf Änderung prüfen und in #v2 speichern
$changed = array();
for ($i=5;$i<=14;$i++) if ($E[$i]['refresh']==1) $changed[$i]=$E[$i]['value'];
setLogicElementVar($id,2,serialize($changed));
callLogicFunctionExec(LBSID,$id);
Ist vermutlich nur das Risiko, dass ein mehrfaches Triggern des LBS ggf. den Wert von v#2 überschreibt, bevor der EXEC Baustein es ausgeführt hat, oder? Wobei das vermutlich im Falle eines normalen EXEC Bausteins wie in diesem Beispiel recht unwahrscheinlich ist, da der EXEC Teil unmittelbar aufgerufen wird und nicht als Daemon läuft.Zuletzt geändert von jonofe; 18.04.2016, 20:04.
Kommentar
-
Das bleibt Dir überlassen... Der EXEC-Teil ist ja nur ein unabhängig laufendes Script und kann daher nur per DB/msg-Queue/shared-mem/etc. mit dem Logik-Prozess (also in diesem Fall der LBS-Funktion) kommunizieren. Ich würde es (im Normalfall) per v# machen - kommt halt drauf an (Performance)EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)
Kommentar
-
Wollte keinen neuen Thread aufmachen, deshalb hier, die Überschrift kommt ja auch hin...
Ich bin am verzweifeln. Hab einen LBS entwickelt der schonmal einigermassen funktioniert hat. Jetzt kommt aber am Ausgang nichts mehr raus, obwohl getriggert wird, was im LOG ja erkennbar ist
iCode:f ($debug==1) writeToCustomLog('LBS19000341 Reminder Liste',1,'Länge: '.strlen($liste)); setLogicLinkAusgang($id,1,$liste); setLogicLinkAusgang($id,2,date('d.m.Y H:i',time())); if ($debug==1) writeToCustomLog('LBS19000341 Reminder Liste',1,'ENDE'.$liste);
Projekt ist aktualisiert und auch auch alle LBS neu eingelesen.
Kommentar
-
Ihr Lieben,
wie kann ich ein im LBS definiertes Array ($v= array()) mit Hilfe vonPHP-Code:logic_setVar($id,1,$v);
PHP-Code:$v = logic_getVar($id,1);
Nach einem
PHP-Code:$v = logic_getVar($id,1);
PHP-Code:is_array($v)
Außerdem sorgt mein LBS dafür, dass folgendes in den Error-Logs steht:Datei: /var/edomi-backups/_public/www/shared/php/base.php | Fehlercode: 2 | Zeile: 284 | utf8_decode() expects parameter 1 to be string, array given
Kommentar
-
Zitat von phili Beitrag anzeigenwie kann ich ein im LBS definiertes Array ($v= array()) mit Hilfe vonPHP-Code:logic_setVar($id,1,$v);
PHP-Code:$v = logic_getVar($id,1);
Zitat von phili Beitrag anzeigenutf8_decode() expects parameter 1 to be string, array given
Keine Ahnung was genau Du machen musst, ich kenn den Source-Code nicht... Glaskugel runtergefallen und so
Jedenfalls kein Array sondern einen String uebergeben, $v[0] oder so.
Kommentar
-
Versuch das Array per serialize und deserialize bzw. json_encode und json_decode in die Variable zu schreiben und wieder auszulesen.
Im Grunde wie wintermute schon schrieb, speicherst Du dann nur noch einen String in der Variable.
Edit: Ah, den Link von wintermute hatte ich übersehen. Da stehts ja schon beschrieben. Sorry.
Kommentar
-
Benötige auch etwas Hilfe bei der LBS Entwicklung.
Ich habe einen LBS der über XML-RPC mit meiner Homematic CCU2 kommuniziert am Laufen. Befehl senden und Werte abfragen funktioniert.
Ich habe in meiner Entwicklungsumgebung einen PHP XML-RPC Server am laufen.
Ich melde den Server an der CCU2 an. Die CCU2 schickt nun alle Änderungen (Events) an den XML-RPC Server,
wo ich nun die frisch angekommenen Events in einem array vorliegen habe. (Bis dahin hab ich es schon mal geschafft)
Bevor ich frustriert aufgebe und ich in einer Sackgasse lande frage ich lieber um Rat.
Problemstellung:
Ich möchte die aktualisierten Werte an die LBS-Ausgänge senden.
1.) Wie bekomme ich Daten vom LBS ins Serverscript? (LBS_ID / LBS_Ausgang_Nr/ HM_Addresse /HM_Value_Key)
2.) Wie schreibe ich die Daten zurück in den LBS? (LBS_Ausgang / HM_Value)
hätte mir sowas gedacht:
PHP-Code:include '/usr/local/edomi/main/include/php/incl_lbsexec.php';
setLogicLinkAusgang(14,3,18);
Funktioniert so leider nicht.
Schöne Grüße
Gernot
Kommentar
Kommentar