Zurück   KNX-User-Forum > Supportforen > SmartHome.py
knx-user-forum - International KNX Award Winner 2010


Links
Kalender
Spende

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 13.11.2012, 21:52
Benutzerbild von greentux
Erfahrener Benutzer
 
Registriert seit: 14.03.2010
Ort: Sachsen
Beiträge: 2.422
greentux sorgt für eine eindrucksvolle Atmosphäregreentux sorgt für eine eindrucksvolle Atmosphäregreentux sorgt für eine eindrucksvolle Atmosphäre
Standard Plugin Pelletkessel

Hallo,

mal angenommen, ich möchte mein Perl Plugin fürs WG
Plugin: Pelletskessel ETA PU
aufs SmartHome.py migrieren. Was wäre da das geeignete Vorgehen?
Die Werte auf den Bus senden ist relativ einfach, das könnte man auch per crontab erschlagen also unabhäng jeglicher 1wire-Infrastruktur.
Wie siehts aber damit aus, bei reinkommenden KNX Befehlen, diese an den Pelletter weiterzuleiten?
Wo passt das in die SmartHome.py Infrastruktur?
__________________
Derzeit zwischen Kistenauspacken und Garten anlegen.
Baublog im Profil.
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #2  
Alt 13.11.2012, 22:42
Benutzerbild von mknx
Erfahrener Benutzer
 
Registriert seit: 21.06.2010
Ort: Würzburg
Beiträge: 822
mknx wird schon bald berühmt werden
Standard

Hallo,


uiii, die Hälfte des Plugins sind ja die Mappingtabellen.

Man könnte das mit einer normaler Logik machen und die auf die KNX Adressen horchen lassen. Für mich sieht es aber so aus, als ob der sinnvolle Umgang mit dem Mapping das schwierigste ist.

Daher würde ich das ganze in ein Plugin packen und das Mapping in eine separate Items-Konfigdatei packen z.B. eta.conf:
Code:
[eta]
    [[kessel]]
        [[[status]]]
            type = str
            knx_send = 1/1/3
            knx_listen = 1/1/4
            knx_dpt = 24
            eta_can = 112/10021/0/0/12000
...
Das Plugin würde (beim Start) alle Items durchforsten und sich die mit eta_can rauspicken. Du kannst Dir ja einfach mal ein paar Plugins ansehen:


Als Basis: https://github.com/mknx/smarthome/bl...mx/__init__.py
http Anfragen: https://github.com/mknx/smarthome/bl...wl/__init__.py
xml parsen: https://github.com/mknx/smarthome/bl...wd/__init__.py

Wenn Du Fragen hast oder eine Starthilfe benötigst melde Dich einfach.

Bis bald

Marcus
__________________
Logik? Visu? KNX? 1-Wire? Russound? ... => SmartHome.py - Version 0.9 und Raspberry Pi Image 2.0
Information & Download: http://mknx.github.io/smarthome/ Support: http://knx-user-forum.de/smarthome-py/
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #3  
Alt 13.11.2012, 23:18
Benutzerbild von greentux
Erfahrener Benutzer
 
Registriert seit: 14.03.2010
Ort: Sachsen
Beiträge: 2.422
greentux sorgt für eine eindrucksvolle Atmosphäregreentux sorgt für eine eindrucksvolle Atmosphäregreentux sorgt für eine eindrucksvolle Atmosphäre
Standard

Das Mapping mal aussen vor muss ich erstmal lernen, wie die Plugins funktionieren. Mal sehen, was trübe Novembertage noch bieten an Zeit.
__________________
Derzeit zwischen Kistenauspacken und Garten anlegen.
Baublog im Profil.
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #4  
Alt 03.01.2013, 12:03
Benutzerbild von greentux
Erfahrener Benutzer
 
Registriert seit: 14.03.2010
Ort: Sachsen
Beiträge: 2.422
greentux sorgt für eine eindrucksvolle Atmosphäregreentux sorgt für eine eindrucksvolle Atmosphäregreentux sorgt für eine eindrucksvolle Atmosphäre
Standard

So, ich habe mal etwas nachgedacht und mir die Plugins im sh.py angeschaut.
Das ganze WG-Pelletplugin ist vermutlich ein Mischung aus Logik und Plugin.

Was brauchts generell:

- eine Möglichkeit, um den Webservice des Kessels abzufragen. Dazu legt man eine Gruppe von CAN-Knoten an. Diese können dann mit einem Aufruf abgefragt werden. Jede CAN ID liefert dann Ergebnisse, die interpretiert werden müssen. Generell kann man Values und Texte unterscheiden.

- Value Werte können auch geschrieben werden. Dies kann einzeln pro CAN-Knoten passieren.

Aus meiner Sicht wäre das eine Mischung aus Plugin (Webservice/XML lesen/schreiben) und Logik (Umrechnung Ergebnis XML in "Werte" mit DPTs)

Im Perl Plugin haben wir am Anfang eine Menge definiert. u.a.
CAN-ID, GA, DPT
Das Ganze jeweils für Value-read, Value-write und String-read CAN-IDs.

Marcus, vl. kannst Du mir eine Idee geben, wie das einzubauen wäre. Das eigentliche Einbauen würde ich dann selber mal probieren.

Grüße
__________________
Derzeit zwischen Kistenauspacken und Garten anlegen.
Baublog im Profil.
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #5  
Alt 03.01.2013, 13:02
Benutzerbild von mknx
Erfahrener Benutzer
 
Registriert seit: 21.06.2010
Ort: Würzburg
Beiträge: 822
mknx wird schon bald berühmt werden
Standard

Hi,

eine separate Logik sehe ich momentan nicht.
Was musst Du den umrechnen?
Das ganze KNX Zeug hat nichts mit dem ETA Plugin zu tun. Du musst dem entsprechenden Item nur die 'echten' Werte mitteilen und ein paar Angaben für das KNX Plugin machen.

Code:
[eta]
    [[kessel]]
        [[[temp]]]
            type = num
            knx_send = 1/1/3
            knx_listen = 1/1/4
            knx_dpt = 9
            eta_can = 112/10021/0/0/12001
            eta_send = yes
            eta_eval = value * Pi  # evtl. falls eine Bereinigung der ETA Eingangswerte notwendig ist.
Aber so richtig verstehe ich das Problem bzw. den Datenfluss nicht.

1. Du baust ein paar Funktionen um mit der ETA per http zu kommunizieren zu können (GET, POST, ...)
2. Du parst das XML (zyklisch) und setzt die items.
3. Bei Änderungen der items, die eta_send gesetzt haben, sendest Du das ein POST Update an die ETA.

Die Kommunikation und XML parsen kannst Du auch erst mal so in ein Python Script hacken. Die Integration als Plugin wird dann sehr einfach.
Achtung bei urllib2 gibt es ein memleak. In lib/tools.py habe eine Funktion definiert die das umgeht. Es sollte Dir als Vorlage für Deine Kommunikationsfunktionen dienen.

Bis bald

Marcus
__________________
Logik? Visu? KNX? 1-Wire? Russound? ... => SmartHome.py - Version 0.9 und Raspberry Pi Image 2.0
Information & Download: http://mknx.github.io/smarthome/ Support: http://knx-user-forum.de/smarthome-py/
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #6  
Alt 03.01.2013, 13:22
Benutzerbild von greentux
Erfahrener Benutzer
 
Registriert seit: 14.03.2010
Ort: Sachsen
Beiträge: 2.422
greentux sorgt für eine eindrucksvolle Atmosphäregreentux sorgt für eine eindrucksvolle Atmosphäregreentux sorgt für eine eindrucksvolle Atmosphäre
Standard

zu 1.
Das wäre ja das, was bisher bei Dir unter /plugins liegt. Also beispielweise würde ich den udp Sender/Empfäger nehmen, um dann einen http/xml Sender/Empfänger zu haben.
Code:
GET /user/var/112/10021/0/0/12112 HTTP/1.1
Code:
HTTP Response
HTTP/1.1 200 OK
Content-Encoding: utf-8
Content-Type: application/xml
<?xml version="1.0" encoding="utf-8"?>
<eta version="1.0" xmlns="http://www.eta.co.at/rest/v1">
<value uri="/user/var/112/10021/0/0/12112" strValue="Off" unit=""
decPlaces="0" scaleFactor="1" advTextOffset="1802">1802</value>
</eta>
Das Ergebnis (1802) ist nun mit scaleFactor (1) zu multiplizieren. Anschliessend ist advTextOffset (1802) zu subtrahieren (=0). Ggf. hat man die unit übergeben. Parallel gibs hier auch einen Text ("off"), das sind also im Grunde zwei GAs.

Der Teil oben ist vermutlich dann "plugin", das auswerten und knx anbinden ist normale Logik. So war auch mein Vorschlag...
__________________
Derzeit zwischen Kistenauspacken und Garten anlegen.
Baublog im Profil.
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #7  
Alt 03.01.2013, 13:48
Benutzerbild von mknx
Erfahrener Benutzer
 
Registriert seit: 21.06.2010
Ort: Würzburg
Beiträge: 822
mknx wird schon bald berühmt werden
Standard

Hi,

ich würde alles im Plugin machen. Das Plugin holt sich zyklisch die XML Files, parst diese, berechnet den Wert und setzt die Items.

Kopier Dir mal plugins/sample/__init__.py (das kannst Du auch direkt ohne SmartHome.py ausführen, geht zum entwickeln schneller) und fange an das Plugin zu entwickeln.
1. Schritt Kommunikation = Hol Dir ein XML File als String. Für den Anfang kannst Du ja nur eine CAN_ID auslesen und das ganze in der run methode aufrufen.

Dann poste den Code und ich gebe Dir Feedback

Wollen wir es so machen?

Bis bald

Marcus
__________________
Logik? Visu? KNX? 1-Wire? Russound? ... => SmartHome.py - Version 0.9 und Raspberry Pi Image 2.0
Information & Download: http://mknx.github.io/smarthome/ Support: http://knx-user-forum.de/smarthome-py/
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #8  
Alt 11.01.2013, 20:57
Benutzerbild von greentux
Erfahrener Benutzer
 
Registriert seit: 14.03.2010
Ort: Sachsen
Beiträge: 2.422
greentux sorgt für eine eindrucksvolle Atmosphäregreentux sorgt für eine eindrucksvolle Atmosphäregreentux sorgt für eine eindrucksvolle Atmosphäre
Standard

Ich habe jetzt mal den Python Code soweit, das er sich mit der ETA verbindet und Daten holt bzw Daten abliefern kann.

Daraus könnte man nun ein Plugin machen, was alle 300s läuft und Daten holt. Um diese dann auf den KNX zu senden sollte man aus dem ETA Plugin direkt mittels sh.knx.groupwrite auf den Bus schreiben?

Die gleiche Frage stellte sich mir, wie man 1Wire Werte auf den KNX bekommt. In einer Logik oder direkt in einem 1wire Plugin?

Ich verstehe glaube ich vl. die Architektur noch nicht so ganz. Kümmern sich die Plugins nur jeder um ihren "Bus" / "Gerät" etc. und der Austausch dazwischen passiert immer via Logik oder wie soll es sein?

Fangen wir mal mit dem einfachsten Fall an.
10 Werte vom Kessel auf den KNX bekommen.
Ich habe GA, CAN-ID und DPT in einer Liste im Plugin (später mal in der plugin.conf) und kann diese nun lesen. Wo sollen die Daten dann hin?
__________________
Derzeit zwischen Kistenauspacken und Garten anlegen.
Baublog im Profil.
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #9  
Alt 12.01.2013, 11:57
Benutzerbild von mknx
Erfahrener Benutzer
 
Registriert seit: 21.06.2010
Ort: Würzburg
Beiträge: 822
mknx wird schon bald berühmt werden
Standard

Zitat von greentux Beitrag anzeigen
Ich habe jetzt mal den Python Code soweit, das er sich mit der ETA verbindet und Daten holt bzw Daten abliefern kann.

Daraus könnte man nun ein Plugin machen, was alle 300s läuft und Daten holt.
Klasse. Kannst Du mir den Code mal per Mail schicken? Dann kann ich Ihn mir am Sonntag Abend mal ansehen.

Zitat von greentux Beitrag anzeigen
Um diese dann auf den KNX zu senden sollte man aus dem ETA Plugin direkt mittels sh.knx.groupwrite auf den Bus schreiben?

Die gleiche Frage stellte sich mir, wie man 1Wire Werte auf den KNX bekommt. In einer Logik oder direkt in einem 1wire Plugin?

Ich verstehe glaube ich vl. die Architektur noch nicht so ganz. Kümmern sich die Plugins nur jeder um ihren "Bus" / "Gerät" etc. und der Austausch dazwischen passiert immer via Logik oder wie soll es sein?
Ja, die Plugins kümmern sich immer nur um ihren Bus/Gerät.
Verknüpft werden sie primär über Items. Über Logiken geht auch, fällt mir aber momentan kein Use Case ein.

Für 1-Wire => KNX:

Code:
[temperature]
  type = num
  ow_id = 28.FE4D7207777
  ow_sensor = temperature
  knx_dpt = 9
  knx_send = 1/1/8
Ode für Dein Plugin:

Code:
[eta]
    [[kessel]]
        [[[temp]]]
            type = num
            knx_send = 1/1/3
            knx_listen = 1/1/4
            knx_dpt = 9
            eta_can = 112/10021/0/0/12001
            eta_send = yes
            eta_eval = value * Pi  # evtl. falls eine Bereinigung der ETA Eingangswerte notwendig ist.
Dein eta Plugin setzt auf eta.kessel.temp auf 21. Das KNX Plugin reagiert auf die Wertveränderung und sendet den Wert 21 als dpa 9 kodiert an die 1/1/3.
Dazu müssen sich die Plugins bei dem Items registrieren wenn sie über Änderungen informiert werden wollen. (Das geschieht in der parse_item Methode).

Andersrum könnte man für Werte die man setzen möchte, z.B. die gewünschte Vorlauftemperatur, einen Wert über das KNX-Plugin ändern und dein eta Plugin würde auf die Änderung reagieren.
Als z.B. den Wert 23 als dpt 9 kodiert an die 1/1/4 schicken und dein Plugin schickt den Wert dann an die 112/10021/0/0/12001 richtig kodiert.

Verständlich?

Bis bald

Marcus
__________________
Logik? Visu? KNX? 1-Wire? Russound? ... => SmartHome.py - Version 0.9 und Raspberry Pi Image 2.0
Information & Download: http://mknx.github.io/smarthome/ Support: http://knx-user-forum.de/smarthome-py/
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #10  
Alt 12.01.2013, 13:10
Benutzerbild von greentux
Erfahrener Benutzer
 
Registriert seit: 14.03.2010
Ort: Sachsen
Beiträge: 2.422
greentux sorgt für eine eindrucksvolle Atmosphäregreentux sorgt für eine eindrucksvolle Atmosphäregreentux sorgt für eine eindrucksvolle Atmosphäre
Standard

Ja, soweit verständlich. Das 1Wire ist ja ein guter Vergleich.
Dann zwei Fragen (ich denke immer a la WG

- kann ich im Item dafür sorgen, das die Werte regelmässig gesendet werden? (Für die Uhrzeit ist das ja schon vorgesehen). Da die Lesewerte auch immer als ein Set (etwa 40 Werte) gelesen werden, wäre es gut, wenn die dann auch in einem Rutsch rauskämen. Wenn es jetzt 40 Items gäbe und jedes wieder beim Plugin nachfragt, muss ich das im Plugin anders gestalten. Dann muss da eine Art Cache rein. Beim WG lese ich halt alle 5 Minuten alle Werte und schreibe die auf den Bus.

- 1 Item = 1 Wert ? Also Schlafzimmer mit drei Sensoren sind 2 Items?

Zwei strukturelle Fragen:
- Wo lege ich am besten eine Config ab (primär GA, CAN, DPT Einträge)? Im Plugin selbst wärs unschön.

- Wo sollten administrative Aufgaben passieren (also anlegen des CAN-ID Sets falls noch nicht angelegt weil Heizung Rebootet
__________________
Derzeit zwischen Kistenauspacken und Garten anlegen.
Baublog im Profil.
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[WireGate-Plugin] Neues Plugin: Anwesenheitssimulation Fry Code-Schnipsel 15 06.01.2013 10:28
[WireGate-Plugin] Decoder Plugin zum Haustüröffnen etc. emax WireGate 13 20.10.2012 20:03
[Firmware] Wiregate Arbeitsspeicher läuft bis zum Absturz voll? JuMi2006 WireGate 15 05.08.2012 22:32
Erstmalige Inbetriebnahme Wiregate, erstes Plugin Fechter65 WireGate 10 05.07.2012 08:35
[WireGate-Plugin] - √ - Plugin Aufrufzeiten aus anderem Plugin setzen geos WireGate 2 05.06.2012 21:24


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:23 Uhr.



SEO by vBSEO