1wire mqtt

Hallo, kennt/nutzt jemand dieses Interface?

Modbus & MQTT 1-Wire Gateway - HöSi

Gruß Michael

ich verwende einfach einen ESP8266 (D1 mini)
Der macht genau das gleiche und den gibt es für wenige Euros :wink:

Ansonsten kannst du auch unser 1-Wire LAN Gateway nutzen - das unterstützt mehr Bausteine und wird ohne MQTT Umweg unterstützt. Falls du natürlich günstiger sein willst glaube ich auch das die DIY Lösung mit ESP sehr gut und günstig ist.

paresy

Danke für die Antworten!
Da ich der Basteltyp bin und sowieso noch ein paar Wemos D1 Mini hier liegen habe…
@firebuster … hast du einen Link für mich mit dem du gute Erfahrung gemacht hast?
Gruß, Michael

Ich habe mir selbst was zusammen gefrickelt aber es gibt mittlerweile auch ne Tasmota Firmware:

Also, Tasmota läuft sehr gut, habe mehrere im Einsatz.
Was auch noch geht, die DS18x20 an den Raspberry GPIO’s anklemmen und direkt in IPS auf dem System auslesen.

Temperaturen lesen :

<?php
$id = IPS_GetParent($_IPS['SELF']);
$id2= IPS_GetParent($id);
$id3= IPS_GetObjectIDByName("GPIO Temperatur", $id2);
//------------------------------------------------------------------------------
 if($_IPS['SENDER'] == "Execute")                // nur wenn bei "Ausführen"
 {
   CreateVariableByName($id3, "onewireId", 3);
   CreateVariableByName($id3, "onewirezaehler", 1);
   $onewireID = IPS_GetObjectIDByName("onewireId", $id3);
   SetValue($onewireID, "");
   $vid = CreateVariableByName($_IPS['SELF'], "Running", 0);
   $eid = CreateEventIDByName($_IPS['SELF'], "StartStop", 0);
   IPS_SetEventActive($eid, true);
   IPS_SetEventTrigger($eid, 0, $vid);
   IPS_SetEventScript($eid, $_IPS['SELF']);
   $zaehler = intval(exec('cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slave_count'));
   $onewirezaehlerID = IPS_GetObjectIDByName("onewirezaehler", $id3);
   SetValue($onewirezaehlerID, $zaehler);

	$datei = file("/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves");
	$i=1;
	foreach($datei AS $dallas_id)
   {
	   $ds_id[$i]= $dallas_id;
      $wire = GetValue($onewireID);
      $wire = "".$wire." ".$ds_id[$i];
  	   SetValue($onewireID, $wire);
		$i++;
   }
 }
//------------------------------------------------------------------------------
// if($_IPS['SENDER'] == "TimerEvent")             //
$onewireID = IPS_GetObjectIDByName("onewireId", $id3);
$onewirezaehlerID = IPS_GetObjectIDByName("onewirezaehler", $id3);
$zaehler = GetValue($onewirezaehlerID);
//$zaehler = intval(exec('cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slave_count'));

$wire = GetValue($onewireID);
$ds_id = explode(" ", $wire);
	for ($i = 1; ; $i++)
	{
	   if ($i > $zaehler) {
	        break;
      }
      $ds_id[$i]= trim($ds_id[$i]);
		$temp = exec('cat /sys/bus/w1/devices/'.$ds_id[$i].'/w1_slave |grep t=');
//		$crc = exec('cat /sys/bus/w1/devices/'.$ds_id[$i].'/w1_slave | grep crc | sed "s/^.*\(...\)$/\1/"');
		$temp = explode('t=',$temp);
//var_dump($ds_id[$i]);
//var_dump ($crc);
//var_dump ($temp);
      //The power-on reset value of the temperature register is +85°C
//		if($crc =="YES" and $temp[1] !== "-62" and $temp[1]  !== "85000") //Fehler raus, -1.2 °C ,85°C und CRC
		if($temp[1] !== "-62" and $temp[1]  !== "85000") //Fehler raus, -1.2 °C ,85°C und CRC
		{ 
			$temp = $temp[1] / 1000;
			$temp = round($temp,2);
			if($temp !== -1.25) {
		  	   $id = CreateVariableByName($id3, $ds_id[$i], 2);
				//var_dump ($temp);
			   SetValue($id, $temp);
			}
	   }
	}
//------------------------------------------------------------------------------
 if($_IPS['SENDER'] == "Variable")
 {
  if($_IPS['VALUE'])
  {
   IPS_SetScriptTimer($_IPS['SELF'], 15);         // Sekunden-Takt
  } else {
   IPS_SetScriptTimer($_IPS['SELF'], 0);
  }
 }
//------------------------------------------------------------------------------
//##############################################################################
function CreateVariableByName($id, $name, $type)
{
   $vid = @IPS_GetVariableIDByName($name, $id);
   if($vid===false) {
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
   }
   return $vid;
}
//##############################################################################
function CreateEventIDByName($id, $name, $type)
{
   $eid = @IPS_GetEventIDByName($name, $id);
   if($eid===false) {
      $eid = IPS_CreateEvent($type);
      IPS_SetParent($eid, $id);
      IPS_SetName($eid, $name);
   }
   return $eid;
}
?>

@firebuster: Das kannte ich noch nicht, adressiert genau mein Problem: mehrere Sensoren am Bus.
Sehe ich mir an - Danke
@tomgr : auch nicht schlecht! Ich will nur im Laufe der Zeit die RASPIs reduzieren, außer mir kann das hier keiner pflegen. Habe IPS grad auf Docker auf NAS umgestellt, den Pflegeaufwand kann ich meiner Frau schon zumuten :smile: und ein paar mehr oder weniger standalone laufende Wemos ESP‘s lassen sich auf noch verkaufen…aber da ich sowieso noch einen RASPI mit debmatic laufen habe ist deine Lösung vielleicht doch ein spannender Weg.

Werd mich demnächst, wenn Zeit vorhanden mal dran setzen, ich weiß ja jetzt wen ich fragen kann :slight_smile: