Ankündigung

Einklappen
Keine Ankündigung bisher.

Heizpumpensteuerung KNX

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

    #16
    So, voriger Post ist korrigiert, das Quote stammt vom Editor, leider habe ich vor der eckigen Klammer den Code hineinkopiert, darum war er nicht als solcher angezeigt.

    Danke, ich werde die Rule so anpassen.

    Nein, habe ich nicht. Das ist ja das seltsame. Es gibt nur eine Rule pro Namen. Auch wenn ich die Rule umbenenne (zB Heizungssteuerung1.rule), kommt sofort wieder der Fehler.

    Kommt aber nur, wenn man die Rule zur Bearbeitung öffnet und bleibt dann, bis man alle Fenster geschlossen hat und Visual neu startet.

    Kommentar


      #17
      Zitat von fred07 Beitrag anzeigen
      das Quote stammt vom Editor
      Das ist mir schon bewusst. Es gibt aber nicht nur Quote im Editor, sondern auch Code. Wenn Du die Formatierungsleiste aufklappst, findest Du auf der rechten Seite den 8. Knopf mit den " Gänsefüßchen, das ist der Knopf für Quoting. direkt rechts daneben findest Du den Knopf mit der Raute #, das ist der Knopf für Code.
      Natürlich kannst Du auch die Schlüsselworte in eckigen Klammern schreiben...
      Zitat von fred07 Beitrag anzeigen
      Auch wenn ich die Rule umbenenne (zB Heizungssteuerung1.rule), kommt sofort wieder der Fehler.

      Kommt aber nur, wenn man die Rule zur Bearbeitung öffnet und bleibt dann, bis man alle Fenster geschlossen hat und Visual neu startet.
      Das heißt, der Fehler wird nur in VSCode angezeigt? Und wenn Du VSCode neu startest, tritt der Fehler erst nach einiger Zeit wieder auf?
      Zuletzt geändert von udo1toni; 28.10.2018, 11:04.

      Kommentar


        #18
        Ja, der Fehler ist nur in VSCode und nur dann, wenn mal die Rule zur Bearbeitung öffnet. Wenn man sie schließt, bleibt der Fehler. Startet man das Programm mit geschlossener Rule neu, dann ist der Fehler weg. Startet man neu mit geöffneter Rule, kommt er sofort wieder...

        Kommentar


          #19
          Dann muss die Rules-Datei irgendwo einen Fehler haben.

          Kommentar


            #20
            Ich weiß nicht, irgendwie sehe ich keinen, es läuft auch alles:

            Code:
              [COLOR=#000000]rule "Pumpe OG"[/COLOR]
              [COLOR=#000000]when[/COLOR]
              [COLOR=#000000]    Item HO_OG changed[/COLOR]
              [COLOR=#000000]then[/COLOR]
              [COLOR=#000000]    [/COLOR]
              [COLOR=#000000]    if (Heizung.state==ON) [/COLOR]
              [COLOR=#000000]Pumpe_OG.sendCommand(if(HO_OG.state != CLOSED) ON else OFF) [/COLOR]
             
            [COLOR=#000000]end[/COLOR]
             
            [COLOR=#000000]rule "Pumpe Keller und EG"[/COLOR]
              [COLOR=#000000]when[/COLOR]
              [COLOR=#000000]    Item HE_Keller_EG changed[/COLOR]
              [COLOR=#000000]then[/COLOR]
              [COLOR=#000000]if (Heizung.state==ON) [/COLOR]
              [COLOR=#000000]    Pumpe_Keller_EG.sendCommand(if(HE_Keller_EG.state != CLOSED) ON else OFF)[/COLOR]
              [COLOR=#000000]end[/COLOR]
             
            [COLOR=#000000]rule "Pumpe Garage"[/COLOR]
              [COLOR=#000000]when[/COLOR]
              [COLOR=#000000]    Time cron "0 0/20 * * * ?" [/COLOR]
              [COLOR=#000000]then[/COLOR]
              [COLOR=#000000]    if(Heizung.state==ON) {[/COLOR]
              [COLOR=#000000]         if(!(Grad_WE_Aussentemperatur.state instanceof Number)) {[/COLOR]
              [COLOR=#000000]         logError("pumpe_garage","Außenfühler hat keinen gültigen Wert!")[/COLOR]
              [COLOR=#000000]         return;[/COLOR]
              [COLOR=#000000]        }[/COLOR]
              [COLOR=#000000]        if(!(ActualTemperature_GA_Garage.state instanceof Number)) {[/COLOR]
              [COLOR=#000000]            logError("pumpe_garage","Innenfühler hat keinen gültigen Wert!")[/COLOR]
              [COLOR=#000000]            return;[/COLOR]
              [COLOR=#000000]        }[/COLOR]
              [COLOR=#000000]        Pumpe_Garage.sendCommand(if((Grad_WE_Aussentemperatur.state as Number) < -5 || (ActualTemperature_GA_Garage.state as Number) < 3) ON else OFF)[/COLOR]
              [COLOR=#000000]    } else {[/COLOR]
              [COLOR=#000000]        if(Pumpe_Garage.state != OFF) Pumpe_Garage.sendCommand(OFF)[/COLOR]
              [COLOR=#000000]    }[/COLOR]
              [COLOR=#000000]end[/COLOR]

            Kommentar


              #21
              Ja, sieht eigentlich unverdächtig aus.

              An den Einrückungen sollte es nicht liegen. Was noch sein kann, ist ein unsichtbares Zeichen. Oder openHAB hat sich einfach nur verschluckt. Falls nichts anderes hilft, benenne die rules-Datei um (mit anderer Endung), lege die Datei neu an und füge den Inhalt der alten Datei per Zwischenablage ein.

              Kommentar


                #22
                Danke, das probiere ich mal. Momentan zeigt es noch keinen Fehler an.

                Aber ich habe schon das nächste Problem, und das treibt mich gerade in den Wahnsinn.

                Die Heizventile schließen schrittweise, das heißt, ich kriege bei manchen Schaltzuständen keinen vernünftigen Wert, obwohl geheizt wird, steht das Objekt auf CLOSED. Oder halt OPEN, wenn nicht geheizt wird.

                Ein Versuch mit einem anderen Ausgang am RTR hat nichts gebracht.

                Auch dauert es ewig, bis ein Status der Solltemperatur oder der Verschiebung in OH erscheint, wenn überhaupt, besser, man schaltet mal in der App, und dann geht es.

                Trotzdem die Fehler.

                Gibt es einen Trick, einen Stellwert in ein Open/Closed umzuwandeln?

                Kommentar


                  #23
                  Den Zustand der Ventile solltest Du lieber aus dem Aktor abfragen, nicht vom RTR, der steuert ja nur.
                  Einen Zahlenwert kannst Du in einer Rule in OPEN oder CLOSED umsetzen, anders ist das im Fall knx leider nicht möglich, da es hier nicht vorgesehen ist, einen Transformation Service einzubinden.

                  Kommentar


                    #24
                    So, ich komme da nicht weiter.

                    Aktor: Stellgröße Wohnzimmer 2/0/1 (K-L-S), Status Stellgröße 2/1/1 (K-L-Ü)

                    Wenn ich das Item als Contact lasse, kann es nicht gehen, ändere ich es auf Number, bekomme ich keinen Wert ausgelesen.

                    knx.things:
                    Code:
                     [COLOR=#000000]Type number : Heizventile_Wohnzimmer "Wohnzimmer [%.0f %%]" [ga="5.001:2/0/1+<2/1/1"][/COLOR]
                    knx.items:
                    Code:
                      [COLOR=#000000]Number Heizventile_Wohnzimmer "HV Wohnzimmer" (HE_Keller_EG) {channel="knx:device:bridge:heizungkeller:Heizventile_Wohnzimmer"} [/COLOR]
                    sitemap:
                    Code:
                      [COLOR=#000000]Text item=Heizventile_Lorenz label="Stellwert [%.0f %%]"[/COLOR]
                     [COLOR=#000000][/COLOR]


                    vorher war in den Things
                    Code:
                      [COLOR=#000000]Type contact : Heizventile_Wohnzimmer "Wohnzimmer" [ga="1.019:<2/0/13"] [/COLOR]
                     [COLOR=#000000][/COLOR]
                    und in den items
                    Code:
                      [COLOR=#000000]Contact Heizventile_Wohnzimmer "HV Wohnzimmer" (HE_Keller_EG) {channel="knx:device:bridge:heizungkeller:Heizventile_Wohnzimmer"} [/COLOR]
                     [COLOR=#000000][/COLOR]


                    ALs Contact geht es mal, mal nicht. Number geht gar nicht, bzw habe ich keine Ahnung, wie eine Rule das übersetzen soll, habe leider nichts passendes gefunden.

                    Kommentar


                      #25
                      Du kannst Den Typ nicht frei wählen. Außerdem schlägt hier ein Bug zu, der verhindert, dass der DPT 5.001 korrekt als Prozentwert in einem Number Item gespeichert wird.
                      Die Stellgröße wird vermutlich vom Typ Prozent sein, also DPT 5.001. Am einfachsten verwendest Du einen Dimmer hierfür, da Dimmer immer in Prozent arbeiten:
                      Code:
                      Type dimmer : Heizventile_Wohnzimmer "Wohnzimmer" [position="5.001:2/0/1+<2/1/1"]
                      Dazu das passende Item:
                      Code:
                      Dimmer Heizventile_Wohnzimmer "HV Wohnzimmer [%d %%]" (HE_Keller_EG) {channel="knx:device:bridge:heizungkeller:Heizventile_Wohnzimmer"}
                      Contact vHeizventile_Wohnzimmer "HV Wohnzimmer [%s]"
                      und in der Sitemap
                      Code:
                      Text item=Heizventile_Wohnzimmer label="Stellwert [%d %%]"
                      In einer Rule kannst Du daraus leicht eine digitale Information bilden:
                      Code:
                      rule "ventile"
                      when
                          Item Heizventile_Wohnzimmer changed
                      then
                          vHeizventile_Wohnzimmer.postUpdate(if(Heizventile_Wohnzimmer.state.toString == "0") CLOSED else OPEN)
                      end
                      Das ungebundene Item vHeizventile_Wohnzimmer (v steht für virtuell) wird gesetzt, sobald das Status von Heizventile_Wohnzimmer sich ändert. Mit dem .toString wird aus dem Status ein String. Moment, das ist doch eine Zahl? Ja, stimmt, man könnte auch mit der Zahl arbeiten, aber in diesem Fall wollen wir ja nur wissen, ob das Ventil geöffnet oder geschlossen ist. Wenn wir den Status als Zahl verwenden wollen, müssen wir den Status auf den Typ Number casten. Das geht aber nur solange gut, wie der Status auch vom Typ Number ist. Wenn der Status nicht vom Typ Number ist (z.B. wurde kein gültiger Wert gelesen, d.h., der Status ist NULL), dann gibt es eine fette Fehlermeldung. Also müssten wir zuerst prüfen, ob der Status vom Typ Number ist, was nur eklig viel Code für eine kleine Aufgabe ist.
                      Trotzdem hier der Vollständigkeit halber die gleiche Rule fehlertolerant mit Number (dann könnte man z.B. auch auf einen Öffnungsgrad kleiner 10% abfragen):
                      Code:
                      rule "ventile"
                      when
                          Item Heizventile_Wohnzimmer changed
                      then
                          if(!(Heizventile_Wohnzimmer.state) instanceof Number) {   // falls Status nicht vom Typ Number
                              logError("ventile","Heizventile_Wohnzimmer hat keinen gültigen Status!")  // Fehlermeldung loggen
                              return;                                                     // und Rule vorzeitig beenden
                          }
                          if((Heizventile_Wohnzimmer.state as Number) < 10)  // falls Wert kleiner als 10
                              vHeizventile_Wohnzimmer.postUpdate(CLOSED)  // Melde zu
                          else                                                   // ansonsten
                              vHeizventile_Wohnzimmer.postUpdate(OPEN)  // Melde auf
                      end

                      Kommentar


                        #26
                        Vielen Dank für die perfekte Erklärung. Bei dir klingt das immer so leicht, aber ich kann es sehr gut nachvollziehen so.

                        Ich bin gerade beim Umsetzen, nur stimmt mir irgendwas nicht.

                        Ich bekomme keine vernünftige Rückmeldung, bin schon leicht verzweifelt.

                        Openhab gibt mir irgendwas wieder, ich erkenne kein System dahinter, wenn überhaupt ein Wert kommt, da auch nach Stunden oft nichts vom Aktor gelesen wurde.

                        Ich habe eine "Testreihe" aufgebaut, von einem Heizungsaktor liest Openhab Stellgröße und Rückmeldung Stellgröße (zB ga=5.001:2/0/0+<2/1/0),vom anderen nur die Rückmeldung (ga=2/1/0).

                        Weiters habe ich versucht, gleichsam als "Querprüfung" vom RTR den Ausgang "Meldung Heizen" ausgelesen (zB ga=1.009:2/5/0).

                        Dies natürlich über Things, items und in eigenen Feldern in der Sitemap.

                        Kommen tun irgendwelche Werte, wenn überhaupt.

                        Kommentar


                          #27
                          Du solltest jede GA möglichst nur einmal verwenden. Wenn GA mehrfach (ankommend) verwendet werden, wird sehr wahrscheinlich nur das für openHAB erste Vorkommen berücksichtigt.
                          Das Binding empfängt eine Nachricht an eine GA und durchsucht die interne Auflistung nach dieser GA. wird sie gefunden, wird der entsprechende Channel upgedatet. Anschließend wird die Suche abgebrochen.
                          Abgehend ist das hingegen kein Problem, da dort ja die andere Richtung gegangen wird. Ein Item kann auch durchaus mehrere Links haben, die werden systematisch abgeklappert. Pro Link gibt es dann einen Channel, und pro Channel gibt es (pro Parameter) genau eine GA, an die ein Befehl abgesetzt wird.

                          Bist Du sicher, dass die Aktoren die daten auch ordentlich heraus rücken? Schau mal mit dem Gruppenmonitor auf den knx Bus...

                          Kommentar


                            #28
                            Das mit dem Unterlassen der Mehrfachverwendung habe ich eh beherzigt.
                            Darum habe ich auf unterschiedlichen Aktoren unterschiedliche Tests laufen, damit keine GA doppelt verwendet wird.
                            Das mit dem Monitor war ein guter Tipp, die Aktoren tun nämlich freiwillig nichts. Sie sind auf senden nur bei Leseanfrage gestellt gewesen. Jetzt senden sie bei Änderung ihren Status. Sieht man auch schön im Busmonitor.
                            Nur, frage ich RAW ab, dann kommt der DPT 1.001 Ein oder Aus. Hier stimmt auch der Zustand. Frage ich 1.009 ab, ist die Rückmeldung verkehrt, öffnen bei geschlossenem Ventil, schließen bei offenem...
                            Wenn sich am Status nichts ändert sendet er anscheinend auch nichts, dann kriegt OH keinen Wert, bzw auch nicht den richtigen.
                            Bei der Neuprogrammierung des Aktors haben auch brav die anderen GAs auf diesem ihren Status mit Aus gemeldet.
                            Zuletzt geändert von fred07; 05.11.2018, 19:26.

                            Kommentar


                              #29
                              Die Frage ist, welchen DPT der Aktor verwendet. Bitte dran denken, Contact arbeitet tatsächlich andersherum, geschlossen = 1, offen = 0.

                              Kommentar


                                #30
                                Ich habe es geschafft, momentan läuft es. Hier des Rätsels Lösung:

                                der Aktor kennt nur Schalten, also 1.001. Bei meinen Versuchen habe ich auch festgestellt, dass es am besten ist, wenn ich die GA abgreife, mit der der RTR den Heizungsaktor anweist zu heizen oder nicht zu heizen.

                                Ich habe daher folgendes gemacht, wobei ich den Switch nicht schaltbar wollte, sondern nur eine Zustandsanzeige.

                                Things:
                                Code:
                                  [COLOR=#000000]Type switch : Heizventile_Wohnzimmer "Wohnzimmer" [ga="2/0/13"][/COLOR]
                                 [COLOR=#000000][/COLOR]


                                Items:
                                Code:
                                  [COLOR=#000000]Switch Heizventile_Wohnzimmer "HV Wohnzimmer [MAP(heizung.map):%s]" <radiator> (HE_Keller_EG) {channel="knx:device:bridge:heizungkeller:Heizventile_Wohnzimmer"} [/COLOR]
                                 [COLOR=#000000][/COLOR]


                                Map:
                                Code:
                                ON=Ein
                                OFF=Aus
                                -=-
                                undefined=-
                                uninitialized=-
                                NULL=-
                                Sitemap:
                                Code:
                                  [COLOR=#000000]Text item=Heizventile_Wohnzimmer [/COLOR]
                                 [COLOR=#000000][/COLOR]


                                Das Group Item wurde angepasst auf Group:Switch und die Rule von OPEN/CLOSE auf ON/OFF.

                                Das einzige Problem sind noch die Rückmeldungen, da ich nach Stunden noch keine habe und diese anscheinend nur kommen, wenn ich die Sollwerte ändere und der RTR den Heizbefehl schickt bzw dann den Befehl heizen zu beenden.

                                Gibt es eine Rule, die bei Neustart oder Änderung der Things oder Items OH befiehlt, den Status gewisser Objekte zu lesen?

                                Kommentar

                                Lädt...
                                X