Ankündigung

Einklappen
Keine Ankündigung bisher.

Fragen zur LBS Erstellung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #46
    du könntest eine message queue verwenden. funktioniert aber nur wenn beide Kommunikations Partner auf derselben Maschine laufen. Ansonsten eine socket Verbindung.

    Kommentar


      #47
      Zitat von murelli146 Beitrag anzeigen
      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); 
      Habe mir vom LBS die ID ausgeben lassen (14) und wollte auf diese aus einem PHP Script schreiben.
      Funktioniert so leider nicht.
      Du darfst die ID nicht fest vorgeben, die kommt zu Laufzeit dynamisch, also:
      PHP-Code:
      setLogicLinkAusgang($id,3,18); 
      $id wird automatisch gesetzt, darum must du dich nicht kümmern.
      Gruß
      Michael

      Kommentar


        #48
        Zitat von jonofe Beitrag anzeigen
        du könntest eine message queue verwenden. funktioniert aber nur wenn beide Kommunikations Partner auf derselben Maschine laufen. Ansonsten eine socket Verbindung.
        message queue werde ich mir ansehen. Läuft alles auf einer Maschine.
        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); 
        $id wird automatisch gesetzt, darum must du dich nicht kümmern.
        Im Serverscript habe ich mir die "incl_lbsexec.php" eingebunden.
        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(); 
        Sollte doch so Funktionieren wenn ich die LBS ID weiß.
        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


          #49
          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(); 
          und siehe da.
          Hallo EDOMI Welt.PNG

          Funktioniert !!!!!!

          Spricht etwas gegen dieses vorgehen?

          Schöne Grüße
          Gernot

          Kommentar


            #50
            naja, spätestens wenn du dein Projekt neu aktivierst besteht die Chance das sich die ID ändert.
            Du könntest die ID ja bei jedem LBS start im Exec Teil i. eine Datei schreiben und diese dann auslesen.
            Gruß
            Michael

            Kommentar


              #51
              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


                #52
                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) . ';');
                Wenn das aus dem LBS aufgerufen wird, dann hast du ein php include File, welches Deine Eingänge und deine ID enthält.

                PHP-Code:
                include_once "/tmp/myconfig.php"
                reicht dann in deinem Skript um direkt auf $id und $E[#][value] zuzugreifen.

                Kommentar


                  #53
                  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
                  Ich vergleiche aufgrund der Addresse LEQ0386538:1 und dem Parameter BRIGHTNESS,
                  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 eine SuperGlobaleVariable die ich ggf. bei einer Projektaktivierung löschen kann falls LBSen gelöscht werden??????


                  Kommentar


                    #54
                    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'
                    Script b:
                    PHP-Code:
                    session_start();
                    $r=$_SESSION;
                    print_r ($r); 
                    Ich führe script a aus (variable setzen), dann Skript b
                    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); 
                    Hat jemand einen Tipp für mich?

                    Kommentar


                      #55
                      Soweit ich weiss funktionieren Sessions nicht im PHP CLI sondern nur in Verbindung mit einem Webserver.

                      Ich würde die Kommunikation über File oder Message Queue machen.

                      Kommentar


                        #56
                        jonofe

                        Hab meine ersten Tests mit file gemacht. Funktioniert viel einfacher als anfangs gedacht.

                        Vielen Dank für deine Unterstützung!

                        Schöne Grüße
                        Gernot

                        Kommentar


                          #57
                          Könnte man mit file auch remanente Daten über einen Edomi Neustart in einer Datei speichern?
                          Gibt es vielleicht schon einen LBS der das so macht?

                          Ich suche noch eine Alternative für das remanente iKO.

                          Kommentar


                            #58
                            Ich denke es kommt darauf an was du speichern möchtest...
                            Im Prinzip kannst du so alles speichern, du mußt dir halt Gedanken machen in welchem Format usw.
                            Gruß
                            Michael

                            Kommentar


                              #59
                              Aktuell mal nur einen Zählerstand. Später evtl. noch den Statusstring meines Statusmanagers.

                              Was muss ich den da beachten?
                              Hast du evtl. ein Beispiel?

                              Kommentar


                                #60
                                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

                                Lädt...
                                X