Ankündigung

Einklappen
Keine Ankündigung bisher.

Verständnisfragen

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

    Verständnisfragen

    Hallo,
    es hat sich ja viel getan bei smarthome.py. Ich habe auch gleich einen neuen Anlauf gestartet und gleich ein paar Fragen.

    Ich habe das hier in der plugin.conf stehen:
    Code:
    [ow]
        class_name = OneWire
        class_path = plugins.onewire
        host = 192.168.2.200
    #    port = 4304
    
    [knx]
       class_name = KNX
       class_path = plugins.knx
       host = 192.168.2.46
    #   port = 6720
       send_time = 600 # update date/time every 600 seconds, default none
       time_ga = 11/1/1 # default none
       date_ga = 11/1/2 # default none
    uns das hier in der items.conf:
    Code:
    ['heizung']
        [['h-vorlauf']]
            type = num
            knx_dpt = 9
            knx_send = 12/1/2
            knx_reply = 12/1/2
            ow_id = 28.6C858B020000 # see 1-Wire plugin
            ow_sensor = temperature # see 1-Wire plugin
    Jetzt wird die Zeit auch brav alle 600 Sekunden übertragen - Das ist schön!
    Aber die Temperatur wird nur einmal beim starten von smarthome.py gesendet und dann nicht wieder.

    Jetzt würde ich aber gerne die Temperatur häufiger senden oder besser noch bei Änderung den neuen Wert senden - Aber wie stelle ich das an.

    Wenn ich das Richtig gelesen habe sollte jetzt auch Busanfragen beantwortet werden. Aber die ETS bekommt bei 12/1/2 keine Antwort.

    Was ich gerne auch mit der smarthome.py realisieren würde ist:
    Tasterschnittstelle z.B. 12/2/1 einen Anruf über Asterisk auslöst (Haustür Klingel). Der Asteriskserver ist nicht auf dem selben Rechner aber im selben Netzwerk.

    Viele Dank
    Maik

    #2
    Hallo Maik,

    Zitat von MaBo76 Beitrag anzeigen
    Aber die Temperatur wird nur einmal beim starten von smarthome.py gesendet und dann nicht wieder.

    Jetzt würde ich aber gerne die Temperatur häufiger senden oder besser noch bei Änderung den neuen Wert senden - Aber wie stelle ich das an.
    Hat sich die Temperatur denn in dem Zeitraum geändert? Die Temperatur sollte bei jeder Änderung auf den Bus geschrieben werden.
    Was sagt denn das Logfile dazu? Oder starte SmartHome.py mit
    Code:
    $ smarthome.py --no-daemon
    und poste den Output.

    Zitat von MaBo76 Beitrag anzeigen
    Wenn ich das Richtig gelesen habe sollte jetzt auch Busanfragen beantwortet werden. Aber die ETS bekommt bei 12/1/2 keine Antwort.
    Sorry, da ist ein kleiner Bug in Zeile 178 des Plugins. Dort müsste stehen:
    Code:
    elf.groupwrite(dst, item(), item.conf['knx_dpt'], 'response')
    Ich werde das heute Abend auf github einchecken.

    Zitat von MaBo76 Beitrag anzeigen
    Was ich gerne auch mit der smarthome.py realisieren würde ist:
    Tasterschnittstelle z.B. 12/2/1 einen Anruf über Asterisk auslöst (Haustür Klingel). Der Asteriskserver ist nicht auf dem selben Rechner aber im selben Netzwerk.
    Dazu musst Du das Asterisk-Plugin konfigurieren und eine kleine Logik schreiben die auf die GA hört.
    Code:
    sh.ast.call('SIP/200', '240', 'door') # call(source, dest, context, callerid=None)
    Ich hoffe Du hast noch Spass beim testen.

    Bis bald

    Marcus

    Kommentar


      #3
      Hallo Markus,
      hier mal der Output:

      Code:
      2012-10-31 19:02:26,455 SmartHome.py INFO     Init SmartHome.py v0.7 -- smarthome.py:__init__:163
      2012-10-31 19:02:26,455 SmartHome.py INFO     Init Scheduler -- scheduler.py:__init__:51
      2012-10-31 19:02:26,455 SmartHome.py INFO     Init plugins -- smarthome.py:__init__:196
      2012-10-31 19:02:26,456 SmartHome.py INFO     Init Plugins -- plugin.py:__init__:34
      2012-10-31 19:02:26,456 SmartHome.py DEBUG    Plugin: ow -- plugin.py:__init__:43
      2012-10-31 19:02:26,456 SmartHome.py DEBUG    Plugin: knx -- plugin.py:__init__:43
      2012-10-31 19:02:26,458 SmartHome.py INFO     Init items -- smarthome.py:__init__:198
      2012-10-31 19:02:26,458 SmartHome.py DEBUG    knx: heizung.h-vorlauf reply to 6/0/2 -- __init__.py:parse_item:239
      2012-10-31 19:02:26,458 SmartHome.py DEBUG    Item 'heizung': No type specified. -- item.py:__init__:98
      2012-10-31 19:02:26,458 Scheduler    DEBUG    creating 5 workers -- scheduler.py:run:57
      2012-10-31 19:02:26,461 SmartHome.py INFO     Onewire: connected to 192.168.2.200:4304 -- __init__.py:connect:62
      2012-10-31 19:02:26,461 SmartHome.py INFO     KNX: connected to 192.168.2.46:6720 -- my_asynchat.py:connect:55
      2012-10-31 19:02:26,462 SmartHome.py INFO     Start Plugins -- plugin.py:start:64
      2012-10-31 19:02:26,462 SmartHome.py INFO     Starting logics -- logic.py:__init__:41
      2012-10-31 19:02:26,462 SmartHome.py DEBUG    reading logics from /usr/local/smarthome/etc/logic.conf -- logic.py:__init__:50
      2012-10-31 19:02:26,462 knx          DEBUG    knx: init ga -- __init__.py:run:184
      2012-10-31 19:02:28,469 SmartHome.py DEBUG    1.1.40 set 1/0/7 to 1 -- __init__.py:parse_telegram:156
      2012-10-31 19:02:30,668 Scheduler    DEBUG    ow next time: 2012-10-31 19:07:30+01:00 -- scheduler.py:_next_time:195
      2012-10-31 19:02:31,478 SmartHome.py DEBUG    0.0.0 set 11/0/1 to 2 1f -- __init__.py:parse_telegram:156
      2012-10-31 19:02:31,479 SmartHome.py DEBUG    0.0.0 set 11/0/2 to a c -- __init__.py:parse_telegram:156
      2012-10-31 19:02:31,671 Scheduler    DEBUG    knx.time next time: 2012-10-31 19:12:31+01:00 -- scheduler.py:_next_time:195
      2012-10-31 19:02:32,673 Scheduler    DEBUG    ow.bus next time: 2012-10-31 19:12:32+01:00 -- scheduler.py:_next_time:195
      2012-10-31 19:02:33,773 ow           INFO     heizung.h-vorlauf = 36.2 via 1-Wire None -- item.py:_update:180
      wtf
      2012-10-31 19:02:33,775 SmartHome.py DEBUG    0.0.0 set 6/0/2 to f 12 -- __init__.py:parse_telegram:156
      2012-10-31 19:02:37,376 ow.bus       INFO     Found bus.0 with busmaster 81.2A6F2D000000 -- __init__.py:_busmaster_discovery:214
      2012-10-31 19:03:02,032 SmartHome.py DEBUG    0.0.0 read 6/0/2 -- __init__.py:parse_telegram:174
      error: uncaptured python exception, closing channel <plugins.knx.KNX connected 192.168.2.46:6720 at 0x12d2950> (<type 'exceptions.TypeError'>:__nonzero__ should return an int [/usr/lib/python2.6/asyncore.py|read|78] [/usr/lib/python2.6/asyncore.py|handle_read_event|428] [/usr/lib/python2.6/asynchat.py|handle_read|140] [/usr/local/smarthome/plugins/knx/__init__.py|found_terminator|111] [/usr/local/smarthome/plugins/knx/__init__.py|parse_telegram|176])
      2012-10-31 19:03:02,032 SmartHome.py INFO     KNX: connection to 192.168.2.46:6720 closed -- my_asynchat.py:handle_close:70
      2012-10-31 19:03:26,606 sh.con       INFO     KNX: connected to 192.168.2.46:6720 -- my_asynchat.py:connect:55
      2012-10-31 19:03:26,783 Scheduler    DEBUG    sh.con next time: 2012-10-31 19:05:26+01:00 -- scheduler.py:_next_time:195
      2012-10-31 19:03:36,939 SmartHome.py DEBUG    1.1.40 set 1/0/7 to 1 -- __init__.py:parse_telegram:156
      Die Temperatur wird bei Änderung neu gesendet - Ich war wohl nur zu ungeduldig :-)

      Ich habe die Zeile 178 in /usr/local/smarthome/plugins/knx/__init__.py
      in:
      self.groupwrite(dst, item(), item.conf['knx_dpt'], 'response')
      geändert.

      Ich denke mal du meinst self und nicht elf.

      Aber nach dem read kommt die Fehlermeldung.

      Gruß Maik

      Kommentar


        #4
        Hallo Maik,

        Zitat von MaBo76 Beitrag anzeigen
        Ich habe die Zeile 178 in /usr/local/smarthome/plugins/knx/__init__.py
        in:
        self.groupwrite(dst, item(), item.conf['knx_dpt'], 'response')
        geändert.

        Ich denke mal du meinst self und nicht elf.
        ja genau.

        Probiere bitte mal die angehängte Datei. Sie muss nach /usr/local/smarthome/plugins/knx/__init__.py kopiert werden. Dort habe ich einen Bug gefixt.
        Ich kann es momentan leider nicht in git einchecken.

        Bis bald

        Marcus
        Angehängte Dateien

        Kommentar


          #5
          Vielen Dank,
          jetzt klappt es!

          Dann versuche ich jetzt mal Asterisk mit mit dem Klingeltaster zu verbinden.

          Gruß Maik

          Kommentar


            #6
            Ich bin zu doof!

            Asterisk und smarthome sind jetzt verbunden.

            Aber wie schreibe ich die Logic ???

            Code:
            #/usr/local/smarthome/items/klingel.conf
            ['haustuer']
                [['klingel']]
                    type = bool
                    knx_dpt = 1
                    knx_listen = 6/0/0
            Wie geht es weiter um:
            Code:
            sh.ast.call('LOCAL/2222', '1233', 'kingel')
            abzuschicken?


            Alles was ich versucht habe erbrachte nur Fehlermeldungen.

            Gruß Maik

            Kommentar


              #7
              Hallo Maik,

              du legst eine Datei mit dem Inhalt der Logik im Ordner logics an. Das könnte z.B. so aussehen:

              /usr/local/smarthome/logics/doorbell.py
              Code:
              #!/usr/bin/env python
              # make asterisk call if door bell button is pushed
              sh.ast.call('LOCAL/2222', '1233', 'kingel')
              Anschließend musst du die Logik mit deiner definierten Klingel verknüpfen. Dazu registrierst du die oben angelegte Datei in der logics.conf

              Code:
              # /usr/local/smarthome/etc/logic.conf
              [doorbell]
                  filename = doorbell.py
                  watch_item = haustuer.klingel
              Damit wird die Logik immer ausgeführt sobald sich der Wert von haustuer.klingel ändert. Evtl. musst du bei der Logik vor dem Asterisk Call noch ein:

              Code:
              if sh.haustuer.klingel() is True:
              einfügen, damit das Telefon nicht klingelt wenn der Wert der Türklingel wieder von eins auf null geht. Aber das musst du dann einfach ausprobieren.
              Mit freundlichen Grüßen
              Niko Will

              Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
              - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

              Kommentar


                #8
                Es klappt!
                Aber das mit :
                Code:
                if sh.haustuer.klingel() is True:
                Habe ich nicht hin bekommen. Dann passiert gar nichts mehr!

                Da der Taster nur ON sendet lief die Logic auch nur einmal. Ich habe das Item jetzt so geändert:

                Code:
                [haustuer]
                    [[klingel]]
                        type = bool
                        enforce_updates = on
                        knx_dpt = 1
                        knx_listen = 6/0/0
                Damit klappt es! Natürlich klingeln die Telefone auch wenn ein OFF gesendet wird aber der Fall tritt ja nicht ein.

                Trotzdem würde ich gerne die Logic verstehen.
                Gibt es noch Beispiele die beim Verstehen helfen?

                Gruß Maik

                Kommentar


                  #9
                  Hallo Maik,

                  freut mich, dass es läuft. Das mit enforce_updates ist sogar noch besser als mein Vorschlag!

                  Die Doku kennst du oder? http://mknx.github.com/smarthome/

                  Ansonsten kannst du in den Logiken alles machen was man mit Python eben machen kann
                  Ich schalte z.B. momentan im Technikraum beim Betreten auch einen Lautsprecher ein (war ursprünglich zum Testen des Russound Plugin, aber da dort auch Lebensmittel und Schuhe drin sind betreten wir den Raum öfters und die bessere Hälfte fand das mit der Musik ganz nett und daher hängt da immer noch ein notdürftig angeschlossenes Logitech Soundsystem). Die Logik dafür ist extrem einfach:

                  Code:
                  sh.eg.technik.audio(sh.eg.technik.licht())
                  getriggert wird das ganze vom Licht, also:

                  Code:
                  ['audio_technik']
                      filename = audio_technik.py
                      watch_item = eg.technik.licht
                  oder wenn ich meine Terrassentüre schließe soll die Jalousie (die automatisch beim Öffnen hochgefahren wurde) sich gleich ausrichten wie die Jalousie daneben:

                  Code:
                  if sh.eg.essen.terrassen_tuer() is False:
                      sh.eg.essen.jalousie.mitte.position(sh.eg.essen.jalousie.rechts.position())
                      sh.eg.essen.jalousie.mitte.lamelle(sh.eg.essen.jalousie.rechts.lamelle())
                  Hoffe damit ein paar Ideen geweckt zu haben und dass du dir das mit den Logiken nun etwas besser vorstellen kannst. Vielleicht wäre es einfacher, wenn du konkrete Fragen oder Ideen hättest.

                  Ansonsten wünsche ich weiterhin viel Spass mit smarthome.py
                  Mit freundlichen Grüßen
                  Niko Will

                  Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
                  - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

                  Kommentar


                    #10
                    Vielen Dank für deine Beispiele!
                    Ich denke ich taste mich so langsam ran an die Sache und muss sagen ich bin bis jetzt total begeistert von samrthome.py.

                    Ich versuch mich gerade an der VISU und habe auch hier ein Problem!
                    Wenn ich das hier auf meinem Desktop mit Firefox aufrufe, werden mir die Werte angezeigt und ich kann auch das Licht schalten. Aber auf meinem Galaxy S2 und auf dem Galaxy Tab werden mir die Werte nicht angezeigt :-(

                    Code:
                    <div data-role="fieldcontain">
                        <label for="temp">Heizung Vorlauf Temperatur</label>
                        <input id="temp" data-sh="temperatur.h-vorlauf" type="text" />
                    </div>
                    <div data-role="fieldcontain">
                        <label for="temp">Heizung Rücklauf Temperatur</label>
                        <input id="temp" data-sh="temperatur.h-ruecklauf" type="text" />
                    </div>
                    <div data-role="fieldcontain">
                        <label for="temp">Fußboden Vorlauf Temperatur</label>
                        <input id="temp" data-sh="temperatur.f-vorlauf" type="text" />
                    </div>
                    <div data-role="fieldcontain">
                        <label for="temp">Fußboden Rücklauf Temperatur</label>
                        <input id="temp" data-sh="temperatur.f-ruecklauf" type="text" />
                    </div>
                    <div data-role="fieldcontain">
                        <label for="temp">Warmwasserspeicher Temperatur</label>
                        <input id="temp" data-sh="temperatur.speicher" type="text" />
                    </div>
                    <div data-role="fieldcontain">
                        <label for="temp">Keller Temperatur</label>
                        <input id="temp" data-sh="temperatur.keller" type="text" />
                    </div>
                    <div data-role="fieldcontain">
                        <label for="temp">Aussen Temperatur</label>
                        <input id="temp" data-sh="temperatur.aussen" type="text" />
                    </div>
                    <div data-role="fieldcontain">
                        <label for="temp">Luft Feuchtigkeit</label>
                        <input id="temp" data-sh="temperatur.humidity" type="text" />
                    </div>
                    <div data-role="fieldcontain">
                        <label for="example_toggle">Büro Deckenstrahler</label>
                        <select id="example_toggle" data-sh="licht.1011" data-role="slider"><option value="off">Off</option><option value="on">On</option></select>
                    </div>
                    Gruß Maik

                    Kommentar


                      #11
                      Hallo Maik,

                      freut mich das wir Dich begeistern konnten.

                      Zu Deinem Problem:
                      Was ist das für Code? Sieht ein bisschen unvollständig aus. Da fehlt ja Header und Footer. Und woher kommt das HTML, hast Du das erzeugt?

                      Was mir auffällt, dort steht mehrmals id="temp". Die id sollte bei HTML wirklich eindeutig sein.

                      Und Du hast ein Item '1011' unter dem Item 'licht' angelegt? Das würde ich vermeiden und nur Items mit ASCII-Buchstaben verwenden. Auf keinen Fall Ziffern am Anfang, das mag Python nicht so gerne.


                      Hast Du mal die automatische Visu Generierung probiert? Für den Einstieg hilfreich.

                      Bis morgen & Gute Nacht

                      Marcus

                      Kommentar


                        #12
                        Hier noch einmal der ganze Code:

                        Code:
                        root@smarthome:~# cat /var/www/test.html
                        <!DOCTYPE html>
                        <html>
                            <head>
                                <meta charset="utf-8" />
                                <meta name="viewport" content="width=device-width, initial-scale=1" />
                                <meta name="apple-mobile-web-app-capable" content="yes" />
                                <meta name="apple-mobile-web-app-status-bar-style" content="black" />
                                <title>SmartHome.py</title>
                                <link rel="stylesheet" href="/css/jquery.mobile.min.css" />
                                <link rel="stylesheet" href="/css/my.css" />
                                <script src="/js/jquery.min.js"></script>
                                <script src="/js/jquery.mobile.min.js"></script>
                                <script src="/js/smarthome.min.js"></script>
                                <script src="/js/my.smarthome.js"></script>
                            </head>
                        <body>
                        <div data-role="page" id="example">
                            <div data-role="header"><h3>MaBo's Visu </h3></div>
                            <div data-role="content">
                        
                        <div data-role="fieldcontain">
                            <label for="temp1">Heizung Vorlauf Temperatur</label>
                            <input id="temp1" data-sh="temperatur.h-vorlauf" type="text" />
                        </div>
                        <div data-role="fieldcontain">
                            <label for="temp2">Heizung Rücklauf Temperatur</label>
                            <input id="temp2" data-sh="temperatur.h-ruecklauf" type="text" />
                        </div>
                        <div data-role="fieldcontain">
                            <label for="temp3">Fußboden Vorlauf Temperatur</label>
                            <input id="temp3" data-sh="temperatur.f-vorlauf" type="text" />
                        </div>
                        <div data-role="fieldcontain">
                            <label for="temp4">Fußboden Rücklauf Temperatur</label>
                            <input id="temp4" data-sh="temperatur.f-ruecklauf" type="text" />
                        </div>
                        <div data-role="fieldcontain">
                            <label for="temp5">Warmwasserspeicher Temperatur</label>
                            <input id="temp5" data-sh="temperatur.speicher" type="text" />
                        </div>
                        <div data-role="fieldcontain">
                            <label for="temp6">Keller Temperatur</label>
                            <input id="temp6" data-sh="temperatur.keller" type="text" />
                        </div>
                        <div data-role="fieldcontain">
                            <label for="temp7">Aussen Temperatur</label>
                            <input id="temp7" data-sh="temperatur.aussen" type="text" />
                        </div>
                        <div data-role="fieldcontain">
                            <label for="temp8">Luft Feuchtigkeit</label>
                            <input id="temp8" data-sh="temperatur.humidity""test" type="text" />
                        </div>
                        <div data-role="fieldcontain">
                            <label for="example_toggle">Büro Deckenstrahler</label>
                            <select id="example_toggle" data-sh="licht.buero" data-role="slider"><option value="off">Off</option><option value="on">On</option></select>
                        </div>
                        
                            </div> <!-- /content -->
                            <div data-role="footer" data-position="fixed">
                                <div data-role="navbar" data-iconpos="top">
                                    <ul>
                                        <li><a href="/example.html#html">HTML</a></li>
                                        <li><a href="/example.html#trigger">Logic Trigger</a></li>
                                        <li><a href="/example.html#form">Form</a></li>
                                        <li><a href="/gen/">Generated</a></li>
                                    </ul>
                                </div><!-- /navbar -->
                            </div><!-- /footer -->
                        </div><!-- /page -->
                        
                        </body>
                        </html>
                        Ich habe mir das so aus der example.html kopiert und angepasst. Jetzt die IDs und die 1011 wie vorgeschlagen geändert.

                        Es bleibt aber leider alles beim alten! Im Firefox unter Ubuntu 12.04 ist alles OK. Aber auf den Android Geräten werden die Werte nicht angezeigt und das Licht kann ich da auch nicht schalten.

                        Bei der VISU Generierung habe ich das gleich Problem.

                        Gruß Maik

                        Kommentar


                          #13
                          Hi Maik,

                          ich befürchte da klappt die Websocket-Kommunikation mit Android nicht.

                          Welche Android Version verwendest Du und was sagt smarthome.py, wenn Du es mit 'smarthome.py -n' aufrufst?

                          Steht da etwas von "Handshake for XXX with the following header failed!"?

                          Bis bald

                          Marcus

                          Kommentar


                            #14
                            Die Websocket Meldung erscheint wenn ich den Firefox öffne wo alles OK ist.
                            Bei den Android Teilen (4.0.4 + 4.0.3 + 2.0.3) Passiert gar nichts auf der Console.

                            :-(

                            Kommentar


                              #15
                              Wenn Du die Fehlermeldung liest, dann passiert auf dem Socket nichts mehr. Der wird dann geschlossen.
                              Kannst Du die Fehlermeldung bitte mal posten?

                              Danke

                              Marcus

                              Kommentar

                              Lädt...
                              X