du könntest eine message queue verwenden. funktioniert aber nur wenn beide Kommunikations Partner auf derselben Maschine laufen. Ansonsten eine socket Verbindung.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Fragen zur LBS Erstellung
Einklappen
X
-
Zitat von murelli146 Beitrag anzeigen2.) 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.
PHP-Code:setLogicLinkAusgang($id,3,18);
Gruß
Michael
Kommentar
-
Zitat von jonofe Beitrag anzeigendu könntest eine message queue verwenden. funktioniert aber nur wenn beide Kommunikations Partner auf derselben Maschine laufen. Ansonsten eine socket Verbindung.
Bin zuerst auf PHP-Session gestoßen, würde das auch gehen oder hat das Nachteile?
Zitat von gulp2k Beitrag anzeigen
Du darfst die ID nicht fest vorgeben, die kommt zu Laufzeit dynamisch, also:
PHP-Code:setLogicLinkAusgang($id,3,18);
LBS übergibt LBS_ID an Serverscript > Im serverscript wird der Empfangene Wert direkt an den Ausgang gesetzt.
Im ServerScript "setLogicLinkAusgang(14,3,18);" ausführen.
Hintergrund:
Der LBS sollte nicht als Dämon laufen. Nur als Exec-Script.
Der LBS fragt beim Ersten start den Status an der Homematic Zentrale (CCU2) ab und initialisiert den XML-RPC Server vom EDOMI.
Von nun an werden die aktualisierten Stati an den XML Server geschickt (ich muss nicht ständig Werte im anderen System abfragen).
Ich möchte im Serverscript mehrere LBS mittels id anmelden und dann die aktualisierten Statuse an den jeweiligen LBS Ausgengen setzen.
Schickt die CCU2 Werte, prüfe ich die Events ob sie in einem LBS benötigt werden und setze den Ausgang auf den aktuellen Wert.
Für diese Lösung benötige ich einen Weg damit ich vom Serverscript aus direkt den Ausgang setzen kann.
So irgendwie:
PHP-Code:require '/usr/local/edomi/main/include/php/incl_lbsexec.php';
#Geplante Register ;)
#lbs_register[LBS_ID][LBS_Ausgang][HM_Addresse][Value_key]
#$lbs_register;
#homematic_events[interface_id][address][value_key][value]
#$homematic_events;
sql_connect();
setLogicLinkAusgang(lbs_register[3],3,$homematic_wert);
sql_disconnect();
Oder ändert sich die LBS_ID ständig.
Oder gibt es die LBS_ID gar nicht mehr wenn der LBS nicht als Dämon läuft?
Gäbe es noch eine Möglichkeit den Ausgang direkt zu setzen?
Kommentar
-
Hab gerade folgende Zeilen in einem php Script auf der Konsole gestartet:
PHP-Code:include '/usr/local/edomi/main/include/php/incl_lbsexec.php';
$id=14;
sql_connect();
setLogicLinkAusgang($id,3,'Hallo Welt');
sql_disconnect();
Hallo EDOMI Welt.PNG
Funktioniert !!!!!!
Spricht etwas gegen dieses vorgehen?
Schöne Grüße
Gernot
Kommentar
-
Das wäre der Plan.
Nach Neuaktivierung meldet sich der LBS mit der ID an.
und der Server übernimmt dann das aktualisieren der Ausgänge bei Statusänderung.
Es sollen später mehrere LBSen sich an dem Server registrieren.
Wenn mir das gelingt muss ich Werte nicht zyklisch vom Homematic System abfragen,
sondern der XML-RPC Server der CCU2 aktualisiert mir die Ausgänge am EDOMI.
Kommentar
-
Die ID ist meines Wissens die ID, die der LBS im Logik Editor bekommt. Daher wird sich die ID wohl nicht mit einer Neu-Aktivierung ändern.
Wenn man allerdings einen neuen LBS einfügt, wieder dieser eine andere ID erhalten. Über Projektgrenzen hinweg wird es nicht funktionieren.
Man könnte es auch wie folgt machen:
Code:$E = getLogicEingangDataAll($id); file_put_contents('/tmp/myconfig.php', '<?php $E=' . var_export($E, true) . '; $id=' . var_export($id, true) . ';');
PHP-Code:include_once "/tmp/myconfig.php";
Kommentar
-
Die Eingänge sind für meine Anwendung irrelevant.
Eingänge triggern nur ein EVENT auf der Homematic.
Ziel:
LBS_Wetterstation
LBS_Fensterkontakt
LBS_Türkontakt
LBS_Brandmelder
LBS_Motorschloss
Die Ausgänge sollen durch den XML-RPC Server aktuell gehalten werden.
Mein Serverscript wird bei jeder Aktualisierung der Homematic getriggert.
Die geänderten Werte landen im folgendem Format in einem Array, z.B. wenn die Wetterstation aktuelle Werte sendet:
Code:Array ( [0] => Array ( [methodName] => event [params] => Array ( [0] => 123456 [1] => LEQ0386538:1 [2] => TEMPERATURE [3] => 15.7 ) ) [1] => Array ( [methodName] => event [params] => Array ( [0] => 123456 [1] => LEQ0386538:1 [2] => HUMIDITY [3] => 90 ) ) [2] => Array ( [methodName] => event [params] => Array ( [0] => 123456 [1] => LEQ0386538:1 [2] => RAINING [3] => ) ) [3] => Array ( [methodName] => event [params] => Array ( [0] => 123456 [1] => LEQ0386538:1 [2] => RAIN_COUNTER [3] => 140.715 ) ) [4] => Array ( [methodName] => event [params] => Array ( [0] => 123456 [1] => LEQ0386538:1 [2] => WIND_SPEED [3] => 0 ) ) [5] => Array ( [methodName] => event [params] => Array ( [0] => 123456 [1] => LEQ0386538:1 [2] => WIND_DIRECTION [3] => 165 ) ) [6] => Array ( [methodName] => event [params] => Array ( [0] => 123456 [1] => LEQ0386538:1 [2] => WIND_DIRECTION_RANGE [3] => 45 ) ) [7] => Array ( [methodName] => event [params] => Array ( [0] => 123456 [1] => LEQ0386538:1 [2] => SUNSHINEDURATION [3] => 144 ) ) [8] => Array ( [methodName] => event [params] => Array ( [0] => 123456 [1] => LEQ0386538:1 [2] => BRIGHTNESS [3] => 7 ) ) )
Die LBSen sollen folgende Information in ein Array Schreiben
PHP-Code:$lbs_register[LBS_ID][LBS_Ausgang][HM_Addresse][Value_key]
zu welchem LBS und Ausgang der Wert gehört und schreibe den Wert in den entsprechenden Ausgang des LBS
Das ganze soll bei einem Script-durchlauf geschehen. Also bei jedem XML-RPC call.
Das ist der Plan.
Es muss mir nur noch eine elegante weise einfallen das $lbs_register zu erstellen und von den LBSen befüllen zu lassen.
Gibt es für sowas eineSuperGlobaleVariable
die ich ggf. bei einer Projektaktivierung löschen kann falls LBSen gelöscht werden??????
Kommentar
-
Danke für die bisherige Hilfe ich komme Stück für Stück weiter.
Könntet ihr mir eventuell nochmal bei diesem Teilproblem unter die Arme greifen?
Ich versuche mit php session variablen von script a nach script b zu bekommen.
Script a:
PHP-Code:session_start();
$_SESSION['lbs_register']='Hallo Welt';
PHP-Code:session_start();
$r=$_SESSION;
print_r ($r);
es wird nur ein leeres Array ausgegeben.
Führe ich das ganze zum Testen in einem Skript aus funktioniert es
PHP-Code:session_start();
$_SESSION['lbs_register']='Hallo Welt';
$r=$_SESSION;
print_r ($r);
Kommentar
-
Fertiges Beispiel nicht aber im Prinzip kannst du mit json_encode und json_decode beliebige Variablen, Arrays usw in einen String konvertieren und denn dann wegschreiben bzw mit decode wieder einlesen. Hat auch den Vorteil das es von Menschen hinterher noch bearbeitet werden kann wenn nötig.
Es gibt schon ein paar JSON LBSe da kannst du mal reinschauen.Gruß
Michael
Kommentar
Kommentar