Zitat von gaert
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
Fragen zur LBS Erstellung
Einklappen
X
-
Das bedeutet also, wenn ich in EINEM-Ausgang-LBS z.B. 5 Eingänge eines anderen Bausteins verändere, dann wird dieser Baustein nur einmal aufgerufen und hat schon alle 5 Werte gesetzt, d.h. alle haben E[$i]['refresh']==1. Damit ist es also völlig egal, in welcher Reihenfolge in einem Ausgang die Werte gesetzt werden, da diese Werte ohnehin zuerst alle gesetzt werden, bevor die Logik-Engine den nächsten LBS ausführt. Richtig?
-
Das gilt dann aber nur, wenn der LBS seine Eingänge von unterschiedlichen Quellen sammelt, richtig? Wenn alles aus einem Ausgangs-LBS kommt, dann sollten doch auch alle Werte anliegen, die dieser Ausgang gesetzt hat, bevor der LBS ausgeführt wird.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 ...
Ist das okay?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
iIch bekomme eine Ausgabe der Länge und auch die ENDE-Info, aber weder auf Ausgang 1 noch auf Ausgang 2 ist etwas vorhandenCode: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 vonspeichern und mit Hilfe vonPHP-Code:logic_setVar($id,1,$v);
restaurieren?PHP-Code:$v = logic_getVar($id,1);
Nach einem
istPHP-Code:$v = logic_getVar($id,1);
stets false auch wenn ich im Vorfeld ein Array abgespeichert habe.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
-
Du musst die Variable "serialisieren", das geht so.Zitat von phili Beitrag anzeigenwie kann ich ein im LBS definiertes Array ($v= array()) mit Hilfe vonspeichern und mit Hilfe vonPHP-Code:logic_setVar($id,1,$v);
restaurieren?PHP-Code:$v = logic_getVar($id,1);
Da steht die Antwort schon drinZitat 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:
Habe mir vom LBS die ID ausgeben lassen (14) und wollte auf diese aus einem PHP Script schreiben.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