Ankündigung

Einklappen
Keine Ankündigung bisher.

MisterHouse: Beschattung einschalten

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

    MisterHouse: Beschattung einschalten

    Hallo zusammen,

    ich habe mir in/für Misterhouse eine Logik für die Beschattung erstellt. Diese prüft alle 10min ob die Beschattung eingeschaltet ist und dann ob ein bestimmter Helligkeitswert erreicht ist. Wenn der Wert unterschritten ist, fahren die Rollo's wieder hoch usw.

    PHP-Code:
    if ((new_minute 10) || (state_changed $Beschattung eq ON)){
     
    if(
    state $Beschattung eq ON) {
    if (
    state $Helligkeit_Norden >= 100) {
     
    # Rollo auf 70% für Beschattung
     
    } else {
     
    # Rollo auf 0%
     
    }
    } else {
     
    # => keine Beschattung eingeschaltet
     
    }

    Die Beschattung habe ich dann als Adresse in der mht und ETS eingetragen und kann diese auch über einen Schalter ein/aus-schalten.

    Aber: Wie kann ich den Status an meinen Schalter zurückgeben um dort die LED als signalisierung zu nutzen??

    Hat hier bitte jemand einen Tip??

    VG
    Joerg

    #2
    Merde

    Ich habe nun noch eine Schleife eingebaut welche prüfen soll ob die Rollo bereits unten/oben sind um zu vermeiden das die Motoren alle 10min "angefahren" werden.

    Aber: Es geht nicht.

    Irgendwie wird meine Var nicht abgefragt?! Und ich finde den Fehler nicht

    PHP-Code:
    use vars ('$BS_State');
     
    if ((
    new_minute 1) || (state_changed $Beschattung eq ON)){ # every 10 minutes (1 zum testen)
    open(BS,">>$config_parms{data_dir}/weather/Beschattung.txt");
     
    if(
    state $Beschattung eq ON) {
     
    if (
    state $Helligkeit_Norden >= 100) {
     
    # Rollo auf 70% für Beschattung
    if ($BS_State == 'DOWN'){
    print 
    BS "Rollo's sind bereits auf 70%: $BS_State$Date_Now $Time_Now => "state $Helligkeit_Norden"\n";
    } else {
    $BS_State 'DOWN';
    print 
    BS "Rollo's fahren auf 70%\n";
    print 
    BS "$BS_State$Date_Now $Time_Now => "state $Helligkeit_Norden"\n";
    }
     
    } else {
     
    # Rollo auf 0%
    if ($BS_State != 'UP'){
    $BS_State 'UP';
    print 
    BS "Rollo's fahren auf 0%\n";
    print 
    BS "$BS_State$Date_Now $Time_Now => "state $Helligkeit_Norden"\n";
    } else {
    print 
    BS "Rollo's sind bereits auf 0%: $BS_State$Date_Now $Time_Now => "state $Helligkeit_Norden"\n";
    }
     
    }
    } else {
    print 
    BS "$Date_Now $Time_Now => keine Beschattung eingeschaltet\n";
    }
    close(BS);

    Jeder Tip ist herzlich willkommen

    Evtl. sollte ich noch schreiben was nicht geht

    Die Abfrage der Helligkeit funtzt noch, nur bei $BS_State klappt die Abfrage weder mit != noch mit == ??

    Kommentar


      #3
      Fehler gefunden!

      == und != bei Zahlen

      eq oder ne bei Zeichenkette

      Neuer Code
      PHP-Code:
      if ((new_minute 10) || (state_changed $Beschattung eq ON)){ # every 10 minutes (1 zum testen)
      open(BS,">>$config_parms{data_dir}/weather/Beschattung.txt");
      if(
      state $Beschattung eq ON) {
      if (
      state $Helligkeit_Norden >= 100) {
       
      # Rollo auf 70% für Beschattung
      if ($BS_State eq 'DOWN'){
      print 
      BS "Rollo's sind bereits auf 70%: $BS_State$Date_Now $Time_Now => "state $Helligkeit_Norden"\n";
      } else {
      $BS_State 'DOWN';
      print 
      BS "Rollo's fahren auf 70%\n";
      print 
      BS "$BS_State$Date_Now $Time_Now => "state $Helligkeit_Norden"\n";
      }
      } else {
       
      # Rollo auf 0%
      if ($BS_State eq 'UP'){
      $BS_State 'UP';
      print 
      BS "Rollo's sind bereits auf 0%: $BS_State$Date_Now $Time_Now => "state $Helligkeit_Norden"\n";
      } else {
      print 
      BS "Rollo's fahren auf 0%\n";
      print 
      BS "$BS_State$Date_Now $Time_Now => "state $Helligkeit_Norden"\n";
      }
      }
      } else {
      print 
      BS "$Date_Now $Time_Now => keine Beschattung eingeschaltet\n";
      }
      close(BS);

      Bleibt nur:
      • Wie bekommen ich die Signalisierung/Rückmeldung dieses Status aus Misterhouse
      • Wie kann ich sinnvollerweise den Status bei Neustart von Misterhous auf OFF setzen (Meine Überlegung wäre dies in einer Schleife "nur bei Start" einmalig zu setzen; Gibt es hier eine andere/bessere/sinnvollere Methode)
      VG und Dank,
      Joerg

      Kommentar


        #4
        ich verstehe den ablauf des skriptes irgendwie total nicht.

        Code:
        [COLOR=#000000][COLOR=#007700]if (([/COLOR][COLOR=#0000BB]new_minute 10[/COLOR][COLOR=#007700]) || ([/COLOR][COLOR=#0000BB]state_changed $Beschattung eq ON[/COLOR][COLOR=#007700])){ [/COLOR][COLOR=#FF8000]# every 10 minutes (1 zum testen)[/COLOR][/COLOR]
        alle 10 minuten und dann noch state_changed? state_changed ist nur einmalig true, wenn sich der status geändert hat

        welche variable ist was? BS_State ist die GA, die die rollos fährt und Beschattung die GA, die du ein- und ausschalten kannst und deren status du wissen willst?

        wie sind diese beiden variablen denn definiert bzw. angelegt?

        und was macht das hier :

        Code:
        [COLOR=#000000][COLOR=#007700]if ([/COLOR][COLOR=#0000BB]$BS_State eq [/COLOR][COLOR=#DD0000]'UP'[/COLOR][COLOR=#007700]){
        [/COLOR][COLOR=#0000BB]$BS_State [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]'UP'[/COLOR][COLOR=#007700];
        }[/COLOR][/COLOR]
        ABB SA/Sx.16.5S, BJ RCP 6136/100C-101, 1wire
        SOMFY Animeo KNX, eibd und misterhouse auf IBM netvista 8364
        , SB Radio, Archos 7 HomeTablet

        Kommentar


          #5
          Hi, ich versuche dann mal das Script (bzw. meine Überlegung) zu erklären.

          $Beschattung => Diese GA habe ich in der EIB-Items.mht definiert und wird über einen Schalter gesetzt, diese sollte dann entsprechend den Status an die LED senden
          $BS_State => Hilfsvariabel zur Motorsicherung (s.u.) und im Script definiert über
          PHP-Code:
          use vars ('$BS_State'); 
          PHP-Code:
          if ((new_minute 10) || (state_changed $Beschattung eq ON)) 
          Wenn ich die Beschattung einschalte, möchte ich nicht erst 10 min warten sondern die Rollos sollen direkt auf Position fahren und dann wird alle 10 min geprüft ob es noch hell ist und somit die Beschattung notwendig.


          PHP-Code:
          if ($BS_State eq 'UP'){
          print 
          BS "Rollo's sind bereits auf 0%: $BS_State$Date_Now $Time_Now => "state $Helligkeit_Norden"\n";
          } else {
          $BS_State 'UP';
          print 
          BS "Rollo's fahren auf 0%\n";
          print 
          BS "$BS_State$Date_Now $Time_Now => "state $Helligkeit_Norden"\n";

          So muß das natürlich sein (wie bei down)
          Dies soll eine Entlastung meiner Rollo-Motoren sein. Im o.g. Fall: Wenn die Rollo's noch unten sind ist $BS_State eq "DOWN". Somit wird in diesem Durchlauf (sofern es dunkel genug ist) $BS_State auf UP gesetzt und die Rollo's fahren hoch. Im nächsten Durchlauf (wenn immer noch zu dunkel) wird die Schleife verlassen ohne das die Motoren anfahren/unter Strom gesetzt werden.

          Die ganzen Prints in eine Textdatei werden dann noch entfernt und durch die richtigen Aktionen ersetzt.

          Viele Grüße
          Joerg

          Kommentar


            #6
            Zitat von JoergA Beitrag anzeigen
            PHP-Code:
            if ((new_minute 10) || (state_changed $Beschattung eq ON)) 

            Wäre dies evtl so sinnvoller, damit nur bei eingeschalterer Beschattungsautomatik alle 10 min geprüft wird?!

            PHP-Code:
            if ((state_now $Beschattung eq ON) || (state_changed $Beschattung eq ON)) {
              if (
            new_minute 10) {
            usw 
            Viele Grüße
            Joerg

            Kommentar


              #7
              Wenn ich die Beschattung einschalte, möchte ich nicht erst 10 min warten sondern die Rollos sollen direkt auf Position fahren und dann wird alle 10 min geprüft ob es noch hell ist und somit die Beschattung notwendig.
              Warum verknüpfst Du Beschattung ein niocht direkt mit den passenden Objekten am Aktor, dann funktioniert das auch bei einem Ausfall des Servers, die weitere Logik kannst Du ja trotzdem in MH abbilden.

              Was genau funktioniert denn jetzt eigentlich nicht?

              Kommentar


                #8
                Zitat von Jockel Beitrag anzeigen
                Warum verknüpfst Du Beschattung ein niocht direkt mit den passenden Objekten am Aktor, dann funktioniert das auch bei einem Ausfall des Servers, die weitere Logik kannst Du ja trotzdem in MH abbilden.

                Was genau funktioniert denn jetzt eigentlich nicht?
                Hi Jockel,

                Hm, muss ich mal schauen was mein Aktor da so bietet.

                Was ich derzeit nicht schaffe ist den Status Beschattung Ein/Aus als Objekt an die TasterLED zu übergeben.

                VG
                Jörg

                Kommentar


                  #9
                  Zitat von JoergA Beitrag anzeigen
                  Was ich derzeit nicht schaffe ist den Status Beschattung Ein/Aus als Objekt an die TasterLED zu übergeben.
                  Hast du denn für die LED eine Gruppenadresse in der ETS vergeben? Wenn ja, muß die doch einfach der Variable mit dem Status in der *.mht Datei zugeordnet werden.

                  Welchen Schalter verwendest du? Nicht jeder läßt zu, die LED mit einer beliebigen Adresse zu verknüpfen -- hat aber nichts mit misterhouse zu tun ...
                  Gruß,
                  Marc

                  Kommentar


                    #10
                    Zitat von aggie89go Beitrag anzeigen
                    Hast du denn für die LED eine Gruppenadresse in der ETS vergeben? Wenn ja, muß die doch einfach der Variable mit dem Status in der *.mht Datei zugeordnet werden.

                    Welchen Schalter verwendest du? Nicht jeder läßt zu, die LED mit einer beliebigen Adresse zu verknüpfen -- hat aber nichts mit misterhouse zu tun ...
                    Eine GA hatte ich zwar schon, und wollte diese hörend definieren. Dort bin dann aber auch nicht weiter gekommen. Ich nutze die Gira Tastsensoren 2 3fach. Bei der Rückmeldung von Aktoren funtzt dies auch prima mit diesen, nun hatte ich $Beschattung = die GA zum schalten verknüpft, dies wollte aber irgendwie nicht?

                    Kommentar


                      #11
                      Nochmal zusammen gefasst

                      eib_items.mht
                      EIB1, 0/8/15, Beschattung, Status #zum schalten

                      ETS
                      Tastsensor Gira TS2 3fach mit Controller, auf Taste 6 schaltend => um, LED als Status (bei Gira ist das ein Objekt beim Schalter, dort kommt dann der Aktorkanal als senden und als zweite GA der Status)

                      GA 0/8/15 mit der Taste 6
                      GA 4/7/11 auch mit der Taste 6, soll für den Status sein.

                      Wie müsste ich nun die 4/7/11 in der *.mht eintragen, das dort immer der aktuelle Status zurückgegeben wird??

                      if state_changed $Beschattung {
                      toggle $Beschattung_Status
                      }


                      Aber wie kann ich z.B. beim Start von MH den State von Beschattung immer auf OFF setzen und in die $Beschattung_Status schreiben??


                      VG
                      Joerg

                      Kommentar


                        #12
                        Zitat von JoergA Beitrag anzeigen
                        Aber wie kann ich z.B. beim Start von MH den State von Beschattung immer auf OFF setzen und in die $Beschattung_Status schreiben??
                        mit einem noloop-teil am anfang des skripts

                        Code:
                        # noloop=start
                        $Beschattung = 0;
                        # noloop=stop
                        oder durch gezieltes ruecksetzen beim anlauf


                        Code:
                        if ($Startup) {
                        $Beschattung = 0;
                        }
                        die 4/7/11 legst du genauso wie die 0/8/15 als EIB1-Item an. um den status gleich dem beschattungs-status zu setzen, würde ich aber nicht mit toggle arbeiten, sondern einfach gleichsetzen am ende des skripts

                        Code:
                        $Beschattung_Status = $Beschattung
                        ABB SA/Sx.16.5S, BJ RCP 6136/100C-101, 1wire
                        SOMFY Animeo KNX, eibd und misterhouse auf IBM netvista 8364
                        , SB Radio, Archos 7 HomeTablet

                        Kommentar


                          #13
                          Zitat von progressive Beitrag anzeigen
                          mit einem noloop-teil am anfang des skripts
                          Code:
                          # noloop=start
                          $Beschattung = 0;
                          # noloop=stop
                          oder durch gezieltes ruecksetzen beim anlauf


                          Code:
                          if ($Startup) {
                          $Beschattung = 0;
                          }
                          Dies wirf bei mir leider Fehler auf.

                          Bei noloop etc. bricht MH den Start ab mit
                          24/06/11 09:23:45: Can't use string ("0") as a HASH ref while "strict refs" in use at (eval 439) line 460.
                          und bei $StartUp hagelt es Fehlermeldungen und die Funktion wird abgeschaltet

                          24/06/11 09:26:10: Can't call method "state_changed" without a package or object reference at (eval 439) line 4241.
                          Line 4236:
                          Line 4237:
                          Line 4238:
                          Line 4239:
                          Line 4240:
                          Line 4241: if ((new_minute 10) || (state_changed $Beschattung eq ON)){ # every 10 minutes (1 zum testen)
                          Line 4242: $Beschattung_Status = $Beschattung;
                          Line 4243: open(BS,">>$config_parms{data_dir}/weather/Beschattung.txt");
                          Line 4244: if(state $Beschattung eq ON) {
                          Line 4245: if (state $Helligkeit_Norden >= 100) {
                          Line 4246:
                          0
                          Can not speak for engine=MS: Phrase=Error found in user code. Check the error log.
                          Error logged to: /opt/misterhouse/data/error.log
                          Error in user code: Can't call method "state_changed" without a package or object reference at (eval 439) line 4241.
                          Error in user code: Can't call method "state_changed" without a package or object reference at (eval 439) line 4241.
                          Error in user code: Can't call method "state_changed" without a package or object reference at (eval 439) line 4241.
                          Error in user code: Can't call method "state_changed" without a package or object reference at (eval 439) line 4241.
                          Error in user code: Can't call method "state_changed" without a package or object reference at (eval 439) line 4241.
                          Error in user code: Can't call method "state_changed" without a package or object reference at (eval 439) line 4241.
                          Error in user code: Can't call method "state_changed" without a package or object reference at (eval 439) line 4241.
                          Error in user code: Can't call method "state_changed" without a package or object reference at (eval 439) line 4241.
                          Display call with tk disabled (-tk 0). Text=Multiple eval errors in rollerblind. Code was disabled 0
                          Error in user code: Can't call method "state_changed" without a package or object reference at (eval 439) line 4241.
                          Zitat von progressive Beitrag anzeigen
                          die 4/7/11 legst du genauso wie die 0/8/15 als EIB1-Item an. um den status gleich dem beschattungs-status zu setzen, würde ich aber nicht mit toggle arbeiten, sondern einfach gleichsetzen am ende des skripts

                          Code:
                          $Beschattung_Status = $Beschattung
                          Funzt prima! Danke für den Tip. Ich dachte die geht mit einer GA, womit wir aber dann ja wieder bei hörend und sendend wären

                          Kommentar


                            #14
                            öhm ja...das mit dem null setzen war wohl mein fehler...

                            anstatt ...=0 schreib das bitte so

                            set $Beschattung 'OFF'
                            ABB SA/Sx.16.5S, BJ RCP 6136/100C-101, 1wire
                            SOMFY Animeo KNX, eibd und misterhouse auf IBM netvista 8364
                            , SB Radio, Archos 7 HomeTablet

                            Kommentar


                              #15
                              Jo, klar! Wird doch in den anderen Scripten entsprechend so schon gesetzt?

                              mit set $Beschattung 'OFF' kommt zwar
                              Invalid state for EIS type 1: 'OFF'
                              Aber
                              set $Beschattung OFF
                              tut es dann.

                              Viele Grüße und Dank,
                              Joerg

                              Kommentar

                              Lädt...
                              X