Ankündigung

Einklappen
Keine Ankündigung bisher.

Hilfe bei NW-Plugin Austausch Items zwischen zwei Raspberry

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

    Hilfe bei NW-Plugin Austausch Items zwischen zwei Raspberry

    Hallo,

    ich brauche Hilfe für das Netzwerkplugin.

    Irgendwie verstehe ich das noch nicht so ganz.

    Zu meinem Aufbau:

    Ich habe zwei Raspberrys der eine hat die IP: 192.168.178. 70 und der andere hat die 192.168.178.71.

    An dem Raspberry 71 hängt eine Vallox Lüftungsanlage.

    Nun möchte ich gerne die Werte auf der Visu des Rasp. 70 anzeigen.

    Mein Vorgehen:

    Ich habe auf beiden das NW-Plugin aktiviert:

    Code:
    # plugin.conf Rasp 71
    
    [nw]
        class_name = Network
        class_path = plugins.network
        ip = 192.168.178.71
        # port = 2727
        tcp = yes
        tcp_acl= 192.168.178.70
        udp = yes
        udp_acl= 192.168.178.70
    
    [knx]
       class_name = KNX
       class_path = plugins.knx
    #   host = 192.168.178.71
    #   port = 6720
    #   send_time = 600 # update date/time every 600 seconds, default none
    #   time_ga = 1/1/1 # default none
    #   date_ga = 1/1/2 # default none
    
    [visu]
        class_name = WebSocket
        class_path = plugins.visu
        ip= 192.168.178.71
        port=2424
    #   acl = rw
        smartvisu_dir = /var/www/smartvisu
    
    [helios]
        class_name = Helios
        class_path = plugins.helios
        tty = /dev/ttyUSB0
        cycle = 60 # default 300 seconds
        
    [uzsu]
       class_name = UZSU
       class_path = plugins.uzsu
    
    [cli]
        class_name = CLI
        class_path = plugins.cli
        ip = 192.168.178.71
        update = True
    
    [sql]
        class_name = SQL
        class_path = plugins.sqlite
    
    #[ow]
    #    class_name = OneWire
    #    class_path = plugins.onewire
    #    host = 127.0.0.1
    #    port = 4304
    Code:
    # plugin.conf Rasp 70
    
    [nw]
        class_name = Network
        class_path = plugins.network
        ip = 192.168.178.70
        # port = 2727
        tcp = yes
        tcp_acl= 192.168.178.71
        udp = yes
        udp_acl= 192.168.178.71
    
    [knx]
       class_name = KNX
       class_path = plugins.knx
    #   host = 192.168.178.70
    #   port = 6720
    #   send_time = 600 # update date/time every 600 seconds, default none
    #   time_ga = 1/1/1 # default none
    #   date_ga = 1/1/2 # default none
    
    [visu]
        class_name = WebSocket
        class_path = plugins.visu
        ip= 192.168.178.70
        port=2424
    #   acl = rw
        smartvisu_dir = /var/www/smartvisu
    
    [helios]
        class_name = Helios
        class_path = plugins.helios
        tty = /dev/ttyUSB0
        cycle = 60 # default 300 seconds
        
    [uzsu]
       class_name = UZSU
       class_path = plugins.uzsu
    
    [cli]
        class_name = CLI
        class_path = plugins.cli
        ip = 192.168.178.70
        update = True
    
    [sql]
        class_name = SQL
        class_path = plugins.sqlite
    
    #[ow]
    #    class_name = OneWire
    #    class_path = plugins.onewire
    #    host = 127.0.0.1
    #    port = 4304
    Die Items sehen dann so aus:

    Code:
    # smarthome/items/helios.conf Rasp 70
    
    [ventilation]
    
        
    
        [[power_state]]
            type = num
            helios_var = power_state
            visu_acl = rw
            nw = yes
            nw_tcp_listen = 7777
            nw_udp_send = 192.168.178.71:7777
    
        [[exhaust_temp]]
            name = DIN/EN: Fortluft, exhaust air, braun; Luft nach draussen
            type = num
            helios_var = exhaust_temp
            visu_acl = rw
            nw = yes
            nw_tcp_listen = 7778
    Code:
    # smarthome/items/helios.conf Rasp 71
    
    [ventilation]
    
        
    
        [[power_state]]
            type = num
            helios_var = power_state
            visu_acl = rw
            nw = yes
            nw_tcp_listen = 7777
            nw_udp_send = 192.168.178.70:7777
    
        [[exhaust_temp]]
            name = DIN/EN: Fortluft, exhaust air, braun; Luft nach draussen
            type = num
            helios_var = exhaust_temp
            visu_acl = rw
            nw = yes
            nw_tcp_listen = 7778
            nw_udp_send = 192.168.178.70:7778
    Sehe ich das Richtig, dass ich für jedes Item einen anderen Port brauche?

    Was muss ich weiterhin machen, denn so funkioniert es leider nicht.

    Was mache ich Falsch?

    Gruß und danke Manuel

    #2
    Hallo Manuel,
    grundsätzlich brauchst Du nicht unbedingt bei jedem Item einen eigenen Port.
    Du könntest jeweils auf beiden Raspis in der plugin.conf die "port" Variable setzen und entsprechend nw_tcp_send in den Items verwenden.

    Allerdings verwendest Du einerseits "nw_tcp_listen" und dann wieder "nw_udp_send". Das wird so nicht funktionieren.
    Probier mal anstelle von "nw_udp_send" die TCP-Variante "nw_tcp_send".

    Gruß
    Matthias

    Kommentar


      #3
      Hallo nextwerk, danke für deine Hilfe. Ich werde das gleich mal probieren. Woran erkennt das Plugin zu welchem Item die Werte gehören?

      Gruß Manuel

      Kommentar


        #4
        Hi Manuel,
        habe mir das gerade nochmal angesehen. Wenn Du von einer anderen sh.py Instanz ohne eine Logik ein Item in einer anderen sh.py Instanz updaten willst, musst Du dedizierte Ports in den Items setzen. Sonst geht es meinem Verständnis nach nicht.

        Prinzipiell kannst Du ja mit
        Code:
         
         echo "item|ventilation.exhaust_temp|55.4" | nc -uw 1 192.168.178.70 7778
        Items setzen. So auch aus einer Logik heraus..

        Gruß
        Matthias

        Kommentar


          #5
          Hallo Matthias,

          ich habe das nun so gemacht:

          Item Rasp 71:

          Code:
              [[outside_temp]]
                  name = DIN/EN: Außenluft, outdoor air / ODA, grün; Luft von draussen
                  type = num
                  helios_var = outside_temp
                  visu_acl = r
                  nw = yes
                  nw_tcp_send = 192.168.8.70:7778
          Rasp 70 (Empfänger)

          Code:
              [[outside_temp]]
                  name = DIN/EN: Außenluft, outdoor air / ODA, grün; Luft von draussen
                  type = num
                  helios_var = outside_temp
                  visu_acl = r
                  visu_acl = r        
                  knx_dpt = 9
                  knx_listen = 0/6/6
                  knx_send = 0/6/6
                  nw = yes
                  nw_tcp_listen = 192.168.178.71:7778
          Plugin.conf : Empfänger:

          Code:
          [nw]
              class_name = Network
              class_path = plugins.network
              ip = 192.168.178.70
              #port = 2727
              tcp = yes
              tcp_acl= 192.168.178.71
              #udp = no
              #udp_acl= 192.168.178.71
          Plugin.conf Sender:

          Code:
          [nw]
              class_name = Network
              class_path = plugins.network
              ip = 192.168.178.71
              #port = 2727
              tcp = yes
              tcp_acl= 192.168.178.70
              #udp = no
              #udp_acl= 192.168.178.70
          Meinst du das so?

          Gruß Manuel
          Zuletzt geändert von manu241; 29.05.2016, 21:14.

          Kommentar


            #6
            Hi Manuel,
            auf der Sender-Seite musst Du noch die Empfänger IP Adresse korrigieren.
            Code:
             
                     nw_tcp_send = 192.168.[B][COLOR=#FF0000]17[/COLOR][/B]8.70:7778
            Und auf der Empfänger-Seite musst Du ebenfalls noch die IP-Adresse ändern, dann sollte es gehen.
            Code:
                     nw_tcp_listen = 192.168.178.71:7778
            muss heißen:
            Code:
                     nw_tcp_listen = 192.168.178.7[B][COLOR=#FF0000]0[/COLOR][/B]:7778
            Gruß
            Matthias

            Kommentar


              #7
              Heho!
              Hat das letztlich geklappt?
              Ich bekomm's bei mir leider nicht gebacken. Ich möchte eine 2-Wege Sync von mehreren Items über 2 smarthome.py herbekommen. Derzeit löse ich das über Fantasie Gruppenadressen im KNX Plugin - funktioniert auch. Aber das Netzwerkplugin hab ich nicht sinnvoll zum Funktionieren gebracht.

              Zwar wird laut Log ein UDP Paket gesendet, aber mir ist nicht klar, wie ich hier das Item dazu bringen, sowohl Item als auch Wert zu schicken. Dass dies über eine Logik ginge, ist mir klar, aber wie macht man das über das Item direkt?

              Ankommen tun die Befehle auch, habe das mit netcat getestet, das klappt auch..

              Kommentar


                #8
                Hi Onkelandy,

                ich glaube nicht, dass Du das direkt machen kannst, ich glaube, dafür ist das nw plugin nicht gemacht.
                Ich würde das mit einer Logik machen...

                Gruß ,Waldemar
                OpenKNX www.openknx.de

                Kommentar


                  #9
                  Hallo,

                  ich habe es bis jetzt nicht geschafft die Items so auszutauschen. Aktuell hatte ich aber noch keine Zeit mich damit wieder zu beschäftigen.

                  Gruß Manuel

                  Kommentar


                    #10
                    Alles klar.. Dann wird man wohl ne Logik bauen müssen, um das Item richtig zu senden.. Ich bleib in dem Fall bei der KNX Lösung..

                    Kommentar


                      #11
                      Hallo Waldemar,

                      wie müsste die Logik den aussehen, damit ich den Wert senden könnte.

                      Ich habe es z.B. versucht mit "sh.nw.udp('192.168.0.5', 9999, 'sh.ventilation.outside_temp()')" damit geht es aber auch nicht.

                      Gruß und danke

                      Manuel

                      Kommentar


                        #12
                        Hi Manuel,

                        Code:
                        #!/usr/bin/env python
                        #
                        # Realisiert einen generischen UDP Sender.
                        # 
                        logger.info("udpSend")
                        #print(trigger)
                        # logik nur, wenn von Item getriggert
                        if trigger['by'] == 'Item':
                            lItemName = trigger['source']
                            lItem = sh.return_item(lItemName)
                            sh.udp('192.168.0.5', 9999, 'item|{0}|{1}'.format(lItemName, lItem()))
                        Ungefähr so sollte es gehen (hab ich nicht getestet), aber nichts für ungut: Du solltest die Doku zum nw-Plugin lesen und auch ne Ahnung von python haben, bevor Du so komplexe Sachen wie die Synchronisation von 2 sh.py-Instanzen angehst. Eigentlich ist das nichts, was man mit Copy&Paste hin bekommt - zumindest nicht zuverlässig.

                        Viel Erfolg,
                        Waldemar

                        OpenKNX www.openknx.de

                        Kommentar


                          #13
                          Hallo Waldemar,

                          könntest du mir eventuell erklären, wie die Logik funktionert? Ich habe Diese noch nicht getestet würde aber im Vorfeld verstehen wollen wie Sie funktioniert.

                          Was mir aufgefallen ist, dass du schreibst
                          Code:
                           
                           sh.udp('192.168.0.5', 9999, 'item|{0}|{1}'.format(lItemName, lItem()))
                          Müsste das eventuell nicht
                          Code:
                           sh.[B]nw.[/B]udp(...
                          heißen? Was bedeutet der Abschnitt nach dem dem Port ?
                          Code:
                          item|{0}|{1}'.format(lItemName, lItem()))[FONT=arial][/FONT]
                          lItemName --> bedeutet doch bestimmt die ID des Items? lItem() --> Das ist das Item selber mit dem Wert, der durch die Klammern dargestellt wird. Für was steht:
                          Code:
                          item|{0}|{1}'.format [FONT=arial]?[/FONT]
                          Könnte ich das im cli so testen ?
                          Code:
                          sh.nw.udp('192.168.178.70', 8020, 'item|{0}|{1}'.format(lItemName, ventilation.outside_temp()))[FONT=arial] [/FONT]
                          Danke für deine Hilfe und deine Mühe. Gruß und danke Manuel

                          Kommentar


                            #14
                            Hi Manuel,

                            ja, Du hast recht, das nw habe ich vergessen (falls bei Dir das network-Plugin nw heißt).
                            Die Idee ist, zur Synchronisation den generischen Listener des network-Plugin zu nehmen (http://mknx.github.io/smarthome/plugins/network.html). Ich gehe davon aus, dass die Items auf beiden Seiten gleich heißen. Mit
                            Code:
                            lItemName = trigger['source']
                            wird der Name des sendenden Items bestimmt, mit
                            Code:
                            lItem = sh.return_item(lItemName)
                            das Item selbst. Der generische Listener hört auf Kommandos der Form "item|<item name>|<item wert>", genau so ein Kommando schicke ich.

                            Dein Test müsste lauten:
                            Code:
                            sh.nw.udp('192.168.178.70', 8020, 'item|{0}|{1}'.format('ventilation.outside_temp', ventilation.outside_temp()))
                            Dies schickt per UDP eine Nachricht "item|ventilation.outside_temp|23". Im Ziel muss ventilation.outside_temp das nw-Attribut gesetzt haben.

                            Gruß, Waldemar
                            OpenKNX www.openknx.de

                            Kommentar


                              #15
                              Hallo Waldemar,

                              ich habe das gerade getestet. Jedoch hat es nicht geklappt.
                              Mit
                              Code:
                              sh.nw.udp('192.168.178.70', 8020, '26')
                              habe ich dem Item auf dem Rasp mit der IP 192.168.178.70 dem Item ventilation.outside_temp den Wert 26 vorgegeben.
                              Somit bin ich mir sicher, dass das Item auf das Netzwerk-Plugin hört.

                              Bei deinem Beispiel habe ich folgendes geändert:

                              Code:
                               
                               sh.nw.udp('192.168.178.70', 8020, 'item|{0}|{1}'.format('[B]sh.[/B]ventilation.outside_temp', [B]sh.[/B]ventilation.outside_temp()))
                              Weil sonst im Cli die Meldung
                              Code:
                              >>> sh.nw.udp('192.168.178.70', 8020, 'item|{0}|{1}'.format('sh.ventilation.outside_temp', ventilation.outside_temp()))
                              Traceback (most recent call last):
                                File "<console>", line 1, in <module>
                              NameError: name 'ventilation' is not defined
                              kam.

                              Jedoch hat dieses auch nicht zum Erfolg geführt.

                              Was könnte ich noch testen?

                              Gruß Manuel

                              Kommentar

                              Lädt...
                              X