Ankündigung

Einklappen
Keine Ankündigung bisher.

Anbindung OpenHab an Delphi-Programm

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

    Anbindung OpenHab an Delphi-Programm

    Hallo !
    Ich habe eine SPS-Steuerung (Klöckner-Möller PS4-341MM1) als zentrale Steuerung für mein Haus (Heizung, Rolladen, Beleuchtung, ...) im Einsatz.
    Als Visualisierung arbeitet ein mit Delphi 6.0 selbst geschiebenes Anwenderprogramm.
    Nun möchte ich gerne über mein Smartphone einige Dinge schalten (z.B. Außenbeleuchtung).
    Dazu habe ich Openhab installiert. Das Ganze funktioniert auch. Ich habe jetzt praktisch die Steuerbefehle vom Handy auf dem PC, auf dem die Visualisierung läuft.
    Da ich nicht der geborene Programmierer bin, fehlt mir jetzt allerdings ein Ansatz, wie ich die Steuerbefehle in mein Delphi-Programm übertrage.
    Ein anderer Weg wäre vielleicht, die Steuerbefehle direkt an die SPS-Steuerung zu senden....

    Hat jemand eine Idee ?
    Da ich, wie gesagt nicht der geborene Programmierer bin, würde ich mich über "verständliche" Antworten freuen.
    Danke und Gruß

    #2
    Die Frage wäre wohl im openHAB Supportforum besser aufgehoben
    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


      #3
      Du könntest im Delphi einen Webserver installieren und über das Http-Binding Daten senden/abrufen.

      Holger

      Kommentar


        #4
        Hallo Holger !

        danke für Deine Antwort.

        Hättest Du vielleicht ein Beispiel für mich, wie ich in Openhab einen Schalter
        dazu bringe, über das Http-Binding entsprechende Daten zu senden, welche ich dann in Delphi mit einem Webserver auswerten kann ?

        Gruß Bernd

        Kommentar


          #5
          Also ich schalte fast alles bei mir über das HTTP Binding.
          Wenn der Switch geschaltet wird dann wird über eine Rule z.b. ein
          sendHttpGetRequest("http://192.168.0.198/0?0?A?1")
          gesendet.
          Der Webserver dahinter (hier ein Microchip PIC) parst die Parameter, die hier nur stark verkürzt übermittelt werden und löst Schaltvorgänge aus.
          Bei dir könnte er im Programm eben eine Anzeige ändern.
          Neben den Rules gibt es die Möglichkeit in den Items direkt den Ausgabebefehl mit anzugeben, über > oder < ist es dann ein aus- bzw. eingehender Befehl.

          Ich würde dir empfehlen erstmal einen Webserver in Delphi zu erstellen, z.b. mit Indy, den über einen Browser anzusprechen und wenn das erfolgreich ist von openHAB die Befehle abzusetzen.
          Im Webserver selbst muss du dann die Parameter parsen und entsprechend darauf reagieren.

          Sicher gibt es noch andere Wege (TCP, UDP...) aber ich würde es so machen.

          PS: über REST kannst du auch über einen Webclient den aktuellen Status eines Items auslesen und setzen.


          Holger

          Kommentar


            #6
            Hallo Holger !

            ich habe den Webserver eingerichtet und kann diesen über einen Browser ansprechen (z.B. mit 192.168.178.23:3000/an).

            Soweit so gut. Jetzt versuche ich openhab beizubringen, das beim schalten eines Lichtschalters ein http-Befehl gesendet wird.

            Ich habe folgende Varianten versucht, aber leider ohne Erfolg.
            Switch Licht_gAussen_Strassenseite "Straßenseite" (gAussen, Licht) { http=">[http://192.168.178.23:3000/an]" }
            Switch Licht_gAussen_Hinten "Hinten" (gAussen, Licht) {http=">[ON:http://192.168.178.23:3000/an] >[OFF:http://192.168.178.23:3000/aus]"}
            Switch Licht_gAussen_Garage "Garage" (gAussen, Licht) { http=">[CHANGED:POST:http://192.168.178.23:3000]" }

            Muß ich das http-Binding in openhab einbinden ?
            Was mache ich falsch ?

            Gruß Bernd

            Kommentar


              #7
              Ja das HTTP Bindung brauchst du.
              Wenn es dann nicht geht versuch mal direkt in einer Rule z.b. so
              Code:
              rule "Licht Kueche"
              when Item Licht_Kueche_Spuele received command then
              
                  if(receivedCommand==ON)  sendHttpGetRequest("http://192.168.178.23:3000/an")
                  else                     sendHttpGetRequest("http://192.168.178.23:3000/aus")
              
              end
              Holger

              Kommentar


                #8
                Hallo Holger !

                Es funktioniert !!

                Da ich den aktuellen Status einiger Lampen usw. in openhab darstellen muss. möchte ich gerne auch den umgekehrten Weg gehen und von meinem Dephi-Programm http-Befehle senden, welche openhab auswerten und entsprechend zuweisen soll.

                Kannst Du mir auch dafür die benötigten Programmzeilen und Einstellungen senden ?

                Danke !

                Gru Bernd

                Kommentar


                  #9
                  Dazu brauchst du den Webclient im Indy
                  Den aktuellen Status aus openHAB kannst du dir holen mit:
                  http://192.168.0.70:81/rest/items/Li...e_Spuele/state


                  Senden aus Delphi (mit Indy):
                  du brauchst in den uses die IDHTTP.
                  Hier mal ein Beispiel für das senden von ON über einen BitBtn:

                  Code:
                  procedure TForm1.BitBtn1Click(Sender: TObject);
                  var
                    lHTTP: TIdHTTP;
                    lParamList: TStringList;
                  begin
                    lParamList := TStringList.Create;
                    lParamList.Add('ON');
                  
                    lHTTP := TIdHTTP.Create(nil);
                    try
                     lHTTP.Request.ContentType := 'text/plain';
                  
                     //IP und Port von openHAB !
                     lHTTP.post('http://192.168.0.70:81/rest/items/Licht_Couch', lParamList);
                    except
                    end;
                      FreeAndNil(lHTTP);
                      FreeAndNil(lParamList);
                  end;
                  Holger

                  Kommentar


                    #10
                    Hallo !

                    Entschuldigung aber ich muss ein paar banale Fragen stellen:

                    Wo finde ich die IP-Adresse und den Port von openhab ?
                    Wo kann ich diese ändern ?

                    Gruß Bernd

                    Kommentar


                      #11
                      Also die IP Adresse ist die von dem Gerät wo openHAB drauf läuft und der Port wird im Startscript mitgegeben.

                      Zu den anderen Problemen kann ich nichts sagen, ich verwende den Designer kaum.

                      Holger

                      Kommentar


                        #12
                        Hallo Holger !

                        entschuldige bitte, dass ich mich solange nicht gemeldet habe.
                        Hatte aber bis heute keine Zeit mich um mein Projekt zu kümmern.

                        Da meine Kenntnisse in Java sehr begrenzt sind, habe ich leider immer noch Probleme mit der Kopplung zwischen meinem Delphiprogramm und openhab.

                        Wenn ich z.B. folgenden Befehl sende:
                        lHTTP.post('http://192.168.178.23:8080/rest/items/Licht_gAussen_GarageBilk', lParamList, Output);
                        dann bekomme ich in Delphi die Fehlermeldung 400 (Bad Request)
                        und Openhab meldet:
                        17:22:33.015 WARN o.o.i.r.i.r.ItemResource[:201] - Received HTTP POST request at 'items/Licht_gAussen_GarageBilk' with an invalid status value 'ON'.

                        Vom Prinzip möchte ich folgende Funktionen realisieren:
                        1. Wenn Taste (z.B. Licht ein) betätigt wird, soll dieser Befehl zur Delphi-Visualisierung (das funktioniert auch soweit)
                        2. Von der Visualisierung nach OpenHab senden, das z.B. über die Visualisierung eine Lampe geschaltet wurde.
                        3. Von der Visualisierung den aktuellen Status eines Schalters abfragen.
                        4. Openhab mitteilen, ob die Rolladen geschlossen oder offen sind.
                        5. ...

                        Nun meine Frage:
                        Könntest Du mir ein Projekt (oder Auszüge davon) zur Verfügung stellen, aus dem für mich Laien alle wichtigen Koppelbefehle (auf der Delphi und auf der OpenHab Seite) ersichtlich sind ?

                        Ich wäre Dir wirklich sehr dankbar !!

                        Gruß
                        Bernd

                        Kommentar

                        Lädt...
                        X