frische Installation2.7 und Problem/frage mit 1 Wire ds2423 S0 Counter

So habe gerade eben IPS 2.7 #2732 installiert.

Den 1Wire USB Stick DS9490R (TMEX) wurde gefunden und eingerichtet.
Hier die Einstellungen:
USB_Einstellungen.JPG

An dem 1Wire Stick ist der Dual S0 Zähler von Eservice (DS2423) angeschlossen (2x32bit = 64bit). An diesem hängt ein Windmesser (Reedkontakt) - Da z.zt. Wind herrscht kann ich das schliessen des Reedkontakts permanent messen :slight_smile:
Der S0 Zähler wird durch den 1Wire Stick mit Strom versorgt.
Laut eservice „Versorgungsspannung: 5V 1-Wire Bus, keine zusätzliche externe Spannungsversorgung notwendig!“.

Über den OneWireViewer wird ein 1Wire Device angezeigt:

„Device Address: 56000000321CA681 (81 A6 1C 32 00 00 00 56)
Name: DS1990A
Alternate Names: DS2401,DS2411
Description: 64-bit unique serial number“

??? Hier steht was von DS1990A, DS2401, DS2411…

Wenn ich in IPS über den OneWire Konfigurator gehe wird nichts erkannt unter Geräte?


Wenn ich über I/0 Instanzen eine OneWire Instanz händisch hinzufügen möchte gibt es nur folgendes zur Auswahl:
1Wire_Auswahl.JPG


Das Skript von eservice zur Abfrage der Werte lautet:
<?

// Debug-Modus an=true / aus=false
$debug = false;

//Berechung der Windgeschwindigkeit
$Faktor_Windrad = 71.00; //70,83 Impulse = 1m/s bei 30 sek. Einlesezyklus

//Rehzahl Windrad (4 Impulse pro Umdrehung
$counter = GetValueInteger(50987); // Impulse Windrad einlesen
$delta = $counter - GetValueInteger(54340); //alter Wert von neuen Wert abziehen
SetValueInteger(19257, $delta ); //Ausgabe Differenz
SetValueInteger(54340, $counter ); //Impulse des Windrads ablegen
if($debug) {echo "Counter: $counter
";}
if($debug) {echo "Wind-Delta: $delta
";}

//Berechung Einspeisung pro Stunde
$delta_wind = ((($delta / $Faktor_Windrad) * 3600)/1000) ; //0.00285
$delta_wind_ms = $delta / $Faktor_Windrad;
$round_delta_wind = round ($delta_wind, 1); // auf 1 Stellen runden
$round_delta_wind_ms = round ($delta_wind_ms, 1); // auf 1 Stellen runden

SetValueString (35781, $round_delta_wind. " Km/h");
SetValueString (31693, $round_delta_wind_ms. " m/s");
SetValueFloat (31620 , $round_delta_wind);
if($debug) {echo "Windgeschwindigkeit aktuel:
Km/h: $round_delta_wind
m/s: $delta_wind_ms ";}

?>


Aber vor ich den S0 Zähler nicht sehe, brauche ich mir um das Skript noch keine Gedanken machen…
Darin sind ja ein paar Variablen definiert, die IPS nicht kennen kann (gerade mal „getestet“… )

Warning: Variable #50987 existiert nicht in C:\IP-Symcon\scripts\21639.ips.php on line 10
Warning: Variable #54340 existiert nicht in C:\IP-Symcon\scripts\21639.ips.php on line 11
Warning: Objekt #19257 existiert nicht in C:\IP-Symcon\scripts\21639.ips.php on line 12
Warning: Objekt #54340 existiert nicht in C:\IP-Symcon\scripts\21639.ips.php on line 13
Warning: Objekt #35781 existiert nicht in C:\IP-Symcon\scripts\21639.ips.php on line 23
Warning: Objekt #31693 existiert nicht in C:\IP-Symcon\scripts\21639.ips.php on line 24
Warning: Objekt #31620 existiert nicht in C:\IP-Symcon\scripts\21639.ips.php on line 25


Sorry für die doofen Fragen. Ist mein erster IPS Kontakt :slight_smile:

Hallo mastermind1,

wenn der OneWireViewer das gesuchte Device nicht anzeigt, brauchst Du mit IPS nicht weitersuchen, erst wenn der OneWireViewer das Device gefunden hat, kann es auch in IPS gefunden werden.
Das eine gefundene Device DS2401 ist im USB Stick DS9490R enthalten. Das das angezeigt wird, ist ein Zeichen das der Treiber (TMEX) richtig installiert ist. Wenn der Dual S0 Zähler von Eservice (DS2423) nicht gefunden wird, liegt die Vermutung nahe, das ein Verkabelungsfehler vorliegt. Es werden 3 Adern benötigt: GND, +5V und 1-Wire Daten.
DS9490R — S0-Zähler
4 ------------ 1 --------- GND
3 ------------ 2 --------- 1-Wire Daten
1 ------------ 3 --------- +5V

Am S0 Zähler müssen also zwischen Klemme 1 und 3 die +5V zu messen sein.

Gruß
Helmut

Danke für den Hinweis das das angezeigte device zum ds9490r stick gehört.
Das würde auch erklären warum ein soeben angeschlossener temp Sensor auch nicht angezeigt wird.
Jetzt hoffe ich nur das ich den s0 Zähler nicht geschrottet habe.

Ich hab mal -5v gemessen. ?

Nochmal alles geprüft. Hatte mein uab stick rj12 kabel falsch auf meiner cat6 verb.box aufgelegt.

Der s0 Zähler leuchtet nun bei jeder windumdrehung auf.

Aber erkannt wird der zähler nicht.
Im onewireviewer wird der eine Chipsatz von oben gar nicht mehr angezeigt.

An der data Leitung hab ich nichts verändert? Keine ahnung

Hallo,

das bei dem S0 Zähler bei jeder Windraddrehung die LED leuchtet, lässt darauf schließen das GND und +5V jetzt richtig angeschlossen sind. Das der Zähler und das interne DS2401 nicht mehr gefunden wir, könnte an einem Kurzschluss der Data Leitung liegen. Ich würde jetzt erst mal den RJ12 Stecker am DS9490R abziehen und dann schauen ob der DS2401 mit dem OneWireViewer wieder gefunden wird. Sollte das nicht der Fall sein, dürfte der DS9490R gestorben sein (ist aber eigentlich recht robust). Wird der DS2401 wieder angezeigt, dann bitte noch mal die Verkabelung der Data Leitung (Kurzschluss nach GND oder +5V) überprüfen. Ein weiterer Test wäre, den Temp-Sensor alleine an der RJ12 Buchse anschließen. Ich hoffe für Dich, das nur ein Kurzschluss vorliegt und keine weiteren Defekte.

Gruß
Helmut

Ich meine, Andreas hat in der Spannungsversorgung Schottkydioden eingebaut, ev sind nur Die gestorben.

Gruß Helmut

Hallo danke für die Tipps.

Nun klappts :slight_smile:

Ein parallel angeschlossener Tempsensor scheint defekt zu sein und einen Kurzschluss zu verursachen.
Leider komme ich nicht mehr an den Tempsensor hin… (ist im Gehäuse meines Windmessers eingebaut :frowning: )…

Sobald ich die DATA Leitung von dem TempSensor entferne ERscheint mein S0 Zähler als DS2423…

Kann ein DS1820B über die DATA Leitung einen kurzschluss verursachen, wenn die Leitung etwa 10 Meter ist, und nach draussen geht? Mein Bruder hat mir noch was hinter den TEMPSensor gelötet - wie hier im forum schon häufiger beschrieben…wg. CRC Fehlern

Frage zu dem PHP Skript:

Ich habe den Zähler nun über den Konfigurator in IPS gefunden und hinzugefügt.
Unter diesem habe ich ein Skript hinzugefügt und das von eservice reingepackt.

Kann mir jemand die Fehler erklären?

Warning: Variable #50987 existiert nicht in C:\IP-Symcon\scripts\21639.ips.php on line 10
Warning: Variable #54340 existiert nicht in C:\IP-Symcon\scripts\21639.ips.php on line 11
Warning: Objekt #19257 existiert nicht in C:\IP-Symcon\scripts\21639.ips.php on line 12
Warning: Objekt #54340 existiert nicht in C:\IP-Symcon\scripts\21639.ips.php on line 13
Warning: Objekt #35781 existiert nicht in C:\IP-Symcon\scripts\21639.ips.php on line 23
Warning: Objekt #31693 existiert nicht in C:\IP-Symcon\scripts\21639.ips.php on line 24
Warning: Objekt #31620 existiert nicht in C:\IP-Symcon\scripts\21639.ips.php on line 25

Hallo Jens,
kneif doch mal die angelötete Geschichte am Tempfühler ab.

Und zum Script: das Script von Andreas benutzt die Var-ID’s von Andreas System. Du mußt die ID’s von Deinem System eintragen.

Gruß Helmut

$counter = GetValueInteger(50987); // Impulse Windrad einlesen -> ist das 56076 bei mir? Alter Wert
$delta = $counter - GetValueInteger(54340); //alter Wert von neuen Wert abziehen -> ??
SetValueInteger(19257, $delta ); //Ausgabe Differenz -> ??
SetValueInteger(54340, $counter ); //Impulse des Windrads ablegen -> ??

Sorry wo finde ich die ganzen VariablenIDs?

der S0 Zähler zählt hoch -o.k. d.h. ich muss den zuletzt gelesenen Wert von dem aktuellen abziehen und danach umrechnen in km/h…?
Nur woran unterscheide ich diese beiden Variablen/Werte?

Ich hätte noch das hier?ds2423.JPG

Sorry wo finde ich die ganzen VariablenIDs?

Die musst du anlegen.

$counter = GetValueInteger(50987); // Impulse Windrad einlesen -> ist das 56076 bei mir?

Ja.

der S0 Zähler zählt hoch -o.k. d.h. ich muss den zuletzt gelesenen Wert von dem aktuellen abziehen und danach umrechnen in km/h…?
Nur woran unterscheide ich diese beiden Variablen/Werte?

Die Werte unterscheiden sich am Zählerstand zum Zeitpunkt „Alt“ und Zeitpunkt „Jetzt“.
Du musst das Script noch zyklisch laufen lassen, z.B. jede Minute. Dann hast du den aktuellen jetzigen Zählerstand und den alten Zählerstand vor einer Minute. Daraus wird das Delta errechnet und du hast somit die Anzahl Impulse während der Zeit von einer Minute.

So habs jetzt hoffentlich verstanden…
Variablen in IPS erstellt auf diese greife ich in dem PHP Skript zurück…
Die Integer Variablen habe ich als „Zähler“ erstellt anstatt Standard - hoffe das habe ich richtig verstanden.

kann mir jemand sagen, ob das soweit gut ausschaut???
z.zt haben wir leider keinen wind.

Dann kommt als nächste ein FGR-221 Roller Shutter :slight_smile:

Wie oft Frage ich den Windsensor eigentlich sinnigerweiße ab?

4k_zaehler.JPG

Ich hab mal den debugmodus angemacht… leider sind die Delta Werte alle auf 0…
bei uns weht aber gerade ne konstante Brise…

Was könnte da falsch sein?
In den onewire 4k zähler habe ich einen abfrageintervall von 30 sek. hinterlegt

15146 Delta Wind - Abfrage -> Float (als Zähler)
59050 Differenz alt - neu -> Integer (als Zähler)
52346 Windmesser km/h -> String (als Zähler)
20444 Windmesser m/s -> String (als Zähler)
41822 Zählerwert fortlaufend Zwischenspeicherung -> Integer (als Zähler)
Und dann das PHP Skript:


<?
// Debug-Modus an=true / aus=false
$debug = true;

//Berechung der Windgeschwindigkeit
$Faktor_Windrad = 71.00; //70,83 Impulse = 1m/s bei 30 sek. Einlesezyklus

//Drehzahl Windrad (4 Impulse pro Umdrehung)
$counter = GetValueInteger(56076); // Impulse Windrad einlesen - Alter Wert
$delta = $counter - GetValueInteger(56076); //alter Wert von neuen Wert abziehen
SetValueInteger(59050, $delta ); //Ausgabe "Differenz Alt-Neu"
SetValueInteger(41822, $counter ); //Impulse des Windrads ablegen "Counter"
if($debug) {echo "Counter: $counter
";}
if($debug) {echo "Wind-Delta: $delta
";}

//Berechnung Einspeisung pro Stunde
$delta_wind = ((($delta / $Faktor_Windrad) * 3600)/1000) ; //0.00285
$delta_wind_ms = $delta / $Faktor_Windrad;
$round_delta_wind = round ($delta_wind, 1); // auf 1 Stellen runden
$round_delta_wind_ms = round ($delta_wind_ms, 1); // auf 1 Stellen runden

SetValueString (52346, $round_delta_wind. " Km/h"); // "Windmesser km/h"
SetValueString (20444, $round_delta_wind_ms. " m/s"); // "Windmesser m/s"
SetValueFloat (15146 , $round_delta_wind); // "Delta Wind - Abfrage"
if($debug) {echo "Windgeschwindigkeit aktuell:
 Km/h: $round_delta_wind
 m/s: $delta_wind_ms ";}

?>

Steht Dein Ereignis auf aktiv? Das sieht nämlich so aus, als ob das Skript noch nie wegen des Timers ausgeführt wurde.

Hier kommt als Ergebnis immer 0 heraus.

//Drehzahl Windrad (4 Impulse pro Umdrehung)
$counter = GetValueInteger(56076); // Impulse Windrad einlesen - Alter Wert
$delta = $counter - GetValueInteger(56076); //alter Wert von neuen Wert abziehen

Das Delta wird aus aktuellem Zählerstand (56076) und dem Alten Zählerstand (41822) gebildet.

Vielen Dank für diese Lösung…
und ich suche und suche und …

Cool.


Das Ereignis wurde noch nie ausgeführt - das war für mich ein einfaches fopen/fwrite in ein log… falls nachts mal was wäre… aber WErt war ja wg. meines Fehlers immer 0

doofe frage?

Bisher lasse ich über den 1Wire Konfigurator und dem „4k Zähler“ automatisch alle 30 Sekunden den Wert aktualisieren.
Leider läuft das mit meinem Skript zeitlich ein wenig auseinander.

Gibt es einen PHP Befehl in dem ich das 1Wire Device (960000000FC6661D - InstanzID33606) direkt abfragen kann und danach 30 Sekunden Pause einlege?
D.h. ich hole mir zuerst den letzten 1Wire Wert, 30 sekunden pause - Dann 1Wire Wert aktualisieren und schon könnte ich die beiden Werte vergleichen… Damit hätte ich genaue 30 Sekunden Abstand.

Lass das Skript on update deiner 1-W Variable ausfuehren, dann läuft es jedesmal wenn nach 30 sek deine Variable upgedatet wird.

Danke.
Gerade die Ereignisfunktion (bei Variablenänderung des 1Wire Wertes) gefunden und ausprobiert.
D.h. 1Wire liest alle 30 Sek aus… und führt bei Änderung des Wertes das Skript aus…
in dem skript sind dann als erstes mal 30 sek pause drin…

Im PHP Skript ein einfaches:

//sleep for 30 seconds
sleep(30);

Wenn ich diese 30 Sek. Pause einbaue kommt die Meldung:
Fatal error: Maximum execution time of 30 seconds exceeded in [DS2423 4k NV RAM memory with external counters\Zähler 1 - Windmessung\Abfrage Windmesser] on line 7

Ich hab halt das Problem das ich nur 1 Wire wert vom zähler bekomme.

Warum willst du 30sek Pause machen? Der Wert wird alle 30sek upgedatet, und dass skript verarbeitet diesen sofort!
So sollte es sein, ansonsten kannst du die max execution time in der php.ini anpassen, aber wie gesagt, hört sich nocht logisch an, dass du das skript pausieren lassen willst

Gerade die Ereignisfunktion (bei Variablenänderung des 1Wire Wertes) gefunden und ausprobiert.

D.h. 1Wire liest alle 30 Sek aus…
.

Nein.

IPS liest bei jeder Veränderung der Variable aus. D.h, sobald sich der Zählerstand deines Windzählers ändert (um 1 erhöht) wird ausgelesen. Richtig wäre eine zyklische Auslesung (Scriptausführung) z.B. alle 30 sek.