Ankündigung

Einklappen
Keine Ankündigung bisher.

Exec Binding: Werte an Script übergeben

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

    Exec Binding: Werte an Script übergeben

    Hallo Zusammen,

    ich möchte einen Temperaturwert der über KNX kommt, an ein Python Script als Aufrufparameter übergeben, leider finde ich nicht, wie ich den Wert da reinbekomme. Meine Idee war:
    Code:
    rule "RaumTemp Wohnzimmer"
    when
        Item Temp_GF_Living received update
    then
    	 exec=">[python /home/pi/python/calc_r.py Temp_GF_Living]"
    end
    Der Designer sagt, dass python falsch geschrieben ist und das er mit exec nicht anfangen kann. Wo liegt mein Fehler?

    Gruss und Danke
    Norbert

    #2
    Das exec kann man glaube ich nur bei der Item-Definition in der Datei *.items einsetzen, nicht in rules, wie Du es versuchst.

    Bei Rules heißt der richtige Befehl: executeCommandLine
    Anleitunge siehe Actions - openhab - Overview of avaialble actions - empowering the smart home - Google Project Hosting

    Nimm diesen Befehl, oder teste mal, was übergeben wird, wenn Du in der Items-Datei folgendes versuchst:
    Code:
    Number Temp_GF_Living { exec=">[python /home/pi/python/calc_r.py %2$s]" }

    Kommentar


      #3
      Ich hab in der Items Datei dein Beispiel hinzugefügt und bekomme im Log jetzt:
      Code:
      01:47:46.999 ERROR o.o.m.i.i.GenericItemProvider[:321]- Binding configuration of type 'exec' of item ?Temp_GF_Living? could not be parsed correctly.
      org.openhab.model.item.binding.BindingConfigParseException: bindingConfig 'python /home/pi/python/calc_r.py %2$s' doesn't represent a valid in-binding-configuration.
      	at org.openhab.binding.exec.internal.ExecGenericBindingProvider.parseOutBindingConfig(ExecGenericBindingProvider.java:182)
      	at org.openhab.binding.exec.internal.ExecGenericBindingProvider.processBindingConfiguration(ExecGenericBindingProvider.java:143)
      	at org.openhab.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:319)
      	at org.openhab.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:295)
      	at org.openhab.model.item.internal.GenericItemProvider.getItemsFromModel(GenericItemProvider.java:176)
      	at org.openhab.model.item.internal.GenericItemProvider.getItems(GenericItemProvider.java:148)
      Woran könnte das liegen?

      Kommentar


        #4
        Versuche mal folgendes:

        Ändere Deine Datei calc_r.py so, daß die erste Zeile so aussieht:
        Code:
        #!/usr/bin/python
        Dann kontrolliere, ob die Datei calc_r.py ausführbar ist. Dies kannst Du machen, indem Du Dich in Deinen Pi einloggst und im Terminal folgenden Befehl eingibst:

        Code:
        chmod +x /home/pi/python/calc_r.py
        Dann versuche, ob das Programm vom Terminal gestartet werden kann. Gib dazu einfach folgendes ein:

        Code:
        /home/pi/python/calc_r.py 20
        Wenn das Programm so läuft, brauchst Du nicht mehr das Python vor python /home/pi/python/calc_r.py

        Ändere nun Deine *.items Datei auf
        Code:
        .... exec=">[/home/pi/python/calc_r.py %2$s]" ....
        Läuft es so?

        Als Wert von %2$s soll gemäß Anleitung http://code.google.com/p/openhab /wiki/ExecBinding der "current Command or State" übergeben werden, das müsste doch in Deinem Fall die Temperatur sein?

        Kommentar


          #5
          Hi,

          habe ich alles gemacht, die Atem Definition sieht so aus:
          Code:
          Number Temp_GF_Living 		"Wohnzimmer [%.1f °C]"	<temperature>	(RoomTemp,Temperature, GF_Living, Heizung_Chart) {knx="<4/1/17", exec=">[/home/pi/python/calc_r.py %2$s]"}
          im Log ist auch kein Fehler mehr, allerdings führt er das Script nicht aus. Ich habe ein Logging im Script aktiviert, um das zu überprüfen und das Log ist leer.

          Gruss
          Norbert

          Kommentar


            #6
            Bau mal einen festen Temperaturwert in Dein Skript ein und laß das %2$s in der Itemdefinition weg, dann siehst Du, ob das Skript ohne Parameter wenigstens ausgeführt wird. Vielleicht liegt es daran, daß es nicht geht.


            Was macht das Skript überhaupt? Können diese Funktionen nicht mit einer Rule, geschrieben in Java, erledigt werden. Dies würde alles sehr vereinfachen.

            Kommentar


              #7
              Hi,

              jetzt gibt's folgenden Log:
              Code:
              19:08:05.070 ERROR o.o.m.i.i.GenericItemProvider[:321]- Binding configuration of type 'exec' of item ?Temp_GF_Living? could not be parsed correctly.
              org.openhab.model.item.binding.BindingConfigParseException: bindingConfig '/home/pi/python/calc_r.py 15' doesn't represent a valid in-binding-configuration.
              	at org.openhab.binding.exec.internal.ExecGenericBindingProvider.parseOutBindingConfig(ExecGenericBindingProvider.java:182)
              	at org.openhab.binding.exec.internal.ExecGenericBindingProvider.processBindingConfiguration(ExecGenericBindingProvider.java:143)
              	at org.openhab.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:319)
              	at org.openhab.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:295)
              	at org.openhab.model.item.internal.GenericItemProvider.getItemsFromModel(GenericItemProvider.java:176)
              	at org.openhab.model.item.internal.GenericItemProvider.getItems(GenericItemProvider.java:148)
              wenn ich den Aufruf ins Terminal kopiere, wird's ausgeführt. Das Script wandelt den Temperatur in einen Widerstandswert um und stellt entsprechend ein DigitalPoti über i2c. Die Idee dahinter ist, die Heizung im Raumregelmodus zu fahren, ohne sich das hässliche Reglermodul auch noch ins Wohnzimmer zu hängen.

              Gruss
              Norbert

              Kommentar


                #8
                Du hast jetzt 15 mit in die Itemdefinition geschrieben, das bemängelt er jetzt.
                Ich habe es so gemeint, daß Du momentan temperatur=15 (oder was auch immer) in Dein Python-Skript schreibst und in der Itemdefinition nur
                Code:
                exec=">[/home/pi/python/calc_r.py]"
                ohne jeglichen Parameter. Dann kannst Du sehen, ob so das Skript überhaupt gestartet wird.

                Kommentar


                  #9
                  Oh, kleines Missverständnis.
                  Hab ich geändert. Er will das python Script einfach nicht:
                  Code:
                  19:37:06.610 ERROR o.o.m.i.i.GenericItemProvider[:321]- Binding configuration of type 'exec' of item ?Temp_GF_Living? could not be parsed correctly.
                  org.openhab.model.item.binding.BindingConfigParseException: bindingConfig '/home/pi/python/calc_r.py' doesn't represent a valid in-binding-configuration.
                  	at org.openhab.binding.exec.internal.ExecGenericBindingProvider.parseOutBindingConfig(ExecGenericBindingProvider.java:182)
                  	at org.openhab.binding.exec.internal.ExecGenericBindingProvider.processBindingConfiguration(ExecGenericBindingProvider.java:143)
                  	at org.openhab.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:319)
                  	at org.openhab.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:295)
                  	at org.openhab.model.item.internal.GenericItemProvider.getItemsFromModel(GenericItemProvider.java:176)
                  	at org.openhab.model.item.internal.GenericItemProvider.getItems(GenericItemProvider.java:148)

                  Kommentar


                    #10
                    Jetzt weiß ich auch nicht mehr weiter! Ich bin nur Openhab-Anfänger, ich glaube jetzt muß mal ein Experte sich äußern, was da falsch läuft!

                    Kommentar


                      #11
                      Ich habe als letzten Test alles in eine Rule gepackt:
                      Code:
                      rule Temp_WZ
                      when 
                      		Item Temp_GF_Living received update
                      then
                      executeCommandLine("/home/pi/python/calc_r.py")
                      end
                      Log sieht gut aus:
                      Code:
                      22:05:34.742 INFO  o.openhab.io.net.exec.ExecUtil[:87]- executed commandLine '/home/pi/python/calc_r.py'
                      22:20:34.662 INFO  o.openhab.io.net.exec.ExecUtil[:87]- executed commandLine '/home/pi/python/calc_r.py'
                      22:35:34.592 INFO  o.openhab.io.net.exec.ExecUtil[:87]- executed commandLine '/home/pi/python/calc_r.py'
                      22:48:17.657 INFO  o.openhab.io.net.exec.ExecUtil[:87]- executed commandLine '/home/pi/python/calc_r.py'
                      22:50:34.512 INFO  o.openhab.io.net.exec.ExecUtil[:87]- executed commandLine '/home/pi/python/calc_r.py'
                      Aber das Script wurde nicht ausgeführt. Vielleicht ein Problem in dem Bindung? Version ist 1.3.1

                      Kommentar


                        #12
                        Ein Schuss ins blaue:

                        kann es sein, dass Du python als Interpreter mit angeben musst? also statt
                        Code:
                        /home/pi/python/calc_r.[URL="http://redaktion.knx-user-forum.de/lexikon/py/"]py[/URL]
                        Code:
                        python /home/pi/python/calc_r.[URL="http://redaktion.knx-user-forum.de/lexikon/py/"]py[/URL]
                        evtl. sogar /usr/bin/python ...

                        EDIT: Man sollte schon vorher den ganzen Thread lesen... :-) Also im Zweifel hast Du das vorher schon versucht...

                        Kommentar


                          #13
                          bzw. versuche mal:

                          Code:
                          ...
                          executeCommandLine("python@@/home/pi/python/calc_r.py")
                          ...
                          Nur zur Sicherheit die Frage: der Aufruf "/home/pi/python/calc_r.py" funktioniert auf der Kommandozeile?

                          Gruß,

                          Thomas E.-E.
                          Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

                          Kommentar


                            #14
                            Hi,

                            ja in der Konsole klappt der Aufruf, jetzt auch aus Openhab, jetzt bleibt nur noch die Frage, wie ich den Wert als Aufrufparameter übergebe.

                            Gruss
                            Norbert

                            Kommentar


                              #15
                              wie wäre es mit:

                              Code:
                              rule Temp_WZ
                              when 
                                Item Temp_GF_Living received update
                              then
                                executeCommandLine("python /home/pi/python/calc_r.py " + Temp_GF_Living.state)
                              end
                              Gruß,

                              Thomas E.-E.
                              Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

                              Kommentar

                              Lädt...
                              X