smiletolerantly

joined 2 years ago
[–] smiletolerantly@awful.systems 28 points 7 hours ago (2 children)

Hm, ist das Auto denn jetzt wirklich an Verbrennung gestorben, oder nur mit Verbrennung? πŸ€”

[–] smiletolerantly@awful.systems 20 points 12 hours ago* (last edited 12 hours ago) (1 children)

[We want to get rid of] annual profit-sharing bonuses

Lmao, not even trying to hide behind "oh, costs have just grown so much!", are we.

Yes, I am πŸ˜„

Though I originally did get this for email. Wanted a dedicated server with triple SSDs for redundancy, and the i7+64G was the cheapest option!

Ah, different times.

But yes, I'm regularly maxing out CPU + RAM for hours on end.

[–] smiletolerantly@awful.systems 4 points 13 hours ago (2 children)

~46€/month for the server via their server auctions (triple 512GB SSDs in a zpool, 64GB RAM, i7-7700, in their German datacenter with unlimited Gbit internet.... not too shabby!) . Unfortunately, looking at them now, they've shot up in price (wonder why... πŸ™„).

That's overkill though. As long as you can get something with full root access and a dedicated IP (which includes their VPS offerings, I am pretty sure), you're good.

I know everyone is already glazing Hetzner, but let me just add to the pile... I've been customer at a lot of (mostly web, sometimes vps)-hosters over the years, but I don't think I'll ever switch away from Hetzner again. Even if they raise prices further. They give you full control, don't try to upsell, and more importantly, have excellent support.

As others have mentioned, hosters often block outgoing email ports. This includes Hetzner. Sent them an email, 5min later, ports are open. Need a KVM? Press a button, it'll be ready in a couple of minutes, once a technician has walked over to your machine and plugged it in. Are you as stupid as I am and have no access to the email account receiving the KVM link? Call support, no queue, immediate problem resolution. One of the SSDs looks like it's gonna give out soon? Press a button in the dashboard, a technician will come around in a couple of minutes and swap the drive, free of charge.

IDK it just feels like I'm getting enterprise support for consumer prices.

Also I just now realize you only asked for a price, so everything beyond the first sentence is just me rambling.

[–] smiletolerantly@awful.systems 10 points 14 hours ago (1 children)

Maybe they're turned off by your spelling?

[–] smiletolerantly@awful.systems 8 points 15 hours ago (5 children)

I'm hosting my own, on a dedicated Hetzner server (used for a bunch of stuff, "dedicated" as in "only me on the hardware"), using nixos-mailserver.

I've a 10/10 score on all the spam tests / deliverability tests I could find. The only deliverability issue I've ever had is t-online, but only because they require you to apply for being allowlisted, lmao. (Was one quick email to do that though, so... fine.)

It's been a couple of years of smooth sailing now, so I'm not super worried anymore; esp. in the beginning though, it was a bit anxiety-inducing (and I did cause some downtime by fucking up my bootloader and needing a KVM from Hetzner at one point, that was a very sweaty evening not least because the email address I had put for contact info was, well, handled by the server that was down. Btw Hetzner email you the link to your KVM. Fun times!).

Anyways: I'm really happy with my setup now, in all aspects. Calendar and contacts self-hosting is also great.

But, just so you know: you will not be able to do this on your residential IP. Doesn't matter how hard you try, it will not work. You'll be able to receive emails no problem, but if you're lucky you'll end up in people's spam folder. More likely, the recipient server will just outright reject or discard your mail.

That sounds like a woke to me

Yes, encrypted (otherwise what's the point? πŸ˜„). I'll admit I haven't tried the PGP version yet. How's client support? For OMEMO it's pretty lackluster, from what I've heard not much different for PGP?

In any case, perfect forward secrecy is definitely a good thing / strength, but I'd like a way to re-encrypt messages from an old device, just as an example, during the setup process; or a standardized way to export all history; or just something beyond "either use worse or no encryption, or loose access to your history eventually".

[–] smiletolerantly@awful.systems 8 points 2 days ago (3 children)

I unfortunately wouldn't call it solved. I host XMPP and Matrix, (and a STUN/TURN server, and a Livekit server for the modern matrix calls...), and nothing is perfect.

Prosody is really great because it's so no-nonsense. It doesn't hog resources or choke up like matrix servers do if you suggest to them that maybe they could deliver this text message? :3 Oh, no, it's "hold for 2 weeks despite the recipient being online" again? Ok...

But XMPP is still incredibly hard to recommend for me, because

  1. no way to read old chats on new devices, which honestly is close to a deal-breaker for many people, myself inclided. And
  2. apart from maybe monocles on android, the clients just suck ass. They're bad. Their UI/UX is stuck 20 years ago, and that does matter.

Hence why I still mostly use Matrix... Even though it's such a stupid, stupid protocol.

Going ok, just started a new textbook. I'm motivated, but... Despite being the next book in the series, technically, it's quite different and a big jump in difficulty.

Unrelated, I'm really unhappy with the tools I've found for studying/repeating/exercising grammar. I have a very clear idea what would actually be helpful (for me, personally), but I'm a bit afraid of opening another giant time-sinkhole by trying to implement something for this.

[–] smiletolerantly@awful.systems 2 points 3 days ago (1 children)

I have a theory that the transition from cool fall weather to a heated apartment is what triggers flowering for me. At least my calamondin is blooming right now, and my kumquat and lemon trees are well on their way to doing the same.

That sounds very plausible yeah. Also, oh, kumquat sounds great to keep as a tree! Slightly envious!

As far as fertilizing goes, I do repot them regularly (and mix in compost from the garden, which has quite a lot of nutrients), but I don’t actually use any special citrus fertilizer (even though I’m pretty sure I have a bottle of it sitting around somewhere).

Try finding and using the citrus fertilizer. Not because I doubt the nutritiousness of your compost, but because citrus wants some trace elements not usually found in compost, first and foremost iron. (Which is why a lot of citrus fertilizer is deeply red when you mix it with water!)

In the spring, I usually put the plants back on the balcony around mid-May, after the last frost. I live in a low mountain range, and we get late frosts here from time to time… since the plants start sprouting in the spring as the days get longer, I don’t want to subject them to that right away, because the young shoots are probably even less frost-hardy than the rest.

Yeah also makes sense. I don't know what kinds exactly you are saying, so I can't really comment on that. (I unfortunately have no place to overwinter mine in the house, they stay out in the greenhouse you can see in the pictures over the winter. All of my citrus should in theory be OK with -10C. I don't know if being out in the greenhouse is a hindrance for them come spring, or a head start.)

Yeah, those very creatures! Although in my case, it’s more the non-woolly variety. In my experience, home remedies often don’t work very well because of their shells.

Gah, yeah, I know your pain. I try to mechanically squash them when I see them, and then use neem oil 2-3 times in two week intervals. It's... effective enough, but never 100%.

[–] smiletolerantly@awful.systems 7 points 4 days ago (3 children)

Thanks :)

When and how did your plants start bearing fruit, and when will they ripen?

This plant in particular is 3 years old. It did have some fruit before, but they never ripened. I think it's just the insane amount of sun/heat we had this year.

they usually bloom in the fall

I have also noticed that my citrus bloom at seemingly random times, and not all at the same time. Maybe it's just bad luck. Do you feed them with a citrus fertilizer? Also, when are you putting them back outside?

those pesky scale insects

Wait, which ones are we talking about? I hate these buggers with a burning passion, but I think you are talking about something else?

 

Blame it on the hot summer... Lots of other staple crops had a disappointing harvest for me this year.







(Among other things) Made some Orangeat, tastes incredible:

Lemons lagging a bit behind. Also lots of fruit (and larger than usual, but not ripening yet. Wondering if I can just pluck them and let them ripen inside, in the warmth?

And lastly, this little fig came to us this year as a quite small seedling, and somehow already managed to produce some ripe fruit (albeit, not very sweet):


 

are you affected?

  • is your sshd running on musl? (alpine, openwrt, buildroot, yocto)
  • is it not using pam? alpine's openssh-server doesn't by default, or maybe you set UsePAM no
  • are password logins still on? they are by default
  • is there an account with just * as its password? key-only users, ldap users, root on alpine
  • and some other account with a real password?
  • then that * account takes any password between 257 and 1024 characters

on alpine's official aws and azure images that's the default alpine user, and it has passwordless doas. so it's root

on debian, ubuntu, fedora or anything else with glibc? going through pam? dropbear? openbsd? you're fine

 

Update your stuff, folks. I've had a fun day at work.

 

cross-posted from: https://awful.systems/post/8238756

Basically, STT quality has kept me from switching to HomeAssistant's voice assistant features. The default matcher (Hassil) is waaaaaaay to strict, and LLMs are slow, constly, and/or a privacy nightmare, plus I don't like them.

I really thought there would be something available that just matches your STT output to the configured intents, but apparently not, so I've built in myself.

Finally convinced my GF to throw Alexa in the bin :)

Here's an excerpt from the README, and feel free to AMA:

🌲 Problem statement and solution

Speech-To-Text (STT) output, especially fast and local STT output, is often simply bad. HomeAssistant's own Hassil is incredibly picky: your STT output must match exactly to one of the configured intents.

There's two paths forward from this: Upgrade your hardware to support better STT, or try to figure out what the speaker probably meant to say from the garbled output.

This project does the latter.

With this custom integration, "Lights on in live in room" will actually turn on the lights in your living room. So will, for that matter, "lighrts on inn livainriomm".

Short demo, first with closest-intent, then with bare Hassil:

demo gif

Β 

πŸ“œ Highlights

  • Pattern expansion. Expanding <expansion_rules>, (alternatives|to), and [optional|alternatives] all work, including on HASS-defined lists like your home's areas and entities!
  • Slot extraction. Both for wildcard slots (like for adding something to the shopping list, where the {item} is a wildcard), and against slots like {timer_hours:hours} with a fixed set of possibilities.
  • Fuzzy slot resolution. For list-like slots and expansion rules (including your areas and entities!), fuzzy match the slot values to the available options. Allows "livikroom" to be corrected to "living room".
  • Actual intent handling still done by Hassil. closest-intent simply corrects your STT output or typos to the closest matching intent, and then forwards a nice, canonical sentence to Hassil, who then deals with the intent just like if you had spoken/typed perfectly.
  • 100% LLM-free. Just uses relatively simple fuzzy matching of the input against your intents, plus some clever-ish (well... working, at least) tricks to improve the results.
  • Fallback agent support. OK, I said 100% LLM-free, but if you absolutely want to, you can use one as fallback. More on this below.
  • Is fast :) (as in: basically instant for a couple hundred configured custom intents).

Note: closest-intent is completely language-agnostic. All the examples in this README are in English, but you can use it with any language you like; personally, I use it in German.

Β 

πŸ“‹ Examples

Here's some examples of things I said, what my STT (wyoming-faster-whisper-base) understood, what HomeAssistant was able to do/answer after passing the STT output through closest-intent, and what the same STT output would have resulted in with just bare Hassil.

Note: These are actual results I got when speaking the "what was said" sentences in my phone. I'm a native German speaker, and so I do have an accent, but this pretty closely matches my experience when using the German-language version of whisper. The "bare Hassil" responses are what I got after 1:1 pasting the STT output into the voice assist chat window with closest-intent disabled.

| what was said | STT output | with Closest Intent | bare Hassil | |


|


|


|


|

| start cleaning | Star cleaning. | βœ… Cleaning started. | ❌ Sorry, I couldn't understand that | | stop cleaning | Stop clenching! | βœ… Cleaning stopped. | ❌ Sorry, I am not aware of any device called clenching | | vacuum the living room | Vacuum Believing Room | βœ… Cleaning the living room. | ❌ Sorry, I am unaware of any floor called Believing Room | | clean the office | King the Office | βœ… Cleaning the office. | ❌ Sorry, there are multiple devices called Office (author's note: no there aren't, wtf?) | | vacuum the kitchen | Back here in the kitchen. | βœ… Cleaning the kitchen. | ❌ Sorry, I couldn't understand that | | how warm is it in the bedroom | Our all is in the best room. | βœ… In the bedroom, the temperature is currently.... | ❌ Sorry, I am not aware of any area called best room | | add milk to the shopping list | Add milk to the chauvinist. | βœ… "milk" added. | ❌ Sorry, I am not aware of any device called chauvinist | | put call dentist on my todo list | put call dentist on my tudu list | βœ… "call dentist" added. | ❌ Sorry, I am not aware of any device called tudu | | turn on the water pump | turn on the what her pump | βœ… Turned on the water pump. | ❌ Sorry, I am not aware of any device called what her pump | | play some music | Place on music | βœ… Playing music. | ❌ Sorry, I am not aware of any area called music | | resume the music | Renew Music | βœ… Resuming. | ❌ Sorry, I couldn't understand that | | pause the music | Post music | βœ… Paused. | ❌ Sorry, I couldn't understand that | | next track | next rack | βœ… Next track. | ❌ Sorry, I am not aware of any device called rack | | enable shuffle | an able shuffling | βœ… Shuffle enabled. | ❌ Sorry, I couldn't understand that | | disable shuffle | Disable to schaffen. | βœ… Shuffle disabled. | ❌ Sorry, I am not aware of any device called Disable | | restart the player | Reset the plan. | βœ… Restarting the player. | ❌ Sorry, I am not aware of any area called Reset | | play a random album | Player random album | βœ… Playing a random album. | ❌ Sorry, I couldn't understand that | | play a random artist | Player and Immartist. | βœ… Playing a random artist. | ❌ Sorry, I couldn't understand that | | play the latest tracks | Plan the ladder tracks. | βœ… Playing recently added tracks. | ❌ Sorry, I am not aware of any area called Plan | | play recently played songs | Player recently played so... | βœ… Playing recently heard tracks. | ❌ Sorry, I couldn't understand that | | play playlist NieR | Play playlist NEAR! | βœ… Playing the playlist NieR. | ❌ Sorry, I couldn't understand that | | play my daily briefing | and play my daily breathing | βœ… Here is your daily briefing: ... | ❌ Sorry, I am not aware of any area called and play | | what time is it | What the hell is it? | βœ… It is 16:36. | βœ… It is 16:36. (author's note: okay, know what? earned. did not expect that.) | | what day is it today | One day is today. | βœ… Today is Friday. | βœ…/❌ May 8th, 2026 (author's note: that's the output for "What date is it?", but, eh, close enough) | | make the tv brighter | Make that CV brighter. | βœ… Screen is now bright. | ❌ Sorry, I couldn't understand that | | set the screen darker | The screen doctor. | βœ… Screen is now dark. | ❌ Sorry, I am not aware of any device called screen doctor | | what's the weather today | What's the matter with you? | βœ… Today, the weather is... | ❌ It is 16:36. (author's note: wait, WHAT?) | | how's the weather tomorrow morning | How's the better tomorrow? | βœ… Tomorrow morning, it will be... | ❌ Sorry, I am not aware of any area called How's | | what's the weather this week | What's the matter this weak | βœ… Monday:..., Tuesday:..., | ❌ It is 16:36. (author's note: sigh...) | | how's the weather at 5 o'clock | cast the red there at 5 o'clock | βœ… At 5 o'clock, it will be... | ❌ Sorry, I am not aware of any area called cast | | how windy is it right now | how windy is IR low | βœ… The wind is currently blowing with... | ❌ No timers. | | how windy will it be tonight | How will you be tonight? | βœ… Tonight, the wind speed will be around... | ❌ Sorry, I couldn't understand that | | how hot will it get today | How hard will it get today? | βœ… Today, temperatures will reach up to... | ❌ Sorry, I couldn't understand that | | will it rain today | with it right today | βœ… No rain is expected today. | ❌ Sorry, I couldn't understand that |

...you get the idea.

Β 

πŸ’‘ How it works

closest-intent is registered in HomeAssistant as a conversation agent. On startup, it parses (by default) all user-defined intents (or optionally, also the builtins ones). In this process, it also expands all rules, like <expansion_rule>, (alternatives|to), and [optionals], and notes where {slots} are located, and whether they are wildcards or belong to some list (like areas, entities, or the numbers 1-100).

When a user request comes in (via voice command or the chat box), closest-intent fuzzy-matches that request against those expanded rules. If the rule does not contain a slot, it is picked immediately. If it does contain a slot, closest-intent performs a sequence of fancy magic steps to find the best-fitting slot value among a range of possible positions within the top-scoring matched sentences. In practice, this often means "smallest slot-value on a word-boundary", but the extraction is not limited to that.

With the best match found, we then reconstruct the "canonical form", i.e. a sentence that Hassil will actually understand. If in your configured intents, "Play some music." exists, and closest-intent got "Place on music" and matched that to the intent, it will simply forward "Play some music." to Hassil. If the intent contained a slot, the extracted value will be substituted.

This guarantees that the sentence passed to Hassil will actually be understood, and allows us to not have to worry at all about performing actions, running scripts,...

If no matching intent could be found, we pass the exact input we got to the configured fallback agent. By default, that is simply Hassil (which again allows us to be lazy and not worry about proper error responses), or another agent, like a LLM.

 

Basically, STT quality has kept me from switching to HomeAssistant's voice assistant features. The default matcher (Hassil) is waaaaaaay to strict, and LLMs are slow, constly, and/or a privacy nightmare, plus I don't like them.

I really thought there would be something available that just matches your STT output to the configured intents, but apparently not, so I've built in myself.

Finally convinced my GF to throw Alexa in the bin :)

Here's an excerpt from the README, and feel free to AMA:

🌲 Problem statement and solution

Speech-To-Text (STT) output, especially fast and local STT output, is often simply bad. HomeAssistant's own Hassil is incredibly picky: your STT output must match exactly to one of the configured intents.

There's two paths forward from this: Upgrade your hardware to support better STT, or try to figure out what the speaker probably meant to say from the garbled output.

This project does the latter.

With this custom integration, "Lights on in live in room" will actually turn on the lights in your living room. So will, for that matter, "lighrts on inn livainriomm".

Short demo, first with closest-intent, then with bare Hassil:

demo gif

Β 

πŸ“œ Highlights

  • Pattern expansion. Expanding <expansion_rules>, (alternatives|to), and [optional|alternatives] all work, including on HASS-defined lists like your home's areas and entities!
  • Slot extraction. Both for wildcard slots (like for adding something to the shopping list, where the {item} is a wildcard), and against slots like {timer_hours:hours} with a fixed set of possibilities.
  • Fuzzy slot resolution. For list-like slots and expansion rules (including your areas and entities!), fuzzy match the slot values to the available options. Allows "livikroom" to be corrected to "living room".
  • Actual intent handling still done by Hassil. closest-intent simply corrects your STT output or typos to the closest matching intent, and then forwards a nice, canonical sentence to Hassil, who then deals with the intent just like if you had spoken/typed perfectly.
  • 100% LLM-free. Just uses relatively simple fuzzy matching of the input against your intents, plus some clever-ish (well... working, at least) tricks to improve the results.
  • Fallback agent support. OK, I said 100% LLM-free, but if you absolutely want to, you can use one as fallback. More on this below.
  • Is fast :) (as in: basically instant for a couple hundred configured custom intents).

Note: closest-intent is completely language-agnostic. All the examples in this README are in English, but you can use it with any language you like; personally, I use it in German.

Β 

πŸ“‹ Examples

Here's some examples of things I said, what my STT (wyoming-faster-whisper-base) understood, what HomeAssistant was able to do/answer after passing the STT output through closest-intent, and what the same STT output would have resulted in with just bare Hassil.

Note: These are actual results I got when speaking the "what was said" sentences in my phone. I'm a native German speaker, and so I do have an accent, but this pretty closely matches my experience when using the German-language version of whisper. The "bare Hassil" responses are what I got after 1:1 pasting the STT output into the voice assist chat window with closest-intent disabled.

| what was said | STT output | with Closest Intent | bare Hassil | |


|


|


|


| | start cleaning | Star cleaning. | βœ… Cleaning started. | ❌ Sorry, I couldn't understand that | | stop cleaning | Stop clenching! | βœ… Cleaning stopped. | ❌ Sorry, I am not aware of any device called clenching | | vacuum the living room | Vacuum Believing Room | βœ… Cleaning the living room. | ❌ Sorry, I am unaware of any floor called Believing Room | | clean the office | King the Office | βœ… Cleaning the office. | ❌ Sorry, there are multiple devices called Office (author's note: no there aren't, wtf?) | | vacuum the kitchen | Back here in the kitchen. | βœ… Cleaning the kitchen. | ❌ Sorry, I couldn't understand that | | how warm is it in the bedroom | Our all is in the best room. | βœ… In the bedroom, the temperature is currently.... | ❌ Sorry, I am not aware of any area called best room | | add milk to the shopping list | Add milk to the chauvinist. | βœ… "milk" added. | ❌ Sorry, I am not aware of any device called chauvinist | | put call dentist on my todo list | put call dentist on my tudu list | βœ… "call dentist" added. | ❌ Sorry, I am not aware of any device called tudu | | turn on the water pump | turn on the what her pump | βœ… Turned on the water pump. | ❌ Sorry, I am not aware of any device called what her pump | | play some music | Place on music | βœ… Playing music. | ❌ Sorry, I am not aware of any area called music | | resume the music | Renew Music | βœ… Resuming. | ❌ Sorry, I couldn't understand that | | pause the music | Post music | βœ… Paused. | ❌ Sorry, I couldn't understand that | | next track | next rack | βœ… Next track. | ❌ Sorry, I am not aware of any device called rack | | enable shuffle | an able shuffling | βœ… Shuffle enabled. | ❌ Sorry, I couldn't understand that | | disable shuffle | Disable to schaffen. | βœ… Shuffle disabled. | ❌ Sorry, I am not aware of any device called Disable | | restart the player | Reset the plan. | βœ… Restarting the player. | ❌ Sorry, I am not aware of any area called Reset | | play a random album | Player random album | βœ… Playing a random album. | ❌ Sorry, I couldn't understand that | | play a random artist | Player and Immartist. | βœ… Playing a random artist. | ❌ Sorry, I couldn't understand that | | play the latest tracks | Plan the ladder tracks. | βœ… Playing recently added tracks. | ❌ Sorry, I am not aware of any area called Plan | | play recently played songs | Player recently played so... | βœ… Playing recently heard tracks. | ❌ Sorry, I couldn't understand that | | play playlist NieR | Play playlist NEAR! | βœ… Playing the playlist NieR. | ❌ Sorry, I couldn't understand that | | play my daily briefing | and play my daily breathing | βœ… Here is your daily briefing: ... | ❌ Sorry, I am not aware of any area called and play | | what time is it | What the hell is it? | βœ… It is 16:36. | βœ… It is 16:36. (author's note: okay, know what? earned. did not expect that.) | | what day is it today | One day is today. | βœ… Today is Friday. | βœ…/❌ May 8th, 2026 (author's note: that's the output for "What date is it?", but, eh, close enough) | | make the tv brighter | Make that CV brighter. | βœ… Screen is now bright. | ❌ Sorry, I couldn't understand that | | set the screen darker | The screen doctor. | βœ… Screen is now dark. | ❌ Sorry, I am not aware of any device called screen doctor | | what's the weather today | What's the matter with you? | βœ… Today, the weather is... | ❌ It is 16:36. (author's note: wait, WHAT?) | | how's the weather tomorrow morning | How's the better tomorrow? | βœ… Tomorrow morning, it will be... | ❌ Sorry, I am not aware of any area called How's | | what's the weather this week | What's the matter this weak | βœ… Monday:..., Tuesday:..., | ❌ It is 16:36. (author's note: sigh...) | | how's the weather at 5 o'clock | cast the red there at 5 o'clock | βœ… At 5 o'clock, it will be... | ❌ Sorry, I am not aware of any area called cast | | how windy is it right now | how windy is IR low | βœ… The wind is currently blowing with... | ❌ No timers. | | how windy will it be tonight | How will you be tonight? | βœ… Tonight, the wind speed will be around... | ❌ Sorry, I couldn't understand that | | how hot will it get today | How hard will it get today? | βœ… Today, temperatures will reach up to... | ❌ Sorry, I couldn't understand that | | will it rain today | with it right today | βœ… No rain is expected today. | ❌ Sorry, I couldn't understand that |

...you get the idea.

Β 

πŸ’‘ How it works

closest-intent is registered in HomeAssistant as a conversation agent. On startup, it parses (by default) all user-defined intents (or optionally, also the builtins ones). In this process, it also expands all rules, like <expansion_rule>, (alternatives|to), and [optionals], and notes where {slots} are located, and whether they are wildcards or belong to some list (like areas, entities, or the numbers 1-100).

When a user request comes in (via voice command or the chat box), closest-intent fuzzy-matches that request against those expanded rules. If the rule does not contain a slot, it is picked immediately. If it does contain a slot, closest-intent performs a sequence of fancy magic steps to find the best-fitting slot value among a range of possible positions within the top-scoring matched sentences. In practice, this often means "smallest slot-value on a word-boundary", but the extraction is not limited to that.

With the best match found, we then reconstruct the "canonical form", i.e. a sentence that Hassil will actually understand. If in your configured intents, "Play some music." exists, and closest-intent got "Place on music" and matched that to the intent, it will simply forward "Play some music." to Hassil. If the intent contained a slot, the extracted value will be substituted.

This guarantees that the sentence passed to Hassil will actually be understood, and allows us to not have to worry at all about performing actions, running scripts,...

If no matching intent could be found, we pass the exact input we got to the configured fallback agent. By default, that is simply Hassil (which again allows us to be lazy and not worry about proper error responses), or another agent, like a LLM.

 

cross-posted from: https://awful.systems/post/8068330

This is a 50sqm balcony/terrace on the 2nd (3rd American) floor of a rental apartment building. I immediately knew we had to take the apartment, because having a balcony garden was my number 1 wish. In that sense, we definitely got super lucky.

This is year 4 of the garden, and it feels like we've reached "routine" with it. In the first year, we lugged about 2.5 cubic meters of soil up there to fill all the pots. From June-October, this space is enough to fill 100% of our (two people) vegetable needs.

Unsurprisingly, this is way too much to water by hand every day, not to mention when we're not home for some days/weeks. The balcony is also south-facing, and it gets hot in the summer (seriously, I have burnt my feet on the stones before).

Unfortunately, there's also no water outlet on the terrace itself, and the landlord said "no" to putting one there (which was expected, the way the house/apartment is built is not really suitable for that).

Our solution has been to put two 300l rain tanks on the balcony (atop of load bearing walls). They get filled by a hose from the kitchen tap whenever required. The barrels are connected by a second hose. In the one in the greenhouse, a rain barrel pump sucks water out, into a watering computer and optionally to a hose for manual watering.

From the watering computer, two watering circuits start; originally the plan was to distinguish between plants that constantly needed a bit of water, and ones that preferred a lot of water occasionally (e.g. the citrus plants); in practice, it turned out to be easier to just always water everything a bit. Oh well.

The watering computer itself it pretty dumb / not connected to an app or the like; it just opens the valves every 8 hours for (in the summer) 3 minutes each time. That's mostly OK. On super hot days, I sometimes start a fourth round of watering in the early afternoon.

The pump is however plugged into a Zigbee-enabled smart socket, which is controlled by an automation via HomeAssistant (so, all-locally, thankfully). The main purpose of this is an automation that disables the pump when there has been a lot of rain in the past 24hrs, or a moderate amount of rain in the past 8 hours. Not that important when we are home, but usually extends the number of days we can be away from home by 2-3 days for a full filling of the tanks.

Finally, here's some pictures and a video from the past couple of years. I think this year is the first year where no new pots were added, and we needed to buy hardly any new soil (the compost bin has really been worth it in that regard, as well!)

Happy to answer any questions!!

 

This is a 50sqm balcony/terrace on the 2nd (3rd American) floor of a rental apartment building. I immediately knew we had to take the apartment, because having a balcony garden was my number 1 wish. In that sense, we definitely got super lucky.

This is year 4 of the garden, and it feels like we've reached "routine" with it. In the first year, we lugged about 2.5 cubic meters of soil up there to fill all the pots. From June-October, this space is enough to fill 100% of our (two people) vegetable needs.

Unsurprisingly, this is way too much to water by hand every day, not to mention when we're not home for some days/weeks. The balcony is also south-facing, and it gets hot in the summer (seriously, I have burnt my feet on the stones before).

Unfortunately, there's also no water outlet on the terrace itself, and the landlord said "no" to putting one there (which was expected, the way the house/apartment is built is not really suitable for that).

Our solution has been to put two 300l rain tanks on the balcony (atop of load bearing walls). They get filled by a hose from the kitchen tap whenever required. The barrels are connected by a second hose. In the one in the greenhouse, a rain barrel pump sucks water out, into a watering computer and optionally to a hose for manual watering.

From the watering computer, two watering circuits start; originally the plan was to distinguish between plants that constantly needed a bit of water, and ones that preferred a lot of water occasionally (e.g. the citrus plants); in practice, it turned out to be easier to just always water everything a bit. Oh well.

The watering computer itself it pretty dumb / not connected to an app or the like; it just opens the valves every 8 hours for (in the summer) 3 minutes each time. That's mostly OK. On super hot days, I sometimes start a fourth round of watering in the early afternoon.

The pump is however plugged into a Zigbee-enabled smart socket, which is controlled by an automation via HomeAssistant (so, all-locally, thankfully). The main purpose of this is an automation that disables the pump when there has been a lot of rain in the past 24hrs, or a moderate amount of rain in the past 8 hours. Not that important when we are home, but usually extends the number of days we can be away from home by 2-3 days for a full filling of the tanks.

Finally, here's some pictures and a video from the past couple of years. I think this year is the first year where no new pots were added, and we needed to buy hardly any new soil (the compost bin has really been worth it in that regard, as well!)

Happy to answer any questions!!

 

Not an ad, I'm not involved with Bento (or Stirling, for that matter). I've been unhappy with Stirling for a while (why do documents need to be uploaded to the server? That makes it really hard to safely host publicly. Why is it so slow? Plus, too many things are put behind a fucking paywall).

Learned about Bento this morning, tried it out, really liked it, spent an hour today packaging it for nixpkgs. It doesn't quite have feature parity with Stirling yet, but at least for me, everything I need is there, it's fast, and it keeps processing in the browser. Like, not even joking: the output of the build process/nixpkg are just a couple of static HTML files and some WASM. No server-side components at all. Really refreshing to see.

 

A while back I played a round with the HASS Voice Assistant, and pretty easily got to a point where STT and TTS were working really well on my local installation. Also got the hardware to build wyoming satellites with wakeword recognition.

However, what kept me from going through the effort of setting everything up properly (and finally getting fucking Alexa out of my house) was the "all or nothing" approach HASS seemingly has to intent recognition. You either:

  • use the build in Assistant conversation agent, which is a pain in the ass because it matches what your STT recognized 1:1, letter by letter, so it's almost impossible to actually get it to do something unless you spoke perfectly (and forget, for example, about putting something on your ToDo list; Todo, todo, To-Do,... are all not recognized, and have fun getting your STT to reliably generate the ToDo spelling!), or
  • you slap a full-blown LLM behind it, either forcing you to again rely on a shitty company, or host the LLM locally; but even in the latter case and on decent (not H100, of course, but with a GPU at least) hardware, the results were slow and shit, and due to context size limitations, you can just forget about exposing all your entities to the LLM Agent.
  • You also have the option of combining the two approaches; match exactly first, if no intent recognized, forward to LLM; but in practice, that just means that sometimes, you get what you wanted ("all lights off" with a 70% success rate, I'd say), and still a lot of the time you have to wait for ages for a response that may be correct, but often isn't from the LLM.

What I'd like is a third option, doing fuzzy matching on what the STT generated. Indeed, there seems to have been multiple options for that through rhasspy, but that project appears to be dead? The HASS integration has not been updated in over 4 years, and the rhasspy repos are archived as of earlier this month.

Besides, it was not entirely clear to me if you could just use the intent recognition part of the project, forgoing the rest in favor of what HASS already brings to the table.

At this point, I am willing to implement a custom conversation agent, but wanted to make sure first that I haven't simply missed an obvious setting/addon/... for HASS.

My questions are:

  • are you using the HASS Voice Assistant without an LLM?
  • if so, how do you get your intents to be recognized reliably?
  • do you know of any setting/project/addon helping with that?

Cheers! Have a good start into the working week...!

 

If you've been selfhosting conduit or conduwuit, you probabl are aware that the conduwuit project was discontinued a couple months back.

I've been holding out on updating my matrix homeserver until it becomes clear which fork(s) will survive long term.

I feel like I can't put off updating for much longer now, plus the tuwunel nixpkg and -module were merged yesterday, so now the two most promising forks are both options for me.

Still, I'm unsure what route to take. Here's my thoughts:

  • not going through another round of this in a couple of months from now would be great, so stability and long-term maintenance promises would be great
  • I assume incompatibility between the forks, if not now then very soon; this is a "pick an option, then stick with it and pray" situation
  • tuwunel apparently has a full-time paid dev working on it now, which is great; at the same time, that means features will follow the priorities of the (as of now unknown) sponsor of the project
  • it is, however, the officially endorsed successor
  • it also seems like few other people are actively involved, putting in question development practices, reviews, and what happens should the lead dev throw in the towel
  • lastly, while there's been a lot of apparently rapid progress (with releases 1.0.0, 1.1.0, and 1.2.0 at quite a fast pace), the repo itself seems... empty? Few issues, few PRs, commentlessly-deleted issues
  • on the other hand, continuwuity seems more active by commit/contributors count, but is seemingly 100% volunteer work
  • they do seem to backport tuwunel changes and features, which is great!
  • they are not officially endorsed

In short: I fucking hate community drama. What fork did you go with? Is there anything else to consider? I just want an up-to-date matrix homeserver, and not to have to tell my users "sorry, starting from scratch because we picked the wrong fork..."

Update: there's been some back and forth on the nixpkgs PR, esp. one user who posted a lot of receipts here:

@scvalex @queeek180 @Askhalion you wanted links, here's some links :)

claim legitimacy over or de legitimise other projects:

https://matrix.to/#/#ping:maunium.net/$V9aN1Wn0pId-JWbxH1WV5I8PAVMajooX7WMFKmDyh6E
https://matrix.to/#/#ping:maunium.net/$IsfOfe8anRYqbRAwj7OdlX_hS-kBbHUJTVhQW-32Etk
https://matrix.to/#/#ping:maunium.net/$-Bswk96jj3ns8xpSISKH0Y24pXZ2Xcd6Rwl8mRZQIaM (ironic)
https://matrix.to/#/#meowlnir:maunium.net/$zOmf7-NIHfQ_f_Ku9Q794GeKyu8n9v2MAvPtYjlGJIE (ironic that he asked https://matrix.to/#/#meowlnir:maunium.net/$nE57Bi_DmvodZJe7JDPS7NxUBlxeDLUBhYIWNzgNk0g despite having cherrypicked a bunch of fixes from continuwuity already)
https://matrix.to/#/#tuwunel:grin.hu/$svIUeuWfm2VWuHGSUMeT5VWWcZclraKcmUaDK3NiYEM ("June and I dealt with another "continuwuity" called "grapevine" last year")

threats against the project:

https://matrix.to/#/#ping:maunium.net/$o27P102ebbFa9U80e-FK-DxGTupy8IJ3TSWFYJm6hIs
https://matrix.to/#/#ping:maunium.net/$priRlTsBuH2YfTo_pb04xHUJpTeU2DKXdJ7tAVrR5w4

personal threats:

https://matrix.to/#/#ping:maunium.net/$5YefXN_uVR5WiGfj32j3Po9Q1JMKuTTfxve_8IHp1J8
https://matrix.to/#/#ping:maunium.net/$L-dXYMXucfJiLkyc5dvv4t7pQqUKMwnLEd9zzLjZlu0

attempting to get security details released early (knowing only he and three other servers have finished implementing):

https://matrix.to/#%2F%21NasysSDfxKxZBzJJoE%3Amatrix.org%2F%24_d2wJk45JtwblMHRVBdfeEV1cAU5flPuRebTAvfOr-s%3Fvia=nexy7574.co.uk&via=matrix.org&via=element.io
https://matrix.to/#/#tuwunel:grin.hu/$mgi2dDGnL-L9Jqjm_YZPhu4NoAx8q3OMF9KIfRiGwFs

other trivia:

Jason getting his server ACL'ed from all foundation rooms:
https://matrix.to/#/!WuBtumawCeOGEieRrp:matrix.org/$u8YRBq_s-OrOpl4IGt15iUHPBKubKa4A_n-u_WbgqAU` - zemos.net ban
https://matrix.to/#/!WuBtumawCeOGEieRrp:matrix.org/$l8pKC-mR0tjLFnbnmi_8xSXbHGA3vgew-QTRWAk-kCs - wildcard ban on his domain

if any of these events get redacted, feel free to reach out and I will provide the original events - unredacted. just as another layer of certainty, when i provide the events, you can verify the server signing keys yourself, fairly trivially, as well as calculate the event ID (which is a hash). fetching the event from your $CONDUWUIT_DESCENDANT homeserver is as simple as running @conduit debug get-pdu $id in your admin room, as well as checking validity with @conduit debug verify-json or @conduit debug verify-pdu.

UPDATE: i've just been informed json signing is based on the redacted event, not the full input.

Honestly, that first link is all the info I needed. Keep reading, <100 messages and it becomes clear that I do not want to put the continuation of my homeserver into Jasons/tuwunels hands. Going to migrate to continuwuity later today.

 

Danke!! Endlich sagt wer was!

view more: next β€Ί