#!/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
1-Wire Plugin
Einklappen
X
-
Das hab Ich bis jetzt und auch schon viel experimentiert aber Ich bekomme es nicht hin :-(
Code: -
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
-
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
-
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
-
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
-
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
-
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
-
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 WertMiniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)Kommentar
-
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;\.\.\.\vZuletzt geändert von Peter B; 13.11.2017, 18:12.Kommentar
Kommentar