Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin - Resol VBUS / Cosmo Multi, Solarthermie logging

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

  • Marcov
    antwortet
    hi, ja bei mir läuft es, habe es aber ganz neu ohne die shared -datei geschrieben.
    Ich komme nur gerade nicht dran, da es beim Schwiegervater im Einsatz ist.

    Einen Kommentar schreiben:

  • Holoman5
    Forums-Einsteiger

  • Holoman5
    antwortet
    Zitat von Marcov Beitrag anzeigen
    Ich habe es nun etwas angepasst, er schreibt aber anscheined noch nicht das Richtige in die shared.pkl. Das Problem besteht darin, dass es nur ein Device und nur ein Paket gibt. Er dann Probleme hat das Dictionary zu lesen,weil er es als List erkennt. Ich habe es nun so geändert:

    PHP-Code:
    def parse_payload(msgprintallpacketdict):
    payload get_payload(msg)
    packet spec.spec['packet']
    #for packet in spec.spec:
    print "Source: " str(packet['source'])
    print 
    "destination: " packet['destination']
    print 
    "command: " packet['command']
    if 
    packet['source'] == get_source(msg) and packet['destination'] == get_destination(msg) and packet['command'] == get_command(msg):
    #print "FIELD: " + str(packet['field'])


    #field = packet['field']
    for field in packet['field']:
    if 
    field.has_key('offset'):
    #print "FIELD: " + str(field['name'][0].encode("UTF-8"))
    test = {}
    test[field['name'][0].encode("UTF-8")] = str(gb(payloadint(field['offset']), int(field['offset'])+((int(field['bitSize'])+1) / 8)) * (float(field['factor']) if field.has_key('factor') else 1)) + "; " + (field['unit'] if field.has_key('unit') else '')
    print (
    "test: " str(test))
    if 
    printall:
    shared test
    fp 
    codecs.open("/tmp/shared.pkl","w"'utf-8')
    #fp = codecs.open("shared.pkl","w")
    pickle.dump(sharedfp)
    fp.close

    return test 
    die Ausgabe ist dann:
    PHP-Code:
    Source0x4221
    destination
    0x0010
    command
    0x0100
    test
    : {'Temperatur Sensor 1'u'13.1; \xb0C'}
    test: {'Temperatur Sensor 2'u'34.8; \xb0C'}
    test: {'Temperatur Sensor 3'u'48.5; \xb0C'}
    test: {'Temperatur Sensor 4'u'36.1; \xb0C'}
    test: {'Drehzahl Pumpe 1'u'0; %'}
    test: {'Drehzahl Pumpe 2'u'100; %'}
    test: {'Relaismaske''2; '}
    test: {'Fehlermaske''0; '}
    test: {'Systemzeit''1337; '}
    test: {'Schema''9.0; '}
    test: {'O''0; '}
    test: {'O''0; '}
    test: {'O''0; '}
    test: {'O''0; '}
    test: {'O''0; '}
    test: {'O''0; '}
    test: {'Betriebsstunden Relais 1''1569.0; '}
    test: {'Betriebsstunden Relais 2''4971.0; '}
    test: {'Version''1.0; '
    sieht also meiner Meinung nach gut aus, allerdings kann er die dann gespeicherte Datei nicht lesen:

    PHP-Code:
    Unexpected errorresol reading shared.pkl 
    im Anhang noch die shared.pkl
    Hi! läuft eigentlich dein Auslesen? Ich bekomme auch nur den Unexpected error: resol reading shared.pkl Fehler. Würde gerne meine Aussentemperatur auf den KNX Bus schicken, hab draußen keine Sensoren. Habe die Cosmo Multi und Datenlogger 2.

    Einen Kommentar schreiben:


  • KHome
    antwortet
    ..es ist die config.py des Plug-Ins. Das ist nicht sauber - Korrekt.
    Dieser Kodeschnipsel hat nicht den Anspruch perfekt zu sein - es ist vielmehr ein Provisorium
    Ich weiß', dass Marcov an einer besseren Lösung arbeitet...

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    ??? In der smarthome.py wird kein Port definiert. Hier finden nur globale Konfigurationen statt.

    Im Quellcode von smarthome (config.py) sollte man nie editieren!

    Einen Kommentar schreiben:


  • KHome
    antwortet
    Der Port ist in der Smarthome.py nicht relevant, da auskommentiert mit #
    In der Datei
    Code:
    config.py --> IP und Passwort editieren
    address = ("192.168.178.x", 7053)
    ist der Port mit 7053 angegeben. Die IP ist ebenfalls noch zu ändern.

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Du hast in der etc/plugin.conf einen Parameter namens port definiert, der in der __init__ Methode des Plugins nicht existiert.

    Einen Kommentar schreiben:

  • Holoman5
    Forums-Einsteiger

  • Holoman5
    antwortet
    Hi ich habe eine Cosmo Regelung und den Dataloger DL2 online alles bei Vbus.net konfiguriert und geht. Ich bekomme eine Fehlermeldung im Smarhome.py (Plugin resol exception: __init__() got an unexpected keyword argument 'port') finde aber nichts mit Port in der init. Was könnte es sein? Danke im Voraus!

    Einen Kommentar schreiben:


  • Marcov
    antwortet
    Ich habe es nun etwas angepasst, er schreibt aber anscheined noch nicht das Richtige in die shared.pkl. Das Problem besteht darin, dass es nur ein Device und nur ein Paket gibt. Er dann Probleme hat das Dictionary zu lesen,weil er es als List erkennt. Ich habe es nun so geändert:

    PHP-Code:
    def parse_payload(msgprintallpacketdict):
        
    payload get_payload(msg)
        
    packet spec.spec['packet']
        
    #for packet in spec.spec:
        
    print "Source: " str(packet['source'])
        print 
    "destination: " packet['destination']
        print 
    "command: " packet['command']
        if 
    packet['source'] == get_source(msg) and packet['destination'] == get_destination(msg) and packet['command'] == get_command(msg):
            
    #print "FIELD: " + str(packet['field'])


            #field = packet['field']
            
    for field in packet['field']:
                if 
    field.has_key('offset'):
                    
    #print "FIELD: " +  str(field['name'][0].encode("UTF-8"))
                    
    test = {}
                    
    test[field['name'][0].encode("UTF-8")] = str(gb(payloadint(field['offset']), int(field['offset'])+((int(field['bitSize'])+1) / 8)) * (float(field['factor']) if field.has_key('factor') else 1)) + "; " + (field['unit'] if field.has_key('unit') else '')
                    print (
    "test: " str(test))
                    if 
    printall:
                        
    shared test
                        fp 
    codecs.open("/tmp/shared.pkl","w"'utf-8')
                        
    #fp = codecs.open("shared.pkl","w")
                        
    pickle.dump(sharedfp)
                        
    fp.close

            
    return test 
    die Ausgabe ist dann:
    PHP-Code:
    Source0x4221
    destination
    0x0010
    command
    0x0100
    test
    : {'Temperatur Sensor 1'u'13.1;  \xb0C'}
    test: {'Temperatur Sensor 2'u'34.8;  \xb0C'}
    test: {'Temperatur Sensor 3'u'48.5;  \xb0C'}
    test: {'Temperatur Sensor 4'u'36.1;  \xb0C'}
    test: {'Drehzahl Pumpe 1'u'0;  %'}
    test: {'Drehzahl Pumpe 2'u'100;  %'}
    test: {'Relaismaske''2; '}
    test: {'Fehlermaske''0; '}
    test: {'Systemzeit''1337; '}
    test: {'Schema''9.0; '}
    test: {'O''0; '}
    test: {'O''0; '}
    test: {'O''0; '}
    test: {'O''0; '}
    test: {'O''0; '}
    test: {'O''0; '}
    test: {'Betriebsstunden Relais 1''1569.0; '}
    test: {'Betriebsstunden Relais 2''4971.0; '}
    test: {'Version''1.0; '
    sieht also meiner Meinung nach gut aus, allerdings kann er die dann gespeicherte Datei nicht lesen:

    PHP-Code:
    Unexpected errorresol reading shared.pkl 
    im Anhang noch die shared.pkl
    Angehängte Dateien
    Zuletzt geändert von Marcov; 03.05.2017, 21:30.

    Einen Kommentar schreiben:


  • Marcov
    antwortet
    Hi,
    nach der for-Schleife geht es nicht ->
    PHP-Code:
    Traceback (most recent call last):
      
    File "resol_background.py"line 329in <module>
        
    load_data()
      
    File "resol_background.py"line 75in load_data
        new_data 
    parse_payload(msgTrueresult2)
      
    File "resol_background.py"line 183in parse_payload
        
    print "Source: " str(packet['source'] )
    TypeErrorstring indices must be integers 
    deshalb habe ich es davor mit:
    PHP-Code:
        print "source: " str(spec.spec['packet']['source'])
        print 
    "destination: " str(spec.spec['packet']['destination'])
        print 
    "command: " str(spec.spec['packet']['command']) 
    probiert

    die Ausgabe (entspricht meinem json file):
    PHP-Code:
    source0x4221
    destination
    0x0010
    command
    0x0100 
    ggf. liegt es daran, dass in der CosmoMulti mehrere Devices und mehrere Pakete enthalten sind, in meinem File aber nur ein Device und Paket?


    PHP-Code:
    print "paket: " str(spec.spec['packet']) 
    ergibt:

    PHP-Code:
    paket: {u'source'u'0x4221'u'destination'u'0x0010'u'command'u'0x0100'u'field': [{u'name': [u'Temperatur Sensor 1', {u'-lang'u'en'u'#text'u'Temperature sensor 1'}], u'bitSize'u'15'u'factor'u'0.1'u'-commonUsage'u'collector1'u'offset'u'0'u'unit'u' \xb0F'}, {u'name': [u'Temperatur Sensor 2', {u'-lang'u'en'u'#text'u'Temperature sensor 2'}], u'bitSize'u'15'u'factor'u'0.1'u'-commonUsage'u'store1'u'offset'u'2'u'unit'u' \xb0F'}, {u'bitSize'u'15'u'factor'u'0.1'u'name': [u'Temperatur Sensor 3', {u'-lang'u'en'u'#text'u'Temperature sensor 3'}], u'unit'u' \xb0F'u'offset'u'4'}, {u'bitSize'u'15'u'factor'u'0.1'u'name': [u'Temperatur Sensor 4', {u'-lang'u'en'u'#text'u'Temperature sensor 4'}], u'unit'u' \xb0F'u'offset'u'6'}, {u'bitSize'u'7'u'name': [u'Drehzahl Pumpe 1', {u'-lang'u'en'u'#text'u'Pump speed 1'}], u'unit'u' %'u'offset'u'8'}, {u'bitSize'u'7'u'name': [u'Drehzahl Pumpe 2', {u'-lang'u'en'u'#text'u'Pump speed 2'}], u'unit'u' %'u'offset'u'9'}, {u'bitSize'u'8'u'name': [u'Relaismaske', {u'-lang'u'en'u'#text'u'Relais mask'}], u'offset'u'10'}, {u'bitSize'u'8'u'offset'u'11'u'name': [u'Fehlermaske', {u'-lang'u'en'u'#text'u'Error mask'}], u'-commonUsage'u'error'}, {u'bitSize'u'16'u'format'u't'u'timeRef'u'1'u'name': [u'Systemzeit', {u'-lang'u'en'u'#text'u'System time'}], u'offset'u'12'}, {u'bitSize'u'8'u'factor'u'1'u'name': [u'Schema', {u'-lang'u'en'u'#text'u'System'}], u'offset'u'14'}, {u'bitSize'u'1'u'bitPos'u'0'u'name'u'Option Kollektor Max.'u'offset'u'15'}, {u'bitSize'u'1'u'bitPos'u'1'u'name'u'Option Kollektor Min.'u'offset'u'15'}, {u'bitSize'u'1'u'bitPos'u'2'u'name'u'Option Kollektor Frost'u'offset'u'15'}, {u'bitSize'u'1'u'bitPos'u'3'u'name'u'Option R\xf6hrenkollektor'u'offset'u'15'}, {u'bitSize'u'1'u'bitPos'u'4'u'name'u'Option R\xfcckk\xfchlung'u'offset'u'15'}, {u'bitSize'u'1'u'bitPos'u'5'u'name'u'Option WMZ'u'offset'u'15'}, {u'bitSize'u'16'u'factor'u'1'u'name': [u'Betriebsstunden Relais 1', {u'-lang'u'en'u'#text'u'Operating hours relais 1'}], u'offset'u'16'}, {u'bitSize'u'16'u'factor'u'1'u'name': [u'Betriebsstunden Relais 2', {u'-lang'u'en'u'#text'u'Operating hours relais 2'}], u'offset'u'18'}, {u'field': [{u'bitSize'u'16'u'factor'u'1'u'offset'u'20'}, {u'bitSize'u'16'u'factor'u'1000'u'offset'u'22'}, {u'bitSize'u'16'u'factor'u'1000000'u'offset'u'24'}], u'name': [u'W\xe4rmemenge', {u'-lang'u'en'u'#text'u'Heat amount'}], u'unit'u' Btu'u'-commonUsage'u'heat'}, {u'bitSize'u'16'u'factor'u'0.01'u'name': [u'Version', {u'-lang'u'en'u'#text'u'Version'}], u'offset'u'26'}]} 
    danke
    Zuletzt geändert von Marcov; 01.05.2017, 19:53.

    Einen Kommentar schreiben:


  • KHome
    antwortet
    Hi,

    bitte lass Dir folgende Variablen vor der If-Abfrage ausgeben, um den Fehler einzugrenzen.
    D.h. vor Zeile 182 einfügen (via
    Code:
     print( ... )
    oder
    Code:
    logger.warning( ...)
    oder via einer Python IDE
    Code:
    [COLOR=#000000][COLOR=#0000BB]msg[/COLOR][/COLOR]
    Code:
    [COLOR=#000000][COLOR=#0000BB]packet[/COLOR][COLOR=#007700][[/COLOR][COLOR=#DD0000]'source'[/COLOR][COLOR=#007700]][/COLOR][/COLOR]
    Code:
    [COLOR=#000000][COLOR=#0000BB]packet[/COLOR][COLOR=#007700][[/COLOR][COLOR=#DD0000]'destination'[/COLOR][COLOR=#007700]][/COLOR][/COLOR]
    Code:
    [COLOR=#000000][COLOR=#0000BB]packet[/COLOR][COLOR=#007700][[/COLOR][COLOR=#DD0000]'command'[/COLOR][COLOR=#007700]][/COLOR][/COLOR]
    Grüße,
    KHome

    Einen Kommentar schreiben:


  • Marcov
    antwortet
    Hi, Danke für die Rückmeldung - mein erste Fehler war, dass ich den Port auf den im Webinterface ungestellt habe, deshalb konnte ich mich nicht einloggen. Es muss also immer Port 7053 sein, egal was man im Webinterface des VBUS/Lan einstellt.
    Ich habe mich nun noch einmal damit befasst. Die parse_payload Funktion bricht bei mir mit folgendem Fehler ab:
    PHP-Code:
    Traceback (most recent call last):
      
    File "resol_background.py"line 325in <module>
        
    load_data()
      
    File "resol_background.py"line 75in load_data
        new_data 
    parse_payload(msgTrueresult2)
      
    File "resol_background.py"line 182in parse_payload
        
    if packet['source'] == get_source(msg) and packet['destination'] == get_destination(msg) and packet['command'] == get_command(msg):
    TypeErrorstring indices must be integers 
    nehme ich die mitgelieferte CosmoMulti.json datei erhalte ich diesen Fehler nicht, die Datei wird aber leider trotzdem nicht geschrieben.

    hier auch meine .json Datei, ggf. habe ich hier einen Fehler?

    PHP-Code:
    {
      
    "vbusSpecification": {
        
    "device": {
          
    "address""0x4221",
          
    "mask""0xFFFF",
          
    "name""DeltaSol BS Plus",
          
    "isMaster""true"
        
    },
        
    "packet": {
          
    "destination""0x0010",
          
    "source""0x4221",
          
    "command""0x0100",
          
    "field": [
            {
              
    "-commonUsage""collector1",
              
    "offset""0",
              
    "name": [
                
    "Temperatur Sensor 1",
                {
                  
    "-lang""en",
                  
    "#text""Temperature sensor 1"
                
    }
              ],
              
    "bitSize""15",
              
    "factor""0.1",
              
    "unit"" °F"
            
    },
            {
              
    "-commonUsage""store1",
              
    "offset""2",
              
    "name": [
                
    "Temperatur Sensor 2",
                {
                  
    "-lang""en",
                  
    "#text""Temperature sensor 2"
                
    }
              ],
              
    "bitSize""15",
              
    "factor""0.1",
              
    "unit"" °F"
            
    },
            {
              
    "offset""4",
              
    "name": [
                
    "Temperatur Sensor 3",
                {
                  
    "-lang""en",
                  
    "#text""Temperature sensor 3"
                
    }
              ],
              
    "bitSize""15",
              
    "factor""0.1",
              
    "unit"" °F"
            
    },
            {
              
    "offset""6",
              
    "name": [
                
    "Temperatur Sensor 4",
                {
                  
    "-lang""en",
                  
    "#text""Temperature sensor 4"
                
    }
              ],
              
    "bitSize""15",
              
    "factor""0.1",
              
    "unit"" °F"
            
    },
            {
              
    "offset""8",
              
    "name": [
                
    "Drehzahl Pumpe 1",
                {
                  
    "-lang""en",
                  
    "#text""Pump speed 1"
                
    }
              ],
              
    "bitSize""7",
              
    "unit"" %"
            
    },
            {
              
    "offset""9",
              
    "name": [
                
    "Drehzahl Pumpe 2",
                {
                  
    "-lang""en",
                  
    "#text""Pump speed 2"
                
    }
              ],
              
    "bitSize""7",
              
    "unit"" %"
            
    },
            {
              
    "offset""10",
              
    "name": [
                
    "Relaismaske",
                {
                  
    "-lang""en",
                  
    "#text""Relais mask"
                
    }
              ],
              
    "bitSize""8"
            
    },
            {
              
    "-commonUsage""error",
              
    "offset""11",
              
    "name": [
                
    "Fehlermaske",
                {
                  
    "-lang""en",
                  
    "#text""Error mask"
                
    }
              ],
              
    "bitSize""8"
            
    },
            {
              
    "offset""12",
              
    "name": [
                
    "Systemzeit",
                {
                  
    "-lang""en",
                  
    "#text""System time"
                
    }
              ],
              
    "bitSize""16",
              
    "format""t",
              
    "timeRef""1"
            
    },
            {
              
    "offset""14",
              
    "name": [
                
    "Schema",
                {
                  
    "-lang""en",
                  
    "#text""System"
                
    }
              ],
              
    "bitSize""8",
              
    "factor""1"
            
    },
            {
              
    "offset""15",
              
    "name""Option Kollektor Max.",
              
    "bitSize""1",
              
    "bitPos""0"
            
    },
            {
              
    "offset""15",
              
    "name""Option Kollektor Min.",
              
    "bitSize""1",
              
    "bitPos""1"
            
    },
            {
              
    "offset""15",
              
    "name""Option Kollektor Frost",
              
    "bitSize""1",
              
    "bitPos""2"
            
    },
            {
              
    "offset""15",
              
    "name""Option Röhrenkollektor",
              
    "bitSize""1",
              
    "bitPos""3"
            
    },
            {
              
    "offset""15",
              
    "name""Option Rückkühlung",
              
    "bitSize""1",
              
    "bitPos""4"
            
    },
            {
              
    "offset""15",
              
    "name""Option WMZ",
              
    "bitSize""1",
              
    "bitPos""5"
            
    },
            {
              
    "offset""16",
              
    "name": [
                
    "Betriebsstunden Relais 1",
                {
                  
    "-lang""en",
                  
    "#text""Operating hours relais 1"
                
    }
              ],
              
    "bitSize""16",
              
    "factor""1"
            
    },
            {
              
    "offset""18",
              
    "name": [
                
    "Betriebsstunden Relais 2",
                {
                  
    "-lang""en",
                  
    "#text""Operating hours relais 2"
                
    }
              ],
              
    "bitSize""16",
              
    "factor""1"
            
    },
            {
              
    "-commonUsage""heat",
              
    "name": [
                
    "Wärmemenge",
                {
                  
    "-lang""en",
                  
    "#text""Heat amount"
                
    }
              ],
              
    "unit"" Btu",
              
    "field": [
                {
                  
    "offset""20",
                  
    "bitSize""16",
                  
    "factor""1"
                
    },
                {
                  
    "offset""22",
                  
    "bitSize""16",
                  
    "factor""1000"
                
    },
                {
                  
    "offset""24",
                  
    "bitSize""16",
                  
    "factor""1000000"
                
    }
              ]
            },
            {
              
    "offset""26",
              
    "name": [
                
    "Version",
                {
                  
    "-lang""en",
                  
    "#text""Version"
                
    }
              ],
              
    "bitSize""16",
              
    "factor""0.01"
            
    }
          ]
        }
      }

    Einen Kommentar schreiben:


  • KHome
    antwortet
    Hallo Marcov,

    auf der GITHUB Seite wird folgendes beschrieben:
    If anything wents wrong, you can enable debug flag in config.py. This will print some basic information while executing the script, but will destroy the JSON output.
    Ich empfehle Dir erstmal mit diesem Skript und Python2 auf der Konsole zu starten:
    https://github.com/herbstmensch/resol-vbus-python
    Wenn das erstmal läuft, dann klappt es bestimmt auch mit dem oben modifizierten Skript

    Einen Kommentar schreiben:


  • Marcov
    antwortet
    Hallo,

    ich versuche das VBUS Plugin ans Laufen zu bringen, scheitere aber am python2 script. Wenn Debug = true gestellt ist, dann bricht das Script schon beim Laden der Standardspec ab. Das habe ich nun auskommentiert, nun hängt er aber in der Login Function von resol.py, er erwartet ja die Antwort "Hello", erhalte aber:

    HTML-Code:
    <?xml version="1.0"?>
    <root xmlns="urn:schemas-upnp-org:device-1-0">
    <specVersion>
    <major>1</major>
    <minor>0</minor>
    </specVersion>
    <device>
    <deviceType>urn:schemas-upnp-org:device:VBus/LAN:1</deviceType>
    <friendlyName>VBus (192.168.2.101)</friendlyName>
    <manufacturer>RESOL GmbH</manufacturer>
    <manufacturerURL>http://www.resol.com</manufacturerURL>
    <modelDescription>VBus/LAN Module</modelDescription>
    <modelName>VBus/LAN</modelName>
    <modelNumber>VBus/LAN</modelNumber>
    <UDN>uuid:upnp_VBus/LAN-001e664005ac</UDN>
    <serviceList>
    <service>
    <serviceType>(null)</serviceType>
    <serviceId>(null)</serviceId>
    <controlURL>(null)</controlURL>
    <eventSubURL>(null)</eventSubURL>
    <SCPDURL>(null)</SCPDURL>
    </service>
    </serviceList>
    <presentationURL>http://192.168.2.101:80</presentationURL>
    </device>
    </root>

    Einen Kommentar schreiben:


  • KHome
    antwortet
    Hi Lio,

    > Daten via LAN <
    Ja

    > Direkter Anschluss via Seriellwandler <
    Nein, ...vielleicht mit Anpassungen

    Welche Hardware verwendest Du, um die VBUS Daten zu empfangen?
    Die o.g. Lösung basiert auf dem Phython-Skript: https://github.com/herbstmensch/resol-vbus-python
    Hier wird ein "Stream" ausgewertet, der via "Socket" = LAN empfangen wird.

    Eine Auswertung der seriellen Schnittstelle ist bei diesem Skript nicht direkt vorgesehen.
    Mit etwas Programmieraufwand könntest Du es ggf. "umbauen"...

    Einen Kommentar schreiben:


  • lio123
    antwortet
    Hallo,
    verstehe ich das richtig, dass Plugin die Daten via LAN empfängt? Ein direkter Anschluss an ein Seriellwandler wie bei :https://knx-user-forum.de/forum/supp...er-resol/page5 ist nicht möglich?

    Hintergrund: Mein Plugin funktioniert nicht mehr auf dem Wiregate und suche nun ersatz-z.B. über das Smarthome.py

    Danke und Gruß,
    Lio

    Einen Kommentar schreiben:

Lädt...
X