Ankündigung

Einklappen
Keine Ankündigung bisher.

Wetterstation an sh.py anbinden

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

    Wetterstation an sh.py anbinden

    Hallo Zusammen, ich würde gern meine ELV Wetterstation in Smarthome integrieren.
    Hardware steht. Per USB Adapter bekomme ich ohne Aufforderung in unregelmäßigen Zeiten Stringtelegramme wo die Wetterdaten drin stehen. Ein Pollen fällt da schon mal aus.
    Gibt es eine Möglichkeit, dass ein Plugin ständig läuft und wenn neue Daten vorhanden sind asynchron die Daten an sh.py senden. Die andere Richtung wird nicht benötigt.

    Grüße
    Stromie

    #2
    Wetterstation an sh.py anbinden

    Hallo Ronny,

    klar ist das möglich. Ist ja das Kernfeature.
    Die Frage ist nur welche Schnittstelle verwendet wird, seriell? Und welches Protokoll gesprochen wird also wie die Werte verpackt werden.

    Bis bald

    Marcus

    Kommentar


      #3
      Hallo Marcus

      du bist aber schnell, was arbeitest du eigentlich, das du um diese Zeit online bist ?

      Zur Schnittstelle: USB, ttyBUS1.
      Protokoll: fester String, Messwerte mit ";" getrennt, (Logview format)
      Über die Schnittstelle kommen glaubig die Hex Werte

      Grüße Ronny

      Kommentar


        #4
        Hallo Ronny,

        Zitat von stromie Beitrag anzeigen
        du bist aber schnell, was arbeitest du eigentlich, das du um diese Zeit online bist ?
        ich habe nur ein Smartphone, ist eine tolle Sache. ;-)


        Zitat von stromie Beitrag anzeigen
        Zur Schnittstelle: USB, ttyBUS1.
        Protokoll: fester String, Messwerte mit ";" getrennt, (Logview format)
        Über die Schnittstelle kommen glaubig die Hex Werte
        na das sieht doch nach einem schönen Plugin für einen Einsteiger aus. Du kannst Dir mal das DMX-Plugin ansehen, das verwendet ebenfalls eine serielle Schnittstelle (allerdings schreibend).

        Bei Fragen kannst Du Dich ja noch mal melden.

        Bis bald

        Marcus

        Kommentar


          #5
          Hallo Marcus

          Danke, das habe schon gemacht. Leider hilft das zum Verständnis nicht wirklich weiter. Das wir ja aktiv durch die Visu aufgerufen und nur dann wenn einer ein Item ändert. Richtig ?
          Wie würde aber mein Wetter-Plugin als Endlosschleife laufen ?
          While (1) ....
          Es fehlt halt eine Anleitung für Programmierer.

          in c# würde ich das in einen eigene Thread laufen lassen und per events die Kommunikation zwischen den Threads machen.

          gibt es eine Beispiel Plugin wo while(1) verwendet wurde und in der schleife Daten mit sh.py ausgetauscht werden?
          Oder Besser while self.alive ?

          Grüße Ronny

          Kommentar


            #6
            Hallo Ronny,

            um das ganze Threadhandling kümmert sich SH.py. Du kannst Deine Schleife (while True einfach in der run Methode (https://github.com/mknx/smarthome/bl..._init__.py#L32) laufen lassen.

            In __init__ öffnest Du die Verbindung zu der seriellen Schnittstelle.

            Bezüglich der Entwickler-Doku hast Du natürlich Recht. Das Problem ist die liebe Zeit und die Entwickler-Doku hat momentan ehrlich gesagt nicht so den Vorrang. Wenn Du magst kannst Du hier Abhilfe schaffen und parallel zur Einarbeitung dokumentieren. Das ist eh besser, wenn man das mit ein bisschen Abstand betrachtet.

            Eine kleine Hilfestellung findest Du auch unter:
            https://github.com/mknx/smarthome/bl.../dev/README.md

            Bis bald

            Marcus

            Kommentar


              #7
              Danke, ich werde da mal sehen.

              Grüße Stromie

              Kommentar


                #8
                Hallo Ronny,

                kleiner Nachtrag: https://github.com/mknx/smarthome/bl..._init__.py#L38

                verwendet den gewünschten while-Loop.
                Mit SH.py tauscht man sich aus, in dem man items liest/setzt.

                Das Item-Update findet hier, ein bisschen versteckt, statt: https://github.com/mknx/smarthome/bl...init__.py#L199

                Bis bald

                Marcus

                Kommentar


                  #9
                  Danke Marcus

                  das ist doch mal ein Beispiel was mich weiter bringt.
                  So werde mal anfrangen zu Programmieren.

                  habs gleich mal umgesetzt mit der While und mir ein Debug Log geschrieben, es geht .
                  Welche sleep Zeit würdest du so vorschlagen.

                  Grüße Ronny

                  Kommentar


                    #10
                    Hallo Ronny,

                    Zitat von stromie Beitrag anzeigen
                    Welche sleep Zeit würdest du so vorschlagen.
                    Wenige Sekunden. Das sleep hält das runterfahren von SmartHome.py auf.
                    Aber schreibe erst einmal das Plugin, das können wir später diesbezüglich optimieren.

                    Bis bald

                    Marcus

                    P.S. und bitte ändere Threads inhaltlich nicht nachträglich ab. Ich habe den letzten Post gelesen und 'abgelegt'. Beim nochmaligen lesen habe ich die - anscheinend neue - Frage gelesen.

                    Kommentar


                      #11
                      Sorry kommt nicht wieder vor.

                      Hab mal den Wetterlogger mal an den Pi angesteckt und auf der Konsole die Schnittstelle ausgelesen. Geht super. Musste jedoch den Logger einen besseren Empfänger verpassen. Bei dem alten kamen manche Sensoren nur sporadisch.

                      Werde mich in den nächsten Tagen an das Plugin wagen.

                      Grüße Stromie

                      Kommentar


                        #12
                        Hallo Stromie,

                        hier mal ein kleines Beispiel (von meiner Heizungs Anbindung).
                        Vielleicht hilft es dir als Anfangspunkt....

                        PHP-Code:
                        #!/usr/bin/env python
                        # vim: set encoding=utf-8 tabstop=4 softtabstop=4 shiftwidth=4 expandtab
                        #########################################################################
                        # Copyright 2013 KNX-User-Forum e.V.            https://knx-user-forum.de/
                        #########################################################################
                        #  This file is part of SmartHome.py.   http://smarthome.sourceforge.net/
                        #
                        #  SmartHome.py is free software: you can redistribute it and/or modify
                        #  it under the terms of the GNU General Public License as published by
                        #  the Free Software Foundation, either version 3 of the License, or
                        #  (at your option) any later version.
                        #
                        #  SmartHome.py is distributed in the hope that it will be useful,
                        #  but WITHOUT ANY WARRANTY; without even the implied warranty of
                        #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                        #  GNU General Public License for more details.
                        #
                        #  You should have received a copy of the GNU General Public License
                        #  along with SmartHome.py. If not, see <http://www.gnu.org/licenses/>.
                        #########################################################################
                        import re
                        import logging
                        import threading
                        import serial
                        import binascii


                        logger 
                        logging.getLogger('')

                        class 
                        EMS():

                            
                        def _process_data(self,p_data):
                                try:
                                    
                        logger.debug(binascii.b2a_hex(p_data))
                                
                        # parse data
                                #
                                # set value
                                #item = self.sh.return_item(path)
                                #item(wert, 'EMS')
                                
                        except Exceptionex:
                                    
                        logger.exception("Something awful happened! (_process_data)" str(ex))


                        ##########################  Plugin Stuff   #############################


                            
                        def __init__(selfsmarthome,tty):
                                
                        self.sh smarthome
                                self
                        ._is_connected False
                                
                        #self._lock = threading.Lock()
                                
                        try:
                                    
                        logger.info("EMS: connected to: " tty)
                                    
                        self._port serial.Serial(tty9600timeout=1)
                                
                        except:
                                    
                        logger.error("Could not open %s." tty)
                                    return
                                else:
                                    
                                    
                        self._is_connected True

                            def run
                        (self):
                                
                        self.alive True
                                state 
                        0
                                sync 
                        0
                                data 
                        ""
                                
                        0
                                
                        try:
                                    while 
                        self.alive:
                                        if 
                        self._port.isOpen() and self.alive:
                                            
                        read self._port.read()
                                            if 
                        re.search("\r\n"data):       
                                                    
                        self._process_data(data)
                                                    
                                            else:
                                                
                        data += read
                                        
                        else:
                                            
                        logger.errortty " is not open!")
                                
                        except Exceptionex:
                                    
                        logger.error("Something awful happened! " str(ex))


                            
                        def stop(self):
                                
                        logger.debug("EMS end connection....")
                                
                        self.alive False
                                self
                        ._port.close()
                                


                            
                        def parse_item(selfitem):
                                if 
                        'plugin_attr' in item.conf:
                                    
                        logger.debug("parse item: {0}".format(item))
                                    return 
                        self.update_item
                                
                        else:
                                    return 
                        None


                            def parse_logic
                        (selflogic):
                                if 
                        'xxx' in logic.conf:
                                    
                        # self.function(logic['name'])
                                    
                        pass


                            def update_item
                        (selfitemcaller=Nonesource=None):
                                if 
                        caller != 'plugin':
                                    
                        logger.info("update item: {0}".format(item.id()))


                        if 
                        __name__ == '__main__':
                            
                        logging.basicConfig(level=logging.DEBUG)
                            
                        myplugin EMS('smarthome-dummy')
                            
                        myplugin.run() 

                        Kommentar


                          #13
                          Danke

                          werde ich als Beispiel nehmen. Leider gibt es in meien Zeitplan immer
                          unerwartete events (die Arbeit saugt ein aus)
                          Damit verzögert sich die Programmierung.

                          Grüße Stromie

                          Kommentar


                            #14
                            Hi Stromie,

                            für welche ELV Wetterstation ist dein PlugIn denn gedacht?

                            MfG

                            Mode

                            Kommentar


                              #15
                              Zitat von mode Beitrag anzeigen
                              Hi Stromie,

                              für welche ELV Wetterstation ist dein PlugIn denn gedacht?

                              MfG

                              Mode
                              ist für den USB Empfänger usb_wde1. Damit kann man folgende Sensoren empfangen.

                              Funk-Kombisensor KS 200/300
                              Funk-Temperatursensor S 300 IA
                              Funk-Temperatur- und Luftfeuchtesensor S 300 TH und ASH 220 Poolsensor PS 50

                              Hab den Empfänger noch etwas umgebaut läuft echt gut. Das Plugin macht aber noch etwas Probleme.

                              Grüße Ronny

                              Kommentar

                              Lädt...
                              X