Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:channels:meters:water:wasserzaehler_ohne_s0

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
hardware:channels:meters:water:wasserzaehler_ohne_s0 [2019/06/20 08:12]
gabinvigoss_gmail.com
hardware:channels:meters:water:wasserzaehler_ohne_s0 [2019/06/22 13:02] (aktuell)
justinotherguy alte Version wiederhergestellt (2019/06/02 16:55)
Zeile 1: Zeile 1:
-====== ​Laser en France ​======+====== ​Mechanischen Wasserzähler über Impulse auslesen ​======
  
-===== Le pointeur laser pour la pratique ​=====+===== Ansatz 1: Laser =====
  
-Avez-vous besoin du **pointeur laser (https://​www.laserpointeur.com/​)** puissant et pas cher? S'il me reste un problème avec la cartouche, ce n'est pas si facile à retirer du pistolet. Je dois enfoncer un goujon en bois dans le canon pour faire sortir la balle. Ce n'est pas grave, je suppose. Un autre problème est peut-être le fait que je dois armer les armes à feu pour chaque coup (ou DA). Ce pointeur laser fait clignoter un point rouge lorsque vous appuyez sur la gâchette. C'est idéal pour essayer votre point rapide et tirer sans viser. Bien que le fait de filmer sur une TV LED semble complètement engloutir le point. Il est livré avec un jeu de piles de rechange et après trois semaines de tournage occasionnel dans mon salon, elles sont toujours bonnes! Pour moi, je l’utilise à courte portée (7 à 10 mètres) avec une arme de poing. Dans cet environnement,​ c’est un excellent outil de maîtrise. Je ne l'​utilise que pour travailler sur le regroupement rapproché de plans dans des scénarios différents. Une fois que j'ai vu où le laser frappait, je pouvais juste tenir la cible et tirer. C'​était amusant mais ne fait rien pour améliorer le but en utilisant des exercices de vision.+IdeeDas kleine Sternrad des Wasserzählers mit einem Laser anvisieren und die Reflexionen mit Photodiode und Arduino-Mikrocontroller auswerten.
  
-Si vous ne pouvez pas faire preuve de souplesse en raison de vos besoins, de votre patience ou du prix des unités, vous devez considérer que les plafonds peuvent échouer et échouent comme vous le lirez de temps en temps ici. J'ai continué à pratiquer, après quelques minutes, le laser s'est évanoui. Je pensais que les piles devaient être vieilles, alors comme j'ai commandé des piles supplémentaires,​ je les ai mises et je suis retourné à la pratique. Après les deux premiers coups, je recevais des coups puissants et faibles sur la cible par intermittence. Juste pour clarifier les choses, je l’utilisais la nuit dans une pièce sombre. Je dois acheter le pointeur laser le plus puissant. Je ne sais pas s'il s'agit d'un problème récurrent car la société ne voudrait pas répondre à cette question, mais j'ai l'​impression que c'est le cas. Par conséquent,​ je l'ai renvoyé et je voulais l'​écrire pour éviter que quiconque ne commette la même erreur, ou du moins vous êtes mieux informé que je ne l'​étais lors de l'​achat.+==== Hardware ====
  
-Il n'y a aucun moyen d'​utiliser la mire du pistolet et d'​avoir une séance d'​entraînement utile avec la cartouche que j'ai reçueMalheureusementje dois le retournerPassons maintenant à ce qui pourrait être un véritable coup d’arrêtma première cartouche n’a pas fonctionné au bout de 200 coups environAvant, il n’était pas possible que mon autre problème soit exact. Je l’utilise sur mon tirage, ce que je ne me sentirais vraiment pas en sécurité de faire avec l’autre qui se détache. Je suis en train de le tester et de mettre à jour cet avis dès que les résultats nous parviendront. Franchement,​ tant qu'ils honoreront leur garantie avec des capuchons instantanés de remplacement au besoin, je serai ravi de travailler avec eux jusqu'​à ce que les bugs disparaissent. Le pointeur laser flotte dans la cartouche sous les piles avec une force de ressort. Je pouvais regarder à l'​intérieur et voir qu'un guide en plastique affleurait presque le mur intérieur. Il ne dépassait pas suffisamment pour entrer en contact avec le cylindre. Comme les guides en plastique sont tous fondus, il n’ya aucun moyen de régler le laser pour corriger le problème. Le centrage de la lumière présente un mauvais dessin à l'​intérieur de la cartouche. Je suis découragé maintenant de lui donner une seconde chanceCela semble être une bonne idée amusante pour un système de formation.+<note important>​Ein roter Laser mit einer Strahlungsleistung von 5mW entspricht der Laserklasse 3RDie zugängliche Laserstrahlung liegt im Wellenlängenbereich von 302,5 nm bis 10^6 nm und **ist gefährlich für das Auge**.\\ Sicherheitsmaßnahmen:\\ Niemals direkt in den Strahlengang blicken.\\ Im Laserbereich sind gut reflektierende Flächen zu vermeiden.\\ Vorgeschriebene Laserschutzbrillen unbedingt tragen.</​note>​ 
 +\\
  
-Une autre recommandationassurez-vous de nettoyer votre canonsurtout si vous tirez des rechargescar elles ne brûlent souvent pas aussi proprementJe me suis rendu compte que le pointeur laser bleu 30000mW était éteint avec un baril saleJe suis du genre à croire que la pratique rend parfait et je pense que c'est particulièrement vrai lorsqu'il s'agit d'utiliser une arme à feu pour se défendreJ'en ai eu une pour mes deux armes de poing et je les utilise au moins une fois par mois entre le temps de passage et les matchs IDPANéanmoinsil est plus que précis pour la pratique du dessin contre le Mutant Zombie Biker portant votre pardessus debout dans votre placard à deux pas ou les Walkers qui ont soudainement éclaté devant votre porte et vous avez besoin de dessiner et de viser votre ciblefeu "Je les ai également utilisées pour montrer à un nouveau tireur les rudiments ​des armes à feu et une image de tir à la gâchette appropriée.+{{:hardware:​channels:​meters:​water:​wasseruhr_laser.jpg?​200|}} 
 + 
 +Den Laser gibt es im Zehnerpack bei Ebay ab 2,50:  
 +[[http://​www.ebay.de/​sch/​i.html?​_odkw=laser+10+st%C3%BCck&​_osacat=0&​_from=R40&​_trksid=p2045573.m570.l1313.TR0.TRC0.H0.Xlaser+10+st%C3%BCck+5mW+Dioden.TRS0&​_nkw=laser+10+st%C3%BCck+5mW+Dioden&​_sacat=0]] 
 + 
 +Das ganze habe ich mit einer BPW34 [[http://​www.vishay.com/​docs/​81521/​bpw34.pdf]] Photodiode gekoppelt.  
 +Als Schaltung habe ich das hier gewählt:  
 + 
 +[[https://​www.mikrocontroller.net/​articles/​Lichtsensor_/​_Helligkeitssensor#​Konstantstromquelle_mit_Arbeitswiderstand]] (Konstantstromquelle mit Arbeitswiderstand) 
 + 
 +Halterung ist ein abgesägtes Stück graues PVC-Rohr. Abgesägt ist das Stück, wo normalerweise die Dichtung drin ist. 
 +Darauf ist ein Aluminium Flachprofil geschraubt. 
 + 
 +So sieht es aus, wenn es fertig ist: 
 + 
 +{{:​hardware:​channels:​meters:​water:​2015-12-31_15.22.17_b.jpg?​200|}} 
 + 
 +Neben dem Wasserzähler greife ich auch den Gaszähler ab. Auf dem letzten Rädchen ist hier ein silber beschichtetets Stück, das hervoragend reflektiert. Hier musste ich nicht den Aufwand mit dem Laser machen, sondern nutze hier dieses Bauteil [[http://​www.vishay.com/​docs/​83760/​tcrt5000.pdf]] Die Reflexlichtschranke ist auf einen Einkaufswagenchip geklebt. Dieser ist mit wiederlösbarem Montageband (Aldi, bzw. 3M) auf den Gaszähler geklebt. 
 + 
 +{{:​hardware:​channels:​meters:​water:​gaszaehler.jpg?​200|Externer Link}}  
 + 
 +Beide Zähler gehen an einen Analog in eines Arduino V3 (Ebay, deutlich unter 10 Euro) [[http://​www.ebay.de/​sch/​i.html?​_odkw=nano+arduino&​_osacat=0&​_from=R40&​_trksid=p2045573.m570.l1313.TR10.TRC1.A0.H0.Xnano+arduino+v3.TRS0&​_nkw=nano+arduino+v3&​_sacat=0]] 
 + 
 +Es empfiehlt sichdas Analogsignal,​ bzw. die Variablen ​des Arduino-Codesim Testaufbau und während der Justierung von Laser- und Photodiode am Zähler zu beobachten um gut auswertbare Veränderungen herzustellenDazu eignet sich z.B. der "​Serial Plotter"​ der Arduino-Entwicklungsumgebung:​ Baud-Rate hoch stellen und in der Schleife die Variable (eine oder auch mehrere in einer Zeile) einfach ausgeben.  
 + 
 +<note important>​Fremdlicht beeinflusst das Signal der Photodiode enorm. Sobald die Justierung einigermaßen passt, den Aufbau am besten abdecken.</​note>​ 
 + 
 +==== Über Script in die Datenbank ==== 
 + 
 +Für Gas- und Wasserzähler,​ Eintrag per php direkt in die Datenbank. 
 + 
 +=== Arduino === 
 + 
 +Das ist der Code auf dem Arduino. Die Idee ist die Differenz zwischen dem Tal und dem Berg bei dem analogen Sensor als Trigger zu verwenden 
 + 
 +<​code ​c
 + 
 +//sets ground pin to LOW and input pin to HIGH 
 +void setup() 
 +
 + Serial.begin(38400);​ 
 + //​digitalWrite(A0,​ HIGH); 
 + digitalWrite(A1,​ HIGH); 
 +
 +long wasser_counter = 0; 
 +long gas_counter = 0; 
 +long loops = 0; 
 +int wasser_max = 0; 
 +int gas_max = 0; 
 +long wasser = 0; 
 +long gas = 0; 
 +int wasser_z = 0; 
 +int gas_z = 0; 
 +unsigned long  lastlog = 0; 
 +unsigned long  last_gas = 0; 
 +unsigned long  last_wasser = 0; 
 +unsigned long time; 
 + 
 +void loop() 
 +
 +  // Gleitender Durchschnitt anwenden.  
 + gas = ((gas *9) + analogRead(1)) /10; 
 + wasser = ((wasser *3) + analogRead(0))/​4;​ 
 + time = millis(); 
 +        if (time < lastlog ){ //time ist übergelaufen 
 +          lastlog = 0; 
 +          last_gas= 0; 
 +          last_wasser = 0; 
 +        } 
 + wasser_max = max(wasser_max,​ wasser ); 
 + gas_max = max(gas_max,​ gas ); 
 + loops++; 
 + if ((wasser_max - 400) > wasser ​ ) 
 +
 + wasser_z++;​ 
 + } else { 
 + wasser_z = 0; 
 +
 +  
 + if ((gas_max - 100) > gas  ) 
 +
 + gas_z++;​ 
 + } else { 
 + gas_z = 0; 
 +
 +  
 + if (gas_z > 100 && time - last_gas > 500){ 
 + gas_counter++;​ 
 + gas_max= 0; 
 +                last_gas = time; 
 +
 + //Qn 2.5 =2500 Liter die Stunde = 60000  Markierungen am Raedchen 0,06 Sekunden (=60 ms für einen Durchgang)  
 + if (wasser_z > 40 && time - last_wasser > 30){ 
 + wasser_counter++;​ 
 + wasser_max= 0; 
 +                last_wasser = time; 
 +
 +  
 +  
 + if (time - lastlog > 50){ 
 + //  Serial.print("​Time:​ "); 
 + lastlog = time; 
 + long checksum = time + gas + gas_counter + wasser + wasser_counter;​ 
 +  
 + Serial.print(time);​ 
 + Serial.print("​ - "​); ​  
 + Serial.print(gas);​ 
 + Serial.print("​ - "); 
 + Serial.print(gas_counter);​ 
 + Serial.print("​ - "​); ​  
 + Serial.print(wasser);​ 
 + Serial.print("​ - "​); ​  
 + Serial.print(wasser_counter);​ 
 + Serial.print("​ - "​); ​  
 + Serial.print(checksum);​ 
 +                Serial.print("​ - ");  
 + Serial.print(gas_max);​ 
 + Serial.print("​ - ");  
 + Serial.print(wasser_max);​ 
 +                Serial.print("​ - ");  
 + Serial.println(loops);​ 
 +                loops=0; 
 + 
 +
 +  
 +
 +</​code>​ 
 + 
 +=== Script zur Datenübernahme === 
 + 
 +Der Code auf der PC/​Raspberry-Seite:​ 
 +(Aufruf mit Cron regelmäßig,​ falls etwas abbricht. Job startet sich nur einmal, falls er noch läuft) 
 + 
 +<code perl> 
 +#​!/​usr/​bin/​perl 
 +# Set up the serial port 
 +use Proc::​PID::​File;​ 
 +  die "​Already running!"​ if Proc::​PID::​File->​running();​ 
 +   
 +use DBI; 
 +#use LWP::​UserAgent;​ 
 +use Time::HiRes qw(usleep nanosleep time); 
 + 
 +my $dbh2 = DBI->​connect("​DBI:​mysql:​database=volkszaehler;",​ "​vz",​ "​dfdfdfdf"​ ) or die $DBI::​errstr;​ 
 +my $sth3 = $dbh2->​prepare("​INSERT INTO `data` (`channel_id`,​ `timestamp`,​ `value`) VALUES (?, ?, ?​)"​);​ 
 +#my $Gas_offset ​   = $dbh2->​selectrow_array('SELECT count(*) FROM table WHERE...', undef, @params); 
 +#my $wasser_offset = 
 + 
 +system("​stty ​ -F /​dev/​usb-arduino_nano ​ 1:​4:​cbf:​a30:​3:​1c:​7f:​15:​4:​0:​1:​0:​11:​13:​1a:​0:​12:​f:​17:​16:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0"​);​ 
 +my $dbh = DBI->​connect("​DBI:​mysql:​database=test2;",​ "​test2",​ "​dfdfdfdfdf"​ ) or die $DBI::​errstr;​ 
 +my $sth = $dbh->​prepare("​INSERT INTO `test`(`timestamp`,​ `wert`, wert2 ) VALUES (?,?, ?​)"​);​ 
 +my $sth2 = $dbh->​prepare("​delete from  `test`"​) ; 
 +$sth2->​execute() or die "​Couldn'​t execute statement: " . $sth2->​errstr;​ 
 + 
 +#1014 
 + 
 +open(LOGGING,​ ">>",​ "/​tmp/​logging.txt"​) ; 
 +open(SERIAL,​ "</​dev/​usb-arduino_nano"​);​ 
 +$time_offset = 0; 
 +while (1) { 
 + # Poll to see if any data is coming in 
 + #​https://​groups.google.com/​forum/#​!topic/​comp.lang.perl.misc/​cZwsvIla1cM 
 + eval { 
 + local $SIG{ALRM} = sub { die "​Zeitlimit überschritten $!"​};​ 
 +  
 + # alarm(x) muss in den eval()-Block  
 + alarm(10);​ #​ Maximale Zeit: 9 bis 10 Sekunden  
 + $test = <​SERIAL>;​ #​ Kritische Operation 
 + alarm(0);​ #​ alarm zurücksetzen 
 +  
 + }; ## end of eval 
 +  
 + # Irgendetwas schiefgelaufen?​ 
 + if ($@) { 
 + print "​timeout\n";​ 
 + die(); 
 +
 +  
 + elsif (length($test)==0){ 
 + print "​länge 0\n";​ 
 + sleep 20; 
 + die(); 
 +
 +  
 +  
 +  
 + if (  $test =~ /([0-9]*) - ([0-9]*) - ([0-9]*) - ([0-9]*) - ([0-9]*) - ([0-9]*) - ([0-9]*) - ([0-9]*)/ && $1 + $2 + $3 + $4 + $5 == $6){ 
 + $time = $1; 
 + $time_offset2 =  int(time * 1000) - $time; 
 + if (abs($time_offset-$time_offset2) >​=5000){ 
 + $time_offset =  $time_offset2;​ 
 +
 + $gas = $2; 
 + $gas_counter = $3; 
 + $wasser = $4; 
 + $wasser_counter = $5; 
 +#​ $sth->​execute ($1,$gas, $wasser); 
 +  
 + if ($wasser_counter > $wasser_counter_old){ 
 + $sth3->​execute (12,​$time_offset + $time, $wasser_counter - $wasser_counter_old) or die "​Couldn'​t execute statement: " . $sth3->​errstr;​ 
 +  
 +
 + $wasser_counter_old = $wasser_counter;​ 
 + if ($gas_counter > $gas_counter_old){ 
 + $sth3->​execute (9,​$time_offset + $time, $gas_counter - $gas_counter_old) or die "​Couldn'​t execute statement: " . $sth3->​errstr;​ 
 +  
 +
 + $gas_counter_old = $gas_counter;​ 
 + chop($test);​ 
 + chop($test);​ 
 + print LOGGING $test.gmtime()."​\n";​ 
 + print $test.gmtime()."​\n";​ 
 +
 +  
 +  
 +  
 +
 + 
 +</​code>​ 
 + 
 +<​note>​Dieser Code erwartet die Volkszähler-Datenbank auf demselben Raspberry Pi, an dem der Arduino angeschlossen ist.\\ 
 +Die Kanäle (channel_id) sind hart codiert: 12 und 9.</​note>​ 
 +  
 +Was noch justiert werden muss, ist die Differenz, die zwischen Tal und Berg nötig ist: 
 + 
 +<code php> 
 +<?php 
 +//include ("/​usr/​share/​jpgraph/​jpgraph.php"​);​ 
 +//include ("/​usr/​share/​jpgraph/​jpgraph_line.php"​);​ 
 +include ("/​var/​www/​z/​graph/​src/​jpgraph.php"​);​ 
 +include ("/​var/​www/​z/​graph/​src/​jpgraph_line.php"​);​ 
 +include ("/​var/​www/​z/​graph/​src/​jpgraph_date.php"​);​ 
 + 
 +$graph = new Graph(3000,​500);​ 
 +$graph->​img->​SetMargin(40,​40,​40,​40);​ 
 + 
 +//​$graph->​SetScale("​textlin"​);​ 
 +//​$graph->​SetScale('​intlin',​0,​50,​0,​24);​ 
 +$graph->​legend->​SetColumns(1);​ 
 +$graph->​legend->​SetPos(0.05,​0.5,'​right','​center'​);​ 
 +#​$graph->​yaxis->​scale->​ticks->​Set(45,​50);​ 
 +//​$graph->​SetShadow();​ 
 +$graph->​title->​Set("​Gaskurve"​);​ 
 +$graph->​title->​SetFont(FF_FONT1,​FS_BOLD);​ 
 +$graph->​SetScale('​datlin'​);​ 
 +$graph->​xaxis->​SetLabelAngle(90);​ 
 +$graph->​xaxis->​scale->​SetDateFormat('​H:​i:​s'); 
 + 
 +  
 +$connection = mysql_connect("​localhost",​ "​test2",​ "​GEHEIMER"​);​ 
 +$db_selected = mysql_select_db("​test2"​);​ 
 +if (!$connection)  
 +
 + die('​Not connected : ' . mysql_error());​ 
 +}  
 +if (!$db_selected)  
 +
 + die('Can\'t use db : ' . mysql_error());​ 
 +
 +$query = "​SELECT *, UNIX_TIMESTAMP(datum) zeitunix FROM  `test` where datum > '"​.$_GET["​a"​]."'​ "; 
 +$result = mysql_query($query);​ 
 +$i=0; 
 +while ($row = @mysql_fetch_assoc($result)) 
 +
 +$ywert[$i] = $row['​wert2'​];​ 
 + 
 +$stunden[$i] = $row['​zeitunix'​];​ 
 +$i +=1; 
 +
 + 
 +$lineplot=new LinePlot($ywert,​ $stunden ); 
 +$lineplot->​SetLegend ("​Wert"​);​  
 + 
 +$graph->​Add($lineplot);​ 
 +$graph->​Stroke();​ 
 + 
 +?> 
 + 
 +</​code>​ 
 + 
 +So sieht so eine Grafik aus: 
 + 
 +{{:​hardware:​channels:​meters:​water:​gas.png?​linkonly|}} 
 +{{:​hardware:​channels:​meters:​water:​gas.png?​direct&​100|}} 
 + 
 +<note tip>Oder den "​Serial Plotter"​ der Entwicklungsumgebung verwenden.</​note>​ 
 + 
 +==== Über vzlogger an die Middleware ==== 
 + 
 +Für **nur einen** Wasserzähler,​ Erfassung der Impulse über USB-Schnittstelle und vzlogger. Datenbank kann ausgelagert sein. 
 + 
 +=== Arduino === 
 + 
 +Hier der Code für den Arduino. Verkürzte Version von oben, weil nur eine Diode ausgewertet wird und die Impulse im Arduino nicht gezählt werden. 
 + 
 +<code c> 
 + 
 +// Original von mikemiller 2015-2016 
 +// Reduziert auf nur 1 Wasserzähler mit Ausgabe  
 +// des Impulses auf die USB-Schnittstelle 
 + 
 +void setup() 
 +
 +  Serial.begin(300);​ 
 +  // Open serial communications and wait for port to open: 
 +  // A baud rate of 115200 is used instead of 9600 for a faster data rate 
 +  // on non-native USB ports 
 +  //​Serial.begin(115200);​ 
 +  while (!Serial) { 
 +    ; // wait for serial port to connect. Needed for native USB port only 
 +  } 
 +   
 +  //​digitalWrite(A0,​ HIGH); 
 +  pinMode(A0, INPUT); 
 +  digitalWrite(A1,​ HIGH); 
 +
 +int wasser_max = 0; 
 +long wasser = 0; 
 +int wasser_z = 0; 
 +unsigned long lastlog = 0; 
 +unsigned long last_wasser = 0; 
 +unsigned long time; 
 +  
 +void loop() 
 +
 +  // Gleitender Durchschnitt anwenden.  
 +  wasser = ((wasser *3) + analogRead(0))/​4;​ 
 +  time = millis(); ​ // time since startup in milliseconds. Overflow after approx. 50 days. 
 +        if (time < lastlog ){ //time ist übergelaufen 
 +          lastlog = 0; 
 +          last_wasser = 0; 
 +        } 
 +  wasser_max = max(wasser_max,​ wasser); 
 + 
 +  if ((wasser_max - 200) > wasser) 
 +  { 
 +    wasser_z++;​ 
 +  } else { 
 +    wasser_z = 0; 
 +  } 
 +  
 +  // Qn 2,5 m³/h = 2.500 Liter pro Stunde  
 +  // Das Raedchen hat 6 Fluegel und dreht sich 1x je 0,1 Liter --> 60 Impulse je Liter 
 +  // Bei Maximaldurchfluss 2.500 l/h * 60 Imp/l = 2.500*60 Imp/h = 2.500/60 Imp/s = 41,7 Imp/s 
 +  // --> Mindestens 24 ms zwischen zwei Impulsen ("​Prellen"​ vermeiden) 
 +  
 +  if (wasser_z > 40 && time - last_wasser > 30) { 
 +    wasser_max= 0; 
 +    lastlog = time; 
 +    last_wasser = time; 
 +    Serial.print(0x00); ​ // 1 Impuls ausgeben. 
 +  } 
 +  
 +
 +</​code>​ 
 + 
 +Die Differenz zwischen Hell und Dunkel muss für dieses Code-Beispiel mindestens 200 betragen, sonst wird kein Impuls erzeugt.  
 + 
 +=== Frontend === 
 + 
 +Kanal erstellen als Wassermengenzähler mit einer Auflösung von 60 (Impulse/l, siehe Berechnung im Code) und Stil=steps. UUID notieren. 
 + 
 +=== Beispielkonfiguration === 
 +Exemplarische /​etc/​vzlogger.conf,​ Element der Aufzählung "​meters":​ []: 
 +<code base vzlogger.conf>​ 
 +    { 
 +            // Water as S0 meter 
 + 
 +            "​enabled":​ true,                // disabled meters will be ignored (default) 
 +            "​skip":​ true,                   // errors when opening meter may be ignored if enabled 
 +            "​protocol":​ "​s0", ​              // meter protocol, see '​vzlogger -h' for full list 
 +            "​device":​ "/​dev/​ttyUSB0", ​      // meter device 
 + 
 +            "​aggtime":​ -1,                   // aggregate meter readings and send middleware update after <​aggtime>​ seconds 
 +            "​aggfixedinterval":​ true,       // round timestamps to nearest <​aggtime>​ before sending to middleware 
 + 
 +            "​channel":​ { 
 +                "​identifier":​ "​Impulse", ​   // s0 meter knows "​Impulse"​ and "​Power"​ 
 +                "​uuid":​ "<​uuid>",​ 
 +                "​aggmode":​ "​SUM", ​          // aggregation mode: aggregate meter readings during <​aggtime>​ interval 
 +                                            //   "​SUM":​ add readings (use for s0 impulses) 
 +                                            //   "​MAX":​ maximum value (use for meters sending absolute readings) 
 +                                            //   "​AVG":​ average value (use for meters sending current usage) 
 +                "​middleware":​ "​http://​localhost/​middleware.php"​ 
 +            } 
 +    }   // meter  
 +</​code>​ 
 + 
 +===== Ansatz 2: grüne LED und Fototransistor ===== 
 + 
 +Im [[https://​homematic-forum.de/​forum/​viewtopic.php?​t=23744|Homematic-Forum]] wird ein Ansatz beschrieben,​ bei dem man den roten Ein-Liter-Zeiger des Wasserzählers zur Kontrastverstärkung mit einer grünen LED anleuchtet, die Helligkeitsunterschiede mit einem Fototransistor auffängt und mit einem modifizierten TCRT500 (das ist eine fertige, justierbare Baugruppe, eigentlich für Reflexlichtschranken) digital aufbereitet. 
 + 
 +Beim Nachbau hat es sich gezeigt, dass es u.a. auf die Helligkeit der verwendeten LED ankommt. Die zuerst beschafft LED war nicht hell genug, um den Fototransistor selbst bei direkter Belichtung durchzusteuern. Mit der nachbeschafften Nichia NSPG300D gelang der Betrieb dann auf Anhieb. 
 + 
 +Wie in der Original-Anleitung beschrieben,​ ist die Justage der Lichtschranke auf dem Wasserzähler sehr fummelig. Die Fixierung mit dem Muttern-und-Epoxidharz-Trick gelang nicht. Nach dem Nachweis der theoretischen Machbarkeit habe ich dann aufgegeben und mir den alternativ genannten [[https://​www.stall.biz/​project/​intelligenter-impulsgeber-w-mit-s0-schnittstelle-zum-nachruesten-fuer-konventionelle-wasserzaehler|Impulsgeber mit S0-Schnittstelle]] bestellt, der auch einen 3d-gedruckten Montageträger zum Aufsetzen auf den Wasserzähler beinhaltet. 
 + 
 +Dieser Impulsgenerator ließ sich dann einfach aufbauen und funktioniert in der Tat viel besser als die einfache Schaltung. Ob das an der Verwendung eines Mikrocontrollers oder an dem mit Linse fokussierten Lichtstrahl der LED liegt, ist unklar. Die Montage auf dem Wasserzähler und die Justage war jedenfalls in wenigen Minuten erledigt. Zum Schutz von Fremdlicht habe ich ein HT-Rohr mit Deckel über den Wasserzähler gestülpt. 
 + 
 +Nach Lektüre des Artikels über [[:​s0-an-usb|S0-Schnittstelle am USB]] ist mir aufgefallen,​ dass die dort aufgebaute Schaltung dem Ausgangsteil des STALL-Impulsgebers nicht unähnlich ist und habe mir den Aufbau dieser Schaltung gespart. Statt dessen habe ich 
 +  - Einen USB-to-Serial-Adapter mit extra herausgeführtem Vcc-Pin aus der Schublade geholt 
 +  - diesen gleich zur Spannungsversorgung des STALL-Impulsgebers verwendet 
 + 
 +{{:​hardware:​channels:​meters:​water:​screenshot_20190602_162649.png?​direct&​400|}} 
 + 
 +Die Idee ist wie bei der Schaltung aus [[:​s0-an-usb|S0-Schnittstelle am USB,]] dass die Serielle Schnittstelle +5V sieht, wenn der Optokoppler hochohmig ist und von diesem beim Durchschalten des Impulsgebers gegen Masse gezogen wird. Die vzlogger-Konfiguration aus [[:​s0-an-usb|S0-Schnittstelle am USB]] hat dann auf Anhieb funktioniert. Bei meiner Installation habe ich noch ca 7 Meter KNX-Leitung zwischen dem USB-to-Serial-Adapter und dem Impulsgeber. 
 + 
 +<​code>​ 
 +"meters"​ : [{ 
 +        "​protocol"​ : "​s0",​ 
 +        "​enabled"​ : true, 
 +        "​device"​ : "/​dev/​USBserialWasser",​ 
 +        "​aggtime"​ : -1,  
 +        "​aggfixedinterval"​ : false, 
 +        "​channels":​ [{ 
 +                "​uuid"​ : "​fa6c4b30-8303-11e9-a746-5fe24f8ae232",​ 
 +                "​middleware"​ : "​http://​middleware.example/",​ 
 +                "​identifier"​ : "​Impulse",​ 
 +                "​aggmode"​ : "​none",​ 
 +                }] 
 +        } 
 +]} 
 +</​code>​ 
 + 
 +{{:​hardware:​channels:​meters:​water:​screenshot_20190602_142248.png?​direct&​400|}} 
 + 
 +So besonders gut scheint die Middleware mit den groben Impulsen (1 Impuls pro Liter) und dem oft stundenlangen Ruhen des Messwertes nicht klarzukommen;​ besonders bei kurzfristigem Verbrauch (z.B. Toilettenspülung) bleibt oft ein hoher Momentanverbrauch in der Tabelle stehen und der Strich in der Grafik geht erst in einer größeren Zoomstufe oder nach etlicher Zeit bis auf Null zurück. In der langfristigen Betrachtung (z.B. die Tagesgrafik) scheint das aber OK zu sein. 
 + 
 +{{:​hardware:​channels:​meters:​water:​screenshot_20190602_143056.png?​direct&​400|}} 
 + 
 +{{:​hardware:​channels:​meters:​water:​screenshot_20190602_143112.png?​direct&​400|}}
  
-Le laser est décentré d'​environ 1 pied à 15 pieds de la cible. Un mot sur la sécurité, quand je les utilise ... Je retire TOUTES les munitions réelles des magazines et les enferme dans une autre pièce. Par exemple, j'ai demandé à quelqu'​un de définir des cibles de silhouette à l'​intérieur de la maison et de m'​entraîner à "​trancher la tarte" en regardant dans la pièce. Cela m'a permis d'​économiser de l'​argent lorsque je travaille strictement sur la traction et la visée. La cartouche a un foret à ressort en plastique où un apprêt serait semblable à un bouchon à déclic. Il n’ya pas de bord, donc pour extraire, j’utilise un crayon en utilisant le bout de la gomme, en prenant soin de ne pas laisser tomber la cartouche sur le sol lorsqu’elle tombe. Le fabricant aurait dû l'​anodiser en bleu ou quelque chose d'​approprié. La précision n’est pas parfaite, mais pratique et plus que suffisante pour les tirs ponctuels. Donc, ça va pour un remboursement. Cela a fonctionné parfaitement mais ne sert à rien sans le module laser (https://​www.laserpointeur.com/​c-40_81.html). 
  
-//Les modules laser habituels sont disponibles avec une longueur d'onde différente:​ laser bleu-violet 405 nm, laser bleu 450 nm, 460 nm et 473 nm, laser vert 532 nm, laser rouge, 650 nm et laser rouge, module laser infrarouge 808 nm et 980 nm, etc. large plage de 1 mW à 30 W ou même haute.// 
hardware/channels/meters/water/wasserzaehler_ohne_s0.txt · Zuletzt geändert: 2019/06/22 13:02 von justinotherguy