1-Wire Plugin

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Peter B
    MS Profi
    • 29.08.2015
    • 537

    #31
    Das hab Ich bis jetzt und auch schon viel experimentiert aber Ich bekomme es nicht hin :-(

    Code:
    #!/bin/bash
    
    
    data=/opt/loxberry/data/plugins/1wire
    home=/opt/loxberry/webfrontend/cgi/plugins/1wire
    
    #while [ true ] ; do
    
    # Erlaubte I-Buttons einlesen und in Aray schreiben
    
    Datei=$( cat $home/berechtigt.conf)
    ibuttons=($Datei)
    
    echo
    echo "berechtigte I-Buttons aus Datei" ${ibuttons[@]}
    echo
    #---------------------------------------------------------------------------
    
    
    #Auslesen der Ibuttons vom Bus und in ein Array schreiben
    
    Bus=$(exec owdir -s localhost:4304 | grep /01 | sed "s/\/01/01/")
    bus=($Bus)
    
    echo
    echo "I-Buttons am Bus" ${bus[@]}
    echo
    #-----------------------------------------------------------------------------
    
    
    # Zeigt I Buttons an Die berechtigt sind aber am Bus fehlen 
    
    Busweg=()
     for i in "${ibuttons[@]}"; do
         skip=
             for j in "${bsu[@]}"; do
             [[ $i == $j ]] && { skip=1; break; }
         done
       [[ -n $skip ]] || Busweg+=("$i")
    done
    
    echo
    echo "Berechtigte die am Bus fehlen" ${Busweg[@]}
    echo
    #-----------------------------------------------------------------------------
    
    
    # Zeigt I Buttons an die am Bus sind aber nicht berechtigt
    
    Datei=()
     for i in "${bus[@]}"; do
         skip=
             for j in "${ibuttons[@]}"; do
             [[ $i == $j ]] && { skip=1; break; }
         done
       [[ -n $skip ]] || Datei+=("$i")
    done
    
    echo
    echo "Nicht berechtigte I-Buttons die am Bus sind" ${Datei[@]}
    echo
    #---------------------------------------------------------------------------------
    
    #sleep 1
    #done

    Kommentar

    • svethi
      Lebende Foren Legende
      • 25.08.2015
      • 6292

      #32
      Muss das unbedingt alles shellscript sein? Fühle mich in anderen Sprachen wohler ;-)

      Reicht mir immer schon wenn Prof.Mobilux mit seinem Perl daherkommt 😂
      Zuletzt geändert von svethi; 12.11.2017, 19:56.
      Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

      Kommentar

      • Peter B
        MS Profi
        • 29.08.2015
        • 537

        #33
        welche schlagst vor?

        Kommentar

        • svethi
          Lebende Foren Legende
          • 25.08.2015
          • 6292

          #34
          Ich habe gestern Abend mal kurz reingesehen. Das muss auch mit bash gehen ;-)
          Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

          Kommentar

          • Peter B
            MS Profi
            • 29.08.2015
            • 537

            #35
            Das geht ganz bestimmt mit Bash ;-)

            Kommentar

            • Peter B
              MS Profi
              • 29.08.2015
              • 537

              #36
              Und es müsste auch so sein das die Udp Übertragung ein anderes Script macht, Im selben Script hält es zu lange auf (ca. 5 Sekunden).

              Das Sende Script müsste dann sofort die Übernommenen Änderungen senden und dann ev alle 10-20 Sekunden Widerholen zur Sicherheit

              Christian Fenzl kann man an das Anyscript auch vom Loxberry Daten übergeben das die dann per UDP an den MS sendet?

              das Webinterface zur Eingabe der berechtigten Seriennummern hab Ich schon fertig.
              Zuletzt geändert von Peter B; 13.11.2017, 10:39.

              Kommentar

              • svethi
                Lebende Foren Legende
                • 25.08.2015
                • 6292

                #37
                Wie oft willst Du denn die Schleife laufen lassen? Ich dachte, es gibt eher einen Event wenn was passiert.
                Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

                Kommentar

                • Peter B
                  MS Profi
                  • 29.08.2015
                  • 537

                  #38
                  dauernd Ich wüsste nicht wo Ich ein Event herbekomme

                  Kommentar

                  • Peter B
                    MS Profi
                    • 29.08.2015
                    • 537

                    #39
                    Also Anwesend/Abwesend hätte Ich mal so gelöst da bekomme Ich einmal die kommenden oder gehenden Seriennummern an den MS gesendet

                    Code:
                    # Anwesend Abwesend
                    #------------------------------------------------------------------------------------
                    # I-Buttons am Bus und berechtigt
                    
                    anwesend=(`echo ${bus[@]} ${ibuttons[@]} | tr ' ' '\n' | sort | uniq -D | uniq`)
                    
                    echo "am Bus und berechtigt" ${anwesend[@]}
                    
                    # Gehend
                    Gehend=()
                     for i in "${anwesend1[@]}"; do
                         skip=
                             for j in "${anwesend[@]}"; do
                             [[ $i == $j ]] && { skip=1; break; }
                         done
                       [[ -n $skip ]] || Gehend+=("$i")
                    done
                    
                    if [ ${#anwesend1[@]} != ${#anwesend[@]} ]; then
                    echo -n gehend ${Gehend[@]}  | nc -4u -q1 ip 3000
                    fi
                    
                    anwesend1=(`echo ${bus[@]} ${ibuttons[@]} | tr ' ' '\n' | sort | uniq -D | uniq`)
                    #echo "Gehend" ${Gehend[@]}
                    
                    anwesend=(`echo ${bus[@]} ${ibuttons[@]} | tr ' ' '\n' | sort | uniq -D | uniq`)
                    # Kommend
                    Kommend=()
                     for i in "${anwesend[@]}"; do
                         skip=
                             for j in "${anwesend2[@]}"; do
                             [[ $i == $j ]] && { skip=1; break; }
                         done
                       [[ -n $skip ]] || Kommend+=("$i")
                    done
                    
                    if [ ${#anwesend2[@]} != ${#anwesend[@]} ]; then
                    echo -n kommend ${Kommend[@]}  | nc -4u -q1 ip 3000
                    fi
                    
                    anwesend2=(`echo ${bus[@]} ${ibuttons[@]} | tr ' ' '\n' | sort | uniq -D | uniq`)
                    #echo "Kommend" ${Kommend[@]}
                    #---------------------------------------------------------------------------------

                    Kommentar

                    • hismastersvoice
                      Supermoderator
                      • 25.08.2015
                      • 7190

                      #40
                      Ich finde die Logik gehört nicht in den Loxberry.
                      Wenn ich am Bus erlaubt sehe gehe ich davon aus das ich die erlaubten einmal im Loxberry und später nochmal in der Config schreiben muss.

                      Mein Ansatz war immer das Veränderungen an den MS gesendet werden und die Logik ob OK ist nicht macht dann die Config/MS.

                      Es geht ja einmal darum den iButton zu erkennen und bei allem anderen wird ein Scan aktiv ausgelöst.

                      Dann müsstest mir per Listener die Veränderungen aufnehmen und senden. Oder verstehe ich das falsch?

                      Leider kann ich erst nächste Woche aktiv helfen, diese Woche einfach zu viele Termine.

                      Bash gefällt mir auch gut, jeder hat halt seine Favs.
                      Kein Support per PN!

                      Kommentar

                      • Peter B
                        MS Profi
                        • 29.08.2015
                        • 537

                        #41
                        Ja manchmal kann man es schon kompliziert machen ;-)

                        Hmmm Ich Frage in einer Schleife den Bus dauernd ab, hab jetzt keine Ahnung wo ich ein auslösendes Signal herbekommen könnte

                        so jetzt aber ( mit einem kleinen Fehler: bei Änderung am Bus gibt er zusätzlich ein leeres kommend/gehend per udp aus) aber sonst funktioniert das so *Hurra*

                        Code:
                        #!/bin/bash
                        
                        while [ true ] ; do
                        
                        # I-Buttons kommend/gehend
                        #------------------------------------------------------------------------------------
                        
                        #Funktion Gehend und Ausgabe per UDP bei Änderung
                        
                        
                        Bus=$(exec owdir -s localhost:4304 | grep /01 | sed "s/\/01/01/")
                        bus=($Bus)
                        echo "I-Buttons am Bus" ${bus[@]}
                        
                        Gehend=()
                         for i in "${bus1[@]}"; do
                             skip=
                                 for j in "${bus[@]}"; do
                                 [[ $i == $j ]] && { skip=1; break; }
                             done
                           [[ -n $skip ]] || Gehend+=("$i")
                        done
                        
                        # Vergleich und Ausgabe
                        
                        if [ ${#bus1[@]} != ${#bus[@]} ]; then
                        echo -n gehend ${Gehend[@]}  | nc -4u -q1 10.0.0.230 3000
                        fi
                        echo "gehend" ${Gehend[@]}
                        
                        # nochmal auslesen vom Bus
                        
                        Bus1=$(exec owdir -s localhost:4304 | grep /01 | sed "s/\/01/01/")
                        bus1=($Bus1)
                        echo
                        echo "bus1" ${bus1[@]}
                        echo
                        
                        
                        # Funktion Kommend und Ausgabe per UDP bei Änderung
                        
                        
                        #auslesen vom Bus
                        
                        Bus=$(exec owdir -s localhost:4304 | grep /01 | sed "s/\/01/01/")
                        bus=($Bus)
                        echo -n bus ${bus[@]}
                        
                        Kommend=()
                         for i in "${bus[@]}"; do
                             skip=
                                 for j in "${bus2[@]}"; do
                                 [[ $i == $j ]] && { skip=1; break; }
                             done
                           [[ -n $skip ]] || Kommend+=("$i")
                        done
                        
                        # Vergleich und Ausgabe
                        
                        if [ ${#bus2[@]} != ${#bus[@]} ]; then
                        echo -n kommend ${Kommend[@]}  | nc -4u -q1 10.0.0.230 3000
                        fi
                        # nochmal auslesen vom Bus
                        
                        Bus2=$(exec owdir -s localhost:4304 | grep /01 | sed "s/\/01/01/")
                        bus2=($Bus2)
                        echo
                        #echo "Kommend" ${Kommend[@]}
                        echo
                        
                        #sleep 5
                        done

                        Kommentar

                        • Peter B
                          MS Profi
                          • 29.08.2015
                          • 537

                          #42
                          Oida !!!!!!!

                          wie bekomme Ich einen Digitalen Eingang "Ein" am MS hin bei folgenden Daten kommend 01.1111111 01.22222222 Ich möchte Ein wenn kommend und 01.2222222 vorkommt egal was sonst noch wo steht!


                          Kommentar

                          • Peter B
                            MS Profi
                            • 29.08.2015
                            • 537

                            #43
                            Also die Erkennung ist sehr sehr schnell (viel schneller als bei Loxone) zumindest bei mir.

                            hab jetzt noch den Gpio 17 dazu programmiert der gibt einen Impuls für eine Led aus bei Erkennung

                            Kommentar

                            • svethi
                              Lebende Foren Legende
                              • 25.08.2015
                              • 6292

                              #44
                              Ich würde dahinter noch ein ;0 oder ;1 machen. Ein digitaler Eingang macht doch nur einen Impuls wenn ich das richtig verstanden habe. Du müsstest also auf analog stellen und dann kommend\i01.22222222\i;\v verwenden. Dann bekommste Deinen Wert
                              Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

                              Kommentar

                              • Peter B
                                MS Profi
                                • 29.08.2015
                                • 537

                                #45
                                Ja Ich weiß das der nur einen Impuls macht.....Die Erkennung ist ja nur nötig wenn er mehrer Seriennummern zugleich sendet, wenn jede einzeln kommt geht es eh. Ich kann dahinter zwar 1 oder 0 dazu schreiben aber das macht er nur bei der letzten Nummer

                                das kommend\i01.22222222\i;\v funktioniert so auch nicht da bekommst max 1,222 herraus, so gehts zumindest ab dem Punkt kommend\i01.22222222\i;\.\.\.\v
                                Zuletzt geändert von Peter B; 13.11.2017, 18:12.

                                Kommentar

                                Lädt...