Ankündigung

Einklappen
Keine Ankündigung bisher.

Direktes Lesen/Schreiben von CV in MySQL

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

    Direktes Lesen/Schreiben von CV in MySQL

    Hallo ihr Cracks,
    da ich sowohl in HTML/XML als auch PHP/SQL ziemlicher Noob bin, bitte ich euch um einen Tipp: ich möchte in meiner Visu eine Schaltfläche einbauen, deren Wert (0/1) nicht auf den Bus geschrieben werden sondern in die Datenbank, die beim Wiregate das %plugin_info abbildet.
    Hintergrund: ich möchte so bequem Szenen vordefinieren können, die dann auf Knopfdruck (und da meine ich einen "richtigen" physischen Knopf an der Wand) ausgeführt werden. Das geht per Plugin, nur dazu brauche ich die o.g. Kommunikation.
    Danke für Tipps!
    Fry

    #2
    Hallo Fry

    Hmmm...

    Mit etwas PHP und dem URL Trigger könnte dass funktionieren. Aber ich habe immer noch nicht verstanden wiso du in die plugin_info DB schreiben willst. Kannst du nicht einfach eine GA beschreiben?
    Gruss Patrik alias swiss

    Kommentar


      #3
      Natürlich kann ich den Umweg über die GA nehmen. Aber dann brauche ich VIELE GAs (nämlich so viele, wie ich Lichter und Jalousien habe, mal die Anzahl der Szenen), und alle diese GAs dienen nur der Kommunikation des Wiregate mit sich selbst.

      Ich sehe die GA-Lösung _in diesem speziellen Fall_ daher als unsinnig an.
      Auch wenn ich ansonsten vollkommen zustimme, "alles auf den Bus" ist idR eine gute Devise. Aber nicht hier.

      Tja, wo kriege ich als PHP/HTML-Noob jetzt den nötigen Code her? Oder wenigstens eine Idee, wie dieser aussehen könnte (mit einer Vorlage kann man ja experimentieren...)

      VG, Fry

      Kommentar


        #4
        PS. mein TAUSENDSTER Beitrag !

        Kommentar


          #5
          Ja, einen Ähnlichen Ansatz suche ich auch. Bei mir geht es darum, dass der Bus nicht mit unnützen Informationen "verschmutzt" wird. Wenn ich extern die Kosten für den Stromverbrauch berechne, sie auf den Bus schicke nur damit die CV ihn wieder lesen kann, macht das wenig Sinn.

          Deshalb hatte ich an anderer Stelle schonmal dannach gefragt.

          Die einzige Idee wäre es, das Backend anzupassen, so dass andere Anfragen entsprechend ausgewertet werden.

          Leider habe ich mich mangels Zeit bis jetzt noch nicht da rangetraut. Ob PHP für den Job schnell genug ist, steht auch noch zur Frage. Das aktuelle eib Backend zumindestens ist in C programmiert.

          Bevor hier jetzt jemand anfängt, etwas zu implementieren, sollte wir vielleicht nochmal gemeinsam überlegen. Bei Dir wäre die Datenbank, ich denke einfach nur an memcached, der nächste will "sein" FS20 System einbinden...

          Wäre schön, wenn man das modular gestalten könnte.


          Gruß, Netsrac

          Kommentar


            #6
            PHP ist fürs Schreiben in MySQL definitiv schnell genug - genau dafür wird es ja in Webservern rund um die Welt eingesetzt.

            Und wenn es nur um ein paar wenige Datenpunkte ginge, würde ich dafür GAs kreieren. Es geht mir aber um folgendes:

            Mein Wiregate soll Szenen realisieren, indem ein Plugin auf eine gesendete Szenen-GA (von einem Tastsensor) das Wiregate mehrere Telegramme an Jalousien, Lichter usw hinterherfeuert. Die Zuordnung (Szenen-GA+Nummer auf Serie von Telegrammen) ist dabei in %plugin_info gespeichert, welches per Perl-tie an eine MySQL-Datenbank gekoppelt ist.

            Zum Programmieren der konkreten Szenen habe ich eine "Teach-in"-Funktion realisiert, ich finde das alleine aber noch nicht befriedigend. Lieber wäre mir - speziell für große Zimmer mit vielen Jalousien und Lichtern - ich könnte in der CV eine Tabelle vorsehen, in der man direkt pro Szene und pro Licht/Jalousie anhaken bzw. einstellen kann, was geschehen soll. Dazu fehlt mir nur der direkte Link zwischen CV und MySQL.

            Das sollte für einen PHP-Kenner kein großes Problem sein. Für mich ist es allerdings Neuland.

            VG, Fry

            Kommentar


              #7
              Ich verstehe immernoch nicht, warum Du dazu unbedingt MySQL benutzen willst. Um ein paar Tabellen mit Szenenwerten abzuspeichern wäre das der totale Overkill.

              Habe mich noch nicht mit Variablen-Limits im WG auseinandergesetzt, aber kannst Du das nicht direkt ins %plugin_info schreiben / lesen?

              Szenen sind eine absolut übliche EIB/KNX Funktion, die von (fast?) jedem Aktor unterstützt wird, die bekanntlicherweise sehr sparsam mit Ressourcen umgehen (müssen). Insofern verstehe ich nicht, warum man eine zig MByte große relationale Datenbank braucht um ein paar Bytes zu speichern und zu lesen.

              Kommentar


                #8
                Direktes Lesen/Schreiben von CV in MySQL

                Hoi

                Verstehe ich auch nicht. Allerhöchstens noch SQLite.
                Grüsse Bodo
                Fragen gehören ins Forum, und nicht in mein Postfach;
                EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                Kommentar


                  #9
                  Das Hash %plugin_info ist mittels des Perl-Kommandos "tie" im wiregated.pl an die Datenbank /tmp/wiregate_plugin.db geknüpft. Das bedeutet, jeder Schreib/Lesezugriff auf %plugin_info wird in einen Datenbankzugriff umgewandelt. Das ist übrigens auch der Grund, weshalb man nur Skalare in %plugin_info speichern kann (also keine Substruktur).

                  Mein Gedanke war nun, diese Datenbank und damit das Hash %plugin_info gleichzeitig mit dem wiregated.pl auch per CV/PHP-Skript zu lesen/schreiben und damit den Umweg über den Bus zu vermeiden.

                  Allerdings ist - da hatte ich mich geirrt - /tmp/wiregate_plugin.db keine MySQL-Datenbank, sondern eine Berkeley-Datenbank. Insofern ist mir auch nicht klar, ob man gleichzeitig mit einem PHP-Interface auf die DB zugreifen kann, oder ob das zu Fehlern führt. An dieser Verwirrung seht ihr schon, ich kenne mich damit nicht wirklich aus. EDIT: habs nachgesehen, Berkely DBs erlauben gleichzeitige Zugriffe über ein einfaches Modell namens "CDS". Das würde hier vermutlich reichen. Im Zweifel könnte man auch auf eine SQL-DB umstellen (MySQL oder SQLite), dann gehen parallele Zugriffe auf jeden Fall.

                  So oder so hätte ich also Bedarf für die Möglichkeit, per CV auf eine Datenbank zuzugreifen. Ich stelle mir das in der CV-Konfi praktisch so vor, dass man die vorhandenen Widgets nutzt, nur statt <address>...</address> eben ein <database>....</database>-Tag einführt, in dem der DB-Schlüssel genannt wird, der gelesen/geschrieben wird.

                  Kann eigentlich nicht so schwer sein. Nur für mich ist der Weg etwas lang, weil ich an XML/CSS/PHP/SQL nicht gewöhnt bin (ist aber Standardkram für Web-Programmierer).

                  Ist es jetzt klarer geworden? Tut mir leid, wenn ich die Frage nicht ganz korrekt gestellt habe. Jetzt ist es zumindest mir selbst klarer geworden. Implementieren kann ich es trotzdem noch nicht.

                  VG, Fry

                  PS. Noch was: ja, Szenen können viele Aktoren realisieren, aber offenbar ist das kein übergreifendes, einheitliches Konzept in KNX. Zumindest meine Aktoren haben offenbar mehrere verschiedene Konzepte dafür (zB Pear-Schaltaktor vs MDT-Dali-Gateway vs übrige MDT-Aktoren). Ich würde das daher lieber über ein WG-Plugin lösen.

                  Kommentar


                    #10
                    Ich verstehe immernoch nicht was Du wirklich willst, ich glaube Du verkomplizierst hier alles unnötig.
                    Mal so in den Raum geworfen:
                    - Wenn Du aus einem Plugin %plugin_info abrufst, geht das *nicht* über den Bus (insofern gibt es keinen "Umweg über den Bus")
                    - Ein Umstellen der wiregate_plugin.db auf MySQL ist mitnichten möglich. Du kannst evtl eine MySQL Datenbank erstellen, die die Datenstruktur hat, möglicherweise auch die Daten (zum Zeitpunkt der Konvertierung), aber das Wiregate selbst wird trotzdem weiterhin in die BDB in /tmp/wiregate_plugin.db schreiben und auch daraus lesen und nicht aus Deiner MySQL DB
                    - Direkt auf die BDB zuzugreifen mag gehen (da bin ich mir sogar ziemlich sicher), aber ich sehe nicht was Dir das bringt, was nicht auch im Wiregate-Kontext geht und außerdem besteht natürlich auch noch die Möglichkeit (ohne Dir zu Nahe treten zu wollen, aber bei dem Level sogar eine sehr große) dass Du Dir die DB schrotest und das WG dann ein Fall für den Support ist

                    Also nochmal von vorn: Was willst Du eigentlich erreichen? Was soll bei dem Knopfdruck passieren? Eine vordefinierte Szene abspielen? Wie willst Du die Szene einlernen?

                    Ich mir zu 99% sicher, das was Du erreichen willst mit einem einfachen WG Plugin ohne jeglichen direkten "DB" Zugriff möglich ist...

                    Kommentar


                      #11
                      Ok, dann erkläre ich es nochmal:

                      Ich HABE ein WG-Plugin, das Szenen realisiert. Es reagiert auf ein Telegramm zB eines Tasters, indem es mehrere Telegramme zB an Schaltaktoren und Jalousieaktoren sendet. Genau welche Inhalte es dabei sendet, wird in %plugin_info und damit in der Berkeley-DB /tmp/wiregate_plugin.db gespeichert. Soweit alles ok und PERLig. (Die Möglichkeiten der Wiregate-Plugins überblicke ich übrigens ganz gut -> die Plugins Szenencontroller, Logikprozessor, Ansagen und Anwesenheitssimulation sowie Heizungsregler stammen von mir).

                      Nun möchte ich in der CometVisu auf einfache Weise Szenen dieses Plugins programmieren ("einlernen") können. Ich stelle mir eine Seite in der Visu vor, in der ich auf einfache Weise in Tabellenform Szenen einprogrammieren kann (Tabellenzeile=Szenennummer, Spalte=Licht oder Jalousie). Soweit ist meine Vorstellung relativ einfach.

                      Das Problem ist, die beiden Sachen miteinander zu verbinden. Die CV läuft - soweit ich es verstehe - mit XML, Javascript, CSS, whatever, alles Sachen die ich nicht "kann", weil ich mich bisher nicht in Web-Programmierung eingearbeitet habe (bisher kein Anlass). Das einzige Medium, über das die CV kommunizieren kann - soweit ich weiß - ist der KNX-Bus. Um die o.g. Idee umzusetzen, müsste ich daher alles auf den Bus schicken. Das gefällt mir konzeptionell nicht, denn alles, was ich mit o.g. Tabelle machen will, ist die Datenbank /tmp/wiregate_plugin.db direkt lesen und schreiben.

                      Wie würdest du das technisch umsetzen?

                      VG, Fry

                      PS. Vermutlich wirst du jetzt darauf hinweisen, dass man Szenen "einlernen" kann, indem man Jalousien/Lichter schaltet und dann beim Senden der "Szene speichern"-GA diese Werte abfragt und speichert, um sie später bei der "Szene abrufen"-GA wieder aufzurufen. Genau das tut mein Plugin. Mein o.g. Ansatz soll helfen, dass man Szenen auch direkt und übersichtlich in Tabellenform eingeben kann, ohne den Umweg über das Teach-in gehen zu müssen.

                      Ein weiterer Grund, warum ich die direkte Programmierung möchte, ist dass nicht alle meine Aktoren überhaupt KOs dafür anbieten, alle eingestellten Werte abzufragen. Zum Beispiel hat der MDT-Dalicontrol nur ENTWEDER Rückmeldeobjekte für AN/AUS ODER Rückmeldeobjekte für den Dimmwert, aber nicht beides - und im Fall der Einzel-EVG-Ansteuerung gar kein Rückmeldeobjekt.

                      Kommentar


                        #12
                        Also ganz ehrlich ... bevor da alles umgebogen wird is es doch einfacher ein iframe/web einzubinden.

                        Also erstmal jenseits der CV den Kram in ein cgi/php/html zu gießen und dann via <web>...meinkram.cgi</web> in die CV einbinden.
                        Wie man nun via http auf die Datenbank zugreift kann ich auch nicht sagen (Null Plan) aber ich denke google wird da gut helfen können. Somit kannst Du Deine Perl-fähigkeiten da voll ausspielen

                        Grüße
                        Umgezogen? Ja! ... Fertig? Nein!
                        Baustelle 2.0 !

                        Kommentar


                          #13
                          Naja, generell ist die Idee ja nicht schlecht, noch andere "Connection Types" zu erlauben. Für meinen Fall wäre es memcached, den ich gerne nutzt würde im Werte in der CV darzustellen - Daten wir Stromverbrauch im diesen und im letzten Monat, daraus entstehende Kosten, Niederschlagsmende in bestimmten Zeiträumen...all das "verschmutzt" mir unnötig den Bus. Zumal sie von dem selben Rechner generiert und ermittelt werden, der die CV hostet....sie gehen also nur auf den KNX Bus um dann lokal wieder gelesen zu werden....macht irgendwie wenig Sinn.

                          Hatte aber leider noch keine Zeit, hier mal zu experimentieren...

                          Netsrac

                          Kommentar


                            #14
                            Mal andersrum gefragt: gibt es irgendwo eine Doku, wie die CV eigentlich funktioniert? Also wie die verschiedenen Skripte ineinandergreifen. Denn ich weiß momentan nichtmal, wo ich eigentlich anfangen muss zu lesen...

                            Kommentar


                              #15
                              Zitat von Fry Beitrag anzeigen
                              Mal andersrum gefragt: gibt es irgendwo eine Doku, wie die CV eigentlich funktioniert?
                              Jupp...das gibt es hier:

                              CometVisu/Protokoll (Deutsch) - Open Automation

                              Wobei im Moment eben nur "r" und "w" implementiert sind. Man müsste also entweder die CV davon überzeugen, verschiedene Backends zu nehmen oder - in meinen Augen die bessere Lösung - die "r" und "w" durch ein besseres Backend (evtl. mit Plugin-Basis) zu ersetzen...

                              Kommentar

                              Lädt...
                              X