Hallo Sascha,
herzlich willkommen hier im LinerTreff
Hallo Sascha,
herzlich willkommen hier im LinerTreff
Hallo Thomas,
wenn Sensor richtig montiert und kalibriert ist, könnte es auch an mangelnder Entlüftung vom FW-Tank liegen. Bei Entnahme fällt zwangsläufig der Druck. Wenn nicht schnell genug Luft in den Tank nachströmt mißt der Sensor dann niedrigere Werte.
Ausprobieren kannst du das indem du die Pumpe bei geöffnetem Tankdeckel laufen läßt.
Hallo Rita, hallo Olaf,
herzlich willkommen hier im LinerTreff
Hallo Tobi,
hab's bei mir mal ausprobiert. Hier 2 scripts die den Wert Altitude auf register nummer 1025 schreiben
Das erste als Interger, (was für Altitude ausreichend ist, da die GPS-höhenangabe eh nur auf ein paar m genau ist)
Das zweit als Float (wäre z.B für Latitude, Longitude die Wahl - hier können nachkomma-stellen natürlich nicht ignoriert werden)
Script 2 wird dadurch etwas komplizierter weil man 2 register schreiben muß und vorher den float-wert auf die 2 register umwandeln muß
Leider finde ich nirgendwo eine Beschreibung der LUA-Einbindung in rutos. Könnte sein daß es bereits funktionsbibliotheken gibt für float nach register umwandlung. Damit würde das 2. script natürlich etwas einfacher.
!! Werden beim Anlegen der 'Data to Server'-collection die Namen der Inputs vergeben, müssen die im script angepasst werden. (im Beispiel habe ich den default-wert 'collection1_input1' beibehalten.
Script 1: Integer
function send_data(data)
local json = require("luci.jsonc")
local socket = require("socket")
local obj = json.parse(data)
if not obj or not obj.collection1_input1 then
os.execute("logger -t LUA_MODBUS 'Invalid JSON'")
return -1
end
local gps = obj.collection1_input1
local altitude = gps.altitude
----------------------------------------------------------------
-- Modbus TCP Verbindung
----------------------------------------------------------------
local tcp = assert(socket.tcp())
tcp:settimeout(2)
local ok, err = tcp:connect("127.0.0.1", 502)
if not ok then
os.execute("logger -t LUA_MODBUS 'Connect error: " ..
tostring(err) .. "'")
return -1
end
----------------------------------------------------------------
-- ALTITUDE
--
-- 2 Bytes / 1 Holding Register
-- Auflösung 1m
--
----------------------------------------------------------------
local request = string.char(
0x00, 0x02, -- Transaction ID
0x00, 0x00, -- Protocol ID
0x00, 0x06, -- Length = 6
0x01, -- Unit ID
0x06, -- FC06
0x04, 0x00, -- Register 1024
math.floor(altitude / 256), -- high
math.floor(altitude) % 256 -- low
)
local sent, send_err = tcp:send(request)
if not sent then
os.execute("logger -t LUA_MODBUS 'Altitude send error: " ..
tostring(send_err) .. "'")
tcp:close()
return -1
end
tcp:receive(12)
tcp:close()
----------------------------------------------------------------
-- LOG
----------------------------------------------------------------
os.execute("logger -t LUA_MODBUS_INT 'GPS: altitude = " ..math.floor(altitude) .. "'")
return 0
end
Display More
Script 2 : Float
function send_data(data)
----------------------------------------------------------------
-- Hilfsfunktion: Float32 in 2 x 16-Bit Register zerlegen
----------------------------------------------------------------
local function float32_to_registers(value)
local sign = 0
if value < 0 then
sign = 1
value = -value
end
if value == 0 then
return 0, 0
end
-- Exponent bestimmen
local exponent = math.floor(math.log(value) / math.log(2))
-- Mantisse normalisieren
local mantissa = value / (2 ^ exponent)
-- IEEE754 Mantisse
local mantissa_int =
math.floor((mantissa - 1) * 8388608 + 0.5)
-- Exponent + Vorzeichen
local exponent_bits = exponent + 127
local b1 =
sign * 128 +
math.floor(exponent_bits / 2)
-- sauberer IEEE754 Aufbau über 32-Bit Integer
local bits =
sign * 2147483648 +
exponent_bits * 8388608 +
mantissa_int
local reg1 = math.floor(bits / 65536) % 65536
local reg2 = bits % 65536
return reg1,reg2
end
local json = require("luci.jsonc")
local socket = require("socket")
-- os.execute("logger 'LUA format data:" .. data .. "'")
local obj = json.parse(data)
if not obj or not obj.collection1_input1 then
os.execute("logger -t LUA_MODBUS 'Invalid JSON'")
return -1
end
local gps = obj.collection1_input1
local altitude = gps.altitude
----------------------------------------------------------------
-- Modbus TCP Verbindung
----------------------------------------------------------------
local tcp = assert(socket.tcp())
tcp:settimeout(2)
local ok, err = tcp:connect("127.0.0.1", 502)
if not ok then
os.execute("logger -t LUA_MODBUS 'Connect error: " ..
tostring(err) .. "'")
return -1
end
----------------------------------------------------------------
-- ALTITUDE
--
-- Float32 = 4 Bytes
-- Register 100 + 101
-- Function Code 16 (0x10)
----------------------------------------------------------------
local reg1, reg2 = float32_to_registers(altitude)
--os.execute("logger -t LUA_MODBUS " ..high .. " ".. low .."")
local request2 = string.char(
0x00, 0x01, -- Transaction ID
0x00, 0x00, -- Protocol ID
0x00, 0x0B, -- Length = 11
0x01, -- Unit ID
0x10, -- FC16
0x04, 0x00, -- Start Register = 1024
0x00, 0x02, -- Quantity = 2 Register
0x04, -- Byte count = 4
math.floor(reg1 / 256), -- high
reg1 % 256, -- low
math.floor(reg2 / 256), -- high
reg2 % 256 -- low
)
local sent, send_err = tcp:send(request2)
if not sent then
os.execute("logger -t LUA_MODBUS 'Latitude send error: " ..
tostring(send_err) .. "'")
tcp:close()
return -1
end
-- Antwort lesen
tcp:receive(12)
tcp:close()
----------------------------------------------------------------
-- LOG
----------------------------------------------------------------
os.execute(string.format(
"logger -t LUA_MODBUS 'GPS: altitude=%.1f'",
altitude
))
return 0
end
Display More
Hallo Anna und Oliver,
herzlich willkommen hier im LinerTreff
Display MoreHallo Mill,
Dank Dir für den Input. Ja das könnte auch gehen und wäre sicherlich sauberer. Da müsste ich mich noch durchfuchsen.
Aber da die obige Lösung mit Startscript bei mir ausreichen gut funktioniert ist die Ambition da, na ja
Mal gucken wann ich Motivation dazu finde. Oder magst Du schnell? Dann stehts allen zur Verfügung wenn es mal einer sucht.
Grüße aus dem Allgäu
Tobi
Hallo Tobi,
ich brauch's nicht. Hatte mir das 'Data to Server' irgendwann mal angekuckt und gedacht es könnte dir hier von Nutzen sein.
Falls du mit 'durchfuchsen' den 'Data to Server' meinst - das ist recht einfach.
1) neue collection anlegen
2) Zu der collection ein Input hinzufügen (für GPS Daten)
3) den server als LUA konfigurieren
3) Hier kanns du Download anwählen und erhältst folgendes script. Das mitgelieferte Demoscript schreibt die Daten ins log,
(anzeige mit logread oder logread | grep LUA)
Script anpassen und mit 'browse' hochladen.. Das script wird am server in '/etc/vuci-uploads'. gespeichert.
Anstelle des logger-output dann den altitude-wert ins Modbus register schreibt.
--Available variabes:
-- data_sender.sender_id - unique ID of the collection
-- data_sender.name - name of the instance
-- data_sender.section - name of the config section
-- data_sender.version - LUA plugin version
-- data - data to be sent
--
--Number value must be returned. 0 - success, 1 - error
function send_data(data)
os.execute("logger 'LUA data:" .. data .. "'")
return 0
end
Display More
Danke,
interessanterweise ist nur rechts eine Schraube! Links nichts.
Hängt vielleicht vom Modell/Baujahr ab. Bei mir gibts auf beiden Seite ein kleine inbus-Schraube
Hallo Tobi,
Nur mal 'ne Idee
mit dem Service 'Data to Server' müsste es eigentlich ohne den Umweg übers file-schreiben funktionieren.
Eine Collection anlegen, die ein LUA script aufruft. Als Input für die Collection GPS auswählen.
Aus den GPS-Daten im script die höhe auslesen und ins Modbus-Register schreiben.
Da die collection ihr eigenes script hat, gäb's auch keine Kollision mit dem starrt-script (falls anderwertig benutzt)
Hallo Tom.
Sieht also so aus, daß deine Achse der Treppe mitdreht (also verbunden ist mit dem Moter),
Der Mitnehmer der die Stufen bewegt allerdings ist nicht mit der Achse verbunden, weil die Schrauben kaputt oder lose sind.
Zu deiner Frage: Diese Schrauben links und rechts müssen fest sein - wie immer gilt, nach fest kommt ab.
p.s. bei mir sind's 2 inbus-schrauben, ca 3-4mm, vermutlich Stahl. Fest heißt also nur ein paar Nm
Hallo Tom,
welche Schraube meinst du ? Achse des Motors und Achse der Treppe sind eigentlich nur ineinander gesteckt und der Scheerstift sorgt für die Mitnahme.
Befindet sich die Schraube außerhalb des Gehäusemotors am Drehknopf ?
Es kommt auf einen Versuch an, ob das klappt. Warum schreiben die „Mindesttankhöhe“?
Kann der Sensor nichts unter 150mm erfassen?
Dann wird es nämlich schwierig mit der Messung ab 150mm Füllhöhe.
Vielleicht gibt es beim Hersteller/Vertreiber nähere Infos dazu, was die 150mm Mindesthöhe bedeuten.
Hallo Dieter,
in der Beschreibung ist 'Mindesthöhe Tank' angegeben, nicht mindest Füllhöhe.
Die technischen Daten sagen klar: mindest Tankhöhe 150mm.
Sollte also für die meisten Womos passen.
Hallo Stefan,
herzlich willkommen hier im LinerTreff
... Übrigens empfiehlt es sich, die Gree per Sicherungsautomat bei Nichtgebrauch abzuschalten. Der Ruhestrom liegt bei 20-30W
Hallo allerseits,
hat jemand ähnliche Werte bei der Gree Klimananlage ? Scheint mir extrem hoch. Bis 1W (oder 3W falls mit WLAN) würde ich ja noch akzeptabel finden, aber 20-30 ?
Dieter, ich gehe mal davon aus, daß du hier Wirkleistung meinst und nicht etwa Scheinleistung
Die elektronische Ölstandskontrolle (einen Peilstab gibt es nicht) kann nur durchgeführt werden wenn der Motor nicht läuft. Nach 5 min Motorstillstand soll der Ölstand geprüft werden.
Hallo Hans,
wenn der Motor Betriebstemperatur hat reichen die 5 min sicher.
Nach kurzer Fahrt kann es allerdings Stunden dauern bis das Öl wieder komplett in die Wanne abgelaufen ist.
Der Verbrauch ist im üblichen Rahmen.
Hallo Jörg,
herzlich willkommen hier im LinerTreff
Hallo Mario,
herzlich willkommen hier im LinerTreff
... Ohne löten gibt es einfach Speicherprobleme, das wäre natürlich meine präferierte Lösung gewesen. Ich wollte ein dynamisches Modul haben falls mehr FB SmartIR Codes dazukämen sollte man die auswählen und dann von Github holen können. ...
Hallo Stefan,
deshalb hab' ich ja deine Lösung als 'High End' oder full-fledged bezeichnet.
Meine dagegen ist eher das Einstiegsmodell (inklusive der angesprochenen Speicherproblemen) , mit dem ich ein IR-Gerät im wesentlichen nur ein- oder ausschalte.
Das ganze ausführlich zu beschreiben, da fehlt mir ehrlich gesagt etwas die Muße - bin halt noch von der (ganz) alten Schule : Kommentare und Dokumentationen sind mir fremd, kannte Herr Hollerit ja auch nicht.
Wer weiß, vielleicht mal an langen Winterabenden...