Ankündigung

Einklappen
Keine Ankündigung bisher.

Heizungs-Plugin

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

  • Sipple
    antwortet
    Das ist das seltsame. Es kommt schlicht gar nichts. Nichts im smarthome.py Log, kein Fehler sichtbar in der smartVISU und der Status im RTR bleibt immer off.

    EDIT: Einen Verdacht hab ich noch, den versuch ich jetzt noch...

    EDIT 2: Heureka, es geht! Ich habe jetzt mal alle Caches der Browser gelöscht. Ob das Zufall war oder nicht - keine Ahnung, aber jetzt klappt es. Genial!

    Einen Kommentar schreiben:


  • 2ndsky
    antwortet
    Rein aus Interesse, welche Fehlermeldung kommt denn?

    Einen Kommentar schreiben:


  • Sipple
    antwortet
    Hi

    Funktioniert trotzdem nicht.
    Macht aber nichts, hab ja ne Lösung.
    Trotzdem danke.

    Gruß, Martin

    Einen Kommentar schreiben:


  • 2ndsky
    antwortet
    Zitat von Sipple Beitrag anzeigen
    Ok, ich habe das mit eval und eval_trigger versucht. Klappt nicht (Im Log steht, dass er false nicht kennt).
    Ja, mein Fehler... das kommt davon, wenn man jeden Tag fünf verschiedene Programmiersprachen vor sich hat. Muss natürlich True und False heißen (Anfangsbuchstabe groß).

    Einen Kommentar schreiben:


  • Sipple
    antwortet
    8 Bit Istposition von Stellmotoren in 1 Bit Status umwandeln

    Ok, ich habe das mit eval und eval_trigger versucht. Klappt nicht (Im Log steht, dass er false nicht kennt). Habe auch mit der Syntax ein wenig gespielt und mehrere plausibel aussehende Varianten getestet. Leider ist die Dokumentation zu eval und eval_trigger recht spärlich und ein zumindest ähnliches und funktionierendes Beispiel wie man if/else einbettet habe ich nicht gefunden.

    Deshalb habe ich es jetzt - vielleicht für Ästhetiker zu primitiv - per Logik gelöst und es funktioniert so wie ich es erwarte.
    Hier nochmal die nötigen Files:

    logic.conf
    Code:
    [RTR_Status]
        filename = logic_rtr_status.py
        watch_item = *.Raumtemperatur.Istposition
    Mit dem * kann man elegant alle Items auf einmal behandeln die mit .Raumtemperatur.Istposition enden.

    logic_rtr_status.py
    Code:
    #!/usr/bin/env python3
    # 8 Bit Ist-Position der Stellmotoren in 1 Bit Status umwandeln
    # Alles groesser 0 wird als 1 interpretiert -> es wird geheizt
    
    if sh.Schlafzimmer.Raumtemperatur.Istposition() > 0:
        sh.Schlafzimmer.Raumtemperatur.Status('1')
    else:
        sh.Schlafzimmer.Raumtemperatur.Status('0')
    
    if sh.Badezimmer.Raumtemperatur.Istposition() > 0:
        sh.Badezimmer.Raumtemperatur.Status('1')
    else:
        sh.Badezimmer.Raumtemperatur.Status('0')
    
    if sh.Gaestezimmer.Raumtemperatur.Istposition() > 0:
        sh.Gaestezimmer.Raumtemperatur.Status('1')
    else:
        sh.Gaestezimmer.Raumtemperatur.Status('0')
    
    if sh.Galerie.Raumtemperatur.Istposition() > 0:
        sh.Galerie.Raumtemperatur.Status('1')
    else:
        sh.Galerie.Raumtemperatur.Status('0')
    
    if sh.Flur.Raumtemperatur.Istposition() > 0:
        sh.Flur.Raumtemperatur.Status('1')
    else:
        sh.Flur.Raumtemperatur.Status('0')
    
    if sh.Wohnzimmer.Raumtemperatur.Istposition() > 0:
        sh.Wohnzimmer.Raumtemperatur.Status('1')
    else:
        sh.Wohnzimmer.Raumtemperatur.Status('0')
    Beispiel-Raum (Items für den RTR)
    Code:
    [Schlafzimmer]
        [[Raumtemperatur]]
            [[[Ist]]]
                type = num
                knx_dpt = 9
                knx_cache = 3/1/19
                sqlite = yes
            [[[Soll]]]
                type = num
                knx_dpt = 9
                knx_send = 3/1/23
                knx_cache = 3/1/27
                sqlite = yes
            [[[Komfortbetrieb]]]
                type = bool
                knx_dpt = 1
                knx_send = 3/2/13
                knx_cache = 3/2/13
            [[[Nachtbetrieb]]]
                type = bool
                knx_dpt = 1
                knx_send = 3/2/14
                knx_cache = 3/2/14
            [[[Frostschutz]]]
                type = bool
                knx_dpt = 1
                knx_send = 3/2/15
                knx_cache = 3/2/15
            [[[Istposition]]]
                type = num
                knx_dpt = 5
                knx_cache = 3/1/7
            [[[Status]]]
                type = bool
                sqlite = yes
    Meine Warnung im Logfile ist auch gelöst, ich hatte bei einem copy/paste das sqlite = yes für den Status vergessen, daher ging dann der RTR Plot nicht mehr.

    Gruß, Martin

    Einen Kommentar schreiben:


  • Sipple
    antwortet
    Hi Niko

    Wenn es nur um die smartVISU geht, ich glaube die interpretiert alles was keine 0 ist als 1. Sprich, einfach die Stellgröße auf gad_state legen. Wird 0% gesendet ist das Icon weiß, sonst ist es farbig.
    Schaut nicht so aus. Zumindest klappt es mit dem 8 Bit Wert nicht, mit dem 1 Bit Status zeigt er richtig an.

    wegen des "request invalid item" Fehlers, du musst Items die über die smartVISU gelesen und gesetzt werden sollen das visu_acl Attribut setzen. Entweder visu_acl = true für readonly oder visu_acl = rw für zusätzlichen schreibenden Zugriff auf ein Item.
    Da verwende ich den Globalen in der plugin.conf. Klappt einwandfrei mit allen anderen Items.

    Den eval und eval_trigger versuch ich mal, das schaut gut aus. Danke!

    Gruß, Martin

    Einen Kommentar schreiben:


  • 2ndsky
    antwortet
    Wenn es nur um die smartVISU geht, ich glaube die interpretiert alles was keine 0 ist als 1. Sprich, einfach die Stellgröße auf gad_state legen. Wird 0% gesendet ist das Icon weiß, sonst ist es farbig.

    Ansonsten, für die Items, braucht man nicht gleich eine Logik definieren, es reicht auch ein eval und eval_trigger:

    Code:
    [Schlafzimmer]
        [[Raumtemperatur]]
    ...
            [[[Istposition]]]
                type = num
                knx_dpt = 5
                knx_cache = 3/1/7
            [[[Status]]]
                type = bool
                eval = true if sh.Schlafzimmer.Raumtemperatur.Istposition() else false
                eval_trigger = Schlafzimmer.Raumtemperatur.Istposition
                visu_acl = true
    Achtung: ungetestet. Sollte aber so in etwa gehen.

    EDIT: wegen des "request invalid item" Fehlers, du musst Items die über die smartVISU gelesen und gesetzt werden sollen das visu_acl Attribut setzen. Entweder visu_acl = true für readonly oder visu_acl = rw für zusätzlichen schreibenden Zugriff auf ein Item.

    Einen Kommentar schreiben:


  • Sipple
    antwortet
    Zwar nicht Heizungs-Plugin, aber sehr ähnliche Baustelle

    Servus

    Ich kram den mal wieder vor, weil ich so etwas (ähnliches?) auch brauche.
    Meine Regler senden ja 8 Bit an die Stellmotoren (Stetigregler) und diese senden die Ist-Position natürlich ebenfalls als 8 Bit zurück. Das RTR Widget der smartVISU will aber wohl ein 1-Bit item zur Anzeige des Status "Heizt/Heizt nicht".
    Also genau das Problem, wenn 8 Bit Wert = 0, brauch ich nen 1 Bit = 0 und wenn 8 Bit Wert > 0 dann 1 Bit = 1.

    Ich habe das mal in eine Logik gepackt, mit meinen rudimentären Python Kenntnissen, und im Prinzip klappt das:

    logic.conf:
    Code:
    [RTR_Status]
        filename = logic_rtr_status.py
        watch_item = *.Raumtemperatur.Istposition
    Items (Beispiel):
    Code:
    [Schlafzimmer]
        [[Raumtemperatur]]
            [[[Ist]]]
                type = num
                knx_dpt = 9
                knx_cache = 3/1/19
                sqlite = yes
            [[[Soll]]]
                type = num
                knx_dpt = 9
                knx_send = 3/1/23
                knx_cache = 3/1/27
                sqlite = yes
            [[[Komfortbetrieb]]]
                type = bool
                knx_dpt = 1
                knx_send = 3/2/13
                knx_cache = 3/2/13
            [[[Nachtbetrieb]]]
                type = bool
                knx_dpt = 1
                knx_send = 3/2/14
                knx_cache = 3/2/14
            [[[Frostschutz]]]
                type = bool
                knx_dpt = 1
                knx_send = 3/2/15
                knx_cache = 3/2/15
            [[[Istposition]]]
                type = num
                knx_dpt = 5
                knx_cache = 3/1/7
            [[[Status]]]
                type = bool
    Logic:
    Code:
    #!/usr/bin/env python3
    # 8 Bit Ist-Position der Stellmotoren in 1 Bit Status umwandeln
    if sh.Schlafzimmer.Raumtemperatur.Istposition() > 0:
        sh.Schlafzimmer.Raumtemperatur.Status('1')
    else:
        sh.Schlafzimmer.Raumtemperatur.Status('0')
    Widget in smartVISU:
    Code:
        <div class="block">
            <div class="set-1" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
                <div data-role="collapsible" data-collapsed="false">
                    <h3>Raumtemperatur</h3>
                    {{ device.rtr('SZ_Heizung', 'Heizung', 'Schlafzimmer.Raumtemperatur.Ist', 'Schlafzimmer.Raumtemperatur.Soll',
                    'Schlafzimmer.Raumtemperatur.Komfortbetrieb', 'Schlafzimmer.Raumtemperatur.Nachtbetrieb', 'Schlafzimmer.Raumtemperatur.Frostschutz', 'Schlafzimmer.Raumtemperatur.Status', '', '0.2') }}
                </div>
            </div>
        </div>
    Habe aber noch Warnungen im Log (warum das zwei sind weiß ich nicht. Selber Client, anderer Port, 11min dazwischen. Hab aber nichts gemacht):
    Code:
    2014-03-18 12:04:56 WARNING  Main         Client 192.168.178.20:52380 requested invalid series: Schlafzimmer.Raumtemperatur.Status.
    2014-03-18 12:15:58 WARNING  Main         Client 192.168.178.20:52503 requested invalid series: Schlafzimmer.Raumtemperatur.Status.
    Das liegt wohl daran, dass das Status Item beim sh.py Start noch keinen Wert hat. Es in den Items auf einen default Wert zu setzen bringt aber irgendwie auch nix, oder? Schließlich ist ja beim Start nicht klar ob der Regler grad heizt oder nicht. Wie löst man das elegant?

    Das zweite Problem: Wenn ich sieben Regler habe, wie erweitere ich die Logik ebenfalls so elegant wie möglich? Sowas in der Art wie das watch_item = *..... in der logic.conf. Da fällt mir grad auch nichts ein

    Last but not least noch ein smartVISU Problem in dem Zusammenhang, bevor ich da einen eigenen Thread aufmache. Ich bekomme den Status zwar schön im RTR Widget angezeigt, das Symbol lässt sich aber anklicken und ändert somit auch den Status. Unschön. Sehe auch keinen Grund warum das so sein sollte, oder habe ich den Sinn des Icons falsch verstanden? Läßt sich das verhindern ohne das Widget selbst zu ändern?

    Oder geht das alles viel einfacher, z.B. als Einzeiler in smartVISU?

    Gruß, Martin

    Einen Kommentar schreiben:


  • TCr82
    antwortet
    Wie gesagt bin ich mir nicht sicher ob das wirklich gut geht, kann mir gut vorstellen dass es da effektivere Regelungen für gibt. Aber probieren kann man es.

    Gesendet von meinem GT-I9100 mit Tapatalk

    Einen Kommentar schreiben:


  • Marcov
    antwortet
    Vielen Dank für den Link zum Plugin, ich schaue mir das Plugin und Enum mal an.
    Den Regler bräuchte ich ja dann eigentlich nicht, da ich ja bereits eine Einzelraumregelung über die Thermostate habe. Der ein/aus Befehl muss nur zuverlässig erfolgen.

    Einen Kommentar schreiben:


  • TCr82
    antwortet
    Umwandeln würde man ja bei 0% zu 0 und bei >1% zu 1. Das ganze ist ganz einfach über ein enum = von sh.py zu realisieren. Aber ob da der Regler noch zuverlässig arbeitet kann ich nicht beurteilen.

    Gesendet von meinem GT-I9100 mit Tapatalk

    Einen Kommentar schreiben:


  • TCr82
    antwortet
    Ich habe mittlerweile ein Plugin dazu Programmiert und es hier im Forum publiziert. Allerdings funktioniert es nur mit einem Stellglied das 0-100% verarbeitet.
    Vielleicht kann ich - wenn ich nächstes Jahr wieder etwas Zeit habe - das ganze für ein Bit gesteuerten Aktor erweitern.

    https://knx-user-forum.de/showthread.php?t=30669

    Gesendet von meinem GT-I9100 mit Tapatalk

    Einen Kommentar schreiben:


  • Marcov
    antwortet
    Ich will aus dem Prozentwert ein ein/aus Wert machen, weiß aber nicht wie da der beste / einfachste Weg ist.

    Einen Kommentar schreiben:


  • FlorianTenthoff
    antwortet
    Heizung

    Habt ihr es schonmal mit einen Byte in Bit umwandler gearbeitet? der kann eure Prozente doch in einen Bit wert umwandeln also in Null oder Eins.


    Was wollt ihr generell mit dem Stellantrieb anstellen ? Nur 0 und 1 schalten?

    Einen Kommentar schreiben:


  • Marcov
    antwortet
    Danach suche ich ebenfalls. Ich habe das Problem, dass meine Sensoren nur Prozentstellwerte auf den KNX Bus senden, ich muss aber 2 Stellantriebe an einen UP-Schaltaktor anschließen (also nur an/aus oder PWM).
    Gibt es da schon was oder muss ich mir die Logik über die Soll und Istwert Vergleich selber basten?

    Einen Kommentar schreiben:

Lädt...
X