openv / openv

:fire: OpenV Wiki
https://github.com/openv/openv/wiki
250 stars 29 forks source link

V200KW2: Wie sind die Timer-Zeiten dargestellt? #282

Open WikiSpaxe opened 7 years ago

WikiSpaxe commented 7 years ago

Ich müsste auch meine Timer-Zeiten der Heizung, für das Warmwasser und Zirkul.-Pumpe auslesen und benötige etwas Hilfe bei der Darstellung und für diese 3 Timer zugehörigen Adressen. Derzeit habe ich nur die Adressen (Hex) von 20 00 08 ... 20 18 08 ... 20 30 08 für Montag bis Sonntag. Die Antwort sind 8 Bytes - wie werden diese interpretiert? Wer kann mir helfen?

WikiSpaxe commented 7 years ago

Hallo Rainer,

hier ist ein Auszug aus meinen Sourcen.


/**
 * # Defintion der verschiedenen Einheiten
 *
 * ## Unit: CycleTime
 * Desc: 1 Byte Codierung der Schaltzeiten.
 *  Die Schaltzeiten werden in 10 Minutenschritten aufgeteilt und codiert
 *  das spart Platz.
 *  Die oberen 5 Bit stellen die Stunden dar, die unteren 3 Bit die Anzahl
 *  von 10 Minuten Anteilen
 *
 *       MSB                         LSB
 *      +---+---+---+---+---+---+---+---+
 *      | h4  h3  h2  h1  h0| m2-m0 * 10|
 *      +---+---+---+---+---+---+---+---+
 *
 *
 * ## Unit: Temperature
 * Desc: 2 Byte Codierung der Temperature 2-bit Komplement
 *
 * ## Unit: Raw
 * Desc: decode as hex value. Should be 2 or 4 bytes
 *  Byteorder is 12 or 1234
 *
 * ## Unit: Integer
 * Desc: 1, 2 or 4 byte Integer
 *  Byteorder is 1, 21 or 4321
 */

Gruß Frank

WikiSpaxe commented 7 years ago

Die passende C++ Routine:


for (int i=0; i<bufferLen; i+=2) {
        if (buffer[i] == 0xff) {
            *decodedClearText << i/2+1 << ":An:--     :Aus:--" << std::endl;
        } else {
            h = (buffer[i] & 0xF8) >> 3;
            m = (buffer[i] & 0x07) * 10;
            *decodedClearText
            << i/2+1 
            << ":An:"
            << std::setw(2) << std::setfill('0')
            << h << ":" 
            << std::setw(2) << std::setfill('0') 
            << m;

            h = (buffer[i+1] & 0xF8) >> 3;
            m = (buffer[i+1] & 0x07) * 10;
            *decodedClearText 
            << "  :Aus:" 
            << std::setw(2) << std::setfill('0')
            << h << ":" 
            << std::setw(2) << std::setfill('0') 
            << m
            << std::endl;
        }
    }
WikiSpaxe commented 7 years ago

Hallo fnobis - Danke. Das hilft erst einmal. Sind dir für die ID2098 die Timer-Adressen für die Heizung, WW und Zirk.-Pumpe bekannt?

WikiSpaxe commented 7 years ago

V200KW2 : Kann mir jemand bei den Timer-Adressen helfen? Ich benötige für die ID 2098 die Timer-Adresssblöcke (Mo-So) für Heizung, Warmwasser und Zirkulation-Pumpe. Herzlichen Dank. Gruß Rainer

WikiSpaxe commented 7 years ago

Hat jemand eine Idee, wie ich die nachfolgende Variable "command" setzen muss, um die Werte für den Timer korrekt an meine VScotHO1 zu übergeben?

vclient -h 127.0.0.1:3002 -c "setVitoTimerMoHeizen '+command+'"

Aktuell erhalte ich da leider eine Fehlermeldung:

[523] Fri Dec 2 16:03:52 2016 : Client verbunden 127.0.0.1:60814 (FD:2) [523] Fri Dec 2 16:03:52 2016 : Child Prozess mit pid:2545 gestartet [2545] Fri Dec 2 16:03:52 2016 : Befehl: setVitoTimerMoHeizen 1:An:05:30 Aus:08:00 2:An:16:00 Aus:19:00 3:An:-- Aus:-- 4:An:-- Aus:-- [2545] Fri Dec 2 16:03:52 2016 : Process 2545 tries to aquire lock [2545] Fri Dec 2 16:03:52 2016 : Process 2545 got lock [2545] Fri Dec 2 16:03:52 2016 : >FRAMER: open device /dev/ttyUSB0 ProtocolID 41 [2545] Fri Dec 2 16:03:52 2016 : konfiguriere serielle Schnittstelle /dev/ttyUSB0 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 04 [2545] Fri Dec 2 16:03:52 2016 : <RECV: len=1 05 (540.0 ms) [2545] Fri Dec 2 16:03:52 2016 : <RECV: received 05 [2545] Fri Dec 2 16:03:52 2016 : >FRAMER: closed [2545] Fri Dec 2 16:03:52 2016 : >SEND: 16 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 00 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 00 [2545] Fri Dec 2 16:03:52 2016 : <RECV: len=1 06 (10.0 ms) [2545] Fri Dec 2 16:03:52 2016 : <RECV: received 06 [2545] Fri Dec 2 16:03:52 2016 : >FRAMER: opened [2545] Fri Dec 2 16:03:52 2016 : Cycle Time: 01:00 -> [08] [2545] Fri Dec 2 16:03:52 2016 : Cycle Time: 01:00 -> [08] [2545] Fri Dec 2 16:03:52 2016 : Cycle Time: 02:00 -> [10] [2545] Fri Dec 2 16:03:52 2016 : Cycle Time: 02:00 -> [10] [2545] Fri Dec 2 16:03:52 2016 : Cycle Time: 03:00 -> [18] [2545] Fri Dec 2 16:03:52 2016 : Cycle Time: 03:00 -> [18] [2545] Fri Dec 2 16:03:52 2016 : Cycle Time: 04:00 -> [20] [2545] Fri Dec 2 16:03:52 2016 : Cycle Time: 04:00 -> [20] [2545] Fri Dec 2 16:03:52 2016 : >SEND: 41 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 0D [2545] Fri Dec 2 16:03:52 2016 : >SEND: 00 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 02 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 20 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 00 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 08 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 08 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 08 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 10 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 10 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 18 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 18 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 20 [2545] Fri Dec 2 16:03:52 2016 : >SEND: 20 [2545] Fri Dec 2 16:03:52 2016 : >SEND: D7 [2545] Fri Dec 2 16:03:52 2016 : <RECV: len=1 06 (80.0 ms) [2545] Fri Dec 2 16:03:52 2016 : <RECV: received 06 [2545] Fri Dec 2 16:03:52 2016 : >FRAMER: addr was still active FE06 [2545] Fri Dec 2 16:03:52 2016 : >FRAMER: Command send [2545] Fri Dec 2 16:03:52 2016 : >FRAMER: no preset result [2545] Fri Dec 2 16:03:52 2016 : <RECV: len=1 41 (0.0 ms) [2545] Fri Dec 2 16:03:52 2016 : <RECV: received 41 [2545] Fri Dec 2 16:03:52 2016 : <RECV: len=1 05 (10.0 ms) [2545] Fri Dec 2 16:03:52 2016 : <RECV: received 05 [2545] Fri Dec 2 16:03:52 2016 : <RECV: len=1 01 (0.0 ms) [2545] Fri Dec 2 16:03:52 2016 : <RECV: len=1 02 (0.0 ms) [2545] Fri Dec 2 16:03:52 2016 : <RECV: len=1 20 (0.0 ms) [2545] Fri Dec 2 16:03:52 2016 : <RECV: len=1 00 (10.0 ms) [2545] Fri Dec 2 16:03:52 2016 : <RECV: len=1 08 (0.0 ms) [2545] Fri Dec 2 16:03:52 2016 : <RECV: len=1 30 (0.0 ms) [2545] Fri Dec 2 16:03:52 2016 : <RECV: received 01 02 20 00 08 30 [2545] Fri Dec 2 16:03:52 2016 : >FRAMER: unexpected length 8 08 [2545] Fri Dec 2 16:03:52 2016 : Fehler recv, Abbruch [2545] Fri Dec 2 16:03:52 2016 : Fehler beim ausfuehren von setVitoTimerMoHeizen 1:An:05:30 Aus:08:00 2:An:16:00 Aus:19:00 3:An:-- Aus:-- 4:An:-- Aus:-- [2545] Fri Dec 2 16:03:52 2016 : Befehl: quit [2545] Fri Dec 2 16:03:52 2016 : >SEND: 04 [2545] Fri Dec 2 16:03:52 2016 : <RECV: len=1 06 (10.0 ms) [2545] Fri Dec 2 16:03:52 2016 : <RECV: received 06 [2545] Fri Dec 2 16:03:52 2016 : >FRAMER: closed [2545] Fri Dec 2 16:03:52 2016 : Process 2545 released lock [2545] Fri Dec 2 16:03:52 2016 : Verbindung beendet (fd:2) [2545] Fri Dec 2 16:03:52 2016 : Child Prozess pid:2545 beendet

Gruß,

Thorsten

WikiSpaxe commented 7 years ago

So, hab's gefunden. Zumindest zum Teil. Mit z.B. vclient -h 127.0.0.1:3002 -c "setVitoTimerMoHeizen 08:00 10:00 15:00 17:00 19:00 20:00" kann ich die Timer-Werte erfolgreich setzen. Allerdings bekomme ich immer noch eine FRAMER-Fehlermeldung, dass die Länge nicht passt (>FRAMER: unexpected length 8 08).

Hatte alternativ versucht, die nicht gesetzen Zeitpunkte mit "-- --" zu definieren (also: vclient -h 127.0.0.1:3002 -c "setVitoTimerMoHeizen 08:00 10:00 15:00 17:00 19:00 20:00 -- --"), aber dann werden diese als FF gesetzt, und ich erhalte weiterhin die erwähnte Fehlermeldung.

Hat jemand eine Idee, wie ich die Fehlermeldung vermeiden kann? Wie gesagt, die Werte werden von meiner Vitodens übernommen, so dass es sich eher um ein kosmetisches Problem handelt.

WikiSpaxe commented 7 years ago

Ach, noch was. Vermeiden sollte man die Eingabe von "--:--". Denn dann wird der letzte Timer-Wert einfach wiederholt.