Ankündigung

Einklappen
Keine Ankündigung bisher.

Misterhouse und Gira Tastsensor 2plus mit Raumthermostat, 2fach

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

    #46
    Entschuldige bitte meine blöde Frage, aber dann müsste es doch theoretisch möglich sein aus den beiden bit-Objekten jeweils ein Byte zu machen.

    Hintergrund meiner Annahme ist das Ralf mir mal ein Szenen-Sript aus dem EIB6 geschrieben hat und dieses bei mir unter eib6_1 hinterlegt ist welches weiderum dem Objekt EIBSZ zugeordnet ist um Byte werte per Button für Szenenaufrufe zu verwenden.
    EIB61_Item:
    Code:
    # EIB61_Item: "scaling". Relative values 0-255 with 8 bit resolution
    
    package EIB61_Item;
    
    @EIB61_Item::ISA = ('EIB_Item');
    
    sub eis_type {
        return '6.1';
    }
    
    sub decode {
        my ($self, @data) = @_;
        my $res;
    
        unless ($#data == 1) {
            &main::print_log("Not EIS type 6.1 data received for $self->{groupaddr}: \[@data\]") if $main::config_parms{eib_errata} >= 2;
            return;
        }
        $res = sprintf("%.0f", $data[1] );
        return $res;
    }
    
    sub encode {
        my ($self, $state) = @_;
        my $newval;
        if ($state =~ /^(\d+)$/) {
            $newval = $1;
        }
        elsif ($state =~ /^\+(\d+)$/) {
            $newval = $self->{state} + $1;
            $newval = 255 if ($newval > 255 );
        }
        elsif ($state =~ /^\-(\d+)$/) {
            if ($self->{state} < $1) {
                $newval = 0;
            }
            else {
                $newval = $self->{state} - $1;
            }
        }
        elsif ($state =~ /^(\d+)\%$/) {
            $newval = $1;
        }
        else {
            print "Invalid state for EIS type 6: \'$state\'\n";
            return;
        }
        my $byte = sprintf ("%.0f", $newval );
        return([0, int $byte]);
    }
    
    # set receive -- detected a "read" or "write" message on the bus.  For
    # readable actuators, don't trust the values in "write" messages, as
    # they may not have been accepted by the actuator. So if it is a
    # write, and the actuator is readable, generate a read request to
    # obtain the actual value from the actuator
    
    sub set_receive {
        my ($self, $state, $set_by, $target, $read) = @_;
    
        if (!$read && $self->{readable}) {
            $self->delayed_read_request();
        }
        else {
            $self->SUPER::set_receive($state, $set_by, $target);
        }
    }
    eib61_test.pl
    Code:
    # noloop=start
    use EIB61_Item;
    # noloop=stop
    
    # GA anpassen!
    $Szeneneingang                =  new EIB61_Item('0/5/23');
    $SzeneneingangTS2_ohnekinder  =  new EIB61_Item('0/5/20');
    szenen.pl
    Code:
    #Szenen definitionen in Misterhouse
    
    tie_event $TV 'if ($state eq ON) {set $TV OFF; set $Szeneneingang 2}';
    tie_event $Schlafen 'if ($state eq ON) {set $Schlafen OFF; set $SzeneneingangTS2_ohnekinder 1}';
    tie_event $Nachtruhe 'if ($state eq ON) {set $Nachtruhe OFF; set $SzeneneingangTS2_ohnekinder 0}';
    oder liege ich da komplett falsch?

    Also wenn ich diese Objekt benutze könnte ich damit definierte Byte Werte an die KONNEX GA´s zum Betriebsmodi senden.

    Danke
    Christoph

    Kommentar


      #47
      Hi,

      also ich frage mich, was das für einen Sinn machen soll, Bitwerte in Bytewerte zu konvertieren. Ehrlich gesagt, verstehe ich überhaupt nicht, was du da machen möchtest...
      Gib mal ein praktisches Beispiel an!

      Gruß,
      thoern

      Kommentar


        #48
        O.K.

        Ich versuche das mal zu beschreiben,

        Objekt Gira TS2+ Konnex GA :

        Hier gibt im TS die Möglichkeit vier vorgegebene Temperaturen einzustellen, welchen im Normalbetrieb mit Zeiten im selbigen ausgeführt werden.
        z.B.:
        Frostschutz 7.0°C (Fensterkontakt)
        Komfortbetrieb 23.5°C (Basistemp)
        Standbybetrieb 20.0°C (Basis -3,5°)
        Nachtbetrieb 17.0°C (Basis -6,5)

        Diese sind über ein sogenantes Konnex Objekt anzuwählen, entweder direkt am Taster über eine Wippenfunktion (durchschalten) oder seperat jeweils eine Funktion auf eine Taste. Desweiteren über das Konnex-Objekt, welches ich nutzen möchte (bzw. schon mache).

        Alternativ stehen auch diese vier Ojekte als 1bit GA´s zur Verfügung, hätte aber bei mir den Nachteil bzw. den Ausschluss das ich dann für eine Funktion 4 Szenenobjekte von den 8 vorhanden benutzen müsste.

        In der angehangenen Grafik siehst du dazu Symbole welcher Modus gerade aktiv ist, als Beispiel ist hier gerade der Stanby aktiv und es wird geheizt.

        Diese Symbole hätte ich gerne (oder Text) in einem Auswahlfeld welches mir der Browser in iPxxx auswahl anbietet, um nach der Auswahl das entsprechende Byte für die Auswahl der Temperaturvorgabe zu senden.

        Zur Zeit rufe ich die Konnex auswahl über meine Szenen auf, die wiederum in den TS2+ hinterlegt sind. Also es funktioniert absolut so wie es mit den eigenen Mittel geht.
        Der Ansatz mit MH ist zugegebener Massen reine spielerei.

        Ich hoffe ich habe das einigemassen verständlich erklärt.

        Gruß
        Christoph
        Angehängte Dateien

        Kommentar


          #49
          Hallo Christoph,

          ok, hab's verstanden.

          Das EIBTHERMOSTAT soll ja möglichst universell einsetzbar sein. Wenn überhaupt, macht es also höchstens Sinn, eine Unterstützung für Frost/Nacht/Komfort/Standby auf Basis der 1Bit-GA's zu implementieren, da nahezu jedes ernsthafte EIB-Thermostat diese Objekte unterstützt.

          Die Konnex-GA ist was TS2-spezifisches, was im EIBTHERMOSTAT eigentlich nichts zu suchen hat. Man könnte natürlich eine neue Klasse TS2THERMOSTAT entwickeln, die sich vom EIBTHERMOSTAT ableitet und das Konnex-Feature enthält. Hierzu kannst du gerne über PN meinen Stundensatz anfragen


          Gruß,
          thoern

          Kommentar


            #50
            Komisch das gleiche habe ich schonmal gehöhrt, allerdings hieß derjenige Ralf, seid ihr Genossen?

            Also werde ich mal perlen, muss ich mich mal einlesen, vielleicht bekomme ich ja doch mal was selber hin.

            Danke

            Christoph

            Kommentar


              #51
              Hi,

              nur zur Info: man kann solche Sachen wie Nachtabsenkung, etc. relativ leicht auch mit MH lösen. Hier ein Beispiel von mir (ich mach da gar nix mit Nacht/Standbyobjekten):


              Die eingeschaltete Heizungsautomatik bewirkt folgendes:

              - Montag bis Freitag ab 04:00 Uhr angehobener Betrieb
              - Samstag und Sonntag ab 06:30 Uhr angehobener Betrieb
              - Sonntag bis Donnerstag ab 22:30 abgesenkter Betrieb
              - Freitag und Samstag ab 23:30 abgesenkter Betrieb
              - Mittwoch und Freitag ab 08:30 Normalbetrieb
              - Montag, Dienstag und Donnerstag ab 07:30 Uhr abgesenkter Betrieb
              und ab 11:30 Uhr Normalbetrieb

              heizungsautomatik.pl
              Code:
              if ($Heizungsautomatik->state eq 'on') {
              
              
                 # Montag - Freitag Raumtemperaturen um 4:00 Uhr anheben:
                 if (time_cron('0 4 * * 1-5')) { heizung_anheben() };
              
                 # Samstag und Sonntag Raumtemperaturen um 6:30 Uhr anheben:
                 if (time_cron('0 6 * * 6,0')) { heizung_anheben() };
              
                 # Sonntag - Donnerstag Raumtemperaturen um 22:30 absenken:
                 if (time_cron('30 22 * * 0-4')) { heizung_absenken() };
              
                 # Freitag und Samstag Raumtemperaturen um 23:30 absenken:
                 if (time_cron('30 23 * * 5-6')) { heizung_absenken() };
              
                 # Montag, Dienstag, Donnerstag um 7:30 Uhr Raumtemperatur
                 # absenken und um 11:30 Uhr wieder auf normal:
                 if (time_cron('30 7 * * 1,2,4'))  { heizung_absenken() };
                 if (time_cron('30 11 * * 1,2,4')) { heizung_normal() };
              
                 # Mittwoch und Freitag Raumtemperatur um 08:30 auf normal:
                 if (time_cron('30 8 * * 3,5')) { heizung_normal() };
              
              } elsif ($Heizungsautomatik->state_changed) {
                 heizung_normal();
              }
              
              sub heizung_anheben {
                 $EG_RCD_Kueche->set(23);
                 $EG_RCD_Bad->set(24);
                 $DG_RCD_Bad->set(24);
              }
              sub heizung_normal {
                 $EG_RCD_Kueche->set(22);
                 $EG_RCD_Bad->set(24);
                 $DG_RCD_Bad->set(22);
              }
              sub heizung_absenken {
                 $EG_RCD_Kueche->set(20);
                 $EG_RCD_Bad->set(22);
                 $DG_RCD_Bad->set(20);
              }

              Kommentar

              Lädt...
              X