Ankündigung

Einklappen
Keine Ankündigung bisher.

XML in Plugin einlesen?

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

    [wiregate] XML in Plugin einlesen?

    Hallo,

    weil es im Ursprungs-Thread untergeht nochmal hier die Frage:

    Für ein Plugin für die UVR1611 benötige ich den "Hex-Code". Den habe ich in einer Datei, jedoch istder versteckt in einer XML-Datei:
    Code:
    can_subindex="8" can_index="13709" can_knoten="1"
    Er berechnet sich wie folgt:
    1) alle drei Werte in HEX, also
    Code:
    can_subindex="8" can_index="358D" can_knoten="1"
    2) die zwei Bytes im can intdex vertauschen, also
    Code:
    can_subindex="08" can_index="8D35" can_knoten="01"
    3) Aneinander setzen und $X davor:
    Code:
    $x can_index can_subindex  can_knoten
    $X8D350801
    Die XML-Datei sieht so aus:
    Code:
    <Objekt_0 Objekt_Typ="CAN_BL_Net_Obj" changeable="0" [B]can_subindex="8" can_index="13709" can_knoten="1"[/B]  Syntax2="" Syntax=""  Schriftart="0;-16;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" NachText=""  Text="xxx" VorText="" Einheit="1" invisble="1" Hintergrund="16777215"  Schriftfarbe="0" ausrichtung="0" locked="0" lockabel="0"  Bezeichnung="Friedel.dat: [B]Wärmemengenzähler-Solar- Vorlauftemperatur[/B]" Sondertype="0" y_u="206" x_r="-444" y_o="187" x_l="228"/>
    Ich muss aus der Datei zwei Strings mit den Hex-Codes und den Bezeichnungen aller Objekte erzeugen.

    Mir schwebt vor, den XML-String in die Config-Datei des Plugin zu packen, so dass das Plugin dann damit arbeiten kann. Macht das Sinn?

    Ich tue mich noch sehr schwer mit perl. Aber vielleicht hat ja jemand Lust, mir zu helfen?

    Ach so:
    Für mich wäre es am einfachsten das manuell zu machen. Aber sicher profitieren auch andere davon ;-)

    Gruß,
    Hendrik

    #2
    Hallo Hendrik

    Ich bin leider auch kein Perl Profi. Aber ich kann ja mal versuchen dir zu helfen

    Kurze Frage zu Beginn...

    Woher kommt die XML datei? Und ändern sich die Werte zwischenduch oder sind die pro Anlage immer konstant?

    Das ganze aus dem String extrahieren ist kein grosses Problem. Die Frage ist, wie du an die Zeile im XML kommen willst?

    Wenn du die gesammte Zeile einfach in eine Variabel schreibst, ist der rest relativ einfach. Wenn du aber zuerst das XML abrufen willst wird es ein bischen schwieriger. Aber nicht unmöglich

    Dafür braucht es einen kleinen MIX aus Chumby und ComfoAir Plugin.

    XML einlesen und Pharsen -> Chumby Plugin
    einsatz von subst so wie diverse umwandlungen -> ComfoAir Plugin
    Gruss Patrik alias swiss

    Kommentar


      #3
      Also um das XML aus einer Variabel zu Pharsen hab ich dir mal was kurzes zusammengestellt -> UNGETESTET

      Code:
      my $xml_string = '<Objekt_0 Objekt_Typ="CAN_BL_Net_Obj" changeable="0" can_subindex="8" can_index="13709" can_knoten="1"  Syntax2="" Syntax=""  Schriftart="0;-16;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" NachText=""  Text="xxx" VorText="" Einheit="1" invisble="1" Hintergrund="16777215"  Schriftfarbe="0" ausrichtung="0" locked="0" lockabel="0"  Bezeichnung="Friedel.dat: Wärmemengenzähler-Solar- Vorlauftemperatur" Sondertype="0" y_u="206" x_r="-444" y_o="187" x_l="228"/>'; #Hier den kompleten XML String reinkopieren
      
      #Ab hier nichts mehr ändern
      
      use XML::Simple;
      
      my $can_subindex;
      my $can_index;
      my $can_knoten;
      
      my $value = XMLin($xml_string)->{Objekt_0};
          
      while ((my $key) = each %{$value}) {
                  $can_subindex = $value->{$key}->{can_subindex};
                  $can_index = $value->{$key}->{can_index};
                  $can_knoten = $value->{$key}->{can_knoten};            
      }
      
      $can_subindex = sprintf "%x\n" , $can_subindex; #Mache aus Integer HEX
      $can_index = sprintf "%x\n" , $can_index; #Mache aus Integer HEX
      $can_knoten = sprintf "%x\n" , $can_knoten; #Mache aus Integer HEX
      
      my $hilfsvariabel = substr($can_index,0,2); #Speichere die ersten beiden Stellen von can_index
      $can_index = substr($can_index,2) . $hilfsvariabel; #Stelle die ersten beiden Stellen hinten an
      
      my $ausgabe = '$X'.$can_index.$can_subindex.$can_knoten; # $ausgabe enthält den gewünschten Wert
      
      return $ausgabe;
      Hoffe das funktioniert so

      EDIT: Ich sehe gerade, dass es so nicht geht, weil in dem String "verbotene" Zeichen nämlich " enthalten sind. Also müssen wir doch von einer URL oder einer Datei lesen.
      Gruss Patrik alias swiss

      Kommentar


        #4
        Wow, danke.. Schaue ich mir morgen an!!


        Gesendet von unterwegs

        Kommentar


          #5
          Danke. Gute Idee, andere Plugins als Vorlage zu schnappen. Da hätte ich auch selbst kommen können ;-)

          Schade, dass es an den Anführungszeichen scheitert.
          Können die Plugins denn direkt auf die Konfigurationsdatei zugreifen? Also richtig auf die Datei? Dann könnte man mit Perl ja die Datei als XML öffnen.

          Gruß,
          Hendrik

          Kommentar


            #6
            Sooo

            Nun klapt es

            Code:
            my $xml_string = '<Objekt_0 Objekt_Typ="CAN_BL_Net_Obj" changeable="0" can_subindex="8" can_index="13709" can_knoten="1"  Syntax2="" Syntax=""  Schriftart="0;-16;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" NachText=""  Text="xxx" VorText="" Einheit="1" invisble="1" Hintergrund="16777215"  Schriftfarbe="0" ausrichtung="0" locked="0" lockabel="0"  Bezeichnung="Friedel.dat: Wärmemengenzähler-Solar- Vorlauftemperatur" Sondertype="0" y_u="206" x_r="-444" y_o="187" x_l="228"/>'; #Hier den kompleten XML String reinkopieren
            
            #Ab hier nichts mehr ändern
            
            use XML::Simple;
            use Encode qw(encode decode);
            
            my $xml = new XML::Simple;
            
            my $can_subindex;
            my $can_index;
            my $can_knoten;
            
            $xml_string = encode("utf8",$xml_string);
            
            my $value = $xml->XMLin($xml_string);
                
            
            $can_subindex = $value->{can_subindex};
            $can_index = $value->{can_index};
            $can_knoten = $value->{can_knoten};            
            
            
            $can_subindex = sprintf "%x" , $can_subindex; #Mache aus Integer HEX
            $can_index = sprintf "%x" , $can_index; #Mache aus Integer HEX
            $can_knoten = sprintf "%x" , $can_knoten; #Mache aus Integer HEX
            
            my $hilfsvariabel = substr($can_index,0,2); #Speichere die ersten beiden Stellen von can_index
            $can_index = substr($can_index,2) . $hilfsvariabel; #Stelle die ersten beiden Stellen hinten an
            
            my $ausgabe = '$X'.$can_index.$can_subindex.$can_knoten; # $ausgabe enthält den gewünschten Wert
            
            return $ausgabe;
            Gruss Patrik alias swiss

            Kommentar


              #7
              :-))

              Werde ich heute Abend mal testen. V.a. ob das auch mit Zeilenumbrüchen geht...

              Gruß,
              Hendrik

              Kommentar


                #8
                Hallo Hendrik

                Wiso Zeilenumbrüche? Hat es in der XML denn welche? Wo bzw. wie wäre die XML Datei denn abzurufen?
                Gruss Patrik alias swiss

                Kommentar


                  #9
                  Hallo,

                  Anbei mal die ganze XML.
                  Abzurufen ist sie auf dem Rechner des Users. Dort wird sie mit einem Programm des Herstellers der UVR1611 erstellt. Das Programm dient der Erstellung der Visualisierung der UVR. Hier lassen sich eben alle Parameter bequem durch Drag&Drop wählen (es geht auch anders, ist aber ein Krampf).

                  Die Idee ist eben die Konfig-Datei dieses Programms zu nutzen, und auch im Plugin zu verwenden. So muss man nicht zwei Dateien pflegen.

                  Die Idee ist also, die XML in "conf.d/UVR1611.conf" im Web-IF zu pasten.

                  In der XML sind eben mehr als nur dieser eine Eintrag (eben alle Variablen). Das hatte ich nicht gefragt, weil ich dich nicht mit den ganz trivialen Fragen (Schleife) belästigen wollte :-0

                  Gruß und v.a. Danke!
                  Hendrik
                  Angehängte Dateien

                  Kommentar


                    #10
                    Keine Ursache


                    Also...

                    Am besten du missbrauchst die conf.d für die XML. Dort darf dann aber NUR der Inhalt der XML drin stehen. Dann sollte es kein Problem sein

                    Direkt vom UserPC abrufen geht leider nicht.
                    Gruss Patrik alias swiss

                    Kommentar


                      #11
                      Bitte prägnanten Thread-Titel vergeben, Danke.

                      Hendrik,

                      würdest Du bitte einen prägnanteren Thread-Titel vergeben? Weil "Code-Frage" ist ziemlich nichts sagend und dann klickt da im Leben keiner mehr später drauf und die Lösung dieser Fragestellung "versandet" dann vermutlich, was sicher schade wäre, auch für Patrick der sich soviele Mühe gibt.

                      @ All: Ich kann schon nachvollziehen, dass einem manchmal nichts griffiges und prägnantes einfällt und man einfach nur sein Problem im Forum "loswerden" möchte, aber auf Dauer ist das nicht hilfreich. Man stelle sich vor, alle Threads haben nur noch nichtssagende Titel wie "Hab eine Frage", "Anfänger sucht Rat", "Bin frustriert" usw. (hatten wir übrigens alles schon...).

                      Darum möchte ich alle ersuchen, sich hier Mühe zu geben, das betrifft auch die "Suchworte", die ich in 98% der Threads selbst eintragen muss....

                      Danke sehr und wunderschönen Sonntag wünsche ich allen.

                      Stefan

                      Kommentar


                        #12
                        Hallo,

                        ich weiß, dass so ein Titel ungünstig ist.
                        Aber mir fällt selbst jetzt kein besserer Titel ein...

                        "XML in Plugin einlesen?"
                        Wie ändere ich den Titel? Den Beitrag kann ich leider nicht mehr bearbeiten.

                        Gruß,
                        Hendrik

                        Kommentar


                          #13
                          Guten Morgen, hab den Titel angepasst.

                          Kommentar


                            #14
                            Danke Stefan.
                            Wie Hamann man das denn selbst?
                            Oder geht das nur eine Weile nach dem ersten Post?


                            Gesendet von unterwegs

                            Kommentar


                              #15
                              Über das Ändern des (eigenen) ersten Beitrages kann der Titel verändert werden. Die Forensoftware schränkt den Zeitraum in dem solche Veränderungen von Membern vorgenommen werden können offensichtlich ein, diese Parameterisierung ist von uns nicht beeinflussbar und ich kenne den genauen Zeitraum auch nicht.

                              lg

                              Stefan

                              Kommentar

                              Lädt...
                              X