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!
Ankündigung
Einklappen
Keine Ankündigung bisher.
Heizungs-Plugin
Einklappen
X
-
Hi
Funktioniert trotzdem nicht.
Macht aber nichts, hab ja ne Lösung.
Trotzdem danke.
Gruß, Martin
Einen Kommentar schreiben:
-
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ß).Zitat von Sipple Beitrag anzeigenOk, ich habe das mit eval und eval_trigger versucht. Klappt nicht (Im Log steht, dass er false nicht kennt).
Einen Kommentar schreiben:
-
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
Mit dem * kann man elegant alle Items auf einmal behandeln die mit .Raumtemperatur.Istposition enden.Code:[RTR_Status] filename = logic_rtr_status.py watch_item = *.Raumtemperatur.Istposition
logic_rtr_status.py
Beispiel-Raum (Items für den RTR)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')
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.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
Gruß, Martin
Einen Kommentar schreiben:
-
Hi Niko
Schaut nicht so aus. Zumindest klappt es mit dem 8 Bit Wert nicht, mit dem 1 Bit Status zeigt er richtig an.
Da verwende ich den Globalen in der plugin.conf. Klappt einwandfrei mit allen anderen Items.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.
Den eval und eval_trigger versuch ich mal, das schaut gut aus. Danke!
Gruß, Martin
Einen Kommentar schreiben:
-
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:
Achtung: ungetestet. Sollte aber so in etwa gehen.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
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:
-
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:
Items (Beispiel):Code:[RTR_Status] filename = logic_rtr_status.py watch_item = *.Raumtemperatur.Istposition
Logic: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
Widget in smartVISU: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')
Habe aber noch Warnungen im Log (warum das zwei sind weiß ich nicht. Selber Client, anderer Port, 11min dazwischen. Hab aber nichts gemacht):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>
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?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 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:
-
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:
-
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:
-
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:
-
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:
-
Ich will aus dem Prozentwert ein ein/aus Wert machen, weiß aber nicht wie da der beste / einfachste Weg ist.
Einen Kommentar schreiben:
-
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:
-
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:


Einen Kommentar schreiben: