Ankündigung

Einklappen
Keine Ankündigung bisher.

HTML Datei im CSV Format auslesen und bestimmte werte ausgeben

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

    HTML Datei im CSV Format auslesen und bestimmte werte ausgeben

    Hallo wieder einmal ein Problem ich versuche mit curl bestimmte werte aus einer CSV Formatierten seite auszulesen und diese als String oder Number Items zu setzen leider ohne erfolg. hier einmal die ausgabe der HTML Seite

    PHP-Code:
    Node,ID,Label,Type,Value
    H1Z1
    ,V33V,+3.3 V,V,0.416
    H1Z1
    ,SNIC2DLRATE,NIC2 Download Rate,S,0.0
    H1Z1
    ,THDD20,SAMSUNG HM500JI,T,40
    H1Z1
    ,THDD16,WDC WD5000AADS-56S9B0,T,54
    H1Z1
    ,PCPUGTC,CPU GT Cores,P,0.43
    H1Z1
    ,SNIC1DLRATE,NIC1 Download Rate,S,164.8
    H1Z1
    ,TPCHDIO,PCH Diode,T,62
    H1Z1
    ,THDD9,ST2000DM001-1CH164 (Z1E129EV),T,53
    H1Z1
    ,PCPUUNC,CPU Uncore,P,3.95
    H1Z1
    ,TCPUGTC,CPU GT Cores,T,57
    H1Z1
    ,SNIC1ULRATE,NIC1 Upload Rate,S,2047.4
    H1Z1
    ,SUSEDMEM,Used Memory,S,7392
    H1Z1
    ,TCC-1-4,CPU Core #4,T,53
    H1Z1,VCPU,CPU Core,V,1.044
    H1Z1
    ,TCPUIAC,CPU IA Cores,T,57
    H1Z1
    ,STIMENS,Time (HH:MM),S,21:00
    H1Z1
    ,SCPU3UTI,CPU3 Utilization,S,22
    H1Z1
    ,SNIC2ULRATE,NIC2 Upload Rate,S,0.0
    H1Z1
    ,THDD3,ADATA SSD S510 120GB,T,29
    H1Z1
    ,SNIC1CONNSPD,NIC1 Connection Speed,S,1000
    H1Z1
    ,SNIC2CONNSPD,NIC2 Connection Speed,S,1000
    H1Z1
    ,SCPUMUL,CPU Multiplier,S,31
    H1Z1
    ,SCPUFSB,CPU FSB,S,100
    H1Z1
    ,THDD8,ST2000DM001-1CH164 (Z1E12LY4),T,35
    H1Z1
    ,SCPUUTI,CPU Utilization,S,22
    H1Z1
    ,TAUX,Aux,T,46
    H1Z1
    ,VCPUVID,CPU VID,V,1.261
    H1Z1
    ,TCPUPKG,CPU Package,T,57
    H1Z1
    ,THDD5,Hitachi HUA722020ALA330,T,33
    H1Z1
    ,TCPU,CPU,T,45
    H1Z1
    ,TCC-1-1,CPU Core #1,T,57
    H1Z1,PCPUIAC,CPU IA Cores,P,18.61
    H1Z1
    ,SCC-1-1,CPU Core #1 Clock,S,1596
    H1Z1,THDD13,ST3000DM001-1E6166,T,49
    H1Z1
    ,SCPU4UTI,CPU4 Utilization,S,23
    H1Z1
    ,VP5V,+5 V,V,4.260
    H1Z1
    ,THDD10,SAMSUNG HD103SJ (S246J9BSB02340),T,58
    H1Z1
    ,THDD15,SAMSUNG HD103UJ,T,47
    H1Z1
    ,THDD17,SAMSUNG HD103SJ (S246J9BB131978),T,54
    H1Z1
    ,SCPU1UTI,CPU1 Utilization,S,24
    H1Z1
    ,THDD2,TOSHIBA DT01ACA200 (137B6E9AS),T,41
    H1Z1
    ,FCPU,CPU,F,1762
    H1Z1
    ,SCPU2UTI,CPU2 Utilization,S,20
    H1Z1
    ,TCC-1-2,CPU Core #2,T,56
    H1Z1,PCPUPKG,CPU Package,P,22.99
    H1Z1
    ,THDD19,Hitachi HTS545032B9A300,T,30
    H1Z1
    ,SCPUCLK,CPU Clock,S,3093
    H1Z1
    ,SCC-1-4,CPU Core #4 Clock,S,1596
    H1Z1,THDD7,WL2000GSA6454G,T,28
    H1Z1
    ,THDD11,WDC WD10EADS-11M2B2,T,53
    H1Z1
    ,SCC-1-3,CPU Core #3 Clock,S,3093
    H1Z1,TMOBO,Motherboard,T,41
    H1Z1
    ,SCC-1-2,CPU Core #2 Clock,S,2993
    H1Z1,SFREEMEM,Free Memory,S,2765
    H1Z1
    ,TCC-1-3,CPU Core #3,T,57
    H1Z1,STIME,Time,S,21:00:59
    H1Z1
    ,THDD18,TOSHIBA DT01ACA050,T,53
    H1Z1
    ,THDD14,WDC WD5000AAKS-65YGA0,T,56
    H1Z1
    ,THDD12,TOSHIBA DT01ACA200 (Y36LJVPGS),T,54 
    als beispiel möchte ich aus dieser zeile

    H1Z1,SNIC1ULRATE,NIC1 Upload Rate,S,2047.4

    den wert 2047.4 als item haben doch ich weiß nicht wie... hab ihr eine idee?

    Danke

    #2
    Eigentlich solltest Du dazu nichtmal curl benötigen, das http-Binding sollte reichen. Wenn es nur um einen einzelnen Wert geht, direkt, ansonsten besser über den Cache, also in der openhab.cfg:
    Code:
    http:mycache.url=http://fqdn/path/to/csv.data
    http:mycache.updateInterval=30000
    definiert einen Cache mycache, der alle 30 Sekunden neu befüllt wird.
    anschließend als Items:
    Code:
    Number  H1Z1_Upload      "Upload Rate [%.1f kBit/s]" { http="<[mycache:30000:REGEX(.*H1Z1,SNIC1ULRATE,NIC1 Upload Rate,S,(.*)H1Z1.*)]" }
    entsprechend für andere Zeilen.
    Die REGEX sucht irgendwo im Cache nach der Zeichenfolge unmittelbar vor dem gesuchten Wert, nimmt dann alles nach der Zeichenfolge bis zum ersten Vorkommen der nächsten gesuchten Zeichenfolge und fügt dies in das Number Item ein.

    Falls Du tatsächlich nur einen einzigen Wert haben möchtest, schreibst Du statt dem Namen des Caches die komplette Adresse in das Item, die 30000 bedeutet wieder ein Update alle 30 Sekunden. Welche Einheit die richtige ist, weißt Du besser als ich

    Für die Fehlersuche kann es hilfreich sein, statt eines Number Items ein String Item zu definieren, dann kannst Du im Log gut sehen, was die REGEX tatsächlich ausgibt.
    Zuletzt geändert von udo1toni; 18.07.2016, 22:31.

    Kommentar


      #3
      danke für die antwort irgendwie geht es aber nicht

      hier die config

      openhab.cfg

      http:mycache.url=http://192.168.2.109/bios.html
      http:mycache.updateInterval=5000

      item

      Number H1Z1_Upload "Upload Rate [%.1f kBit/s]" { http="<[mychache:5000:REGEX(.*H1Z1,SNIC1ULRATE,NIC1 Upload Rate,S,(.*)H1Z1.*)]" }

      sitemap

      Text item=H1Z1_Upload label="Upload Rate [%.1f kBit/s]"

      log

      19:33:53.671 [DEBUG] [.o.b.http.internal.HttpBinding:166 ] - item 'H1Z1_Upload' is not a valid URL or is a cache id yet to be initialised (mychache)

      irgendeine idee?







      Kommentar


        #4
        hab ein fehler in der item gefunden mychache das h is in der cfg nicht drinn... ich teste mal

        Kommentar


          #5
          Hab es korrigiert geht leider auch nicht... Ich versteh es nicht...

          Kommentar


            #6
            hier der neue log

            20:11:16.382 [TRACE] [i.internal.GenericItemProvider:414 ] - Created item 'H1Z1_Upload' of type 'Number'
            20:11:16.392 [DEBUG] [i.internal.GenericItemProvider:341 ] - Start processing binding configuration of Item 'H1Z1_Upload (Type=NumberItem, State=Uninitialized)' with 'HttpGenericBindingProvider' reader.
            20:11:16.441 [TRACE] [.service.AbstractActiveService:61 ] - HTTP Refresh Service won't be started because it isn't yet properly configured.
            20:11:16.483 [DEBUG] [.o.b.http.internal.HttpBinding:160 ] - item 'H1Z1_Upload' is fetched from cache
            20:11:16.485 [DEBUG] [.o.b.http.internal.HttpBinding:371 ] - updating cache for 'mycache' ('http://192.168.2.109/bios.html')
            0:11:17.262 [DEBUG] [i.s.RegExTransformationService:48 ] - the given regex '^.*H1Z1,SNIC1ULRATE,NIC1 Upload Rate,S,(.*)H1Z1.*$' doesn't match the given content '��


            das kommt also string item

            2016-07-18 20:51:02 - H1Z1_Upload state updated to ��
            Zuletzt geändert von icedeath82; 18.07.2016, 19:56.

            Kommentar


              #7
              Und wenn Du http://192.168.2.109/bios.html direkt aufrufst, kommt die obige csv-Datei?

              Kommentar


                #8
                ja dann kommt die Datei also öffnet sich im browser

                hier zum runter laden http://home-h1z1.de/index.php/s/1ErQy1dUCrSNZIZ

                Kommentar


                  #9
                  Hmm... da scheinen tatsächlich am Anfang Steuerzeichen zu stehen. Sollte eigentlich nicht stören, tut's aber offensichtlich

                  Kommentar


                    #10
                    Ok da gibt es keinen weg? Vllt doch Curl? Da weiss ich aber nicht wie ich nur bestimmte stellen ausgeben lasse.

                    Kommentar


                      #11
                      Naja, Du musst halt die Datei holen und anschließend z.B. mit sed die gewünschte Zeichenkette extrahieren, die kannst Du dann an openHAB übergeben. Es läuft dann auf ein script hinaus.

                      Kommentar


                        #12
                        Ui das ist mir dann zu hoch

                        Kommentar


                          #13
                          Ich bin jetzt einen anderen weg gegangen mit WMIC per Linux so komme ich auch an die Daten per exec

                          Code:
                          root@homeautomation:~/wmi-1.3.14# wmic -U H1Z1/BENUTZER%PASSWD --namespace="root\WMI" //192.168.2.109 "select * from AIDA64_SensorValues"
                          CLASS: AIDA64_SensorValues
                          ID|Label|Type|Value
                          V33V|+3.3 V|V|0.198
                          THDD16|SAMSUNG HD103UJ|T|44
                          PCPUGTC|CPU GT Cores|P|0.34
                          TPCHDIO|PCH Diode|T|60
                          THDD9|WDC WD2500BEVT-22A23T0|T|32
                          PCPUUNC|CPU Uncore|P|3.56
                          TCPUGTC|CPU GT Cores|T|43
                          TCC-1-4|CPU Core #4|T|40
                          VCPU|CPU Core|V|1.044
                          TCPUIAC|CPU IA Cores|T|44
                          SCPU3UTI|CPU3 Utilization|S|7
                          THDD3|ADATA SSD S510 120GB|T|29
                          THDD8|ST2000DM001-1CH164 (Z1E12LY4)|T|38
                          SCPUUTI|CPU Utilization|S|8
                          TAUX|Aux|T|45
                          VCPUVID|CPU VID|V|0.981
                          TCPUPKG|CPU Package|T|44
                          THDD5|Hitachi HUA722020ALA330|T|32
                          TCPU|CPU|T|33
                          TCC-1-1|CPU Core #1|T|43
                          PCPUIAC|CPU IA Cores|P|5.67
                          SCC-1-1|CPU Core #1 Clock|S|1596
                          THDD13|TOSHIBA DT01ACA200 (Y36LJVPGS)|T|51
                          SCPU4UTI|CPU4 Utilization|S|5
                          VP5V|+5 V|V|4.230
                          THDD10|ST2000DM001-1CH164 (Z1E129EV)|T|47
                          THDD15|WDC WD5000AAKS-65YGA0|T|55
                          THDD17|WDC WD5000AADS-56S9B0|T|49
                          SCPU1UTI|CPU1 Utilization|S|12
                          THDD2|TOSHIBA DT01ACA200 (137B6E9AS)|T|41
                          FCPU|CPU|F|1490
                          SCPU2UTI|CPU2 Utilization|S|9
                          TCC-1-2|CPU Core #2|T|41
                          PCPUPKG|CPU Package|P|9.57
                          THDD19|TOSHIBA DT01ACA050|T|53
                          SCPUCLK|CPU Clock|S|1596
                          SCC-1-4|CPU Core #4 Clock|S|1596
                          THDD7|WL2000GSA6454G|T|28
                          THDD11|SAMSUNG HD103SJ (S246J9BSB02340)|T|57
                          SCC-1-3|CPU Core #3 Clock|S|1596
                          TMOBO|Motherboard|T|40
                          SCC-1-2|CPU Core #2 Clock|S|1596
                          TCC-1-3|CPU Core #3|T|44
                          THDD18|SAMSUNG HD103SJ (S246J9BB131978)|T|51
                          THDD14|ST3000DM001-1E6166|T|49
                          THDD12|WDC WD10EADS-11M2B2|T|48
                          so nun die frage wie setze ich die werte als item...?

                          habs noch mal geändert die ausgabe ist nun so

                          Code:
                          CLASS: AIDA64_SensorValues
                          ID|Value
                          V33V|0.317
                          THDD16|44
                          PCPUGTC|0.35
                          TPCHDIO|60
                          THDD9|32
                          PCPUUNC|3.57
                          TCPUGTC|43
                          TCC-1-4|41
                          VCPU|1.044
                          TCPUIAC|44
                          SCPU3UTI|12
                          THDD3|29
                          THDD8|37
                          SCPUUTI|9
                          TAUX|45
                          VCPUVID|0.986
                          TCPUPKG|44
                          THDD5|32
                          TCPU|33
                          TCC-1-1|44
                          PCPUIAC|6.01
                          SCC-1-1|1596
                          THDD13|51
                          SCPU4UTI|7
                          VP5V|4.260
                          THDD10|48
                          THDD15|55
                          THDD17|49
                          SCPU1UTI|9
                          THDD2|41
                          FCPU|1487
                          SCPU2UTI|10
                          TCC-1-2|43
                          PCPUPKG|9.93
                          THDD19|53
                          SCPUCLK|1596
                          SCC-1-4|1596
                          THDD7|28
                          THDD11|57
                          SCC-1-3|1596
                          TMOBO|40
                          SCC-1-2|1596
                          TCC-1-3|44
                          THDD18|52
                          THDD14|49
                          THDD12|49
                          root@homeautomation:~/wmi-1.3.14#
                          als Beispiel nehm ich mal VCPUVID|0.986 da möchte ich nun den wert 0.986 als item VCPUVID
                          Zuletzt geändert von icedeath82; 19.07.2016, 12:58.

                          Kommentar


                            #14
                            Genau wie beim http Binding. Wenn Du mehrere Werte extrahieren willst, musst Du allerdings den Cache selbst basteln:
                            Code:
                            String AIDA64_SensorValues {exec="..."}
                            Number AIDA64_VCPUVID "VCPUVID [%.3f]"
                            und dazu eine Rule
                            Code:
                            rule "Update AIDA64 Items"
                            when
                                Item AIDA64_SensorValues changed
                            then
                                val myval1 = transform("REGEX", ".*VCPUVID|(.*)TCPUPKG.*", AIDA64_SensorValues.state.toString)
                                if (myval1 instanceof DecimalType)
                                   AIDA64_VCPUVID.postUpdate(myval1 as DecimalType)
                            end
                            Nur so als grobe Skizzierung, und nur aus dem Kopf.

                            Kommentar


                              #15
                              ok so etwa den cache?

                              Code:
                              String AIDA64_SensorValues { exec="<[wmic -U BENUTZER%PASSWD --namespace="root\WMI" //192.168.2.109 "select Value from AIDA64_SensorValues":3000:REGEX((.*?))]" }
                              Number AIDA64_VCPUVID "VCPUVID [%.3f]"
                              ok string wird gelesen nach ein paar Änderungen, aber die rule funzt irgendwie noch nicht



                              so funzt es ist das sinnvoll oder zu kompliziert?

                              Code:
                              rule "Update AIDA64 Items1" 
                               when  
                                Item AIDA64_SensorValues received update 
                               then 
                                    var String AIDA64_SensorValuesUpdate = AIDA64_SensorValues.state.toString.trim 
                               
                                    var int SNIC1DLRATEStartsOn = AIDA64_SensorValuesUpdate.indexOf("SNIC1DLRATE|") + "SNIC1DLRATE|".length 
                                    var String reading333 = AIDA64_SensorValuesUpdate.mid(SNIC1DLRATEStartsOn, AIDA64_SensorValuesUpdate.indexOf('SDRVCUSEDSPC|')-SNIC1DLRATEStartsOn) 
                                 
                                    AIDA64_VCPUVID.postUpdate(reading333)
                               
                              end
                              Zuletzt geändert von icedeath82; 19.07.2016, 14:04.

                              Kommentar

                              Lädt...
                              X