@sdetweil :-)
Dear Sam,
for all of your effort and all of your deep knowledge, all the kindness you are constantly showing
- for me you ARE the Master Mind!
THANKS for all of this!
Ralf
@sdetweil :-)
Dear Sam,
for all of your effort and all of your deep knowledge, all the kindness you are constantly showing
THANKS for all of this!
Ralf
As you know for sure I‘m really a fan of MMM-Pir - for (my) good reasons.
For a friend of mine I‘ve build a second mirror and because he is heavily engaged in smarten his home :-) I‘ve considered to use alternatives to a PIR sensor - because they are definitely unsmart…
With this I‘ve seeked for an integration for his homee solution which is not really capable for MQTT and randomly found a really cool device which I would like to share with you, guys!
This is not a „motion“ sensor but a real „presence“ sensor (radar based, not infrared) which even is able to identify a silently sitting person!
In addition this genius thingy talks MQTT, delivers the „presence“ status in a JSON object and so it is absolutely easy to use it with magic mirror and the herein presented module MQTTScreenOnOff.
This sensor is pretty expensive and invented and build by a small startup here in Germany 🇩🇪 .
You can find this sensor here.
The webpage is in German but for some reason the default UI is in English :-)
From my perspective this is defnitely worth the money (this is the fourth radar sensor I‘ve bought but the first one which is in the near of „working“)
The mqttTopic transmitted is: „tele/senvolon/STATE“ and the mqttPayloadOccupancyField is „presence“.
(The middle part is configurable in the sensor‘s UI, I‘ve decided to use vendor‘s name).
I REALLY miss the nice animation and the dimming of MMM-Pir but I‘m definitely thinking about to use this sensor as well.
(Which would be a major effort because my Mirror has an exact slot for the PIR sensor which is round and this sensor is squared so I will have to do some rough wood-work. On the other hand I MAY place the sensor away from the mirror on the opposite wall or in an other place and hide the hole from PIR sensor ….)
Nice MQTT module - thanks for this idea!
Warmest regards,
Ralf
Ich höre jetzt hier auf, das es zu Doppelpostings kommt. Sam ist hier definitiv das MASTER MIND, der dir sicher helfen kann und wird…
Gruß,
Ralf
@chris47803 said in Update Master Branch:
@rkorell said in Update Master Branch:
@chris47803 Achso, das was Sam meint und die Fehlermeldungen bedeuten: Du hast offensichtlich in den genannten Modulen Änderungen vorgenommen…
Das „merkt“ das Update und verweigert sich…Gruß,
RalfJa habe ich.
In calender die Anzahl der Ausgaben von 10 auf 20 geändert.
Bei den anderen Modulen weiß ich nicht mehr was ich geändert habe.
Wie Sam schrieb: Solche Änderungen niemals im Quellcode der Mirror-Programme vornehmen…
Stets: Parameter des Modulaufrufs in der Datei config.js oder (Stil-Anpassungen) in der Datei custom.css …
WENN Änderungen dennoch vorgenommen werden, ist es immer eine gute Idee, diese Änderungen zu dokumentieren oder gut kenntlich zu machen, da sonst updates nicht mehr funktionieren.
wenn Du nicht mehr weißt, WAS Du gemacht hast, hbist Du schon auf einem guten Weg: Du hast ja die modifizierten Dateien umbenannt - dann sind die Änderungen ja enthalten. Beim git pull hast Du die neuen (originalen) Dateien erhalten.
Hier hilft die der Unix Befehl „diff“, der dir die Unterschiede zweier Dateien ausgibt…
Gruß,
Ralf
@chris47803 said in Update Master Branch:
@rkorell said in Update Master Branch:
@chris47803 Und noch einen (dann höre ich auch auf :-) ) : Prüfe auch, ob du das Update überhaupt benötigst…
Wenn Dich die Meldung stört, kannst du diese auch im autoupdater einfach deaktivieren…Gruß,
RalfWie überprüfe ich das?
Im changelog der aktuellen Version hier.
Gruß,
Ralf
@chris47803 said in Update Master Branch:
Ich habe diese Dateien jetzt umbenannt.
git pull ausgeführt.
reboot
Nun startet MM nicht mehr.
Mist, da war ich fünf Minuten zu spät…
Soweit ich mich (dunkel!) erinnere benötigst Du ausser git pull noch einen nmp install ……
Ich glaube aber, der war irgendwie speziell.
Bin nicht sicher.
Sam weiß das ganz bestimmt.
Forum-Suche hilft Dir aber: mirror doesn‘t start gibt‘s dutzende Male …
Gruß,
Ralf
@chris47803 Und noch einen (dann höre ich auch auf :-) ) : Prüfe auch, ob du das Update überhaupt benötigst…
Wenn Dich die Meldung stört, kannst du diese auch im autoupdater einfach deaktivieren…
Gruß,
Ralf
@chris47803 Achso, das was Sam meint und die Fehlermeldungen bedeuten: Du hast offensichtlich in den genannten Modulen Änderungen vorgenommen…
Das „merkt“ das Update und verweigert sich…
Gruß,
Ralf
@chris47803 Zudem ist es IMMER eine SEHR gute Idee, das Update script von Sam (@sdetweil ) zu nutzen.
Das Forum ist voll von postings, die bei selbstgemachten Updates Probleme melden …
Gruß & viel Erfolg,
Ralf
@JohnGalt Really COOL!
Thanks for sharing!
Ralf
@JohnGalt cool.
congratulations.
It’s may be worth to show the community what you have done?
Regards,
Ralf
@xppaicyber
Cool!
If I understood your structure and approach correctly than this nice module could be used for any of recurring events, because the events are declared in the config.js definition of the module.
Unfortunately you have hard coded the header of the module
header.innerHTML = "NOUNISH REMINDERS";
Do you think it is possible to get this header configurable as well?
This would be really great!
Thanks a lot!
Warm regards,
Ralf
@htilburgs :-)
this is correct on console window.
console didn’t know about display unless you’re telling him what display to use.
As far as I know you can use
DISPLAY=:0.0
as a hint upfront your terminal command.
At least for xrandr this works and is necessary.
DISPLAY=:0.0 xrandr --output HDMI-1 --off
is my xrandr console equivalent for the “normal” command
xrandr --output HDMI-1 --off
I’m not THAT sure if this is true for wlr-randr .
(Because wlr-randr do have this environment variable “WAYLAND_DISPLAY” which is not the case for xrandr…)
HTH & regards,
Ralf
@JohnGalt
just seen while re-reading my last posting:
nodehelper.js (the part of the module which is communicating with the python program and so with the sensor) is calling python3 :
exec(`python3 ./modules/MMM-BME280/bme280.py ${deviceAddr}`, (error, stdout) => {
but the python script itself is referencing python 2 (see above post, source code of bme280.py, 1st line:
#!/usr/bin/python
I guess this must match and doesn’t …
So may this is the cause of your problems.
And if this is true it is may really hard to get this working because you may run in several incompatibilities and library-conflicts …
Regards,
Ralf
the python script you are looking for is bme280.py
#!/usr/bin/python
#--------------------------------------
# ___ ___ _ ____
# / _ \/ _ \(_) __/__ __ __
# / , _/ ___/ /\ \/ _ \/ // /
# /_/|_/_/ /_/___/ .__/\_, /
# /_/ /___/
#
# bme280.py
# Read data from a digital pressure sensor.
#
# Official datasheet available from :
# https://www.bosch-sensortec.com/bst/products/all_products/bme280
#
# Author : Matt Hawkins
# Date : 21/01/2018
#
# https://www.raspberrypi-spy.co.uk/
#
#--------------------------------------
import smbus
import sys
import time
from ctypes import c_short
from ctypes import c_byte
from ctypes import c_ubyte
DEVICE = 0x76 # Default device I2C address
try: #override device address like '0x77'
DEVICE = int(sys.argv[1], 16)
except:
pass
bus = smbus.SMBus(1) # Rev 2 Pi, Pi 2 & Pi 3 uses bus 1
# Rev 1 Pi uses bus 0
def getShort(data, index):
# return two bytes from data as a signed 16-bit value
return c_short((data[index+1] << 8) + data[index]).value
def getUShort(data, index):
# return two bytes from data as an unsigned 16-bit value
return (data[index+1] << 8) + data[index]
def getChar(data,index):
# return one byte from data as a signed char
result = data[index]
if result > 127:
result -= 256
return result
def getUChar(data,index):
# return one byte from data as an unsigned char
result = data[index] & 0xFF
return result
def readBME280ID(addr=DEVICE):
# Chip ID Register Address
REG_ID = 0xD0
(chip_id, chip_version) = bus.read_i2c_block_data(addr, REG_ID, 2)
return (chip_id, chip_version)
def readBME280All(addr=DEVICE):
# Register Addresses
REG_DATA = 0xF7
REG_CONTROL = 0xF4
REG_CONFIG = 0xF5
REG_CONTROL_HUM = 0xF2
REG_HUM_MSB = 0xFD
REG_HUM_LSB = 0xFE
# Oversample setting - page 27
OVERSAMPLE_TEMP = 2
OVERSAMPLE_PRES = 2
MODE = 1
# Oversample setting for humidity register - page 26
OVERSAMPLE_HUM = 2
bus.write_byte_data(addr, REG_CONTROL_HUM, OVERSAMPLE_HUM)
control = OVERSAMPLE_TEMP<<5 | OVERSAMPLE_PRES<<2 | MODE
bus.write_byte_data(addr, REG_CONTROL, control)
# Read blocks of calibration data from EEPROM
# See Page 22 data sheet
cal1 = bus.read_i2c_block_data(addr, 0x88, 24)
cal2 = bus.read_i2c_block_data(addr, 0xA1, 1)
cal3 = bus.read_i2c_block_data(addr, 0xE1, 7)
# Convert byte data to word values
dig_T1 = getUShort(cal1, 0)
dig_T2 = getShort(cal1, 2)
dig_T3 = getShort(cal1, 4)
dig_P1 = getUShort(cal1, 6)
dig_P2 = getShort(cal1, 8)
dig_P3 = getShort(cal1, 10)
dig_P4 = getShort(cal1, 12)
dig_P5 = getShort(cal1, 14)
dig_P6 = getShort(cal1, 16)
dig_P7 = getShort(cal1, 18)
dig_P8 = getShort(cal1, 20)
dig_P9 = getShort(cal1, 22)
dig_H1 = getUChar(cal2, 0)
dig_H2 = getShort(cal3, 0)
dig_H3 = getUChar(cal3, 2)
dig_H4 = getChar(cal3, 3)
dig_H4 = (dig_H4 << 24) >> 20
dig_H4 = dig_H4 | (getChar(cal3, 4) & 0x0F)
dig_H5 = getChar(cal3, 5)
dig_H5 = (dig_H5 << 24) >> 20
dig_H5 = dig_H5 | (getUChar(cal3, 4) >> 4 & 0x0F)
dig_H6 = getChar(cal3, 6)
# Wait in ms (Datasheet Appendix B: Measurement time and current calculation)
wait_time = 1.25 + (2.3 * OVERSAMPLE_TEMP) + ((2.3 * OVERSAMPLE_PRES) + 0.575) + ((2.3 * OVERSAMPLE_HUM)+0.575)
time.sleep(wait_time/1000) # Wait the required time
# Read temperature/pressure/humidity
data = bus.read_i2c_block_data(addr, REG_DATA, 8)
pres_raw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4)
temp_raw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4)
hum_raw = (data[6] << 8) | data[7]
#Refine temperature
var1 = ((((temp_raw>>3)-(dig_T1<<1)))*(dig_T2)) >> 11
var2 = (((((temp_raw>>4) - (dig_T1)) * ((temp_raw>>4) - (dig_T1))) >> 12) * (dig_T3)) >> 14
t_fine = var1+var2
temperature = float(((t_fine * 5) + 128) >> 8);
# Refine pressure and adjust for temperature
var1 = t_fine / 2.0 - 64000.0
var2 = var1 * var1 * dig_P6 / 32768.0
var2 = var2 + var1 * dig_P5 * 2.0
var2 = var2 / 4.0 + dig_P4 * 65536.0
var1 = (dig_P3 * var1 * var1 / 524288.0 + dig_P2 * var1) / 524288.0
var1 = (1.0 + var1 / 32768.0) * dig_P1
if var1 == 0:
pressure=0
else:
pressure = 1048576.0 - pres_raw
pressure = ((pressure - var2 / 4096.0) * 6250.0) / var1
var1 = dig_P9 * pressure * pressure / 2147483648.0
var2 = pressure * dig_P8 / 32768.0
pressure = pressure + (var1 + var2 + dig_P7) / 16.0
# Refine humidity
humidity = t_fine - 76800.0
humidity = (hum_raw - (dig_H4 * 64.0 + dig_H5 / 16384.0 * humidity)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * humidity * (1.0 + dig_H3 / 67108864.0 * humidity)))
humidity = humidity * (1.0 - dig_H1 * humidity / 524288.0)
if humidity > 100:
humidity = 100
elif humidity < 0:
humidity = 0
return temperature/100.0,pressure/100.0,humidity
def main():
# (chip_id, chip_version) = readBME280ID()
# print("Chip ID :", chip_id)
# print("Version :", chip_version)
temperature,pressure,humidity = readBME280All()
print(round(temperature,1),round(humidity,1),round(pressure,1))
if __name__=="__main__":
main()
@JohnGalt said in AHT20 Humidity + Temperature Sensor:
Remote I/O error
The given error seems to by not a program but an I/O problem.
I’m not familiar with this sensor so I do not know how to connect and - most important - how to figure out the right “deviceAddress” - it seems that there is the error located.
Either the address isn’t the correct one or the IO channel is somehow broken.
For the latter came in my mind: if this is a I2C conected device - do you have enabled I2C on your Raspi?
I’ve tried to “understand” what happens in the python script above as well as in the C-exmaple program on the Bosch product page for bme280 sensor, but didn’t got it…
Regards,
Ralf
@htilburgs said in V2.31.0 unable to start:
-bash: wlr_randr: command not found
shouldn’t it be wlr-randr ?
Regards,
Ralf
@sdetweil said in MMM-Homeassistant-sensors doesn't work anymore, recommended alternative.:
git clone
Dear Sam, you are SO right!
Sorry - typo …
Have edited above in my first post.
Thanks for paying attention!
Regards,
Ralf
@flac_rules
If you git-pull the second one - which seems to have the exact same name - the git-clone (<- edited!) will fail.
But if you rename the „original“ directory with e.g.
mv MMM-homeassistant-sensors MMM-homeassistant-sensors_original
you should be able to issue a git clone (<- edited) for the second variant, install this and give it a try.
If t his doesn‘t work, either - delete the newly created directory and re-rename the original one …
Regards,
Ralf
@JohnGalt Good morning,
do you have connected the sensors locally to the same PI where the mirror is running?
What script are you using and what output this sends?
If you are able to modify these scripts to deliver a JSON output you may can use MMM-JsonValue for displaying the results…
Regards,
Ralf