Ankündigung

Einklappen
Keine Ankündigung bisher.

Serielle Kommandos via Openhab / Raspberry pi 2 senden

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

    [Codebeispiel] Serielle Kommandos via Openhab / Raspberry pi 2 senden

    Hallo wertes Forum,

    ich habe ein Raspberry pi 2 (OS ist Jessy / Openhab mit der Version V1.8), und möchte an der Seriellen Schnittstelle des Raspberry pi 2 ein Serielles Kommandos senden.

    Auf dem Raspberry pi 2 habe ich ein RS232 Shield v0.1 (uk online2000) aufgesteckt.

    Z.B soll test am Empfänger ankommen.
    Serielles Binding ist eingepflegt.

    Folgenden Schritt habe ich schon versucht.
    Diesen String habe ich unter .items eingepflegt:
    Switch Steckdose "Seriell" (Steckdosenleiste) { serial="/dev/ttyS0@9600,test" }

    Habe zum Testen der Seriellen Strings, das Programm Docklight als Empfänger mit dem Raspberry pi 2 verbunden.
    Mir ist es bisher nicht gelungen ein Ascii code zu empfangen

    Wenn sich schon jemand mit dieser Thematik befasst hat und positive Ergebnisse hierzu erzielt hat, würde ich mich über ein funktionierendes Beispiel bedanken.
    Besten Dank vorab

    Gruß Savana

    #2
    oft hängt das an fehlenden Rechten. Für die serielle Schnittstelle muss der User, unter dem openHAB läuft (wenn openHAB per apt-get installiert wurde, ist das der User openhab) in der Gruppe dialout sein, das geht an der Kommandozile mit sudo adduser openhab dialout.

    Kommentar


      #3
      Hallo udo1toni

      danke für deine Antwort, openhab wurde nicht via apt-get installiert .Ich habe vollzugriff auf den ordner Openhab vergeben.

      Mich würde intersieren ob der String (Syntax) Switch Steckdose "Seriell" (Steckdosenleiste) { serial="/dev/ttyS0@9600,test" }

      funkttioniert, oder muss ich vielleicht an einer anderen Stelle noch etwas schreiben bzw. hinzufügen / beachten usw. usw.

      besten Dank vorab

      Gruß savana


      Kommentar


        #4
        Hi,

        ich habe das so gelöst:



        Switch Steckdose "Seriell" (Steckdosenleiste) { serial="/dev/ttyS0@9600 }


        Switch Steckdose "Seriell" (Steckdosenleiste)

        Rule:


        Code:
        [COLOR=#222222]rule "Steckdose Seriell"
        when Item [/COLOR][I][B]Steckdose[/B][/I][COLOR=#222222] received command
        
        then
          if(receivedCommand==ON){
            sendCommand(Steckdose, "test")
        }
        else if(receivedCommand==OFF){
             sendCommand(Steckdose, "test1")
          }
        end[/COLOR]

        Kommentar


          #5
          Hi Miki84,

          danke für deine schnelle Antwort.
          Deine Antwort werde ich dann als zweiten schritt für mein vorhaben benutzen.

          Für mein erstes vorhaben muss ich via Button einen string senden.
          was müsste ich als Syntax schreiben das der string "test" direkt vom Raspberry via RS232 gesendet wird.
          muss ich in dieser Syntax noch etwas hinzufügen/ändern => Switch Steckdose "Seriell" (Steckdosenleiste) { serial="/dev/ttyS0@9600 }

          Besten Dank vorab

          Gruß Savana

          Kommentar


            #6
            Miki84 Da muss Dir beim posten ein Fehler unterlaufen sein. Erstens kennt ein Switch exakt drei Zustände, ON, OFF und uninitialized (bzw. demnächst dann null, wenn ich mich richtig erinnere) Ein sendCommand(String) auf ein Switchitem wird also nur eine Fehlermeldung schmeißen. Vermutlich ist das Item mit dem serialbinding ein StringItem, dann funktioniert das so. Allerdings hast Du auch zwei Items mit identischem Namen verwendet, das geht ebenfalls nicht

            Kommentar


              #7
              Du hast natürlich Recht. Meinte eher wenn sich der Status vom Switch ändert, ein String an das Stringitem geschickt wird.

              Sorry, war von unterwegs geschrieben.
              Zuletzt geändert von Miki84; 18.02.2016, 09:41.

              Kommentar


                #8
                Hi Miki84,

                Ich habe die Syntax siehe unten entsprechend angepasst, bekomme immer noch keinen string vom Raspberry .
                Vieleicht ist noch ein Fehler vorhanden.
                Betsen Dank vorab.

                Gruß savana

                String Steckdose "Seriell" (Steckdosenleiste) { serial="/dev/ttyS0@9600 } {sendCommand(Steckdose, "test")}

                Kommentar


                  #9
                  Welche Rechte hat denn der User, unter dem openHAB läuft?

                  Kommentar


                    #10
                    Hi udo1toni,

                    Der User pi hat volle rechte für den Ordner openHAB
                    Der User pi ist unter OS Jessy kein Administrator.

                    Gruß Savana

                    Kommentar


                      #11
                      Es geht nicht um irgendwelche Ordner Wenn Du openHAB vom User Pi ausführen lässt, muss pi, damit openHAB Zugriff auf die serielle Schnittstelle hat, zur Gruppe dialout gehören (denke an die Modems, die früher an der seriellen Schnittstelle angeschlossen waren).
                      Du musst also mit sudo adduser pi dialout diese Gruppenzugehörigkeit herstellen.

                      Kommentar


                        #12
                        Hallo udo1toni,

                        da gebe ich dir 100% recht, ich werde den User pi entsprechend der Gruppenzugehörigkeit anpassen.
                        Besten Dank

                        Gruß Savana

                        Kommentar


                          #13
                          Hi udo1toni,

                          Der user pi ist in der Gruppe dialout.
                          An der Seriellen Schnittstelle des Raspberry pi wird kein string "test" gesendet.

                          Gruß Savana

                          Kommentar


                            #14
                            Hi Miki84,

                            kann es sein das ich an einer anderen Stelle in der Konfiguration von openHAB noch etwas ändern muss ?.
                            In deiner Beschreibung #4 siehe unten, gibt es da noch etwas zu ändern, komme leider nicht weiter.

                            Besten Dank vorab

                            Gruß Savana
                            ------------------------------------------------------------------------------------------------------------------------------------------------------
                            Switch Steckdose "Seriell" (Steckdosenleiste) { serial="/dev/ttyS0@9600 }

                            Switch Steckdose "Seriell" (Steckdosenleiste)



                            Rule:

                            Code:

                            rule "Steckdose Seriell" when Item Steckdose received command then if(receivedCommand==ON){ sendCommand(Steckdose, "test") } else if(receivedCommand==OFF){ sendCommand(Steckdose, "test1") } end -----------------------------------------------------------------------------------------------------------------------------------------------------------





                            Kommentar


                              #15
                              Mal eine grundlegende Frage: Wie bearbeitest Du Deine Konfiguration?

                              in die .items-Datei gehört folgendes:
                              Code:
                              String SocketSerial { serial="/dev/ttyS0@9600[COLOR=#FF0000]"[/COLOR] }
                              Switch Steckdose "Steckdose [%s]" (Steckdosenleiste)
                              man beachte das zweite Anführungszeichen, welches in allen vorigen Postings fehlt.
                              Dies verbindet openHAB mit der ersten seriellen Schnittstelle des Rechners, auf dem openHAB läuft.

                              In einer .rule-Datei:
                              Code:
                              rule "Steckdose Seriell"
                              when
                                  Item Steckdose changed
                              then
                                  if(Steckdose.state==ON) {
                                      SocketSerial.sendCommand("test ON")
                                  }
                                  else if(Steckdose.state==OFF) {
                                      SocketSerial.sendCommand("test OFF")
                                  }
                              end
                              Die objektorientierte Schreibweise ist im Zweifel sicherer als der Aufruf der Action sendCommand(Item,value), dafür müsste in Zweifel mindestens ein
                              import org.openhab.model.script.actions.* in der .rules-Datei stehen.

                              In der .sitemap
                              Code:
                              Switch item=Steckdose
                              Weiterhin muss natürlich das serial Binding im addons-Ordner liegen (ich erwähne das nur der Vollständigkeit halber...)

                              Wenn in der UI der Switch umgelegt wird, sollte je nach neuer Schalterstellung auf der 1. seriellen Schnittstelle "test ON" bzw. "test OFF" ausgegeben werden.

                              Kommentar

                              Lädt...
                              X