Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - knx_read aus anderem plugin

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] - √ - knx_read aus anderem plugin

    Hallo Makki!
    Hab gestern in der WG Hilfe gelesen, dass man knx_read nicht von GAs machen soll, die in einem anderen Plugin geschrieben wird.
    Leider mache ich das mehrfach, zB gleitender Mittelwert berechnen und senden (zyklisch), und an anderer Stelle in ein rrd schreiben. Hintergrund sind mehrere Plugins, in der alle rrd beschrieben werden.

    Was macht eigentlich ein knx_read(xyz_ga) ohne weiterer Parameter? Was sind dann Max_alter bzw. DPT? Hat sich bei PL30-32 daran was geändert?

    Wie kann man mit plugin_Info Werte aus anderen Plugins lesen? Plugin_Info.Wert liest ja aus dem lokalem Plugin?

    Danke für die Infos, Robert

    #2
    Das man das nicht machen soll liegt ganz einfach daran das es ein einzelner Prozess ist und damit ein deadlock eintritt:
    Versucht ein Plugin etwas zu lesen und wartet auf eine AW, kann das andere gerade nicht laufen und antworten..

    Die Lösung ist aber ganz einfach:
    - Ein plugin schreibt zyklisch einen Wert auf den KNX (sagen wir mal alle 300s)
    - Ein anderes Plugin ist so nett einfach den eibd-Cache zu verwenden und macht einen knx_read("1/2/3",0)
    0=den Wert mit beliebigen Alter aus dem Cache lesen, alternativ etwas >300 in diesem Beispiel, macht aber keinen Sinn, weil heiss lesen kann es eh nicht..

    Default ist max_alter = 0 (=cache) und DPT nur wenns in der config entsprechend importiert/angelegt ist.

    plugin_info ist ein ganz simpler eindimensionaler Hash; wenn ich im Plugin "MeinErstes.pl" sage
    $plugin_info{$plugname . '_meinwert'} = 0815;
    ist das nichts anderes wie
    $plugin_info{'MeinErstes.pl_meinwert'} = 0815;

    und entsprechend kann man auch aus jedem anderen Plugin auf die Variable zugreifen, solange man den Namen des Plugins "weiss".
    "." ist nur ein Zeichen und nicht das richtige, "_" ist der richtige Trenner dafür!

    Makki
    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
    -> Bitte KEINE PNs!

    Kommentar


      #3
      Zitat von makki Beitrag anzeigen
      Die Lösung ist aber ganz einfach:
      - Ein plugin schreibt zyklisch einen Wert auf den KNX (sagen wir mal alle 300s)
      - Ein anderes Plugin ist so nett einfach den eibd-Cache zu verwenden und macht einen knx_read("1/2/3",0)
      Hallo Makki!

      Danke für deine ausführliche Antwort.
      Das mit zykl. senden und woanders lesen mach ich bereits so und funktioniert auch gut, und man hat die Werte auch gleich auf dem Bus für die Visu.

      Wobei: Wie läuft das dann mit dem Lesen in der CV. Das WG hat ja für diese GAs kein "Lesen-Flag", die Werte kommen damit aus dem Buffer des eibd, oder?
      Nachdem ich mit dem Betriebsstundenzähler diverser Geräte (WP, ZSS, etc). und der Anzeige in der Visu teilweise Probleme habe, passt dieser Punkt hier gut dazu.

      Zitat von makki Beitrag anzeigen
      plugin_info ist ein ganz simpler eindimensionaler Hash; wenn ich im Plugin "MeinErstes.pl" sage
      $plugin_info{$plugname . '_meinwert'} = 0815;
      ist das nichts anderes wie
      $plugin_info{'MeinErstes.pl_meinwert'} = 0815;

      und entsprechend kann man auch aus jedem anderen Plugin auf die Variable zugreifen, solange man den Namen des Plugins "weiss".
      "." ist nur ein Zeichen und nicht das richtige, "_" ist der richtige Trenner dafür!

      Makki
      Das ist schlüssig und hilfreich, vielleicht bin ich ja der einzige der solche Fragen stellt, ansonsten wär das auch was für die WG Hilfe bei den Plugins?

      Danke lg
      Robert

      Kommentar


        #4
        Zitat von Robert_Mini Beitrag anzeigen
        Wobei: Wie läuft das dann mit dem Lesen in der CV. Das WG hat ja für diese GAs kein "Lesen-Flag", die Werte kommen damit aus dem Buffer des eibd, oder?
        So ist es.. Ist der Wert im Cache wird er genommen, ist da nichts, wird *einmalig* ein Lese-telegramm abgesetzt.
        Lesen ist ja nur worst-case zum initialisieren, Werte die man haben will sollte man (mal ganz unabhängig von WG & CV) so regelmässig zyklisch oder bei Änderung senden lassen wie man sie braucht..

        Makki
        EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
        -> Bitte KEINE PNs!

        Kommentar


          #5
          Hallo zusammmen!

          Ich muss diesen Thread nochmal aufgreifen!

          Zitat von makki Beitrag anzeigen
          plugin_info ist ein ganz simpler eindimensionaler Hash; wenn ich im Plugin "MeinErstes.pl" sage
          $plugin_info{$plugname . '_meinwert'} = 0815;
          ist das nichts anderes wie
          $plugin_info{'MeinErstes.pl_meinwert'} = 0815;

          und entsprechend kann man auch aus jedem anderen Plugin auf die Variable zugreifen, solange man den Namen des Plugins "weiss".
          "." ist nur ein Zeichen und nicht das richtige, "_" ist der richtige Trenner dafür!

          Makki
          Ich möchte aus einem Plugin namens Stromzaehler_Haus.pl lesen.
          Code:
          my $Zaehlerstand_aktuell = $plugin_info{'Stromzaehler_Haus.pl_Zaehlerstand'};
          Der Befehl liefert allerdings keinen Wert zurück. Ich vermute das hängt mit dem Namen zusammen, da hier einmal "_" im Namen steckt und gleichzeitig dem Trennzeichen, wie du oben beschrieben hast, entspricht?

          Falls die Vermutung stimmt, wie muss der Befehl dann lauten?

          Danke und lg
          Robert

          Kommentar


            #6
            Den richtigen Namen sieht man auf der Plugin-Seite auch unten, je nachdem eben, das ist erstmal Freitext (und der Trenner spielt praktisch derzeit keine Rolle das es kein automatisches Cleanup o.ä. gibt - man sollte es trotzdem so machen weil sich das iwann ändern kann)

            Makki
            EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
            -> Bitte KEINE PNs!

            Kommentar


              #7
              Zitat von makki Beitrag anzeigen
              Den richtigen Namen sieht man auf der Plugin-Seite auch unten, je nachdem eben, das ist erstmal Freitext..)
              Makki
              Danke!!
              Der Hinweis auf die Plugin Übersichtseite ist natürlich perfekt, da kann dann künftig nichts mehr schief gehen.

              Der Code
              Code:
              my $Zaehlerstand_aktuell = $plugin_info{'Stromzaehler_Haus_Zaehlerstand'};
              funktioniert, dein ".pl" weiter oben hat mich ein wenig auf die falsche Fährte gebracht.

              Danke und lg
              Robert

              Kommentar


                #8
                Hallo Robert,

                wenn es für Dich gelöst ist, dann bitte auch den "gelöst" Haken setzen (grünes Menüband, Themen-Optionen).

                lg

                Stefan

                Kommentar

                Lädt...
                X