<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.fhem.de/w/index.php?action=history&amp;feed=atom&amp;title=TCW120</id>
	<title>TCW120 - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.fhem.de/w/index.php?action=history&amp;feed=atom&amp;title=TCW120"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TCW120&amp;action=history"/>
	<updated>2026-04-03T19:50:02Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in FHEMWiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TCW120&amp;diff=3608&amp;oldid=prev</id>
		<title>Sascha.bias: Angelegt, kurze Beschreibung und Modul-Code</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TCW120&amp;diff=3608&amp;oldid=prev"/>
		<updated>2013-11-21T13:00:43Z</updated>

		<summary type="html">&lt;p&gt;Angelegt, kurze Beschreibung und Modul-Code&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== TERACOM TCW120 ==&lt;br /&gt;
&lt;br /&gt;
Das [http://www.teracom.cc/index.php/products/monitoring-and-control/ethernet-controllers/discontinued-products/48-ip-monitoring-tcw120.html TCW120] ist ein einfaches Netzwerkinterface mit 2 digitalen und 2 analogen Eingängen, 2 Relais-Ausgängen und einem Eingang für einen Termperatur-Sensor.&lt;br /&gt;
 &lt;br /&gt;
Dieses Modul ist nur ein schneller Hack, der allerdings schon fast 2 Jahre stabil bei mir läuft.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat 00_TCW.pm &lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
# This is a quick and dirty implementation to use fhem with a TCW120 Network Interface&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use Time::HiRes qw(gettimeofday);&lt;br /&gt;
&lt;br /&gt;
sub TCW_defer&lt;br /&gt;
{&lt;br /&gt;
  my $time = shift;&lt;br /&gt;
  my $cmd = shift;&lt;br /&gt;
  InternalTimer(gettimeofday()+$time, &amp;quot;TCW_onDefer&amp;quot;, $cmd, 0);&lt;br /&gt;
}&lt;br /&gt;
sub TCW_onDefer() {&lt;br /&gt;
  my $cmd = shift;&lt;br /&gt;
  fhem ($cmd);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sub TCW_Initialize($)&lt;br /&gt;
{&lt;br /&gt;
	my ($hash) = @_;&lt;br /&gt;
&lt;br /&gt;
	$hash-&amp;gt;{DefFn} = &amp;quot;TCW_Define&amp;quot;;&lt;br /&gt;
	$hash-&amp;gt;{ShutdownFn} = &amp;quot;TCW_Shutdown&amp;quot;;&lt;br /&gt;
	$hash-&amp;gt;{ReadFn} = &amp;quot;TCW_Read&amp;quot;;&lt;br /&gt;
	$hash-&amp;gt;{SetFn} = &amp;quot;TCW_Set&amp;quot;;&lt;br /&gt;
	$hash-&amp;gt;{GetFn} = &amp;quot;TCW_Get&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#####################################&lt;br /&gt;
sub&lt;br /&gt;
TCW_Shutdown($)&lt;br /&gt;
{&lt;br /&gt;
	my ($hash) = @_;&lt;br /&gt;
	return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#####################################&lt;br /&gt;
sub&lt;br /&gt;
TCW_Define($$)&lt;br /&gt;
{&lt;br /&gt;
	my ($hash, $def) = @_;&lt;br /&gt;
	my @a = split(&amp;quot;[ \t][ \t]*&amp;quot;, $def);&lt;br /&gt;
&lt;br /&gt;
	if(@a != 5) {&lt;br /&gt;
		my $msg = &amp;quot;wrong syntax: define &amp;lt;name&amp;gt; TCW host readCommunity writeCommunity&amp;quot;;&lt;br /&gt;
		Log 2, $msg;&lt;br /&gt;
		return $msg;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$hash-&amp;gt;{host}=$a[2];&lt;br /&gt;
	$hash-&amp;gt;{readcom}=$a[3];&lt;br /&gt;
	$hash-&amp;gt;{writecom}=$a[4];&lt;br /&gt;
	$hash-&amp;gt;{STATE} = &amp;quot;Initialized&amp;quot;;&lt;br /&gt;
	$hash-&amp;gt;{INTERVAL} = 1;&lt;br /&gt;
&lt;br /&gt;
        InternalTimer(gettimeofday()+$hash-&amp;gt;{INTERVAL}, &amp;quot;TCW_Update&amp;quot;, $hash, 1);&lt;br /&gt;
&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
################################&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
sub TCW_Set&lt;br /&gt;
{&lt;br /&gt;
	my ($hash, @a) = @_;&lt;br /&gt;
&lt;br /&gt;
	my $oid;&lt;br /&gt;
	if ($a[1] eq &amp;quot;dout1&amp;quot;) { $oid = &amp;quot;iso.3.6.1.4.1.38783.3.1.1.0&amp;quot;; }&lt;br /&gt;
	elsif ($a[1] eq &amp;quot;dout2&amp;quot;) { $oid = &amp;quot;iso.3.6.1.4.1.38783.3.1.2.0&amp;quot;; }&lt;br /&gt;
	if (defined $oid) {&lt;br /&gt;
		my $newval;&lt;br /&gt;
		if (lc $a[2] eq &amp;#039;on&amp;#039;) {&lt;br /&gt;
			$newval = 1;&lt;br /&gt;
		}&lt;br /&gt;
		elsif (lc $a[2] eq &amp;#039;off&amp;#039;) {&lt;br /&gt;
			$newval = 0;&lt;br /&gt;
		}&lt;br /&gt;
		elsif (lc $a[2] eq &amp;#039;on-for-timer&amp;#039;) {&lt;br /&gt;
			$newval = 1;&lt;br /&gt;
			TCW_defer ($a[3], &amp;quot;set &amp;quot;.$hash-&amp;gt;{NAME}.&amp;quot; $a[1] off&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			return &amp;#039;SYNTAX: set (out1|out2) (on|off|on-for-timer sec)&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
		my $cmd = &amp;quot;snmpset -Oqv -v 1 -c &amp;#039;&amp;quot;.$hash-&amp;gt;{&amp;#039;writecom&amp;#039;}.&amp;quot;&amp;#039; &amp;#039;&amp;quot;.$hash-&amp;gt;{&amp;#039;host&amp;#039;}.&amp;quot;&amp;#039; &amp;#039;&amp;quot;.$oid.&amp;quot;&amp;#039; &amp;#039;i&amp;#039; &amp;#039;&amp;quot;.$newval.&amp;quot;&amp;#039;&amp;quot;;&lt;br /&gt;
		if (defined $newval) { `$cmd`; }&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
################################&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
sub&lt;br /&gt;
TCW_Get($@)&lt;br /&gt;
{&lt;br /&gt;
	my ($hash,@a) = @_;&lt;br /&gt;
	return &amp;quot;get: &amp;lt;OID&amp;gt;&amp;quot; if (@a !=2);&lt;br /&gt;
	my $oid = $a[1];&lt;br /&gt;
	my $cmd = &amp;quot;snmpget -Oqv -v 1 -c &amp;#039;&amp;quot;.$hash-&amp;gt;{&amp;#039;readcom&amp;#039;}.&amp;quot;&amp;#039; &amp;#039;&amp;quot;.$hash-&amp;gt;{&amp;#039;host&amp;#039;}.&amp;quot;&amp;#039; &amp;#039;&amp;quot;.$oid.&amp;quot;&amp;#039;&amp;quot;;&lt;br /&gt;
	my $reading = `$cmd`;&lt;br /&gt;
	$reading =~ s/\r|\n//g;&lt;br /&gt;
	return $reading;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TCW_Update($)&lt;br /&gt;
{&lt;br /&gt;
  my ($hash) = @_;&lt;br /&gt;
  InternalTimer(gettimeofday()+$hash-&amp;gt;{INTERVAL}, &amp;quot;TCW_Update&amp;quot;, $hash, 0);&lt;br /&gt;
  TCW_Update_private($hash, &amp;#039;DIN1&amp;#039;, &amp;#039;iso.3.6.1.4.1.38783.3.3.1.0&amp;#039;);&lt;br /&gt;
  TCW_Update_private($hash, &amp;#039;DIN2&amp;#039;, &amp;#039;iso.3.6.1.4.1.38783.3.3.2.0&amp;#039;);&lt;br /&gt;
  TCW_Update_private($hash, &amp;#039;AIN1&amp;#039;, &amp;#039;iso.3.6.1.4.1.38783.3.2.1.0&amp;#039;);&lt;br /&gt;
  TCW_Update_private($hash, &amp;#039;AIN2&amp;#039;, &amp;#039;iso.3.6.1.4.1.38783.3.2.3.0&amp;#039;);&lt;br /&gt;
  TCW_Update_private($hash, &amp;#039;TEMPERATURE&amp;#039;, &amp;#039;iso.3.6.1.4.1.38783.3.4.0&amp;#039;);&lt;br /&gt;
  TCW_Update_private($hash, &amp;#039;DOUT1&amp;#039;, &amp;#039;iso.3.6.1.4.1.38783.3.1.1.0&amp;#039;);&lt;br /&gt;
  TCW_Update_private($hash, &amp;#039;DOUT2&amp;#039;, &amp;#039;iso.3.6.1.4.1.38783.3.1.2.0&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TCW_Update_private($$)&lt;br /&gt;
{&lt;br /&gt;
  my ($hash, $key, $oid) = @_;&lt;br /&gt;
  my $oldval = $hash-&amp;gt;{READINGS}{$key}{&amp;#039;VAL&amp;#039;};&lt;br /&gt;
  my $newval = TCW_Get($hash, &amp;#039;GET&amp;#039;, $oid);&lt;br /&gt;
  $newval =~ s/&amp;quot;//g;&lt;br /&gt;
  my @changed;&lt;br /&gt;
  if (!defined $oldval || $newval ne $oldval) {&lt;br /&gt;
    $hash-&amp;gt;{READINGS}{$key}{&amp;#039;VAL&amp;#039;} = $newval;&lt;br /&gt;
    $hash-&amp;gt;{READINGS}{$key}{&amp;#039;TIME&amp;#039;} = TimeNow();&lt;br /&gt;
    push @changed, &amp;quot;$key: $newval&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  $hash-&amp;gt;{CHANGED} = \@changed;&lt;br /&gt;
  DoTrigger($hash-&amp;gt;{NAME}, undef) if (scalar(@changed) &amp;gt; 0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Sascha.bias</name></author>
	</entry>
</feed>