Ankündigung

Einklappen
Keine Ankündigung bisher.

smarthome.py und UVR1611 --> Interesse?

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

    smarthome.py und UVR1611 --> Interesse?

    Hallo,

    ich werde über kurz oder lang eine Logik oder ein Plugin für die Kommunikation mit der UVR1611 schreiben -das Wissen dazu sollte vorhanden sein, denn die WG-Plugins dazu stammen von mir.

    Für mich würde Quick&Dirty reichen, aber wenn es weitere Nutzer oder sogar Helfer gibt, kann ich es auch in schön machen.

    Bei ernsthaftem Interesse also bitte melden.

    Gruß,
    Hendrik

    #2
    Hallo,

    Ich wär daran auch sehr interessiert, hab hier >Link< im Forum vor einiger zeit schon mal einen Thread dazu eröffnet, aber dann wieder fallen gelassen, weil ich mit der Python Programmierung aus Zeitmangel noch immer auf Kriegsfuß stehe, und weil ich mir inzwischen auch das KNX Modul für die UVR1611 gekauft habe.
    Könnte aber evtl. für einige Tests etc. behilflich sein.

    Willst du es über die HTML Strings abrufen, oder direkt über die KNX Anbindung ?

    Gruß, Mike

    Kommentar


      #3
      Hallo,

      ich hätte daran ebenfalls Interesse.

      Besitze zwar auch das KNX Modul, aber irgendwie reicht das zum Auslesen der Werte nicht aus :-)

      Was genau für Hilfe bräuchtest du denn?

      Vielleicht wollen wir ja auch sone animierte :-) Heizungsseite wie das Im WG mit dem Flow zur Zeit auch funktioniert?

      Danke

      Kommentar


        #4
        interessiert mich auch.. auch ich hab das Interface... deswegen die Frage,
        wie greifst du dann auf die UVR zu ?

        Gruß Martin
        Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

        Kommentar


          #5
          Moin,

          den CAN-BC/E habe ich auch (und dazu hier gerade eine Frage: https://knx-user-forum.de/knx-eib-fo...tml#post395081). Aber mit den 16 Werte die empfangen werden können reichen ja nicht unbedingt. Sprich: Gleicher Gedanke wie bei Euch.

          Ich habe jetzt zwei, drei Ideen, wie man das angehen kann. Das basiert alles darauf, einen String in eine HTML-Datei auf dem BL-Net zu packen, der dann ausgelesen wird. Z.B.
          "$n1a0|$n1a1|..." mit | getrennt in einen Kommentar in eine HTML-Datei auf den BL-NET



          1) Quick&Dirty:
          -String manuell erdenken
          -Items erstellen mit Attribut "UVR_Index" die die Position des zugehörigen Wertes in dem mit |getrennten String angibt.
          Sprich:

          Code:
          [Puffer]
           type=num
           UVR_Index=1
          würde den ersten Wert in dem String auslesen.
          Das Auslesen würde eine Logik machen

          Nachteil: den String muss man sich manuell zusammenstellen.

          2) Via TA-Designer
          Der TA-Designer ist ein Visu-Editor von Technische Alternative.
          Man kann hier die Projekt-Datei der UVR1611 einlesen und die Daten, die man in der Visualisierung haben möchte per Drag&Drop anhand ihrer Bezeichnung (statt irgendwelcher kryptischen Codes) din die Visu ziehen.

          In der Projekt-Datei des TA-Designers finded man die benötigten Codes ($n1a0&Code) dann in anderer Form. Dazu mehr hier:
          https://knx-user-forum.de/forum/supp...wiregate/21267

          Die Idee ist jetzt also die Projekt-Datei des TA-Designers (xml) dem sh.py Plugin als Input zu geben. Das sh.py plugin erzeugt dann den String, den der User in die html-Datei für den BL-Net packen muss.
          In der Projekt-Datei kann man auch (in Kommentar-Feldern) das Item in das der Wert eingelesen werden soll angegeben werden.
          So mache ich das in dem Wiregate-Plugin. Bitte hier lesen:
          https://knx-user-forum.de/forum/supp...wiregate/25385

          3) TA-Designer, ohne Kommentar-String
          Es ist etwas unschön, den HTML-String immer wieder in die HTML zu kopieren, wenn man etwas an der HTML ändert.
          Daher die Idee 3, die wie Idee 2 ist, jedoch ohne den HTML-String auskommt.

          Und zwar sind die Einträge der XML-Datei des TA-Designers nummeriert. Die gleichen Nummern haben die div-Tags der HTML Datei.

          Das Vorgehen wäre also:
          -Visu mit TA-Designer malen (kann ja eine reine Zahlen-Visu sein, ohne hübsch und sogar ohne Text; Wichtig nur, dass die gewünschten Werte drin sind und die Bezeichnung des sh.py Items, in das der Wert eingelesen werden soll im zugehörigen Kommentar)
          -XML dem Plugin Verfügbar machen

          Fertig.

          Edit:
          4) via dlogg-aktuelle-daten
          http://d-logg-linux.roemix.de/index.php?article_id=7
          als Binary verwenden. Ich glaube, damit kann man aber nur die Werte, die in CAN-Datenlogging konfiguriert sind abfragen, meine ich.
          Zudem ist man eben von dieser Binary abhängig.

          5) Kontakt zu TA
          Und erfragen, wie man die Werte direkt vom BL-Net abfragen kann.


          So, dann lest mal fleissig o.g. Links und sagt mir, was ihr denkt. Ich komme dazu momentan nicht. Aber ich helfe gerne, wenn jemand anfangen möchte.

          Gruß,
          Hendrik

          Kommentar


            #6
            Also ich persönlich wär schon mit der Quick&Dirty Methode zufrieden,
            aber die Lösung mit dem TA-Designer und der XML Datei hört sich schon sehr interessant an.

            Wenn sich das umsetzen lässt, würde ich die zweite Variante am besten finden. xml Datei wird im TA-Designer eingelesen, und in sh.py. sh.py erzeugt den String, und man kopiert den in die HTML und lädt die auf den Bootloader.
            Sollte Bedientechnisch für jeden ausreichend sein, und so oft ändert man an der Heizung ja auch nichts, somit wird das einmal gemacht, und gut is.

            die dlogg Variante hab ich auch schon mal versucht, aber wenn man die Logdatei zu oft hintereinander abfrägt dann hängt sich der Bootloader gerne mal auf, war zumindest bei mir so.
            Ich persönlich hab auch das dl-LesenX Programm auf meinem Router im einsatz, der holt die Daten 1x Täglich über Crontab vom BL ab und speichert sie auf einen USB Stick. So kann ich dann bei bedarf mit WinSol darauf zugreifen, und die Daten rückwirkend nochmal analysieren.

            Gruß, Mike

            Kommentar


              #7
              Danke für die Rückmeldung.
              Zitat von Mike01 Beitrag anzeigen
              Ich persönlich hab auch das dl-LesenX Programm auf meinem Router im einsatz, der holt die Daten 1x Täglich über Crontab vom BL ab und speichert sie auf einen USB Stick. So kann ich dann bei bedarf mit WinSol darauf zugreifen, und die Daten rückwirkend nochmal analysieren.
              Dabei frage ich mich immer, wie du Winsol sagst, auf welche Daten er zugreifen soll.
              Oder kopierst du die manuell nach \users\du\appdata\virutalstore\...?

              Gruß,
              Hendrik

              Kommentar


                #8
                Zitat von henfri Beitrag anzeigen
                Oder kopierst du die manuell nach \users\du\appdata\virutalstore\...?
                Da WinSol leider keine Pfadänderung zuläßt, muss man das immer manuell kopieren. Ich mach das über eine Batch Datei im Windows, die mir die Dateien von der Samba-Freigabe des Routers in das Winsol-Verzeichnis kopiert.

                Gruß, Mike

                Kommentar


                  #9
                  Hallo,

                  an der Kommandozeile läuft es, in sh.py noch nicht.
                  Vielleicht kann jemand helfen. Es liegt am unterschiedlichen Herunterladen der Daten:

                  Code:
                  2014-04-27 17:16:37,920 DEBUG    UVR          [UVR] <class 'bytes'> -- uvr.py:<module>:66
                  2014-04-27 17:16:37,920 ERROR    UVR          Logic: UVR, File: /usr/local/smarthome/logics/uvr.py, Line: 69, Method: <module>, Exception: Type str doesn't support the buffer API -- scheduler.py:_task:346
                  Traceback (most recent call last):
                    File "/usr/local/smarthome/lib/scheduler.py", line 339, in _task
                      exec(obj.bytecode)
                    File "/usr/local/smarthome/logics/uvr.py", line 69, in <module>
                      for line in html.split('\n'):
                  TypeError: Type str doesn't support the buffer API
                  Der Code:
                  Code:
                  #import urllib2   
                  #response= urllib2.urlopen(url)
                  #html=response.read()  
                  html = sh.tools.fetch_url(url)
                  logger.debug('[UVR] ' + str(type(html)))
                  logger.debug('[UVR] ' + str(html))
                  stripped=[]
                  for line in html.split('\n'):
                      if 'div' in line:
                          line=line.replace(',','.')
                          line=line.replace('W/m&sup2;','')
                          stripped.append(line.replace('&',''))
                  
                  stripped='\n'.join(stripped)
                  Mit der urllib2 funktionierte es.

                  Hat jemand eine Idee?

                  Anbei die Logik und eine item.conf, sowie das logfile.

                  Gurß,
                  Hendrik
                  Angehängte Dateien

                  Kommentar


                    #10
                    Hallo ,

                    ich habe gerade auf der Homepage des Herstellers den Nachfolger des Bootloader.Net entdeckt :

                    C.M.I - Control and Monitoring Interface

                    hat damit schon jemand Erfahrungen gesammelt ?

                    Man kann wohl die Parameter von CAN-Bus Geräten über die Visualisierung ändern.

                    vielleicht gäbe es ja darüber eine einfachere Möglichkeit auf die Daten zu kommen bzw. diese zu dann auch zu ändern.

                    Viele Grüße

                    Dominik

                    Kommentar


                      #11
                      Hallo,

                      mach doch einen Thread dazu auf in einem anderen Sub-Forum. Vielleicht hat jemand Erfahrung damit, liest aber diesen Thread nicht, da er sh.py nicht nutzt.

                      Gruß,
                      Hendrik

                      Kommentar


                        #12
                        @henfri,

                        Hab gerade über Google auf einer anderen Seite den Hinweis gefunden, dass evtl. die umwandlung in einen String mit UTF8 helfen soll.

                        Ich hab das gerade mal so gut ich das zusammenreimen konnte getestet, aber ich bekomm den gleichen Fehler.
                        Da ich aber mit Python noch nicht so vertraut bin, und das meiste nur mit Copy&Paste mache, bin ich mir auch nicht ganz sicher ob das so passt.

                        Evtl. hilft es dir aber weiter ?!

                        Gruß, Mike

                        Zitat aus Google Suche: (Link)
                        Code:
                                     From the python tutorial ( [URL]http://www.python.org/doc/3.0/tutorial/stdlib.html[/URL] ) there is an example of using urlopen method.  It raises the same error.
                          for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):     if 'EST' in line or 'EDT' in line:  # look for Eastern Time         print(line)  
                        You'll need to use the str function to convert the byte thingo to a string with the correct encoding.  As follows:
                          for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):     lineStr = str( line, encoding='utf8' )     if 'EST' in lineStr or 'EDT' in lineStr:  # look for Eastern Time         print(lineStr)
                        Logik:
                        Code:
                        #!/usr/bin/python3.2
                        
                        url="http://192.168.0.239/GRAFIK1.html"
                        UVRitems=sh.UVR
                        verbose=1
                        
                        from xml.dom import minidom
                        import re
                        
                        
                        #read the configuration-----------------------------------------------------------------------------
                        xml=minidom.parse('/usr/smarthome/items/Heizung.xml')
                        objekte=xml.getElementsByTagName('Objekte')[0]
                        
                        id_conf=[]
                        beschreibung=[]
                        cansubindex=[]
                        canindex=[]
                        canknoten=[]
                        
                        if verbose:
                           logger.info('[UVR] Available Strings')
                        
                        for i in range(0,len(objekte.childNodes)-2):
                            nn=objekte.childNodes[i].nodeName
                            if "Objekt_" in nn:
                                id_conf.append(int(nn.replace('Objekt_','')))
                                s=objekte.childNodes[i].getAttribute('Bezeichnung').split(': ')[1]
                                beschreibung.append(s)
                                if verbose:
                                   logger.info('[UVR] ' + s)
                                # start not needed
                                #subindex=hex(int(objekte.childNodes[i].getAttribute('can_subindex')))
                                #cansubindex.append(subindex)
                                #index=hex(int(objekte.childNodes[i].getAttribute('can_index')))
                                #canindex.append(index)
                                #knoten=hex(int(objekte.childNodes[i].getAttribute('can_knoten')))
                                #canknoten.append(knoten)
                                #prep=index.split('0x')[1].zfill(4)
                                #prep1=prep[2:3]+prep[0:1]
                                #hexstring='$X'+subindex+prep+knoten.split('0x')[1].zfill(2)
                        
                        #print id_conf
                        #print beschreibung
                        
                        
                        
                        #----------read the response-------------------------------
                        
                        def clean(str):
                            v=str
                            try:
                                non_decimal = re.compile(r'[^\d.]+')
                                for i in range(1000000):
                                    w=non_decimal.sub('', v)
                                if v.find('%')>0:
                                    w=w/100
                            except:
                                logger.warning('oh oh')    
                            return w      
                                 
                        #import urllib2   
                        #response= urllib2.urlopen(url)
                        #html=response.read()  
                        html = sh.tools.fetch_url(url)
                        logger.debug('[UVR] ' + str(type(html)))
                        logger.debug('[UVR] ' + str(html))
                        stripped=[]
                        for line in html.split('\n'):
                            lineStr = str( line, encoding='utf8' )
                            if 'div' in lineStr:
                                lineStr=lineStr.replace(',','.')
                                lineStr=lineStr.replace('W/m²','')
                                stripped.append(lineStr.replace('&',''))
                        
                        stripped='\n'.join(stripped)        
                                
                        html=minidom.parseString(stripped)
                        objekte=html.getElementsByTagName('div')
                        
                        
                        id_res=[]
                        content=[]
                        for i in range(0,len(objekte)):  
                             try:
                                id=objekte[i].getAttribute('id')
                                val=objekte[i].firstChild.nodeValue
                                id_res.append(int(id.replace('pos','')))
                                content.append(clean(val))
                             except:
                                pass
                             
                        #print id_res, content     
                        
                        
                        #for i in range(0, len(id_res)-1):
                        #    id=id_res[i]
                        #    print beschreibung[id], content[id]
                        
                            
                            
                        
                        #-------------assign the results-------------------  
                        #we have four lists now:
                        #config: id_conf, beschreibung
                        #result: id_res, content  
                            
                        for item in UVRitems:
                         logger.debug('[UVR] Behandle UVR')
                         logger.debug('[UVR] Behandle item ' + item)
                         try:
                           str=item.conf['UVRstring']
                           logger.debug(str)
                           #--id_resition of appearance can be different in xml(configuration) and html (result)
                           #linked via id
                           #check, if string in configuration and find its id
                           curr_id_config=id_conf[beschreibung.index(str)]
                           pos_in_result=id_res.index(curr_id_config)
                           result=content[pos_in_result]   
                           logger.debug('[UVR] Suchstring, Gefunden, Ergebnis' + str + beschreibung[curr_id] +result)       
                           if val!=-99999:
                             item(content[id])
                         except KeyError:
                           logger.debug('xmlstring is empty or not existent')
                           pass
                        Logfile:
                        Code:
                        2014-04-27 19:51:34,351 DEBUG    Main         192.168.0.249:49683 sent '{"cmd":"item","id":"logikitem.eins","val":1}' -- __init__.py:json_parse:270
                        2014-04-27 19:51:34,358 DEBUG    Main         Item logikitem.eins = True via Visu 192.168.0.249:49683 None -- item.py:__update:363
                        2014-04-27 19:51:34,364 DEBUG    Main         Triggering uvr - by: Item source: logikitem.eins dest: None value: True -- scheduler.py:trigger:162
                        2014-04-27 19:51:34,734 INFO     uvr          [UVR] Available Strings -- uvr2.py:<module>:22
                        2014-04-27 19:51:34,739 INFO     uvr          [UVR] T.Kollektor  Wert -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,744 INFO     uvr          [UVR] T.SP.unten  Wert -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,749 INFO     uvr          [UVR] T.SP.oben  Wert -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,753 INFO     uvr          [UVR] T.Solar-RL  Wert -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,758 INFO     uvr          [UVR] Temp.Aussen  Wert -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,763 INFO     uvr          [UVR] Pumpe-Solar  Zustand (Ein/Aus) -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,768 INFO     uvr          [UVR] Pumpe  Zustand (Ein/Aus) -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,773 INFO     uvr          [UVR] T.Solar-VL 2 -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,777 INFO     uvr          [UVR] T.Solar-RL 2 -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,782 INFO     uvr          [UVR] T.Speicher -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,787 INFO     uvr          [UVR] T.Warmwasser -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,792 INFO     uvr          [UVR] T.Kessel-VL -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,797 INFO     uvr          [UVR] T.Heizkr.VL -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,802 INFO     uvr          [UVR] T.Heizkr.RL -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,807 INFO     uvr          [UVR] T.Zirku.RL -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,811 INFO     uvr          [UVR] Ström.Schalt -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,816 INFO     uvr          [UVR] Pumpe-Hzkr Zustand (Ein/Aus) -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,821 INFO     uvr          [UVR] Anf.Brenner Zustand (Ein/Aus) -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,826 INFO     uvr          [UVR] Ladep.WW. Zustand (Ein/Aus) -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,830 INFO     uvr          [UVR] Pumpe-Zirku Zustand (Ein/Aus) -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,835 INFO     uvr          [UVR] Brennerstart  Zähler Stunden oder Impuls (je nach Modus) -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,840 INFO     uvr          [UVR] Brennerstart  Anzeigewert Stunden Vortag  -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,845 INFO     uvr          [UVR] MAX(An) Ergebnis -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,850 INFO     uvr          [UVR] HZ_ANF. Freigabe Anf. Heizung -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,855 INFO     uvr          [UVR] Wettervorher  Zustand (Ein/Aus) -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,860 INFO     uvr          [UVR] Pumpe-Solar Drehzahlstufe -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,864 INFO     uvr          [UVR] Ladep.WW. Drehzahlstufe -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,869 INFO     uvr          [UVR] WW_ANF. 2 Solltemperatur -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,874 INFO     uvr          [UVR] BETRSTDZ. 3 Zähler Minuten -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,879 INFO     uvr          [UVR] BETRSTDZ. 3 Zähler Stunden oder Impuls (je nach Modus) -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,891 INFO     uvr          [UVR] BETRSTDZ. 3 Anzeigewert Stunden Vortag  -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,898 INFO     uvr          [UVR] BETRSTDZ. 3 Anzeigewert Minuten Vortag  -- uvr2.py:<module>:31
                        2014-04-27 19:51:34,903 INFO     uvr          [UVR] WW-Temp.      5 Blockadezeit Tage -- uvr2.py:<module>:31
                        2014-04-27 19:51:36,878 DEBUG    Main         knx: 1.1.51 set 6/7/13 to 22.7 -- __init__.py:parse_telegram:190
                        2014-04-27 19:51:36,886 DEBUG    Main         Item uvr1611.temp.zirkulation = 22.7 via KNX 1.1.51 6/7/13 -- item.py:__update:363
                        2014-04-27 19:51:37,080 DEBUG    Main         knx: 1.1.51 set 6/7/27 to 0.0 -- __init__.py:parse_telegram:190
                        2014-04-27 19:51:37,282 DEBUG    Main         knx: 1.1.51 set 6/7/15 to 0.0 -- __init__.py:parse_telegram:190
                        2014-04-27 19:51:37,484 DEBUG    Main         knx: 1.1.51 set 6/7/16 to 0.0 -- __init__.py:parse_telegram:190
                        2014-04-27 19:51:37,909 DEBUG    uvr          [UVR] <class 'bytes'> -- uvr2.py:<module>:66
                        2014-04-27 19:51:37,915 DEBUG    uvr          [UVR] b'<!--[ARRAY]Wert |&nbsp;12,9|&nbsp;43,2|&nbsp;45,4|&nbsp;41,2|&nbsp;37,4|&nbsp;36,7|&nbsp;22,3|&nbsp;27,2|&nbsp;43,2|&nbsp;40,6|&nbsp;23,7|&nbsp;12,2|&nbsp;22,7|&nbsp;&nbsp;-----|AUS|&nbsp;AUS|Schaltzust\xc3\xa4nde|AUS|AUS|EIN|&nbsp;AUS|AUS|AUS|AUS|AUS|AUS|AUS|AUS|EIN|AUS|EIN|AUS|&nbsp;0|&nbsp;0| [/ARRAY]-->\n<!--2.0-->\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n<meta http-equiv="content-type" content="text/html;charset=utf-8" />\n<style type="text/css">\n  body {font-size: 14px; font-family: Verdana, Arial, Helvetica, sans-serif; background-repeat: no-repeat; background-color: transparent; background: transparent; margin: 0px; padding: 0px;}\n  #frame {text-align: left; vertical-align: top; position: relative; margin-left: 0;}\n\n/*########## CSS-ID: Positionen und Darstellung der Anzeigeparameter ##########*/\n#pos0{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,0,255); font-style: normal; font-weight: bold; text-align: left; top:72px; left:250px; }\n#pos1{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,0,255); font-style: normal; font-weight: bold; text-align: left; top:431px; left:335px; }\n#pos2{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,0,255); font-style: normal; font-weight: bold; text-align: left; top:369px; left:335px; }\n#pos3{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,0,255); font-style: normal; font-weight: bold; text-align: left; top:410px; left:116px; }\n#pos4{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,0,255); font-style: normal; font-weight: bold; text-align: left; top:39px; left:56px; }\n#pos5{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,128,0); font-style: normal; font-weight: bold; text-align: left; top:331px; left:135px; }\n#pos6{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,128,0); font-style: normal; font-weight: bold; text-align: left; top:350px; left:424px; }\n#pos7{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,0,255); font-style: normal; font-weight: bold; text-align: left; top:294px; left:382px; }\n#pos8{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,0,255); font-style: normal; font-weight: bold; text-align: left; top:497px; left:381px; }\n#pos9{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,0,255); font-style: normal; font-weight: bold; text-align: left; top:364px; left:550px; }\n#pos10{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,0,255); font-style: normal; font-weight: bold; text-align: left; top:126px; left:593px; }\n#pos11{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,0,255); font-style: normal; font-weight: bold; text-align: left; top:477px; left:550px; }\n#pos12{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,0,255); font-style: normal; font-weight: bold; text-align: left; top:153px; left:782px; }\n#pos13{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,0,255); font-style: normal; font-weight: bold; text-align: left; top:433px; left:824px; }\n#pos14{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,0,255); font-style: normal; font-weight: bold; text-align: left; top:223px; left:693px; }\n#pos15{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,0,255); font-style: normal; font-weight: bold; text-align: left; top:211px; left:601px; }\n#pos16{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,128,0); font-style: normal; font-weight: bold; text-align: left; top:314px; left:807px; }\n#pos17{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,128,0); font-style: normal; font-weight: bold; text-align: left; top:477px; left:660px; }\n#pos18{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,128,0); font-style: normal; font-weight: bold; text-align: left; top:330px; left:667px; }\n#pos19{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(0,128,0); font-style: normal; font-weight: bold; text-align: left; top:172px; left:708px; }\n#pos20{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(255,0,0); font-style: normal; font-weight: bold; text-align: left; top:564px; left:675px; }\n#pos21{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(255,0,0); font-style: normal; font-weight: bold; text-align: left; top:602px; left:675px; }\n#pos22{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(255,0,0); font-style: normal; font-weight: bold; text-align: left; top:603px; left:236px; }\n#pos23{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(255,0,0); font-style: normal; font-weight: bold; text-align: left; top:563px; left:307px; }\n#pos24{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(255,0,0); font-style: normal; font-weight: bold; text-align: left; top:104px; left:905px; }\n#pos25{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(255,0,0); font-style: normal; font-weight: bold; text-align: left; top:302px; left:131px; }\n#pos26{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(255,0,0); font-style: normal; font-weight: bold; text-align: left; top:308px; left:668px; }\n#pos27{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(255,0,0); font-style: normal; font-weight: bold; text-align: left; top:17px; left:564px; }\n#pos28{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(255,0,0); font-style: normal; font-weight: bold; text-align: left; top:565px; left:604px; }\n#pos29{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(255,0,0); font-style: normal; font-weight: bold; text-align: left; top:565px; left:546px; }\n#pos30{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(255,0,0); font-style: normal; font-weight: bold; text-align: left; top:601px; left:545px; }\n#pos31{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(255,0,0); font-style: normal; font-weight: bold; text-align: left; top:601px; left:603px; }\n#pos32{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(255,0,0); font-style: normal; font-weight: bold; text-align: left; top:564px; left:836px; }\n#pos33{position:absolute; font-family: Calibri; font-size: 20pt; color: rgb(255,0,0); font-style: normal; font-weight: bold; text-align: left; top:46px; left:902px; }\n</style>\n<script type="text/javascript">\n<!--\n var Title ="Onlineschema";  // Titeltext im Browserfenster\n var GraphicFile = "GRAFIK.gif";  // Pfad der Grafikdatei\n var Width = "1024px";\n var Height = "678px";\n \n//### Intervallzeit [in Sekunden] fr eine automatische Aktualisierung der Messwerte: ###\n//### < "30" = keine automatische Aktualisierung ###\n//--------------------------------------------------\n var AutoRefreshTime = "0";\n\n//### Linktext f\xc3\xbcr manuelle Aktualisierung der Messwerte: ###\n//### "" = kein Link f\xc3\xbcr manuelle Aktualisierung ###\n//--------------------------------------------------\n var RefreshLink ="";\n \n function set_dimenson_para (){\n document.getElementById("frame").style.width = Width;\n document.getElementById("frame").style.hight = Height;\n }\n -->\n</script>\n \n </head>\n <body onload="set_dimenson_para ()">\n <div id="frame">\n <!--########## Definitionen der Anzeigeparameter ##########-->\n<div id="pos0">&nbsp;13,0 &deg;C </div>\n<div id="pos1">&nbsp;43,3 &deg;C </div>\n<div id="pos2">&nbsp;45,4 &deg;C </div>\n<div id="pos3">&nbsp;22,3 &deg;C </div>\n<div id="pos4">&nbsp;12,2 &deg;C </div>\n<div id="pos5">AUS</div>\n<div id="pos6">AUS</div>\n<div id="pos7">&nbsp;41,2 &deg;C </div>\n<div id="pos8">&nbsp;36,7 &deg;C </div>\n<div id="pos9">&nbsp;37,4 &deg;C </div>\n<div id="pos10">&nbsp;27,2 &deg;C </div>\n<div id="pos11">&nbsp;43,1 &deg;C </div>\n<div id="pos12">&nbsp;40,5 &deg;C </div>\n<div id="pos13">&nbsp;23,7 &deg;C </div>\n<div id="pos14">&nbsp;22,7 &deg;C </div>\n<div id="pos15">&nbsp;AUS</div>\n<div id="pos16">EIN</div>\n<div id="pos17">AUS</div>\n<div id="pos18">AUS</div>\n<div id="pos19">AUS</div>\n<div id="pos20">&nbsp;&nbsp;&nbsp;&nbsp;0</div>\n<div id="pos21">&nbsp;&nbsp;&nbsp;&nbsp;0</div>\n<div id="pos22">&nbsp;47,0 &deg;C </div>\n<div id="pos23">AUS</div>\n<div id="pos24">AUS</div>\n<div id="pos25">&nbsp;0</div>\n<div id="pos26">&nbsp;0</div>\n<div id="pos27">&nbsp;47,0 &deg;C </div>\n<div id="pos28">&nbsp;0</div>\n<div id="pos29">&nbsp;&nbsp;&nbsp;&nbsp;0 /</div>\n<div id="pos30">&nbsp;&nbsp;&nbsp;&nbsp;0 /</div>\n<div id="pos31">&nbsp;0</div>\n<div id="pos32">&nbsp;&nbsp;7 Tage</div>\n<div id="pos33">EIN</div>\n</div>\n</body>\n</html>' -- uvr2.py:<module>:67
                        2014-04-27 19:51:37,938 ERROR    uvr          Logic: uvr, File: /usr/smarthome/logics/uvr2.py, Line: 69, Method: <module>, Exception: Type str doesn't support the buffer API -- scheduler.py:_task:334
                        Traceback (most recent call last):
                          File "/usr/smarthome/lib/scheduler.py", line 327, in _task
                            exec(obj.bytecode)
                          File "/usr/smarthome/logics/uvr2.py", line 69, in <module>
                            for line in html.split('\n'):
                        TypeError: Type str doesn't support the buffer API

                        Kommentar


                          #13
                          Hallo,

                          danke für deinen Einsatz.

                          Ich bin jetzt so weit, dass die Logik funktioniert, solange ich sie in der interaktiven shell von sh.py eingebe.

                          Wenn sie aber normal läuft, kommt es zu einem Fehler hier:
                          objekte=html.getElementsByTagName('div')

                          Code:
                          objekte=html.getElementsByTagName('div')
                          id_res=[]
                          content=[]
                          for i in range(0,len(objekte)):  
                               try:
                                  id=objekte[i].getAttribute('id')
                                  val=objekte[i].firstChild.nodeValue
                                  id_res.append(int(id.replace('pos','')))
                                  content.append(clean(val))
                               except:
                                  pass
                          Dabei ist html:
                          <body onload="set_dimenson_para ()">\n <div id="frame">\n <!--########## Definitionen der Anzeigeparameter ##########-->\n<div id="pos0">nbsp;15.2 deg;C </div>\n<div id="pos1">nbsp;nbsp;nbsp;0 </div>\n<div id="pos2">nbsp;14.1 deg;C </div>\n<div id="pos3">nbsp;58.4 deg;C </div>\n<div id="pos4">nbsp;68.9 deg;C </div>\n<div id="pos5">nbsp;52.5 deg;C </div>\n<div id="pos6">nbsp;36.3 deg;C </div>\n<div id="pos7">AUS</div>\n<div id="pos8">nbsp;0</div>\n<div id="pos9">EIN</div>\n<div id="pos10">AUS</div>\n<div id="pos11">EIN</div>\n<div id="pos12">AUS</div>\n<div id="pos13">EIN</div>\n<div id="pos14"></div>\n<div id="pos15"></div>\n<div id="pos16"></div>\n<div id="pos17"></div>\n<div id="pos18"></div>\n<div id="pos19"></div>\n<div id="pos20"></div>\n<div id="pos21"></div>\n<div id="pos22"></div>\n<div id="pos23"></div>\n<div id="pos24"></div>\n<div id="pos25"></div>\n<div id="pos26"></div>\n<div id="pos27"></div>\n<div id="pos28"></div>\n<div id="pos29"></div>\n<div id="pos30"></div>\n<div id="pos31"></div>\n<div id="pos32"></div>\n<div id="pos33"></div>\n<div id="pos34">nbsp;17.9 deg;C </div>\n<div id="pos35">nbsp;19.8 deg;C </div>\n<div id="pos36">nbsp;19.9 deg;C </div>\n<div id="pos37"></div>\n<div id="pos38"></div>\n<div id="pos39"></div>\n<div id="pos40">nbsp;14.1 deg;C </div>\n<div id="pos41"></div>\n<div id="pos42"></div>\n<div id="pos43">30</div>\n<div id="pos44">FBH</div>\n</div>\n</body>
                          Wenn sh.py im interaktiven Modus läuft, dann ist
                          content=['15.2', '0', '13.9', '58.2', '68.8', '51.9', '36.3', '', '0', '', '', '', '', '', '19.1', '20.3', '20.3', '13.9', '30', '']

                          Die for-Schleife dauert ein paar (3-4) Sekunden.

                          Kann es daran liegen? Bei den sqlite-Abfragen habe ich ja gelernt, dass diese auf 2s begrenzt sind..
                          Falls es daran liegen kann: Hat jemand einen Tipp, das zu beschleunigen?


                          Gruß,
                          Hendrik
                          Angehängte Dateien

                          Kommentar


                            #14
                            Hallo,

                            vielen Dank für den Download,

                            ist es auch möglich die xml per hand zu erstellen. Leider ist mir die conifg der UVR abhanden gekommen. aber ich habe Zugriff auf dei Webseite. Diese parse ich auch in HS. und möchte daran nichts ändern. Oder kann ich die Items irgenwie anders in deine Logic bekommen ?
                            Gruß

                            Guido

                            Kommentar


                              #15
                              Hallo,

                              sorry für die späte Antwort, ich war unterwegs.
                              du hast doch den BL-Net, oder? Da solltest du doch die Konfiguration wieder herunterladen können, oder (Datenverwaltung-->Datentransfer: Gerät--> BL-Net; Danach im Memory-Manager: Funktionsdaten-Download BL-NET->PC)

                              Davon abgesehen verstehe ich deine Frage nicht. Du benutzt den HS zum Auslesen und möchtest das auch nicht ändern. Was willst du dann? Was fehlt dir? Willst du sh.py überhaupt nutzen?

                              Gruß,
                              Hendrik

                              Kommentar

                              Lädt...
                              X